// File: /workspace/github_c_makefile_star2_O1/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), %ebp
cmpl $0x9, %ebp
jne 0x5f87
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 0x97fb
movq 0x10(%rsp), %rax
movq %rax, 0x10(%r14)
movups (%rsp), %xmm0
movups %xmm0, (%r14)
cmpl $0x35, 0x18(%rbx)
je 0x5efe
cmpl $0x9, %ebp
jne 0x5f87
leaq 0x584a(%rip), %rsi      # 0xb776
movq %rbx, %rdi
callq 0x629d
movl %eax, %ebp
cmpl $0x1f, 0x18(%rbx)
jne 0x61da
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 0x97fb
movq 0x10(%rsp), %rax
movq %rax, 0x10(%r14)
movups (%rsp), %xmm0
movups %xmm0, (%r14)
cmpl $0x35, 0x18(%rbx)
je 0x5f53
movq %rbx, %rdi
movl $0x1, %esi
callq 0x6ab6
jmp 0x61f3
movl (%r14), %ebp
cmpl $0x5, %ebp
jne 0x6009
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 0x97fb
movq 0x10(%rsp), %rax
movq %rax, 0x10(%r14)
movups (%rsp), %xmm0
movups %xmm0, (%r14)
cmpl $0x35, 0x18(%rbx)
je 0x5fa2
cmpl $0x5, %ebp
jne 0x6009
leaq 0x5831(%rip), %rsi      # 0xb801
movq %rbx, %rdi
callq 0x629d
movl %eax, %ebp
movq 0x8(%rbx), %rax
movl 0x221c(%rax), %ecx
testl %ecx, %ecx
jle 0x5ff7
movslq 0x2018(%rax), %rdx
shlq $0x5, %rdx
movl %ecx, 0x10(%rdx,%rax)
movq %rbx, %rdi
movl $0x1, %esi
callq 0x6591
jmp 0x61f3
movl (%r14), %ebp
cmpl $0xc, %ebp
jne 0x60c9
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 0x97fb
movq 0x10(%rsp), %rax
movq %rax, 0x10(%r14)
movups (%rsp), %xmm0
movups %xmm0, (%r14)
cmpl $0x35, 0x18(%rbx)
je 0x6028
cmpl $0xc, %ebp
jne 0x60c9
movq 0x8(%rbx), %rax
cmpb $0x1, 0x10(%rax)
jne 0x606c
leaq 0x30(%rbx), %rsi
leaq 0x5851(%rip), %rdx      # 0xb8b5
movq %rbx, %rdi
callq 0x64ec
cmpl $0x26, (%r14)
jne 0x6201
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 0x97fb
movq 0x10(%rsp), %rax
movq %rax, 0x10(%r14)
movups (%rsp), %xmm0
movups %xmm0, (%r14)
cmpl $0x35, 0x18(%rbx)
je 0x6089
movq 0x8(%rbx), %rax
movq 0x8(%rax), %rdi
addq $0x20, %rdi
movl 0x44(%rbx), %edx
movl $0x2, %esi
callq 0x4d19
jmp 0x620e
movl (%r14), %ebp
cmpl $0x2, %ebp
jne 0x61b7
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 0x97fb
movq 0x10(%rsp), %rax
movq %rax, 0x10(%r14)
movups (%rsp), %xmm0
movups %xmm0, (%r14)
cmpl $0x35, 0x18(%rbx)
je 0x60e8
cmpl $0x2, %ebp
jne 0x61b7
cmpl $-0x1, 0x4c(%rbx)
jne 0x612c
leaq 0x30(%rbx), %rsi
leaq 0x57b3(%rip), %rdx      # 0xb8d7
movq %rbx, %rdi
callq 0x64ec
movl 0x50(%rbx), %esi
movq %rbx, %rdi
callq 0x69c6
movl 0x4c(%rbx), %r15d
movq 0x8(%rbx), %rax
movq 0x8(%rax), %rdi
addq $0x20, %rdi
movl 0x44(%rbx), %edx
movl $0x1f, %esi
callq 0x4d19
movq 0x8(%rbx), %rax
movq 0x8(%rax), %rax
movl 0x20(%rax), %ebp
subl %r15d, %ebp
cmpl $0xfffe, %ebp           # imm = 0xFFFE
jl 0x617c
leaq 0x5785(%rip), %rdx      # 0xb8f6
movq %rbx, %rdi
movq %r14, %rsi
callq 0x64ec
addl $0x2, %ebp
movl %ebp, %esi
shrl $0x8, %esi
movq 0x8(%rbx), %rax
movq 0x8(%rax), %rdi
addq $0x20, %rdi
movl 0x44(%rbx), %edx
movl $0xff, %r15d
andl %r15d, %esi
callq 0x4d19
movq 0x8(%rbx), %rax
movq 0x8(%rax), %rdi
addq $0x20, %rdi
movl 0x44(%rbx), %edx
andl %r15d, %ebp
movl %ebp, %esi
jmp 0x6222
movq %rbx, %rdi
movl $0x1, %esi
callq 0x6ab6
movq 0x8(%rbx), %rax
movq 0x8(%rax), %rdi
addq $0x20, %rdi
movl 0x44(%rbx), %edx
movl $0x5, %esi
jmp 0x6222
movq 0x8(%rbx), %rax
movq 0x8(%rax), %rdi
addq $0x20, %rdi
movl 0x44(%rbx), %edx
movl $0x2, %esi
callq 0x4d19
movzbl %bpl, %esi
movq %rbx, %rdi
callq 0x6428
jmp 0x6227
movq %rbx, %rdi
movl $0x1, %esi
callq 0x6ab6
movq 0x8(%rbx), %rax
movq 0x8(%rax), %rdi
addq $0x20, %rdi
movl 0x44(%rbx), %edx
movl $0x34, %esi
callq 0x4d19
cmpb $0x1, 0x49(%rbx)
jne 0x628e
movb $0x0, 0x49(%rbx)
leaq 0x30(%rbx), %r12
movq %rsp, %r15
movabsq $0x40000000009225, %r13 # imm = 0x40000000009225
movl (%r14), %eax
cmpq $0x36, %rax
ja 0x6251
btq %rax, %r13
jb 0x628e
cmpl $0x26, (%r12)
je 0x628e
movq 0x10(%r14), %rax
movq %rax, 0x10(%r12)
movups (%r14), %xmm0
movups %xmm0, (%r12)
movq (%rbx), %rsi
movq %r15, %rdi
callq 0x97fb
movq 0x10(%rsp), %rax
movq %rax, 0x10(%r14)
movups (%rsp), %xmm0
movups %xmm0, (%r14)
cmpl $0x35, 0x18(%rbx)
je 0x626a
jmp 0x6242
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq