// File: JameyWoo[P]csmile/parse.cpp
// Function: return_stmt()
TreeNode* return_stmt() {
    TreeNode* t = new TreeNode("ReturnStmt");
    match("return");
    // cout << "exp 之前 -- 0" << endl;
    if (ptoken.type == "Semicolon") {
        match("Semicolon");
        return t;
    } else {
        if (t != NULL) {
            // cout << "exp 之前" << endl;
            t->child[0]  = expression();
            t->child_cnt = 1;
        }
    }
    match("Semicolon");
    return t;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1c0, %rsp            # imm = 0x1C0
movl $0xe0, %edi
callq 0x3280
movq %rax, -0x1a8(%rbp)
movb $0x1, -0x45(%rbp)
leaq -0x31(%rbp), %rdi
movq %rdi, -0x1a0(%rbp)
callq 0x3480
movq -0x1a0(%rbp), %rdx
leaq 0x157f8(%rip), %rsi     # 0x21206
leaq -0x30(%rbp), %rdi
callq 0x4ef0
jmp 0xba19
movq -0x1a8(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0xdb50
jmp 0xba2b
movb $0x0, -0x45(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x34e8
leaq -0x31(%rbp), %rdi
callq 0x32d0
movq -0x1a8(%rbp), %rax
movq %rax, -0x10(%rbp)
leaq -0xb1(%rbp), %rdi
movq %rdi, -0x1b0(%rbp)
callq 0x3480
movq -0x1b0(%rbp), %rdx
leaq 0x156a2(%rip), %rsi     # 0x2110f
leaq -0xb0(%rbp), %rdi
callq 0x4ef0
jmp 0xba7b
leaq -0x90(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x80b0
jmp 0xba90
leaq -0x90(%rbp), %rdi
callq 0x4ec0
leaq -0xb0(%rbp), %rdi
callq 0x34e8
leaq -0xb1(%rbp), %rdi
callq 0x32d0
leaq 0x22acd(%rip), %rdi     # 0x2e588
leaq 0x15607(%rip), %rsi     # 0x210c9
callq 0x5e70
testb $0x1, %al
jne 0xbad0
jmp 0xbbfd
leaq -0x121(%rbp), %rdi
movq %rdi, -0x1b8(%rbp)
callq 0x3480
movq -0x1b8(%rbp), %rdx
leaq 0x155d8(%rip), %rsi     # 0x210c9
leaq -0x120(%rbp), %rdi
callq 0x4ef0
jmp 0xbaff
leaq -0x100(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0x80b0
jmp 0xbb14
leaq -0x100(%rbp), %rdi
callq 0x4ec0
leaq -0x120(%rbp), %rdi
callq 0x34e8
leaq -0x121(%rbp), %rdi
callq 0x32d0
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xbcc6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xbb68
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x34e8
leaq -0x31(%rbp), %rdi
callq 0x32d0
testb $0x1, -0x45(%rbp)
jne 0xbb79
jmp 0xbb8a
movq -0x1a8(%rbp), %rdi
movl $0xe0, %esi
callq 0x3290
jmp 0xbcd3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xbbb5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xb0(%rbp), %rdi
callq 0x34e8
leaq -0xb1(%rbp), %rdi
callq 0x32d0
jmp 0xbcd3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xbbec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x120(%rbp), %rdi
callq 0x34e8
leaq -0x121(%rbp), %rdi
callq 0x32d0
jmp 0xbcd3
cmpq $0x0, -0x10(%rbp)
je 0xbc1e
callq 0x9b00
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movl $0x1, 0x28(%rax)
jmp 0xbc20
leaq -0x191(%rbp), %rdi
movq %rdi, -0x1c0(%rbp)
callq 0x3480
movq -0x1c0(%rbp), %rdx
leaq 0x15488(%rip), %rsi     # 0x210c9
leaq -0x190(%rbp), %rdi
callq 0x4ef0
jmp 0xbc4f
leaq -0x170(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x80b0
jmp 0xbc64
leaq -0x170(%rbp), %rdi
callq 0x4ec0
leaq -0x190(%rbp), %rdi
callq 0x34e8
leaq -0x191(%rbp), %rdi
callq 0x32d0
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xbcc6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xbcb8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x34e8
leaq -0x191(%rbp), %rdi
callq 0x32d0
jmp 0xbcd3
movq -0x8(%rbp), %rax
addq $0x1c0, %rsp            # imm = 0x1C0
popq %rbp
retq
movq -0x40(%rbp), %rdi
callq 0x3470
nopl (%rax)