// File: acliusBackHome[P]kamaya/dist/ParseType.cpp
// Function: ParseType::get_info[abi:cxx11]() const
string ParseType::get_info() const {
    size_t this_id = get_type_id(*this);
    if (this_id < id2info.size()) {
        return id2info[this_id];
    }
    for (size_t i = id2info.size(); i < this_id; ++i) {
        get_type(i).get_info();
    }
    id2info.emplace_back("");
    char buff[32];
    sprintf(buff, "Type-%zu {", this_id);
    string res(buff);
    if (this_id <= T_BASE) {
        res += get_base_type_name(base_type, 0);
    } else {
        if (base_type != T_UNKNOWN) {
            res += get_base_type_name(base_type, specifier);
        }
        if (array_size) {
            res += "array(";
            if (lower_type <= T_BASE) {
                res += get_base_type_name((BaseType) lower_type, specifier) + ",";
            } else {
                sprintf(buff, "Type-%zu,", lower_type);
                res += buff;
            }
            sprintf(buff, " %zu)", array_size);
            res += buff;
        } else {
            if (lower_type) {
                if (lower_type <= T_BASE) {
                    sprintf(buff, "%s", get_base_type_name((BaseType) lower_type, specifier).c_str());
                } else {
                    sprintf(buff, "Type-%zu ", lower_type);
                }
                res += buff;
            }
            if (fields && !(fields->empty())) {
                for (const auto &each: *fields) {
                    res += each.first;
                    if (each.second <= T_BASE) {
                        sprintf(buff, ": %s, ", get_base_type_name((BaseType) each.second, 0).c_str());
                    } else {
                        sprintf(buff, ": Type-%zu ,", each.second);
                    }
                    res += buff;
                }
            }
            for (size_t i = 0; i < pointer_level; ++i) {
                res += "*";
            }
        }
    }
    res += "}";
    id2info[this_id] = res;
    return res;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1b0, %rsp            # imm = 0x1B0
movq %rdi, -0x180(%rbp)
movq %rdi, %rax
movq %rax, -0x178(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0x170(%rbp)
callq 0x56d20
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x168(%rbp)
leaq 0x70c36(%rip), %rdi     # 0xc7360
callq 0x171f0
movq %rax, %rcx
movq -0x168(%rbp), %rax
cmpq %rcx, %rax
jae 0x56762
movq -0x18(%rbp), %rsi
leaq 0x70c17(%rip), %rdi     # 0xc7360
callq 0x17210
movq -0x180(%rbp), %rdi
movq %rax, %rsi
callq 0x4190
jmp 0x56cfa
leaq 0x70bf7(%rip), %rdi     # 0xc7360
callq 0x171f0
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
cmpq -0x18(%rbp), %rax
jae 0x567a8
movq -0x20(%rbp), %rdi
callq 0x56e60
movq %rax, %rsi
leaq -0x40(%rbp), %rdi
callq 0x566e0
leaq -0x40(%rbp), %rdi
callq 0x4688
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x56772
leaq 0x70bb1(%rip), %rdi     # 0xc7360
leaq 0x3b070(%rip), %rsi     # 0x91826
callq 0x59360
movq -0x18(%rbp), %rdx
leaq 0x39617(%rip), %rsi     # 0x8fddd
xorl %eax, %eax
leaq -0x60(%rbp), %rdi
movq %rdi, -0x190(%rbp)
callq 0x40d0
movb $0x0, -0x61(%rbp)
leaq -0x62(%rbp), %rdi
movq %rdi, -0x188(%rbp)
callq 0x45f0
movq -0x180(%rbp), %rdi
movq -0x190(%rbp), %rsi
movq -0x188(%rbp), %rdx
callq 0x4450
jmp 0x56808
leaq -0x62(%rbp), %rdi
callq 0x4380
cmpq $0x9, -0x18(%rbp)
ja 0x568a3
movq -0x170(%rbp), %rax
movl (%rax), %esi
leaq -0x98(%rbp), %rdi
xorl %edx, %edx
callq 0x56ef0
jmp 0x56835
movq -0x180(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x43f0
jmp 0x5684a
leaq -0x98(%rbp), %rdi
callq 0x4688
jmp 0x56c9e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x62(%rbp), %rdi
callq 0x4380
jmp 0x56d0a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x56cec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x4688
jmp 0x56cec
movq -0x170(%rbp), %rax
cmpl $0x0, (%rax)
je 0x56909
movq -0x170(%rbp), %rax
movl (%rax), %esi
movl 0x4(%rax), %edx
leaq -0xb8(%rbp), %rdi
callq 0x56ef0
jmp 0x568c9
movq -0x180(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x43f0
jmp 0x568de
leaq -0xb8(%rbp), %rdi
callq 0x4688
jmp 0x56909
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x4688
jmp 0x56cec
movq -0x170(%rbp), %rax
cmpq $0x0, 0x30(%rax)
je 0x56a58
movq -0x180(%rbp), %rdi
leaq 0x394bf(%rip), %rsi     # 0x8fde8
callq 0x42e0
jmp 0x56930
movq -0x170(%rbp), %rax
cmpq $0x9, 0x8(%rax)
ja 0x569df
movq -0x170(%rbp), %rax
movl 0x4(%rax), %edx
movl 0x8(%rax), %esi
leaq -0xf8(%rbp), %rdi
callq 0x56ef0
jmp 0x5695d
leaq 0x394b7(%rip), %rdx     # 0x8fe1b
leaq -0xd8(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x15ed0
jmp 0x56979
movq -0x180(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x43f0
jmp 0x5698e
leaq -0xd8(%rbp), %rdi
callq 0x4688
leaq -0xf8(%rbp), %rdi
callq 0x4688
jmp 0x56a1a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x569ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x4688
leaq -0xf8(%rbp), %rdi
callq 0x4688
jmp 0x56cec
movq -0x170(%rbp), %rax
movq 0x8(%rax), %rdx
leaq 0x393fe(%rip), %rsi     # 0x8fdef
xorl %eax, %eax
leaq -0x60(%rbp), %rdi
movq %rdi, -0x198(%rbp)
callq 0x40d0
movq -0x180(%rbp), %rdi
movq -0x198(%rbp), %rsi
callq 0x42e0
jmp 0x56a18
jmp 0x56a1a
movq -0x170(%rbp), %rax
movq 0x30(%rax), %rdx
leaq 0x393cd(%rip), %rsi     # 0x8fdf9
xorl %eax, %eax
leaq -0x60(%rbp), %rdi
movq %rdi, -0x1a0(%rbp)
callq 0x40d0
movq -0x180(%rbp), %rdi
movq -0x1a0(%rbp), %rsi
callq 0x42e0
jmp 0x56a53
jmp 0x56c9c
movq -0x170(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x56b01
movq -0x170(%rbp), %rax
cmpq $0x9, 0x8(%rax)
ja 0x56ad0
movq -0x170(%rbp), %rax
leaq -0x60(%rbp), %rcx
movq %rcx, -0x1a8(%rbp)
movl 0x4(%rax), %edx
movl 0x8(%rax), %esi
leaq -0x118(%rbp), %rdi
callq 0x56ef0
jmp 0x56a9e
leaq -0x118(%rbp), %rdi
callq 0x4180
movq -0x1a8(%rbp), %rdi
movq %rax, %rdx
leaq 0x39f96(%rip), %rsi     # 0x90a51
movb $0x0, %al
callq 0x40d0
leaq -0x118(%rbp), %rdi
callq 0x4688
jmp 0x56aed
movq -0x170(%rbp), %rax
leaq -0x60(%rbp), %rdi
movq 0x8(%rax), %rdx
leaq 0x39319(%rip), %rsi     # 0x8fdff
movb $0x0, %al
callq 0x40d0
movq -0x180(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x42e0
jmp 0x56aff
jmp 0x56b01
movq -0x170(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x56c50
movq -0x170(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x593d0
testb $0x1, %al
jne 0x56c50
movq -0x170(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x120(%rbp)
movq -0x120(%rbp), %rdi
callq 0x593f0
movq %rax, -0x128(%rbp)
movq -0x120(%rbp), %rdi
callq 0x344a0
movq %rax, -0x130(%rbp)
leaq -0x128(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x344f0
testb $0x1, %al
jne 0x56b7f
jmp 0x56c4e
leaq -0x128(%rbp), %rdi
callq 0x39f20
movq -0x180(%rbp), %rdi
movq %rax, -0x138(%rbp)
movq -0x138(%rbp), %rsi
callq 0x43f0
jmp 0x56ba7
movq -0x138(%rbp), %rax
cmpq $0x9, 0x20(%rax)
ja 0x56c0c
leaq -0x60(%rbp), %rax
movq %rax, -0x1b0(%rbp)
movq -0x138(%rbp), %rax
movl 0x20(%rax), %esi
leaq -0x158(%rbp), %rdi
xorl %edx, %edx
callq 0x56ef0
jmp 0x56bda
leaq -0x158(%rbp), %rdi
callq 0x4180
movq -0x1b0(%rbp), %rdi
movq %rax, %rdx
leaq 0x39212(%rip), %rsi     # 0x8fe09
movb $0x0, %al
callq 0x40d0
leaq -0x158(%rbp), %rdi
callq 0x4688
jmp 0x56c29
leaq -0x60(%rbp), %rdi
movq -0x138(%rbp), %rax
movq 0x20(%rax), %rdx
leaq 0x391ee(%rip), %rsi     # 0x8fe10
movb $0x0, %al
callq 0x40d0
movq -0x180(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x42e0
jmp 0x56c3b
jmp 0x56c3d
leaq -0x128(%rbp), %rdi
callq 0x3a9a0
jmp 0x56b63
jmp 0x56c50
movq $0x0, -0x160(%rbp)
movq -0x170(%rbp), %rcx
movq -0x160(%rbp), %rax
cmpq 0x28(%rcx), %rax
jae 0x56c9a
movq -0x180(%rbp), %rdi
leaq 0x386f1(%rip), %rsi     # 0x8f36e
callq 0x42e0
jmp 0x56c84
jmp 0x56c86
movq -0x160(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x160(%rbp)
jmp 0x56c5b
jmp 0x56c9c
jmp 0x56c9e
movq -0x180(%rbp), %rdi
leaq 0x395bc(%rip), %rsi     # 0x90268
callq 0x42e0
jmp 0x56cb3
movq -0x18(%rbp), %rsi
leaq 0x706a2(%rip), %rdi     # 0xc7360
callq 0x17210
movq -0x180(%rbp), %rsi
movq %rax, %rdi
callq 0x4060
jmp 0x56cd4
movb $0x1, -0x61(%rbp)
testb $0x1, -0x61(%rbp)
jne 0x56cea
movq -0x180(%rbp), %rdi
callq 0x4688
jmp 0x56cfa
movq -0x180(%rbp), %rdi
callq 0x4688
jmp 0x56d0a
movq -0x178(%rbp), %rax
addq $0x1b0, %rsp            # imm = 0x1B0
popq %rbp
retq
movq -0x70(%rbp), %rdi
callq 0x45e0
nopw %cs:(%rax,%rax)