// File: /workspace/github_c_makefile_star2_O1/BernardTatin[P]s7sh/s7.c
// Function: macroexpand
static goto_t macroexpand(s7_scheme *sc)
                {
                    switch (type(sc->code))
                    {
                        case T_MACRO:
                            new_frame(sc, closure_let(sc->code), sc->envir);
                            return(goto_apply_lambda);

                        case T_BACRO:
                            new_frame(sc, sc->envir, sc->envir);
                            return(goto_apply_lambda);

                        case T_MACRO_STAR:
                            new_frame(sc, closure_let(sc->code), sc->envir);
                            apply_macro_star_1(sc);
                            return(goto_begin);

                        case T_BACRO_STAR:
                            new_frame(sc, sc->envir, sc->envir);
                            apply_macro_star_1(sc);
                            return(goto_begin);

                        case T_C_MACRO:
                            macroexpand_c_macro(sc);
                            return(goto_start);

                        default:
                            eval_error_no_return(sc, sc->syntax_error_symbol, "macroexpand argument is not a macro call: ~A", 44, sc->args);
                    }
                    return(fall_through); /* for the compiler */
                }

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq (%rdi), %rax
movzbl (%rax), %ecx
addl $-0x2a, %ecx
cmpl $0x4, %ecx
ja 0xdf6bf
leaq 0x324b0(%rip), %rdx     # 0x1119b4
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq 0x90(%rbx), %rax
cmpq 0x98(%rbx), %rax
ja 0xdf525
movq %rbx, %rdi
callq 0xb389
movq 0x90(%rbx), %rax
leaq -0x8(%rax), %rcx
movq %rcx, 0x90(%rbx)
movq -0x8(%rax), %rax
movq $0x20001c, (%rax)       # imm = 0x20001C
movq 0x250(%rbx), %rcx
incq %rcx
movq %rcx, 0x250(%rbx)
movq %rcx, 0x18(%rax)
movq $0x0, 0x8(%rax)
movq (%rbx), %rcx
movq 0x18(%rcx), %rcx
jmp 0xdf5e2
movq 0x10(%rbx), %rcx
cmpb $0x1, (%rcx)
jne 0xdf72d
xorl %r14d, %r14d
movq %rcx, %rdx
incq %r14
movq 0x10(%rdx), %rdx
cmpb $0x1, (%rdx)
je 0xdf57b
jmp 0xdf730
movq 0x90(%rbx), %rax
cmpq 0x98(%rbx), %rax
ja 0xdf5a4
movq %rbx, %rdi
callq 0xb389
movq 0x90(%rbx), %rax
leaq -0x8(%rax), %rcx
movq %rcx, 0x90(%rbx)
movq -0x8(%rax), %rax
movq $0x20001c, (%rax)       # imm = 0x20001C
movq 0x250(%rbx), %rcx
incq %rcx
movq %rcx, 0x250(%rbx)
movq %rcx, 0x18(%rax)
movq $0x0, 0x8(%rax)
movq 0x8(%rbx), %rcx
movq %rcx, 0x10(%rax)
movq %rax, 0x8(%rbx)
movl $0x6, %eax
jmp 0xdf7c6
movq 0x90(%rbx), %rax
cmpq 0x98(%rbx), %rax
ja 0xdf60c
movq %rbx, %rdi
callq 0xb389
movq 0x90(%rbx), %rax
leaq -0x8(%rax), %rcx
movq %rcx, 0x90(%rbx)
movq -0x8(%rax), %rax
movq $0x20001c, (%rax)       # imm = 0x20001C
movq 0x250(%rbx), %rcx
incq %rcx
movq %rcx, 0x250(%rbx)
movq %rcx, 0x18(%rax)
movq $0x0, 0x8(%rax)
movq 0x8(%rbx), %rcx
jmp 0xdf6a5
movq 0x90(%rbx), %rax
cmpq 0x98(%rbx), %rax
ja 0xdf664
movq %rbx, %rdi
callq 0xb389
movq 0x90(%rbx), %rax
leaq -0x8(%rax), %rcx
movq %rcx, 0x90(%rbx)
movq -0x8(%rax), %rax
movq $0x20001c, (%rax)       # imm = 0x20001C
movq 0x250(%rbx), %rcx
incq %rcx
movq %rcx, 0x250(%rbx)
movq %rcx, 0x18(%rax)
movq $0x0, 0x8(%rax)
movq (%rbx), %rcx
movq 0x18(%rcx), %rcx
movq %rcx, 0x10(%rax)
movq %rax, 0x8(%rbx)
movq %rbx, %rdi
callq 0xdf3f5
movl $0x1, %eax
jmp 0xdf7c6
movq 0x1918(%rbx), %rsi
movq 0x820(%rbx), %rax
movslq 0x7dc(%rbx), %rcx
movq (%rax,%rcx,8), %rax
incl %ecx
andl $0x7, %ecx
movl %ecx, 0x7dc(%rbx)
leaq 0x4150f(%rip), %rcx     # 0x120bf9
movq %rcx, 0x10(%rax)
movq $0x2c, 0x8(%rax)
movq 0x10(%rbx), %rcx
movq 0x6e0(%rbx), %rdx
movq %rax, 0x8(%rdx)
movq 0x6e0(%rbx), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x8(%rax)
movq 0x6e0(%rbx), %rdx
movq %rbx, %rdi
callq 0x3b366
movl $0x2, %eax
jmp 0xdf7c6
xorl %r14d, %r14d
cmpq 0x18(%rax), %r14
jge 0xdf76e
movq 0x1900(%rbx), %rsi
movq 0x7dca4(%rip), %rdx     # 0x15d3e8
movq 0x6e8(%rbx), %rdi
movq %rdx, 0x8(%rdi)
movq 0x10(%rdi), %rdx
movq %rax, 0x8(%rdx)
movq 0x10(%rdx), %rax
movq %rcx, 0x8(%rax)
movq 0x6e8(%rbx), %rdx
movq %rbx, %rdi
callq 0x3b366
movq (%rbx), %rax
cmpq %r14, 0x28(%rax)
jge 0xdf7b3
movq 0x1900(%rbx), %rsi
movq 0x7b913(%rip), %rcx     # 0x15b098
movq 0x10(%rbx), %rdx
movq 0x6e8(%rbx), %rdi
movq %rcx, 0x8(%rdi)
movq 0x10(%rdi), %rcx
movq %rax, 0x8(%rcx)
movq 0x10(%rcx), %rax
movq %rdx, 0x8(%rax)
movq 0x6e8(%rbx), %rdx
movq %rbx, %rdi
callq 0x3b366
movq (%rbx), %rax
movq 0x10(%rbx), %rsi
movq %rbx, %rdi
callq *0x10(%rax)
movq %rax, 0x20(%rbx)
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq