// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: op_with_let_s
static inline s7_pointer op_with_let_s(s7_scheme *sc)
                {
                    s7_pointer e;
                    set_current_code(sc, sc->code);
                    sc->code = cdr(sc->code);
                    e = lookup_checked(sc, car(sc->code));
                    if (e == sc->rootlet)
                        sc->envir = sc->nil;
                    else
                    {
                        if (!is_let(e))
                            eval_type_error(sc, "with-let takes an environment argument: ~A", 42, e);
                        set_with_let_let(e);
                        let_id(e) = ++sc->let_number;
                        sc->envir = e;
                        /* if the let in question has 10,000 names (e.g. *gtk*) this loop (which can't be avoided currently)
                         *   will be noticeable in a few cases.  So, instead of saying (with-let *gtk* ...) use something
                         *   equivalent to (with-let (sublet *gtk*) ...) which is cleaner anyway.  (In my timing tests, even
                         *   when pounding on this one block, the loop only amounts to 1% of the time.  Normally it's
                         *   negligible).
                         */
                        update_symbol_ids(sc, e);
                    }
                    sc->code = T_Pair(cdr(sc->code));
                    return(NULL);
                }

// Assembly:
subq $0x48, %rsp
movq %rdi, 0x38(%rsp)
movq 0x38(%rsp), %rax
movq (%rax), %rcx
movq 0x38(%rsp), %rax
movq %rcx, 0x28(%rax)
movq 0x38(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rcx
movq 0x38(%rsp), %rax
movq %rcx, (%rax)
movq 0x38(%rsp), %rdi
movq 0x38(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rsi
callq 0xde990
movq %rax, 0x28(%rsp)
cmpq $0x0, 0x28(%rsp)
je 0x157c4d
movq 0x28(%rsp), %rax
movq %rax, 0x18(%rsp)
jmp 0x157c68
movq 0x38(%rsp), %rdi
movq 0x38(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rsi
callq 0xdead0
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rax
movq 0x38(%rsp), %rcx
cmpq 0x150(%rcx), %rax
jne 0x157ca9
movq 0x38(%rsp), %rax
movq 0x110(%rax), %rcx
movq 0x38(%rsp), %rax
movq %rcx, 0x8(%rax)
jmp 0x157d69
movq 0x30(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x1c, %eax
je 0x157d1a
movq 0x38(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x38(%rsp), %rax
movq 0x1940(%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x38(%rsp), %rax
movq %rax, (%rsp)
movq 0x38(%rsp), %rdi
leaq 0x98c1b(%rip), %rsi     # 0x1f0901
movl $0x2a, %edx
callq 0xb880
movq (%rsp), %rdi
movq %rax, %rsi
movq 0x30(%rsp), %rdx
callq 0xb830
movq 0x8(%rsp), %rdi
movq 0x10(%rsp), %rsi
movq %rax, %rdx
callq 0x2f940
movq %rax, 0x40(%rsp)
jmp 0x157d86
movq 0x30(%rsp), %rax
movq (%rax), %rcx
orq $0x40000, %rcx          # imm = 0x40000
movq %rcx, (%rax)
movq 0x38(%rsp), %rax
movq 0x250(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x250(%rax)
movq 0x30(%rsp), %rax
movq %rcx, 0x18(%rax)
movq 0x30(%rsp), %rcx
movq 0x38(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x38(%rsp), %rdi
movq 0x30(%rsp), %rsi
callq 0xfba0
movq 0x38(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rcx
movq 0x38(%rsp), %rax
movq %rcx, (%rax)
movq $0x0, 0x40(%rsp)
movq 0x40(%rsp), %rax
addq $0x48, %rsp
retq