// File: acliusBackHome[P]kamaya/dist/ParseExpression.cpp
// Function: ParseExpression::get_info[abi:cxx11]() const
string ParseExpression::get_info() const {
    char buff[64];
    string res = "ParseExpression-";
    if (!expr_id) {
        update(*this);
    }
    sprintf(buff, "%zu", expr_id);
    res += buff;
    res += " {";
    switch (expr_type) {
        case E_UNDEFINED:
            return res + "undefined }";
        case E_ADD:
        case E_SUB:
        case E_MUL:
        case E_MOD:
        case E_POW:
        case E_LOGIC_OR:
        case E_LOGIC_AND:
        case E_G:
        case E_GE:
        case E_EQUAL:
        case E_NE:
        case E_L:
        case E_LE:
        case E_ASSIGN:
        case E_DIV: {
            const ParseExpression &expr1 = get_expression(child[0]),
                    &expr2 = get_expression(child[1]);
            sprintf(buff, "{ Expr-%zu ", child[0]);
            res += buff;
            res += get_expr_type_name(expr_type);
            sprintf(buff, " Expr-%zu }, ", child[1]);
            res += buff;
            break;
        }
        case E_POS:
        case E_ADR:
        case E_PTR:
        case E_NEG:
        case E_BIT_NOT:
        case E_NOT: {
            res += get_expr_type_name(expr_type);
            sprintf(buff, " { Expr-%zu }", child[0]);
            res += buff;
            break;
        }
        case E_FUN: {
            const auto &func_ptrs = *(DecFuncPtrList *)(child[0]);
            res += "function:{ " + (func_ptrs[0])->get_symbol() + " }, ";
            break;
        }
        case E_VAR: {
            res += "variable:{ " + ((ParseVariable *) child[0])->get_info() + " }, ";
            break;
        }
        case E_CONST: {
            res += "constant: " + ((ParseConstant *) child[0])->get_info() + ", ";
            break;
        }
        case E_GET_ITEM: {
            const ParseExpression &expr1 = get_expression(child[0]),
                    &expr2 = get_expression(child[1]);
            sprintf(buff, "[] { Expr-%zu ", child[0]);
            res += buff;
            res += get_expr_type_name(expr_type);
            sprintf(buff, " Expr-%zu }, ", child[1]);
            res += buff;
            break;
        }
    }
    if (expr_type != E_CONST && is_const()) {
        res += "const_value: " + ((ParseConstant *) const_value)->get_info() + ", ";
    }
    res += "return_type: " + get_ret_type().get_info() + ", ";
    res += "address: " + to_string(get_address()) + "}";
    return res;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x3e0, %rsp            # imm = 0x3E0
movq %rdi, -0x370(%rbp)
movq %rdi, %rax
movq %rax, -0x368(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x360(%rbp)
leaq -0x71(%rbp), %rdi
movq %rdi, -0x358(%rbp)
callq 0x45f0
movq -0x358(%rbp), %rdx
leaq 0x2fdec(%rip), %rsi     # 0x90249
leaq -0x70(%rbp), %rdi
callq 0x4450
jmp 0x60468
leaq -0x71(%rbp), %rdi
callq 0x4380
movq -0x360(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x604c0
movq -0x360(%rbp), %rdi
callq 0x60e20
jmp 0x6048d
jmp 0x604c0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x71(%rbp), %rdi
callq 0x4380
jmp 0x60e14
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x60e0b
movq -0x360(%rbp), %rax
movq 0x10(%rax), %rdx
leaq 0x2fd88(%rip), %rsi     # 0x9025a
xorl %eax, %eax
leaq -0x50(%rbp), %rdi
movq %rdi, -0x378(%rbp)
callq 0x40d0
movq -0x378(%rbp), %rsi
leaq -0x70(%rbp), %rdi
callq 0x42e0
jmp 0x604f6
leaq 0x2f8e8(%rip), %rsi     # 0x8fde5
leaq -0x70(%rbp), %rdi
callq 0x42e0
jmp 0x60508
movq -0x360(%rbp), %rax
movl 0x28(%rax), %eax
movq %rax, -0x380(%rbp)
subq $0x19, %rax
ja 0x60ade
movq -0x380(%rbp), %rax
leaq 0x2faa7(%rip), %rcx     # 0x8ffd8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x370(%rbp), %rdi
leaq 0x2fd16(%rip), %rdx     # 0x9025e
leaq -0x70(%rbp), %rsi
callq 0x162a0
jmp 0x60553
movl $0x1, -0x88(%rbp)
jmp 0x60df2
movq -0x360(%rbp), %rax
movq (%rax), %rdi
callq 0x60f30
movq %rax, -0x388(%rbp)
jmp 0x6057a
movq -0x360(%rbp), %rax
movq -0x388(%rbp), %rcx
movq %rcx, -0x90(%rbp)
movq 0x8(%rax), %rdi
callq 0x60f30
movq %rax, -0x390(%rbp)
jmp 0x605a1
movq -0x360(%rbp), %rax
movq -0x390(%rbp), %rcx
movq %rcx, -0x98(%rbp)
movq (%rax), %rdx
leaq 0x2fcec(%rip), %rsi     # 0x902ac
xorl %eax, %eax
leaq -0x50(%rbp), %rdi
movq %rdi, -0x398(%rbp)
callq 0x40d0
movq -0x398(%rbp), %rsi
leaq -0x70(%rbp), %rdi
callq 0x42e0
jmp 0x605e4
movq -0x360(%rbp), %rax
movl 0x28(%rax), %esi
leaq -0xb8(%rbp), %rdi
callq 0x60fc0
jmp 0x605fc
leaq -0x70(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x43f0
jmp 0x6060e
leaq -0xb8(%rbp), %rdi
callq 0x4688
movq -0x360(%rbp), %rax
movq 0x8(%rax), %rdx
leaq 0x2fc3e(%rip), %rsi     # 0x9026a
xorl %eax, %eax
leaq -0x50(%rbp), %rdi
movq %rdi, -0x3a0(%rbp)
callq 0x40d0
movq -0x3a0(%rbp), %rsi
leaq -0x70(%rbp), %rdi
callq 0x42e0
jmp 0x60650
jmp 0x60ade
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x4688
jmp 0x60e0b
movq -0x360(%rbp), %rax
movl 0x28(%rax), %esi
leaq -0xd8(%rbp), %rdi
callq 0x60fc0
jmp 0x6068d
leaq -0x70(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x43f0
jmp 0x6069f
leaq -0xd8(%rbp), %rdi
callq 0x4688
movq -0x360(%rbp), %rax
movq (%rax), %rdx
leaq 0x2fbbc(%rip), %rsi     # 0x90278
xorl %eax, %eax
leaq -0x50(%rbp), %rdi
movq %rdi, -0x3a8(%rbp)
callq 0x40d0
movq -0x3a8(%rbp), %rsi
leaq -0x70(%rbp), %rdi
callq 0x42e0
jmp 0x606e0
jmp 0x60ade
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x4688
jmp 0x60e0b
movq -0x360(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xe0(%rbp)
movq -0xe0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x16550
movq (%rax), %rsi
leaq -0x140(%rbp), %rdi
callq 0x68bc0
jmp 0x60737
leaq 0x2fb48(%rip), %rsi     # 0x90286
leaq -0x120(%rbp), %rdi
leaq -0x140(%rbp), %rdx
callq 0x15d60
jmp 0x60753
leaq 0x2fb19(%rip), %rdx     # 0x90273
leaq -0x100(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0x15ed0
jmp 0x6076f
leaq -0x70(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x43f0
jmp 0x60781
leaq -0x100(%rbp), %rdi
callq 0x4688
leaq -0x120(%rbp), %rdi
callq 0x4688
leaq -0x140(%rbp), %rdi
callq 0x4688
jmp 0x60ade
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x607f3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x607e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x4688
leaq -0x120(%rbp), %rdi
callq 0x4688
leaq -0x140(%rbp), %rdi
callq 0x4688
jmp 0x60e0b
movq -0x360(%rbp), %rax
movq (%rax), %rsi
leaq -0x1a0(%rbp), %rdi
callq 0x684c0
jmp 0x6081c
leaq 0x2fa6f(%rip), %rsi     # 0x90292
leaq -0x180(%rbp), %rdi
leaq -0x1a0(%rbp), %rdx
callq 0x15d60
jmp 0x60838
leaq 0x2fa34(%rip), %rdx     # 0x90273
leaq -0x160(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x15ed0
jmp 0x60854
leaq -0x70(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0x43f0
jmp 0x60866
leaq -0x160(%rbp), %rdi
callq 0x4688
leaq -0x180(%rbp), %rdi
callq 0x4688
leaq -0x1a0(%rbp), %rdi
callq 0x4688
jmp 0x60ade
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x608d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x608cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x4688
leaq -0x180(%rbp), %rdi
callq 0x4688
leaq -0x1a0(%rbp), %rdi
callq 0x4688
jmp 0x60e0b
movq -0x360(%rbp), %rax
movq (%rax), %rsi
leaq -0x200(%rbp), %rdi
callq 0x699d0
jmp 0x60901
leaq 0x2f996(%rip), %rsi     # 0x9029e
leaq -0x1e0(%rbp), %rdi
leaq -0x200(%rbp), %rdx
callq 0x15d60
jmp 0x6091d
leaq 0x2f148(%rip), %rdx     # 0x8fa6c
leaq -0x1c0(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0x15ed0
jmp 0x60939
leaq -0x70(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
callq 0x43f0
jmp 0x6094b
leaq -0x1c0(%rbp), %rdi
callq 0x4688
leaq -0x1e0(%rbp), %rdi
callq 0x4688
leaq -0x200(%rbp), %rdi
callq 0x4688
jmp 0x60ade
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x609bd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x609b1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0x4688
leaq -0x1e0(%rbp), %rdi
callq 0x4688
leaq -0x200(%rbp), %rdi
callq 0x4688
jmp 0x60e0b
movq -0x360(%rbp), %rax
movq (%rax), %rdi
callq 0x60f30
movq %rax, -0x3b0(%rbp)
jmp 0x609e6
movq -0x360(%rbp), %rax
movq -0x3b0(%rbp), %rcx
movq %rcx, -0x208(%rbp)
movq 0x8(%rax), %rdi
callq 0x60f30
movq %rax, -0x3b8(%rbp)
jmp 0x60a0d
movq -0x360(%rbp), %rax
movq -0x3b8(%rbp), %rcx
movq %rcx, -0x210(%rbp)
movq (%rax), %rdx
leaq 0x2f87d(%rip), %rsi     # 0x902a9
xorl %eax, %eax
leaq -0x50(%rbp), %rdi
movq %rdi, -0x3c0(%rbp)
callq 0x40d0
movq -0x3c0(%rbp), %rsi
leaq -0x70(%rbp), %rdi
callq 0x42e0
jmp 0x60a50
movq -0x360(%rbp), %rax
movl 0x28(%rax), %esi
leaq -0x230(%rbp), %rdi
callq 0x60fc0
jmp 0x60a68
leaq -0x70(%rbp), %rdi
leaq -0x230(%rbp), %rsi
callq 0x43f0
jmp 0x60a7a
leaq -0x230(%rbp), %rdi
callq 0x4688
movq -0x360(%rbp), %rax
movq 0x8(%rax), %rdx
leaq 0x2f7d2(%rip), %rsi     # 0x9026a
xorl %eax, %eax
leaq -0x50(%rbp), %rdi
movq %rdi, -0x3c8(%rbp)
callq 0x40d0
movq -0x3c8(%rbp), %rsi
leaq -0x70(%rbp), %rdi
callq 0x42e0
jmp 0x60abc
jmp 0x60ade
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x4688
jmp 0x60e0b
movq -0x360(%rbp), %rax
cmpl $0x3, 0x28(%rax)
je 0x60bf5
movq -0x360(%rbp), %rdi
callq 0x61790
movb %al, -0x3c9(%rbp)
jmp 0x60b03
movb -0x3c9(%rbp), %al
testb $0x1, %al
jne 0x60b12
jmp 0x60bf5
movq -0x360(%rbp), %rax
movq 0x18(%rax), %rsi
leaq -0x290(%rbp), %rdi
callq 0x699d0
jmp 0x60b2b
leaq 0x2f786(%rip), %rsi     # 0x902b8
leaq -0x270(%rbp), %rdi
leaq -0x290(%rbp), %rdx
callq 0x15d60
jmp 0x60b47
leaq 0x2ef1e(%rip), %rdx     # 0x8fa6c
leaq -0x250(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0x15ed0
jmp 0x60b63
leaq -0x70(%rbp), %rdi
leaq -0x250(%rbp), %rsi
callq 0x43f0
jmp 0x60b75
leaq -0x250(%rbp), %rdi
callq 0x4688
leaq -0x270(%rbp), %rdi
callq 0x4688
leaq -0x290(%rbp), %rdi
callq 0x4688
jmp 0x60bf5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x60be4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x60bd8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x4688
leaq -0x270(%rbp), %rdi
callq 0x4688
leaq -0x290(%rbp), %rdi
callq 0x4688
jmp 0x60e0b
movq -0x360(%rbp), %rdi
callq 0x61800
movq %rax, -0x3d8(%rbp)
jmp 0x60c0a
movq -0x3d8(%rbp), %rsi
leaq -0x2f0(%rbp), %rdi
callq 0x566e0
jmp 0x60c1f
leaq 0x2f6a0(%rip), %rsi     # 0x902c6
leaq -0x2d0(%rbp), %rdi
leaq -0x2f0(%rbp), %rdx
callq 0x15d60
jmp 0x60c3b
leaq 0x2ee2a(%rip), %rdx     # 0x8fa6c
leaq -0x2b0(%rbp), %rdi
leaq -0x2d0(%rbp), %rsi
callq 0x15ed0
jmp 0x60c57
leaq -0x70(%rbp), %rdi
leaq -0x2b0(%rbp), %rsi
callq 0x43f0
jmp 0x60c69
leaq -0x2b0(%rbp), %rdi
callq 0x4688
leaq -0x2d0(%rbp), %rdi
callq 0x4688
leaq -0x2f0(%rbp), %rdi
callq 0x4688
movq -0x360(%rbp), %rdi
callq 0x61e00
movq %rax, -0x3e0(%rbp)
jmp 0x60ca2
movq -0x3e0(%rbp), %rsi
leaq -0x350(%rbp), %rdi
callq 0x15db0
jmp 0x60cb7
leaq 0x2f616(%rip), %rsi     # 0x902d4
leaq -0x330(%rbp), %rdi
leaq -0x350(%rbp), %rdx
callq 0x15d60
jmp 0x60cd3
leaq 0x2f58e(%rip), %rdx     # 0x90268
leaq -0x310(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0x15ed0
jmp 0x60cef
leaq -0x70(%rbp), %rdi
leaq -0x310(%rbp), %rsi
callq 0x43f0
jmp 0x60d01
leaq -0x310(%rbp), %rdi
callq 0x4688
leaq -0x330(%rbp), %rdi
callq 0x4688
leaq -0x350(%rbp), %rdi
callq 0x4688
movq -0x370(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x4200
movl $0x1, -0x88(%rbp)
jmp 0x60df2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x60d8d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x60d81
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x2b0(%rbp), %rdi
callq 0x4688
leaq -0x2d0(%rbp), %rdi
callq 0x4688
leaq -0x2f0(%rbp), %rdi
callq 0x4688
jmp 0x60e0b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x60de4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x60dd8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x310(%rbp), %rdi
callq 0x4688
leaq -0x330(%rbp), %rdi
callq 0x4688
leaq -0x350(%rbp), %rdi
callq 0x4688
jmp 0x60e0b
leaq -0x70(%rbp), %rdi
callq 0x4688
movq -0x368(%rbp), %rax
addq $0x3e0, %rsp            # imm = 0x3E0
popq %rbp
retq
leaq -0x70(%rbp), %rdi
callq 0x4688
movq -0x80(%rbp), %rdi
callq 0x45e0
nopl (%rax)