// File: /workspace/github_c_makefile_star2_O3/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), %rcx
movzbl (%rcx), %eax
addl $-0x2a, %eax
cmpl $0x4, %eax
ja 0xd6e07
leaq 0x31dd4(%rip), %rdx     # 0x108a20
movslq (%rdx,%rax,4), %rax
addq %rdx, %rax
jmpq *%rax
movq 0x90(%rbx), %rax
cmpq 0x98(%rbx), %rax
ja 0xd6c74
movq %rbx, %rdi
callq 0xa550
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 0xd6d2a
movq 0x10(%rbx), %rsi
cmpb $0x1, (%rsi)
jne 0xd6e75
xorl %r14d, %r14d
movq %rsi, %rax
incq %r14
movq 0x10(%rax), %rax
cmpb $0x1, (%rax)
je 0xd6cc3
jmp 0xd6e78
movq 0x90(%rbx), %rax
cmpq 0x98(%rbx), %rax
ja 0xd6cf3
movq %rbx, %rdi
callq 0xa550
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 0xd6f14
movq 0x90(%rbx), %rax
cmpq 0x98(%rbx), %rax
ja 0xd6d5b
movq %rbx, %rdi
callq 0xa550
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 0xd6ded
movq 0x90(%rbx), %rax
cmpq 0x98(%rbx), %rax
ja 0xd6db3
movq %rbx, %rdi
callq 0xa550
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 0xd6b41
movl $0x1, %eax
jmp 0xd6f14
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 0x40ed7(%rip), %rcx     # 0x117d09
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 0x38dfa
movl $0x2, %eax
jmp 0xd6f14
xorl %r14d, %r14d
cmpq 0x18(%rcx), %r14
jge 0xd6ec0
movq 0x1900(%rbx), %rax
movq 0x7e55c(%rip), %rdx     # 0x1553e8
movq 0x6e8(%rbx), %rdi
movq %rdx, 0x8(%rdi)
movq 0x10(%rdi), %rdx
movq %rcx, 0x8(%rdx)
movq 0x10(%rdx), %rcx
movq %rsi, 0x8(%rcx)
movq 0x6e8(%rbx), %rdx
movq %rbx, %rdi
movq %rax, %rsi
callq 0x38dfa
movq (%rbx), %rcx
movq 0x10(%rbx), %rsi
cmpq %r14, 0x28(%rcx)
jge 0xd6f08
movq 0x1900(%rbx), %rax
movq 0x7c1c4(%rip), %rdx     # 0x153098
movq 0x6e8(%rbx), %rdi
movq %rdx, 0x8(%rdi)
movq 0x10(%rdi), %rdx
movq %rcx, 0x8(%rdx)
movq 0x10(%rdx), %rcx
movq %rsi, 0x8(%rcx)
movq 0x6e8(%rbx), %rdx
movq %rbx, %rdi
movq %rax, %rsi
callq 0x38dfa
movq (%rbx), %rcx
movq 0x10(%rbx), %rsi
movq %rbx, %rdi
callq *0x10(%rcx)
movq %rax, 0x20(%rbx)
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq