// File: /workspace/github_cpp_makefile_star2_O2/JameyWoo[P]csmile/parse.cpp
// Function: local_declaration()
TreeNode* local_declaration() {
    /**
     * 一系列的局部声明
     */
    TreeNode* t = NULL;
    TreeNode* p = NULL;
    TreeNode* q = NULL;
    while (ptoken.type == "int") {
        p            = new TreeNode("LocVarDecl");  // 局部变量声明, 只有int类型
        TreeNode* q1 = new TreeNode("int");
        p->child[0]  = q1;
        match("int");
        if (ptoken.type == "Id") {
            TreeNode* q2 = new TreeNode("Id");
            q2->name     = ptoken.value;
            q2->line     = ptoken.line;
            p->child[1]  = q2;
            match("Id");
            // TODO: 添加数组
            if (ptoken.type == "Semicolon") {
                match("Semicolon");
                p->child_cnt = 2;
            } else if (ptoken.type == "Assign") {
                match("Assign");
                Token tmp = match("Num");
                match("Semicolon");
                int val      = stoi(tmp.value);
                q2->val      = val;
                p->child_cnt = 2;
            } else {
                match("Semicolon");
            }
        }
        if (p != NULL) {
            if (t == NULL) {
                t = q = p;
            } else {
                q->sibling = p;
                q          = p;
            }
        }
    }
    return t;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x358, %rsp            # imm = 0x358
xorl %r15d, %r15d
leaq 0x12073(%rip), %rbp     # 0x164c0
movq %r15, 0x10(%rsp)
movq %rbp, %rdi
leaq 0xad18(%rip), %rsi      # 0xf174
callq 0x368e
testb %al, %al
je 0x4791
movq %r15, 0x18(%rsp)
movl $0xe0, %edi
callq 0x21c0
movq %rax, %r15
leaq 0x188(%rsp), %r12
movq %r12, %rdi
leaq 0xada5(%rip), %rsi      # 0xf232
leaq 0x20(%rsp), %rdx
callq 0x2efc
movq %rbp, %rbx
movq %r15, %rdi
movq %r12, %rsi
callq 0x703e
movq %r12, %rdi
callq 0x2358
movl $0xe0, %edi
callq 0x21c0
movq %rax, %rbp
leaq 0x168(%rsp), %r12
movq %r12, %rdi
leaq 0xaca8(%rip), %rsi      # 0xf174
leaq 0x20(%rsp), %rdx
callq 0x2efc
movq %rbp, %rdi
movq %r12, %rsi
callq 0x703e
movq %r12, %rdi
callq 0x2358
movq %rbp, (%r15)
leaq 0x148(%rsp), %r12
movq %r12, %rdi
leaq 0xac76(%rip), %rsi      # 0xf174
leaq 0x20(%rsp), %rdx
callq 0x2efc
leaq 0x310(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
callq 0x3e94
movq %rbx, %rbp
movq %r13, %rdi
callq 0x2ee6
movq %r12, %rdi
callq 0x2358
movq %rbx, %rdi
leaq 0xacf0(%rip), %rsi      # 0xf228
callq 0x368e
testb %al, %al
je 0x4777
movl $0xe0, %edi
callq 0x21c0
movq %rax, %rbp
leaq 0x128(%rsp), %r12
movq %r12, %rdi
leaq 0xacc4(%rip), %rsi      # 0xf228
leaq 0x20(%rsp), %rdx
callq 0x2efc
movq %rbp, %rdi
movq %r12, %rsi
callq 0x703e
movq %r12, %rdi
callq 0x2358
movq %rbp, %rdi
addq $0xc0, %rdi
leaq 0x11f4e(%rip), %rsi     # 0x164e0
callq 0x2110
movl 0x11f63(%rip), %eax     # 0x16500
movl %eax, 0x50(%rbp)
movq %rbp, 0x8(%r15)
leaq 0x108(%rsp), %r13
movq %r13, %rdi
leaq 0xac72(%rip), %rsi      # 0xf228
leaq 0x20(%rsp), %rdx
callq 0x2efc
leaq 0x2c8(%rsp), %r14
movq %r14, %rdi
movq %r13, %rsi
callq 0x3e94
movq %r14, %rdi
callq 0x2ee6
movq %r13, %rdi
callq 0x2358
movq %rbx, %r13
movq %rbx, %rdi
leaq 0xab55(%rip), %r14      # 0xf145
movq %r14, %rsi
callq 0x368e
testb %al, %al
je 0x4647
leaq 0xe8(%rsp), %r13
movq %r13, %rdi
movq %r14, %rsi
leaq 0x20(%rsp), %rdx
callq 0x2efc
leaq 0x280(%rsp), %r14
movq %r14, %rdi
movq %r13, %rsi
callq 0x3e94
movq %rbx, %rbp
movq %r14, %rdi
callq 0x2ee6
movq %r13, %rdi
callq 0x2358
movl $0x2, 0x28(%r15)
jmp 0x4777
movq %r13, %rdi
leaq 0xac59(%rip), %r14      # 0xf2aa
movq %r14, %rsi
callq 0x368e
testb %al, %al
je 0x4738
leaq 0xc8(%rsp), %r13
movq %r13, %rdi
movq %r14, %rsi
leaq 0x20(%rsp), %rdx
callq 0x2efc
leaq 0x238(%rsp), %r14
movq %r14, %rdi
movq %r13, %rsi
callq 0x3e94
movq %r14, %rdi
callq 0x2ee6
movq %r13, %rdi
callq 0x2358
leaq 0xa8(%rsp), %r14
movq %r14, %rdi
leaq 0xaa5b(%rip), %rsi      # 0xf109
leaq 0xf(%rsp), %rdx
callq 0x2efc
leaq 0x20(%rsp), %rdi
movq %r14, %rsi
callq 0x3e94
movq %r14, %rdi
callq 0x2358
leaq 0x88(%rsp), %r14
movq %r14, %rdi
leaq 0xaa66(%rip), %rsi      # 0xf145
leaq 0xf(%rsp), %rdx
callq 0x2efc
leaq 0x1f0(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0x3e94
movq %r12, %rdi
callq 0x2ee6
movq %r14, %rdi
callq 0x2358
leaq 0x40(%rsp), %rdi
xorl %esi, %esi
pushq $0xa
popq %rdx
callq 0x70c9
movl %eax, 0xb8(%rbp)
movl $0x2, 0x28(%r15)
leaq 0x20(%rsp), %rdi
callq 0x2ee6
movq %rbx, %rbp
jmp 0x4777
leaq 0x68(%rsp), %r14
movq %r14, %rdi
leaq 0xa9fe(%rip), %rsi      # 0xf145
leaq 0x20(%rsp), %rdx
callq 0x2efc
leaq 0x1a8(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0x3e94
movq %rbx, %rbp
movq %r12, %rdi
callq 0x2ee6
movq %r14, %rdi
callq 0x2358
cmpq $0x0, 0x10(%rsp)
je 0x444d
movq 0x18(%rsp), %rax
movq %r15, 0x20(%rax)
jmp 0x4452
movq 0x10(%rsp), %rax
addq $0x358, %rsp            # imm = 0x358
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x47aa
movq %rax, %rbx
jmp 0x47c9
movq %rax, %rbx
leaq 0x68(%rsp), %rdi
jmp 0x4835
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x2358
leaq 0x20(%rsp), %rdi
callq 0x2ee6
jmp 0x487d
movq %rax, %rbx
leaq 0xc8(%rsp), %rdi
jmp 0x4835
jmp 0x485b
movq %rax, %rbx
leaq 0xa8(%rsp), %rdi
jmp 0x4835
jmp 0x485b
jmp 0x485b
movq %rax, %rbx
leaq 0xe8(%rsp), %rdi
jmp 0x4835
jmp 0x485b
jmp 0x483c
movq %rax, %rbx
leaq 0x128(%rsp), %rdi
jmp 0x484c
jmp 0x485b
movq %rax, %rbx
leaq 0x108(%rsp), %rdi
jmp 0x4835
movq %rax, %rbx
jmp 0x4870
movq %rax, %rbx
leaq 0x148(%rsp), %rdi
callq 0x2358
jmp 0x487d
movq %rax, %rbx
jmp 0x4851
movq %rax, %rbx
leaq 0x168(%rsp), %rdi
callq 0x2358
movl $0xe0, %esi
movq %rbp, %rdi
jmp 0x4878
movq %rax, %rbx
jmp 0x487d
movq %rax, %rbx
leaq 0x188(%rsp), %rdi
callq 0x2358
movl $0xe0, %esi
movq %r15, %rdi
callq 0x21d0
movq %rbx, %rdi
callq 0x2300