// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: s7_symbol_local_value
s7_pointer s7_symbol_local_value(s7_scheme *sc, s7_pointer sym, s7_pointer local_env)
    {
        /* restrict the search to local_env outward */
        if ((local_env == sc->rootlet) || (is_global(sym)))
        {
            if (is_slot(global_slot(sym)))
                return(slot_value(global_slot(sym)));
            return(sc->undefined);
        }

        if (is_let(local_env))
        {
            s7_pointer x;

            if (let_id(local_env) == symbol_id(sym))
                return(slot_value(local_slot(sym)));
            for (x = local_env; symbol_id(sym) < let_id(x); x = outlet(x));
            if (let_id(x) == symbol_id(sym))
                return(slot_value(local_slot(sym)));

            for (; is_let(x); x = outlet(x))
            {
                s7_pointer y;
                for (y = let_slots(x); tis_slot(y); y = next_slot(y))
                    if (slot_symbol(y) == sym)
                        return(slot_value(y));
            }
            /* need to check rootlet before giving up */
            if (is_slot(global_slot(sym)))
                return(slot_value(global_slot(sym)));

            /* (let ((e (curlet))) (let ((a 1)) (symbol->value 'a e))) -> #<undefined> not 1 */
            return(sc->undefined); /* 29-Nov-17 */
        }
        return(s7_symbol_value(sc, sym));
    }

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x28(%rsp)
movq %rsi, 0x20(%rsp)
movq %rdx, 0x18(%rsp)
movq 0x18(%rsp), %rax
movq 0x28(%rsp), %rcx
cmpq 0x150(%rcx), %rax
je 0xfe3a
movq 0x20(%rsp), %rax
movq (%rax), %rax
andq $0x10000, %rax          # imm = 0x10000
cmpq $0x0, %rax
je 0xfe78
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %eax
cmpl $0x20, %eax
jne 0xfe62
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, 0x30(%rsp)
jmp 0xffc4
movq 0x28(%rsp), %rax
movq 0x128(%rax), %rax
movq %rax, 0x30(%rsp)
jmp 0xffc4
movq 0x18(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x1c, %eax
jne 0xffb0
movq 0x18(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rsp), %rcx
cmpq 0x20(%rcx), %rax
jne 0xfeb4
movq 0x20(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, 0x30(%rsp)
jmp 0xffc4
movq 0x18(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x20(%rsp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rsp), %rcx
cmpq 0x18(%rcx), %rax
jge 0xfee4
jmp 0xfed4
movq 0x10(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
jmp 0xfebe
movq 0x10(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rsp), %rcx
cmpq 0x20(%rcx), %rax
jne 0xff0f
movq 0x20(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, 0x30(%rsp)
jmp 0xffc4
jmp 0xff11
movq 0x10(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x1c, %eax
jne 0xff78
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x8(%rsp)
cmpq $0x0, 0x8(%rsp)
je 0xff66
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rax
cmpq 0x20(%rsp), %rax
jne 0xff54
movq 0x8(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x30(%rsp)
jmp 0xffc4
jmp 0xff56
movq 0x8(%rsp), %rax
movq 0x18(%rax), %rax
movq %rax, 0x8(%rsp)
jmp 0xff2c
jmp 0xff68
movq 0x10(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
jmp 0xff11
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %eax
cmpl $0x20, %eax
jne 0xff9d
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, 0x30(%rsp)
jmp 0xffc4
movq 0x28(%rsp), %rax
movq 0x128(%rax), %rax
movq %rax, 0x30(%rsp)
jmp 0xffc4
movq 0x28(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0xb3a0
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rax
addq $0x38, %rsp
retq
nop