// File: /workspace/github_c_makefile_star2_O3/mahrr[P]raven/src/compiler.c
// Function: declaration
static void declaration(Parser *parser) {
    Debug_Log(parser);

    if (consume_if(parser, TOKEN_LET)) {
        let_declaration(parser);
    } else if (consume_if(parser, TOKEN_FN)) {
        fn_declaration(parser);
    } else if (consume_if(parser, TOKEN_RETURN)) {
        return_statement(parser);
    } else if (consume_if(parser, TOKEN_CONTINUE)) {
        continue_statement(parser);
    } else {
        expression(parser);
        emit_byte(parser, OP_POP_X);
    }

    if (parser->panic_mode) {
        recover(parser);
    }

    Debug_Exit(parser);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdi, %rbx
leaq 0x18(%rdi), %r14
movl 0x18(%rdi), %eax
cmpl $0x8, %eax
jg 0x5c5d
cmpl $0x2, %eax
je 0x5d32
cmpl $0x5, %eax
jne 0x5d0c
movq 0x10(%r14), %rax
movq %rax, 0x40(%rbx)
movups (%r14), %xmm0
movups %xmm0, 0x30(%rbx)
movq %rsp, %r15
movq (%rbx), %rsi
movq %r15, %rdi
callq 0x941f
movq 0x10(%rsp), %rax
movq %rax, 0x10(%r14)
movups (%rsp), %xmm0
movups %xmm0, (%r14)
cmpl $0x35, 0x18(%rbx)
je 0x5bfb
leaq 0x5c1d(%rip), %rsi      # 0xb841
movq %rbx, %rdi
callq 0x5f86
movl %eax, %ebp
movq 0x8(%rbx), %rax
movl 0x221c(%rax), %ecx
testl %ecx, %ecx
jle 0x5c4b
movslq 0x2018(%rax), %rdx
shlq $0x5, %rdx
movl %ecx, 0x10(%rdx,%rax)
movq %rbx, %rdi
movl $0x1, %esi
callq 0x6293
jmp 0x5ed9
cmpl $0xc, %eax
je 0x5e11
cmpl $0x9, %eax
jne 0x5d0c
leaq 0x30(%rbx), %r12
movq 0x10(%r14), %rax
movq %rax, 0x40(%rbx)
movups (%r14), %xmm0
movups %xmm0, 0x30(%rbx)
movq %rsp, %r15
movq (%rbx), %rsi
movq %r15, %rdi
callq 0x941f
movq 0x10(%rsp), %rax
movq %rax, 0x10(%r14)
movups (%rsp), %xmm0
movups %xmm0, (%r14)
cmpl $0x35, 0x18(%rbx)
je 0x5c86
leaq 0x5b07(%rip), %rsi      # 0xb7b6
movq %rbx, %rdi
callq 0x5f86
movl %eax, %ebp
cmpl $0x1f, 0x18(%rbx)
jne 0x5ec0
movq 0x10(%r14), %rax
movq %rax, 0x10(%r12)
movups (%r14), %xmm0
movups %xmm0, (%r12)
movq %rsp, %r15
movq (%rbx), %rsi
movq %r15, %rdi
callq 0x941f
movq 0x10(%rsp), %rax
movq %rax, 0x10(%r14)
movups (%rsp), %xmm0
movups %xmm0, (%r14)
cmpl $0x35, 0x18(%rbx)
je 0x5cd8
movq %rbx, %rdi
movl $0x1, %esi
callq 0x679e
jmp 0x5ed9
movq %rbx, %rdi
movl $0x1, %esi
callq 0x679e
movq 0x8(%rbx), %rax
movl 0x44(%rbx), %edx
movq 0x8(%rax), %rdi
addq $0x20, %rdi
movl $0x5, %esi
jmp 0x5f08
leaq 0x30(%rbx), %r15
movq 0x10(%r14), %rax
movq %rax, 0x40(%rbx)
movups (%r14), %xmm0
movups %xmm0, 0x30(%rbx)
movq %rsp, %r12
movq (%rbx), %rsi
movq %r12, %rdi
callq 0x941f
movq 0x10(%rsp), %rax
movq %rax, 0x10(%r14)
movups (%rsp), %xmm0
movups %xmm0, (%r14)
cmpl $0x35, 0x18(%rbx)
je 0x5d49
cmpl $-0x1, 0x4c(%rbx)
jne 0x5d83
leaq 0x5b9f(%rip), %rdx      # 0xb917
movq %rbx, %rdi
movq %r15, %rsi
callq 0x61ef
movl 0x50(%rbx), %esi
movq %rbx, %rdi
callq 0x66bb
movl 0x4c(%rbx), %r15d
movq 0x8(%rbx), %rax
movl 0x44(%rbx), %edx
movq 0x8(%rax), %rdi
addq $0x20, %rdi
movl $0x1f, %esi
callq 0x4af1
movq 0x8(%rbx), %rax
movq 0x8(%rax), %rdi
movl 0x20(%rdi), %ebp
subl %r15d, %ebp
cmpl $0xfffe, %ebp           # imm = 0xFFFE
jl 0x5ddb
leaq 0x5b6e(%rip), %rdx      # 0xb936
movq %rbx, %rdi
movq %r14, %rsi
callq 0x61ef
movq 0x8(%rbx), %rax
movq 0x8(%rax), %rdi
addl $0x2, %ebp
movl %ebp, %esi
shrl $0x8, %esi
movl 0x44(%rbx), %edx
addq $0x20, %rdi
movl $0xff, %r15d
andl %r15d, %esi
callq 0x4af1
movq 0x8(%rbx), %rax
movl 0x44(%rbx), %edx
movq 0x8(%rax), %rdi
addq $0x20, %rdi
andl %r15d, %ebp
movl %ebp, %esi
jmp 0x5f08
leaq 0x30(%rbx), %r15
movq 0x10(%r14), %rax
movq %rax, 0x40(%rbx)
movups (%r14), %xmm0
movups %xmm0, 0x30(%rbx)
movq %rsp, %r12
movq (%rbx), %rsi
movq %r12, %rdi
callq 0x941f
movq 0x10(%rsp), %rax
movq %rax, 0x10(%r14)
movups (%rsp), %xmm0
movups %xmm0, (%r14)
movl 0x18(%rbx), %eax
cmpl $0x35, %eax
je 0x5e28
movq 0x8(%rbx), %rcx
cmpb $0x1, 0x10(%rcx)
jne 0x5e6b
leaq 0x5a98(%rip), %rdx      # 0xb8f5
movq %rbx, %rdi
movq %r15, %rsi
callq 0x61ef
movl 0x18(%rbx), %eax
cmpl $0x26, %eax
jne 0x5ee7
movq 0x10(%r14), %rax
movq %rax, 0x10(%r15)
movups (%r14), %xmm0
movups %xmm0, (%r15)
movq %rsp, %r15
movq (%rbx), %rsi
movq %r15, %rdi
callq 0x941f
movq 0x10(%rsp), %rax
movq %rax, 0x10(%r14)
movups (%rsp), %xmm0
movups %xmm0, (%r14)
cmpl $0x35, 0x18(%rbx)
je 0x5e83
movq 0x8(%rbx), %rax
movl 0x44(%rbx), %edx
movq 0x8(%rax), %rdi
addq $0x20, %rdi
movl $0x2, %esi
callq 0x4af1
jmp 0x5ef4
movq 0x8(%rbx), %rax
movl 0x44(%rbx), %edx
movq 0x8(%rax), %rdi
addq $0x20, %rdi
movl $0x2, %esi
callq 0x4af1
movzbl %bpl, %esi
movq %rbx, %rdi
callq 0x612c
jmp 0x5f0d
movq %rbx, %rdi
movl $0x1, %esi
callq 0x679e
movq 0x8(%rbx), %rax
movl 0x44(%rbx), %edx
movq 0x8(%rax), %rdi
addq $0x20, %rdi
movl $0x34, %esi
callq 0x4af1
cmpb $0x1, 0x49(%rbx)
jne 0x5f77
movb $0x0, 0x49(%rbx)
leaq 0x30(%rbx), %r12
movl 0x18(%rbx), %eax
movq %rsp, %r15
movabsq $0x40000000009225, %r13 # imm = 0x40000000009225
cmpl $0x36, %eax
ja 0x5f38
movl %eax, %eax
btq %rax, %r13
jb 0x5f77
cmpl $0x26, (%r12)
je 0x5f77
movq 0x10(%r14), %rax
movq %rax, 0x10(%r12)
movups (%r14), %xmm0
movups %xmm0, (%r12)
movq (%rbx), %rsi
movq %r15, %rdi
callq 0x941f
movq 0x10(%rsp), %rax
movq %rax, 0x10(%r14)
movups (%rsp), %xmm0
movups %xmm0, (%r14)
movl 0x18(%rbx), %eax
cmpl $0x35, %eax
je 0x5f51
jmp 0x5f2b
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq