// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: save_unlet
static void save_unlet(s7_scheme *sc)
    {
        int32_t i, k = 0;
        s7_pointer x;
        s7_pointer *inits;
        block_t *block;

        sc->unlet = (s7_pointer)calloc(1, sizeof(s7_cell));
        set_type(sc->unlet, T_VECTOR | T_UNHEAP);
        vector_length(sc->unlet) = UNLET_ENTRIES;
        block = mallocate(sc, UNLET_ENTRIES * sizeof(s7_pointer));
        vector_block(sc->unlet) = block;
        vector_elements(sc->unlet) = (s7_pointer *)block_data(block);
        vector_set_dimension_info(sc->unlet, NULL);
        vector_getter(sc->unlet) = default_vector_getter;
        vector_setter(sc->unlet) = default_vector_setter;
        inits = vector_elements(sc->unlet);
        s7_vector_fill(sc, sc->unlet, sc->nil);

        inits[k++] = initial_slot(sc->else_symbol);
        for (i = 0; i < SYMBOL_TABLE_SIZE; i++)
            for (x = vector_element(sc->symbol_table, i); is_not_null(x); x = cdr(x))
            {
                s7_pointer sym;
                sym = car(x);
                if ((!is_gensym(sym)) && (is_slot(initial_slot(sym))))
                {
                    s7_pointer val;
                    val = slot_value(initial_slot(sym));
                    if ((is_c_function(val)) || (is_syntax(val)))  /* we assume the initial_slot value needs no GC protection */
                        inits[k++] = initial_slot(sym);

                    /* non-c_functions that are not 'set! (and therefore initial_slot GC) protected by default:
                     *    make-hook hook-functions
                     * if these initial_slot values are added to unlet, they need explicit GC protection.
                     */
                    /* (let ((begin +)) (with-let (unlet) (begin 1 2))) */
#if S7_DEBUGGING
                    if (k >= UNLET_ENTRIES)
                        fprintf(stderr, "unlet overflow\n");
#endif
                }
            }
    }

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movl $0x0, 0x28(%rsp)
movl $0x1, %edi
movl $0x30, %esi
callq 0x9360
movq %rax, %rcx
movq 0x30(%rsp), %rax
movq %rcx, 0x168(%rax)
movq 0x30(%rsp), %rax
movq 0x168(%rax), %rax
movabsq $0x4000000000000015, %rcx # imm = 0x4000000000000015
movq %rcx, (%rax)
movq 0x30(%rsp), %rax
movq 0x168(%rax), %rax
movq $0x200, 0x8(%rax)       # imm = 0x200
movq 0x30(%rsp), %rdi
movl $0x1000, %esi           # imm = 0x1000
callq 0xaa80
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rcx
movq 0x30(%rsp), %rax
movq 0x168(%rax), %rax
movq %rcx, 0x18(%rax)
movq 0x10(%rsp), %rax
movq (%rax), %rcx
movq 0x30(%rsp), %rax
movq 0x168(%rax), %rax
movq %rcx, 0x10(%rax)
movq 0x30(%rsp), %rax
movq 0x168(%rax), %rax
movq 0x18(%rax), %rax
movq $0x0, 0x20(%rax)
movq 0x30(%rsp), %rax
movq 0x168(%rax), %rax
leaq -0x5f568(%rip), %rcx    # 0x60bf0
movq %rcx, 0x20(%rax)
movq 0x30(%rsp), %rax
movq 0x168(%rax), %rax
leaq -0x5f54f(%rip), %rcx    # 0x60c20
movq %rcx, 0x28(%rax)
movq 0x30(%rsp), %rax
movq 0x168(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x30(%rsp), %rdi
movq 0x30(%rsp), %rax
movq 0x168(%rax), %rsi
movq 0x30(%rsp), %rax
movq 0x110(%rax), %rdx
callq 0x33f30
movq 0x30(%rsp), %rax
movq 0x1790(%rax), %rax
movq 0x8(%rax), %rax
movq 0x20(%rax), %rax
movq 0x20(%rax), %rdx
movq 0x18(%rsp), %rax
movl 0x28(%rsp), %ecx
movl %ecx, %esi
addl $0x1, %esi
movl %esi, 0x28(%rsp)
movslq %ecx, %rcx
movq %rdx, (%rax,%rcx,8)
movl $0x0, 0x2c(%rsp)
cmpl $0x7fed, 0x2c(%rsp)     # imm = 0x7FED
jge 0xc02e5
movq 0x30(%rsp), %rax
movq 0x148(%rax), %rax
movq 0x10(%rax), %rax
movslq 0x2c(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rax
movq 0x30(%rsp), %rcx
cmpq 0x110(%rcx), %rax
je 0xc02d3
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x8(%rsp)
movq 0x8(%rsp), %rax
movq (%rax), %rax
andq $0x20000000, %rax       # imm = 0x20000000
cmpq $0x0, %rax
jne 0xc02be
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x20(%rax), %rax
movq 0x20(%rax), %rax
movzbl (%rax), %eax
cmpl $0x20, %eax
jne 0xc02be
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x20(%rax), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, (%rsp)
movq (%rsp), %rax
movzbl (%rax), %eax
cmpl $0x30, %eax
jge 0xc0292
movq (%rsp), %rax
movzbl (%rax), %eax
cmpl $0x9, %eax
jne 0xc02bc
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x20(%rax), %rax
movq 0x20(%rax), %rdx
movq 0x18(%rsp), %rax
movl 0x28(%rsp), %ecx
movl %ecx, %esi
addl $0x1, %esi
movl %esi, 0x28(%rsp)
movslq %ecx, %rcx
movq %rdx, (%rax,%rcx,8)
jmp 0xc02be
jmp 0xc02c0
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x20(%rsp)
jmp 0xc020f
jmp 0xc02d5
movl 0x2c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x2c(%rsp)
jmp 0xc01e3
addq $0x38, %rsp
retq
nopw (%rax,%rax)