// File: /workspace/github_cpp_makefile_star2_O2/JameyWoo[P]csmile/parse.cpp
// Function: selection_stmt()
TreeNode* selection_stmt() {
    TreeNode* t = new TreeNode("Selection");
    match("if");
    match("LeftBracket");
    if (t != NULL) {
        t->child[0] = expression();
    }
    match("RightBracket");
    bool has_bracket = false;
    if (ptoken.type == "LeftBigBkt") {
        has_bracket = true;
        match("LeftBigBkt");
    }
    t->child[1] = statement_list();
    if (has_bracket)
        match("RightBigBkt");
    if (ptoken.type == "else") {
        match("else");  // else 部分, 存在child[2]里
        // cout << "else 的开始部分*******************" << endl;
        if (t != NULL) {
            bool has_bracket_2 = false;
            if (ptoken.type == "LeftBigBkt") {
                // cout << "else 有括号***********************" << endl;
                has_bracket_2 = true;
                match("LeftBigBkt");
            } else {
                // cout << "else 无括号***********************" << endl;
            }
            t->child[2] = statement_list();
            if (has_bracket_2)
                match("RightBigBkt");
        }
    }
    return t;
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x368, %rsp            # imm = 0x368
movl $0xe0, %edi
callq 0x21c0
movq %rax, %rbx
leaq 0xa99a(%rip), %rsi      # 0xf23d
leaq 0x108(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x2efc
leaq 0x108(%rsp), %rsi
movq %rbx, %rdi
callq 0x703e
leaq 0x108(%rsp), %rdi
callq 0x2358
leaq 0xa8a4(%rip), %rsi      # 0xf17d
leaq 0xe8(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x2efc
leaq 0x320(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x3e94
leaq 0x320(%rsp), %rdi
callq 0x2ee6
leaq 0xe8(%rsp), %rdi
callq 0x2358
leaq 0xa80b(%rip), %rsi      # 0xf12c
leaq 0xc8(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x2efc
leaq 0x2d8(%rsp), %rdi
leaq 0xc8(%rsp), %rsi
callq 0x3e94
leaq 0x2d8(%rsp), %rdi
callq 0x2ee6
leaq 0xc8(%rsp), %rdi
callq 0x2358
callq 0x4c1b
movq %rax, (%rbx)
leaq 0xa7c7(%rip), %rsi      # 0xf138
leaq 0xa8(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x2efc
leaq 0x290(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x3e94
leaq 0x290(%rsp), %rdi
callq 0x2ee6
leaq 0xa8(%rsp), %rdi
callq 0x2358
leaq 0x11b07(%rip), %rdi     # 0x164c0
leaq 0xa797(%rip), %rsi      # 0xf157
callq 0x368e
testb %al, %al
je 0x4a5f
leaq 0xa783(%rip), %rsi      # 0xf157
leaq 0x88(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x2efc
leaq 0x248(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x3e94
leaq 0x248(%rsp), %rdi
callq 0x2ee6
leaq 0x88(%rsp), %rdi
callq 0x2358
callq 0x500e
movq %rax, 0x8(%rbx)
leaq 0xa73d(%rip), %rsi      # 0xf162
leaq 0x68(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x2efc
leaq 0x200(%rsp), %rdi
leaq 0x68(%rsp), %rsi
callq 0x3e94
leaq 0x200(%rsp), %rdi
callq 0x2ee6
leaq 0x68(%rsp), %rdi
callq 0x2358
jmp 0x4a68
callq 0x500e
movq %rax, 0x8(%rbx)
leaq 0x11a51(%rip), %rdi     # 0x164c0
leaq 0xa70a(%rip), %rsi      # 0xf180
callq 0x368e
testb %al, %al
je 0x4b6f
leaq 0xa6f6(%rip), %rsi      # 0xf180
leaq 0x48(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x2efc
leaq 0x1b8(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x3e94
leaq 0x1b8(%rsp), %rdi
callq 0x2ee6
leaq 0x48(%rsp), %rdi
callq 0x2358
leaq 0x119f7(%rip), %rdi     # 0x164c0
leaq 0xa687(%rip), %rsi      # 0xf157
callq 0x368e
testb %al, %al
je 0x4b66
leaq 0xa673(%rip), %rsi      # 0xf157
leaq 0x28(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x2efc
leaq 0x170(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x3e94
leaq 0x170(%rsp), %rdi
callq 0x2ee6
leaq 0x28(%rsp), %rdi
callq 0x2358
callq 0x500e
movq %rax, 0x10(%rbx)
leaq 0xa636(%rip), %rsi      # 0xf162
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x2efc
leaq 0x128(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x3e94
leaq 0x128(%rsp), %rdi
callq 0x2ee6
leaq 0x8(%rsp), %rdi
callq 0x2358
jmp 0x4b6f
callq 0x500e
movq %rax, 0x10(%rbx)
movq %rbx, %rax
addq $0x368, %rsp            # imm = 0x368
popq %rbx
popq %r14
retq
movq %rax, %r14
leaq 0x8(%rsp), %rdi
jmp 0x4be5
jmp 0x4bec
movq %rax, %r14
leaq 0x28(%rsp), %rdi
jmp 0x4be5
jmp 0x4bec
movq %rax, %r14
leaq 0x48(%rsp), %rdi
jmp 0x4be5
movq %rax, %r14
leaq 0x68(%rsp), %rdi
jmp 0x4be5
jmp 0x4bec
jmp 0x4bec
movq %rax, %r14
leaq 0x88(%rsp), %rdi
jmp 0x4be5
jmp 0x4bec
movq %rax, %r14
leaq 0xa8(%rsp), %rdi
jmp 0x4be5
jmp 0x4bec
movq %rax, %r14
leaq 0xc8(%rsp), %rdi
jmp 0x4be5
jmp 0x4bec
movq %rax, %r14
leaq 0xe8(%rsp), %rdi
callq 0x2358
jmp 0x4c13
movq %rax, %r14
jmp 0x4c13
movq %rax, %r14
leaq 0x108(%rsp), %rdi
callq 0x2358
jmp 0x4c06
movq %rax, %r14
movl $0xe0, %esi
movq %rbx, %rdi
callq 0x21d0
movq %r14, %rdi
callq 0x2300