// File: acliusBackHome[P]kamaya/dist/ParseType.cpp
// Function: ParseType::init()
void ParseType::init() {
//    T_UNKNOWN = 0,
//    T_BOOL = 1,
//    T_CHAR = 2,
//    T_SHORT = 3,
//    T_INT = 4,
//    T_LONG = 5,
//    T_FLOAT = 6,
//    T_DOUBLE = 7,
//    T_ENUM = 8,
//    T_VOID = 9,
    vector<ParseType> bases;
    bases.emplace_back(T_UNKNOWN);
    bases.emplace_back(T_BOOL);
    bases.emplace_back(T_CHAR);
    bases.emplace_back(T_SHORT);
    bases.emplace_back(T_INT);
    bases.emplace_back(T_LONG);
    bases.emplace_back(T_FLOAT);
    bases.emplace_back(T_DOUBLE);
    bases.emplace_back(T_ENUM);
    bases.emplace_back(T_VOID);
    for (const auto &each : bases) {
        type2id[each] = id2type.size();
        id2info.emplace_back(get_base_type_name((BaseType) id2type.size(), 0));
        id2type.emplace_back(each);
    }

    // 初始化可进行的自动类型转换
    // 普通运算
    for (size_t i = T_BOOL; i <= T_DOUBLE; ++i) {
        // 单目运算符
        for(size_t j = E_NOT; i <= E_BIT_NOT; ++i) {
            op_able.insert(pair<OpAble, size_t>(OpAble((ExpressionType)j, j, 0), j));
        }
        // 双目运算符, 只有相同类型的运算, 不同类型的运算可以通过搜索得知
        for (size_t j = E_ADD; j <= E_POW; ++j) {
            op_able.insert(pair<OpAble, size_t>(OpAble((ExpressionType) j, i, i), i));
        }
        // undefined表示可以直接自动类型转换
        for (size_t j = T_BOOL; j <= T_DOUBLE; ++j) {
            op_able.insert(pair<OpAble, size_t>(OpAble(E_UNDEFINED, i, j), j));
            // 赋值运算符赋值后的返回值是i
            op_able.insert(pair<OpAble, size_t>(OpAble(E_ASSIGN, i, j), i));
        }
    }
    // 逻辑运算符运算
    for (size_t i = E_LOGIC_OR; i <= E_LE; ++i) {
        op_able.insert(pair<OpAble, size_t>(OpAble((ExpressionType) i, T_BOOL, T_BOOL), T_BOOL));
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x300, %rsp            # imm = 0x300
leaq -0x18(%rbp), %rdi
movq %rdi, -0x258(%rbp)
callq 0x591a0
movq -0x258(%rbp), %rdi
movl $0x0, -0x1c(%rbp)
leaq -0x1c(%rbp), %rsi
callq 0x594c0
jmp 0x57784
movl $0x1, -0x30(%rbp)
leaq -0x18(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x594c0
jmp 0x5779a
movl $0x2, -0x34(%rbp)
leaq -0x18(%rbp), %rdi
leaq -0x34(%rbp), %rsi
callq 0x594c0
jmp 0x577b0
movl $0x3, -0x38(%rbp)
leaq -0x18(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x594c0
jmp 0x577c6
movl $0x4, -0x3c(%rbp)
leaq -0x18(%rbp), %rdi
leaq -0x3c(%rbp), %rsi
callq 0x594c0
jmp 0x577dc
movl $0x5, -0x40(%rbp)
leaq -0x18(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x594c0
jmp 0x577f2
movl $0x6, -0x44(%rbp)
leaq -0x18(%rbp), %rdi
leaq -0x44(%rbp), %rsi
callq 0x594c0
jmp 0x57808
movl $0x7, -0x48(%rbp)
leaq -0x18(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x594c0
jmp 0x5781e
movl $0x8, -0x4c(%rbp)
leaq -0x18(%rbp), %rdi
leaq -0x4c(%rbp), %rsi
callq 0x594c0
jmp 0x57834
movl $0x9, -0x50(%rbp)
leaq -0x18(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x594c0
jmp 0x5784a
leaq -0x18(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rdi
callq 0x59a30
movq %rax, -0x60(%rbp)
movq -0x58(%rbp), %rdi
callq 0x59a60
movq %rax, -0x68(%rbp)
leaq -0x60(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x59a90
testb $0x1, %al
jne 0x57882
jmp 0x5795b
leaq -0x60(%rbp), %rdi
callq 0x59ad0
movq %rax, -0x70(%rbp)
leaq 0x6fab2(%rip), %rdi     # 0xc7348
callq 0x59490
movq %rax, -0x268(%rbp)
movq -0x70(%rbp), %rsi
leaq 0x6fa6b(%rip), %rdi     # 0xc7318
callq 0x59630
movq %rax, -0x260(%rbp)
jmp 0x578bb
movq -0x260(%rbp), %rax
movq -0x268(%rbp), %rcx
movq %rcx, (%rax)
leaq 0x6fa75(%rip), %rdi     # 0xc7348
callq 0x59490
movl %eax, %esi
leaq -0x90(%rbp), %rdi
xorl %edx, %edx
callq 0x56ef0
jmp 0x578ea
leaq 0x6fa6f(%rip), %rdi     # 0xc7360
leaq -0x90(%rbp), %rsi
callq 0x2bda0
jmp 0x578ff
leaq -0x90(%rbp), %rdi
callq 0x4688
movq -0x70(%rbp), %rsi
leaq 0x6fa32(%rip), %rdi     # 0xc7348
callq 0x599a0
jmp 0x5791d
jmp 0x5791f
leaq -0x60(%rbp), %rdi
callq 0x59af0
jmp 0x5786c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x57d57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x90(%rbp), %rdi
callq 0x4688
jmp 0x57d57
movq $0x1, -0x98(%rbp)
cmpq $0x7, -0x98(%rbp)
ja 0x57c6b
movq $0xb, -0xa0(%rbp)
cmpq $0x10, -0x98(%rbp)
ja 0x57a41
movl -0xa0(%rbp), %eax
movl %eax, -0xdc(%rbp)
movl $0x0, -0xe0(%rbp)
leaq -0xd8(%rbp), %rdi
movq %rdi, -0x278(%rbp)
leaq -0xdc(%rbp), %rsi
leaq -0xa0(%rbp), %rdx
movq %rdx, -0x270(%rbp)
leaq -0xe0(%rbp), %rcx
callq 0x59b10
movq -0x278(%rbp), %rsi
movq -0x270(%rbp), %rdx
leaq -0xc0(%rbp), %rdi
callq 0x59320
jmp 0x579ee
leaq 0x6f9b3(%rip), %rdi     # 0xc73a8
leaq -0xc0(%rbp), %rsi
callq 0x592a0
movb %dl, -0x281(%rbp)
movq %rax, -0x280(%rbp)
jmp 0x57a10
movb -0x281(%rbp), %al
movq -0x280(%rbp), %rcx
movq %rcx, -0xf0(%rbp)
movb %al, -0xe8(%rbp)
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x5797f
movq $0x5, -0xf8(%rbp)
cmpq $0xa, -0xf8(%rbp)
ja 0x57b00
movl -0xf8(%rbp), %eax
movl %eax, -0x134(%rbp)
leaq -0x130(%rbp), %rdi
movq %rdi, -0x298(%rbp)
leaq -0x134(%rbp), %rsi
leaq -0x98(%rbp), %rcx
movq %rcx, -0x290(%rbp)
movq %rcx, %rdx
callq 0x592e0
movq -0x298(%rbp), %rsi
movq -0x290(%rbp), %rdx
leaq -0x118(%rbp), %rdi
callq 0x59320
jmp 0x57aad
leaq 0x6f8f4(%rip), %rdi     # 0xc73a8
leaq -0x118(%rbp), %rsi
callq 0x592a0
movb %dl, -0x2a1(%rbp)
movq %rax, -0x2a0(%rbp)
jmp 0x57acf
movb -0x2a1(%rbp), %al
movq -0x2a0(%rbp), %rcx
movq %rcx, -0x148(%rbp)
movb %al, -0x140(%rbp)
movq -0xf8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xf8(%rbp)
jmp 0x57a4c
movq $0x1, -0x150(%rbp)
cmpq $0x7, -0x150(%rbp)
ja 0x57c52
movl $0x0, -0x18c(%rbp)
leaq -0x188(%rbp), %rdi
movq %rdi, -0x2b8(%rbp)
leaq -0x18c(%rbp), %rsi
leaq -0x98(%rbp), %rdx
leaq -0x150(%rbp), %rcx
movq %rcx, -0x2b0(%rbp)
callq 0x592e0
movq -0x2b8(%rbp), %rsi
movq -0x2b0(%rbp), %rdx
leaq -0x170(%rbp), %rdi
callq 0x59320
jmp 0x57b6e
leaq 0x6f833(%rip), %rdi     # 0xc73a8
leaq -0x170(%rbp), %rsi
callq 0x592a0
movb %dl, -0x2c1(%rbp)
movq %rax, -0x2c0(%rbp)
jmp 0x57b90
movb -0x2c1(%rbp), %al
movq -0x2c0(%rbp), %rcx
movq %rcx, -0x1a0(%rbp)
movb %al, -0x198(%rbp)
movl $0x19, -0x1dc(%rbp)
leaq -0x1d8(%rbp), %rdi
movq %rdi, -0x2d8(%rbp)
leaq -0x1dc(%rbp), %rsi
leaq -0x98(%rbp), %rdx
movq %rdx, -0x2d0(%rbp)
leaq -0x150(%rbp), %rcx
callq 0x592e0
movq -0x2d8(%rbp), %rsi
movq -0x2d0(%rbp), %rdx
leaq -0x1c0(%rbp), %rdi
callq 0x59320
jmp 0x57bff
leaq 0x6f7a2(%rip), %rdi     # 0xc73a8
leaq -0x1c0(%rbp), %rsi
callq 0x592a0
movb %dl, -0x2e1(%rbp)
movq %rax, -0x2e0(%rbp)
jmp 0x57c21
movb -0x2e1(%rbp), %al
movq -0x2e0(%rbp), %rcx
movq %rcx, -0x1f0(%rbp)
movb %al, -0x1e8(%rbp)
movq -0x150(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x150(%rbp)
jmp 0x57b0b
jmp 0x57c54
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x57966
movq $0x11, -0x1f8(%rbp)
cmpq $0x18, -0x1f8(%rbp)
ja 0x57d45
movl -0x1f8(%rbp), %eax
movl %eax, -0x234(%rbp)
movl $0x1, -0x238(%rbp)
movl $0x1, -0x23c(%rbp)
leaq -0x230(%rbp), %rdi
movq %rdi, -0x2f0(%rbp)
leaq -0x234(%rbp), %rsi
leaq -0x238(%rbp), %rdx
leaq -0x23c(%rbp), %rcx
callq 0x59b50
movq -0x2f0(%rbp), %rsi
movl $0x1, -0x240(%rbp)
leaq -0x218(%rbp), %rdi
leaq -0x240(%rbp), %rdx
callq 0x59b90
jmp 0x57cf2
leaq 0x6f6af(%rip), %rdi     # 0xc73a8
leaq -0x218(%rbp), %rsi
callq 0x592a0
movb %dl, -0x2f9(%rbp)
movq %rax, -0x2f8(%rbp)
jmp 0x57d14
movb -0x2f9(%rbp), %al
movq -0x2f8(%rbp), %rcx
movq %rcx, -0x250(%rbp)
movb %al, -0x248(%rbp)
movq -0x1f8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x1f8(%rbp)
jmp 0x57c76
leaq -0x18(%rbp), %rdi
callq 0x591c0
addq $0x300, %rsp            # imm = 0x300
popq %rbp
retq
leaq -0x18(%rbp), %rdi
callq 0x591c0
movq -0x28(%rbp), %rdi
callq 0x45e0
nopl (%rax)