// File: acliusBackHome[P]kamaya/dist/ParseTree.cpp
// Function: ParseTree::make_struct_node(unsigned long, unsigned long, unsigned long, unsigned long)
size_t ParseTree::make_struct_node(size_t str_emn_node, size_t id_node,
                                   size_t dec_list_node, size_t scope_now) {
    size_t new_one = new_node(N_STRUCT_ENUM);
    const string &str_symbol = nodes[id_node].get_symbol();
    const auto the_scope = ParseScope::get_scope(scope_now);
    auto symbol_list = the_scope.get_all_dec_symbol();
    vector<pair<string, size_t> > member;
    for (const auto &each_symbol : symbol_list) {
        auto dec_type = the_scope.get_symbol_dec_type(each_symbol);
        switch (dec_type) {
            case D_FUNCTION: {
                // 目前不支持
                string info = "ParseTree::make_struct_node(size_t str_emn_node, size_t id_node, "
                              "size_t dec_list_node, size_t scope_now)";
                info += " str_emn_node=" + to_string(str_emn_node);
                info += " id_node=" + to_string(id_node);
                info += " dec_list_node=" + to_string(dec_list_node);
                info += " scope_now=" + to_string(scope_now);
                throw ParseException(EX_NOT_IMPLEMENTED, info);
            }
            case D_UNKNOWN: {
                string info = "ParseTree::make_struct_node(size_t str_emn_node, size_t id_node, "
                              "size_t dec_list_node, size_t scope_now)";
                info += " str_emn_node=" + to_string(str_emn_node);
                info += " id_node=" + to_string(id_node);
                info += " dec_list_node=" + to_string(dec_list_node);
                info += " scope_now=" + to_string(scope_now);
                throw ParseException(EX_UNKNOWN, info);
            }
            case D_VARIABLE: {
                const auto &var = the_scope.get_variable_declaration(each_symbol);
                member.emplace_back(var.get_symbol(), var.get_type().get_id());
            }
            case D_TYPE: {
                break;
            }
        }
    }
    ParseType new_type = ParseType::get_struct(member);
    auto &parent_scope = ParseScope::get_scope(the_scope.get_parent_scope_id());
    parent_scope.declaration(str_symbol, new_type);
    set_parent(str_emn_node, new_one);
    set_parent(id_node, new_one);
    set_parent(dec_list_node, new_one);
    return new_one;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4a0, %rsp            # imm = 0x4A0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x438(%rbp)
movl $0x1b, %esi
callq 0x31db0
movq -0x438(%rbp), %rdi
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rsi
callq 0x34080
movq %rax, %rdi
callq 0x3dd30
movq %rax, -0x38(%rbp)
movq -0x28(%rbp), %rdi
callq 0x6a860
movq %rax, %rsi
leaq -0x78(%rbp), %rdi
movq %rdi, -0x430(%rbp)
callq 0x6a240
movq -0x430(%rbp), %rsi
leaq -0x90(%rbp), %rdi
callq 0x6ca40
jmp 0x330a5
leaq -0xb8(%rbp), %rdi
callq 0x34600
leaq -0x90(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq -0xc0(%rbp), %rdi
callq 0x19b80
movq %rax, -0xc8(%rbp)
movq -0xc0(%rbp), %rdi
callq 0x19a00
movq %rax, -0xd0(%rbp)
leaq -0xc8(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x1fbd0
testb $0x1, %al
jne 0x33101
jmp 0x3394f
leaq -0xc8(%rbp), %rdi
callq 0x1fc10
movq %rax, -0xd8(%rbp)
movq -0xd8(%rbp), %rsi
leaq -0x78(%rbp), %rdi
callq 0x6a7c0
movl %eax, -0x43c(%rbp)
jmp 0x3312c
movl -0x43c(%rbp), %eax
movl %eax, -0xdc(%rbp)
movl -0xdc(%rbp), %eax
movq %rax, -0x448(%rbp)
subq $0x3, %rax
ja 0x3393c
movq -0x448(%rbp), %rax
leaq 0x5c4a3(%rip), %rcx     # 0x8f600
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x33acd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x33ab5
leaq -0x101(%rbp), %rdi
movq %rdi, -0x450(%rbp)
callq 0x45f0
movq -0x450(%rbp), %rdx
leaq 0x5c602(%rip), %rsi     # 0x8f7b7
leaq -0x100(%rbp), %rdi
callq 0x4450
jmp 0x331c3
leaq -0x101(%rbp), %rdi
callq 0x4380
movq -0x10(%rbp), %rsi
leaq -0x148(%rbp), %rdi
callq 0x15db0
jmp 0x331e1
leaq 0x5c638(%rip), %rsi     # 0x8f820
leaq -0x128(%rbp), %rdi
leaq -0x148(%rbp), %rdx
callq 0x15d60
jmp 0x331fd
leaq -0x100(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x43f0
jmp 0x33212
leaq -0x128(%rbp), %rdi
callq 0x4688
leaq -0x148(%rbp), %rdi
callq 0x4688
movq -0x18(%rbp), %rsi
leaq -0x188(%rbp), %rdi
callq 0x15db0
jmp 0x3323c
leaq 0x5c5ec(%rip), %rsi     # 0x8f82f
leaq -0x168(%rbp), %rdi
leaq -0x188(%rbp), %rdx
callq 0x15d60
jmp 0x33258
leaq -0x100(%rbp), %rdi
leaq -0x168(%rbp), %rsi
callq 0x43f0
jmp 0x3326d
leaq -0x168(%rbp), %rdi
callq 0x4688
leaq -0x188(%rbp), %rdi
callq 0x4688
movq -0x20(%rbp), %rsi
leaq -0x1c8(%rbp), %rdi
callq 0x15db0
jmp 0x33297
leaq 0x5c59b(%rip), %rsi     # 0x8f839
leaq -0x1a8(%rbp), %rdi
leaq -0x1c8(%rbp), %rdx
callq 0x15d60
jmp 0x332b3
leaq -0x100(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x43f0
jmp 0x332c8
leaq -0x1a8(%rbp), %rdi
callq 0x4688
leaq -0x1c8(%rbp), %rdi
callq 0x4688
movq -0x28(%rbp), %rsi
leaq -0x208(%rbp), %rdi
callq 0x15db0
jmp 0x332f2
leaq 0x5c550(%rip), %rsi     # 0x8f849
leaq -0x1e8(%rbp), %rdi
leaq -0x208(%rbp), %rdx
callq 0x15d60
jmp 0x3330e
leaq -0x100(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x43f0
jmp 0x33323
leaq -0x1e8(%rbp), %rdi
callq 0x4688
leaq -0x208(%rbp), %rdi
callq 0x4688
movl $0x28, %edi
callq 0x41c0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x458(%rbp)
movl $0x13, %esi
leaq -0x100(%rbp), %rdx
callq 0x73a90
jmp 0x33365
movq -0x458(%rbp), %rdi
leaq 0x929dd(%rip), %rsi     # 0xc5d50
leaq -0x1d4ea(%rip), %rdx    # 0x15e90
callq 0x45b0
jmp 0x33ae2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x101(%rbp), %rdi
callq 0x4380
jmp 0x33ab5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x334e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x333f0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x4688
leaq -0x148(%rbp), %rdi
callq 0x4688
jmp 0x334e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x33433
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x168(%rbp), %rdi
callq 0x4688
leaq -0x188(%rbp), %rdi
callq 0x4688
jmp 0x334e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x33476
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x1a8(%rbp), %rdi
callq 0x4688
leaq -0x1c8(%rbp), %rdi
callq 0x4688
jmp 0x334e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x334b6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x1e8(%rbp), %rdi
callq 0x4688
leaq -0x208(%rbp), %rdi
callq 0x4688
jmp 0x334e2
movq -0x458(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x4280
leaq -0x100(%rbp), %rdi
callq 0x4688
jmp 0x33ab5
leaq -0x229(%rbp), %rdi
movq %rdi, -0x460(%rbp)
callq 0x45f0
movq -0x460(%rbp), %rdx
leaq 0x5c2a3(%rip), %rsi     # 0x8f7b7
leaq -0x228(%rbp), %rdi
callq 0x4450
jmp 0x33522
leaq -0x229(%rbp), %rdi
callq 0x4380
movq -0x10(%rbp), %rsi
leaq -0x270(%rbp), %rdi
callq 0x15db0
jmp 0x33540
leaq 0x5c2d9(%rip), %rsi     # 0x8f820
leaq -0x250(%rbp), %rdi
leaq -0x270(%rbp), %rdx
callq 0x15d60
jmp 0x3355c
leaq -0x228(%rbp), %rdi
leaq -0x250(%rbp), %rsi
callq 0x43f0
jmp 0x33571
leaq -0x250(%rbp), %rdi
callq 0x4688
leaq -0x270(%rbp), %rdi
callq 0x4688
movq -0x18(%rbp), %rsi
leaq -0x2b0(%rbp), %rdi
callq 0x15db0
jmp 0x3359b
leaq 0x5c28d(%rip), %rsi     # 0x8f82f
leaq -0x290(%rbp), %rdi
leaq -0x2b0(%rbp), %rdx
callq 0x15d60
jmp 0x335b7
leaq -0x228(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x43f0
jmp 0x335cc
leaq -0x290(%rbp), %rdi
callq 0x4688
leaq -0x2b0(%rbp), %rdi
callq 0x4688
movq -0x20(%rbp), %rsi
leaq -0x2f0(%rbp), %rdi
callq 0x15db0
jmp 0x335f6
leaq 0x5c23c(%rip), %rsi     # 0x8f839
leaq -0x2d0(%rbp), %rdi
leaq -0x2f0(%rbp), %rdx
callq 0x15d60
jmp 0x33612
leaq -0x228(%rbp), %rdi
leaq -0x2d0(%rbp), %rsi
callq 0x43f0
jmp 0x33627
leaq -0x2d0(%rbp), %rdi
callq 0x4688
leaq -0x2f0(%rbp), %rdi
callq 0x4688
movq -0x28(%rbp), %rsi
leaq -0x330(%rbp), %rdi
callq 0x15db0
jmp 0x33651
leaq 0x5c1f1(%rip), %rsi     # 0x8f849
leaq -0x310(%rbp), %rdi
leaq -0x330(%rbp), %rdx
callq 0x15d60
jmp 0x3366d
leaq -0x228(%rbp), %rdi
leaq -0x310(%rbp), %rsi
callq 0x43f0
jmp 0x33682
leaq -0x310(%rbp), %rdi
callq 0x4688
leaq -0x330(%rbp), %rdi
callq 0x4688
movl $0x28, %edi
callq 0x41c0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x468(%rbp)
xorl %esi, %esi
leaq -0x228(%rbp), %rdx
callq 0x73a90
jmp 0x336c1
movq -0x468(%rbp), %rdi
leaq 0x92681(%rip), %rsi     # 0xc5d50
leaq -0x1d846(%rip), %rdx    # 0x15e90
callq 0x45b0
jmp 0x33ae2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x229(%rbp), %rdi
callq 0x4380
jmp 0x33ab5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x3383e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x3374c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x4688
leaq -0x270(%rbp), %rdi
callq 0x4688
jmp 0x3383e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x3378f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x290(%rbp), %rdi
callq 0x4688
leaq -0x2b0(%rbp), %rdi
callq 0x4688
jmp 0x3383e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x337d2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x2d0(%rbp), %rdi
callq 0x4688
leaq -0x2f0(%rbp), %rdi
callq 0x4688
jmp 0x3383e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x33812
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x310(%rbp), %rdi
callq 0x4688
leaq -0x330(%rbp), %rdi
callq 0x4688
jmp 0x3383e
movq -0x468(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
callq 0x4280
leaq -0x228(%rbp), %rdi
callq 0x4688
jmp 0x33ab5
movq -0xd8(%rbp), %rdx
leaq -0x3a0(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x6b9e0
jmp 0x33868
leaq -0x3a0(%rbp), %rax
movq %rax, -0x338(%rbp)
movq -0x338(%rbp), %rsi
leaq -0x3c0(%rbp), %rdi
callq 0x68740
jmp 0x3388b
movq -0x338(%rbp), %rdi
callq 0x68730
movq %rax, -0x470(%rbp)
jmp 0x338a0
movq -0x470(%rbp), %rdi
callq 0x56260
movq %rax, -0x478(%rbp)
jmp 0x338b5
movq -0x478(%rbp), %rax
movq %rax, -0x3c8(%rbp)
leaq -0xb8(%rbp), %rdi
leaq -0x3c0(%rbp), %rsi
leaq -0x3c8(%rbp), %rdx
callq 0x34620
jmp 0x338df
leaq -0x3c0(%rbp), %rdi
callq 0x4688
leaq -0x3a0(%rbp), %rdi
callq 0x16210
jmp 0x3393c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x3392b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x3c0(%rbp), %rdi
callq 0x4688
leaq -0x3a0(%rbp), %rdi
callq 0x16210
jmp 0x33ab5
jmp 0x3393e
leaq -0xc8(%rbp), %rdi
callq 0x1fc30
jmp 0x330e5
xorps %xmm0, %xmm0
movaps %xmm0, -0x420(%rbp)
movq $0x0, -0x410(%rbp)
leaq -0x420(%rbp), %rdi
movq %rdi, -0x480(%rbp)
callq 0x34600
movq -0x480(%rbp), %rdx
leaq -0x400(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x57390
jmp 0x33993
leaq -0x420(%rbp), %rdi
callq 0x346a0
leaq -0x78(%rbp), %rdi
callq 0x6bcc0
movq %rax, -0x488(%rbp)
jmp 0x339b1
movq -0x488(%rbp), %rdi
callq 0x6a860
movq %rax, -0x490(%rbp)
jmp 0x339c6
movq -0x490(%rbp), %rax
movq %rax, -0x428(%rbp)
movq -0x428(%rbp), %rdi
movq -0x38(%rbp), %rsi
leaq -0x400(%rbp), %rdx
callq 0x6a8e0
jmp 0x339ed
movq -0x438(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0x31e60
jmp 0x33a03
movq -0x438(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0x31e60
jmp 0x33a19
movq -0x438(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0x31e60
jmp 0x33a2f
movq -0x30(%rbp), %rax
movq %rax, -0x498(%rbp)
leaq -0x400(%rbp), %rdi
callq 0x57350
leaq -0xb8(%rbp), %rdi
callq 0x346a0
leaq -0x90(%rbp), %rdi
callq 0x17430
leaq -0x78(%rbp), %rdi
callq 0x6c850
movq -0x498(%rbp), %rax
addq $0x4a0, %rsp            # imm = 0x4A0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x420(%rbp), %rdi
callq 0x346a0
jmp 0x33ab5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x400(%rbp), %rdi
callq 0x57350
leaq -0xb8(%rbp), %rdi
callq 0x346a0
leaq -0x90(%rbp), %rdi
callq 0x17430
leaq -0x78(%rbp), %rdi
callq 0x6c850
movq -0x98(%rbp), %rdi
callq 0x45e0
nopw %cs:(%rax,%rax)
nopl (%rax)