// File: baziotis[P]minijava-cpp/ast.cpp
// Function: MethodDeclaration::print() const
void MethodDeclaration::print() const {
    LOG_SCOPE;
    if (this->is_undefined()) {
        debug_line("Undefined MethodDeclaration (Error)");
        return;
    }
    debug_print("(MethodDeclaration %s\n", this->id);
    {
        LOG_SCOPE;
        debug_print("Parameters:\n");
        {
            for (LocalDeclaration *ld: this->params) {
                ld->print();
            }
        }
    }
    {
        LOG_SCOPE;
        debug_print("Body:\n");
        {
            for (Statement *s: this->stmts) {
                if (!s->is_undefined()) {
                    s->print();
                }
            }
        }
    }
    {
        LOG_SCOPE;
        debug_print("Return:\n");
        {
            expr_print(this->ret);
        }
    }
    debug_print(")\n");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb0, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x80(%rbp)
leaq -0x9(%rbp), %rdi
callq 0x3da0
movq -0x80(%rbp), %rdi
callq 0x3af0
movb %al, -0x72(%rbp)
jmp 0x349e
movb -0x72(%rbp), %al
testb $0x1, %al
jne 0x34a7
jmp 0x34d4
leaq 0x15fee(%rip), %rdi     # 0x1949c
xorl %eax, %eax
callq 0x3f10
jmp 0x34b7
movl $0x1, -0x20(%rbp)
jmp 0x36c5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x36ec
movq -0x80(%rbp), %rax
movq 0x18(%rax), %rsi
leaq 0x15fdd(%rip), %rdi     # 0x194c0
xorl %eax, %eax
callq 0x3e60
jmp 0x34ec
leaq -0x21(%rbp), %rdi
callq 0x3da0
jmp 0x34f7
leaq 0x15fd9(%rip), %rdi     # 0x194d7
xorl %eax, %eax
callq 0x3e60
jmp 0x3507
movq -0x80(%rbp), %rax
addq $0x20, %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rdi
callq 0x3a70
movq %rax, -0x88(%rbp)
jmp 0x3525
movq -0x88(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x30(%rbp), %rdi
callq 0x3a90
movq %rax, -0x90(%rbp)
jmp 0x3542
movq -0x90(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
cmpq -0x40(%rbp), %rax
je 0x3597
movq -0x38(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rdi
callq 0x33f0
jmp 0x356d
jmp 0x356f
movq -0x38(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x38(%rbp)
jmp 0x354d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x21(%rbp), %rdi
callq 0x3dd0
jmp 0x36ec
leaq -0x21(%rbp), %rdi
callq 0x3dd0
leaq -0x49(%rbp), %rdi
callq 0x3da0
jmp 0x35ab
leaq 0x15f32(%rip), %rdi     # 0x194e4
xorl %eax, %eax
callq 0x3e60
jmp 0x35bb
movq -0x80(%rbp), %rax
addq $0x50, %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rdi
callq 0x39f0
movq %rax, -0x98(%rbp)
jmp 0x35d9
movq -0x98(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x58(%rbp), %rdi
callq 0x3a10
movq %rax, -0xa0(%rbp)
jmp 0x35f6
movq -0xa0(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x60(%rbp), %rax
cmpq -0x68(%rbp), %rax
je 0x3672
movq -0x60(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rdi
movq (%rdi), %rax
movq 0x10(%rax), %rax
callq *%rax
movb %al, -0xa1(%rbp)
jmp 0x362b
movb -0xa1(%rbp), %al
testb $0x1, %al
jne 0x3662
jmp 0x3637
movq -0x70(%rbp), %rdi
movq (%rdi), %rax
movq 0x8(%rax), %rax
callq *%rax
jmp 0x3646
jmp 0x3662
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x49(%rbp), %rdi
callq 0x3dd0
jmp 0x36ec
jmp 0x3664
movq -0x60(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x60(%rbp)
jmp 0x3601
leaq -0x49(%rbp), %rdi
callq 0x3dd0
leaq -0x71(%rbp), %rdi
callq 0x3da0
jmp 0x3686
leaq 0x15e5e(%rip), %rdi     # 0x194eb
xorl %eax, %eax
callq 0x3e60
jmp 0x3696
movq -0x80(%rbp), %rax
movq 0x68(%rax), %rdi
callq 0x2770
jmp 0x36a5
leaq -0x71(%rbp), %rdi
callq 0x3dd0
leaq 0x18d81(%rip), %rdi     # 0x1c436
xorl %eax, %eax
callq 0x3e60
jmp 0x36be
movl $0x0, -0x20(%rbp)
leaq -0x9(%rbp), %rdi
callq 0x3dd0
addq $0xb0, %rsp
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x71(%rbp), %rdi
callq 0x3dd0
leaq -0x9(%rbp), %rdi
callq 0x3dd0
movq -0x18(%rbp), %rdi
callq 0x21c0
nop