// File: /workspace/github_cpp_makefile_star2_O2/acliusBackHome[P]kamaya/dist/ParseExpression.cpp
// Function: ParseExpression::operator<(ParseExpression const&) const
bool ParseExpression::operator<(const ParseExpression &other) const {
    if (expr_type < other.expr_type) {
        return true;
    } else if (other.expr_type < expr_type) {
        return false;
    }
    if (ret_type_id < other.ret_type_id) {
        return true;
    } else if (ret_type_id < other.ret_type_id) {
        return false;
    }
    switch (expr_type) {
        case E_UNDEFINED:
            break;
        case E_CONST: {
            const ParseConstant &value1 = *(ParseConstant *) child[0],
                    &value2 = *(ParseConstant *) other.child[0];
            if (value1 < value2) {
                return true;
            } else if (value2 < value1) {
                return false;
            }
            break;
        }
        case E_ADD:
        case E_SUB:
        case E_MUL:
        case E_POW:
        case E_MOD:
        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_GET_ITEM:
        case E_DIV: {
            for (size_t i = 0; i < 2; ++i) {
                if (child[i] < other.child[i]) {
                    return true;
                } else if (child[i] > other.child[i]) {
                    return false;
                }
            }
            break;
        }
        case E_ADR:
        case E_PTR:
        case E_NEG:
        case E_POS:
        case E_BIT_NOT:
        case E_NOT: {
            if (child[0] < other.child[0]) {
                return true;
            } else if (child[0] > other.child[0]) {
                return false;
            }
            break;
        }
        case E_FUN: {
            auto &this_fun_ptrs = *((DecFuncPtrList *)(child[0])),
                    &that_fun_ptrs = *((DecFuncPtrList *)(child[1]));
            string this_func_symbol = (this_fun_ptrs[0])->get_symbol(),
                that_func_symbol = (that_fun_ptrs[0])->get_symbol();
            if (this_func_symbol < that_func_symbol) {
                return true;
            } else if (that_func_symbol < this_func_symbol) {
                return false;
            }
            break;
        }
        case E_VAR: {
            ParseVariable &this_var = *(ParseVariable *) child[0],
                    &that_var = *(ParseVariable *) (other.child[0]);
            if (this_var < that_var) {
                return true;
            } else if (that_var < this_var) {
                return false;
            }
            break;
        }
    }
    return false;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x40, %rsp
movl 0x28(%rdi), %eax
movl 0x28(%rsi), %ecx
cmpl %ecx, %eax
jge 0x25019
movb $0x1, %al
jmp 0x2501d
jle 0x25026
xorl %eax, %eax
addq $0x40, %rsp
popq %rbx
popq %r14
popq %rbp
retq
movq 0x20(%rdi), %rcx
cmpq 0x20(%rsi), %rcx
jb 0x25015
decl %eax
cmpl $0x18, %eax
ja 0x2501b
leaq 0x16156(%rip), %rcx     # 0x3b194
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
xorl %ecx, %ecx
xorl %eax, %eax
cmpq $0x2, %rcx
je 0x2501b
movq (%rdi,%rcx,8), %rdx
movq (%rsi,%rcx,8), %r8
cmpq %r8, %rdx
jb 0x25015
incq %rcx
cmpq %r8, %rdx
jbe 0x2504b
jmp 0x2501d
movq (%rdi), %rax
cmpq (%rsi), %rax
setb %al
jmp 0x2501d
movq (%rdi), %rbx
movq (%rsi), %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x27eca
movl %eax, %ecx
movb $0x1, %al
testb %cl, %cl
jne 0x2501d
movq %r14, %rdi
movq %rbx, %rsi
callq 0x27eca
jmp 0x2501b
movq (%rdi), %rbx
movq (%rsi), %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2753a
movl %eax, %ecx
movb $0x1, %al
testb %cl, %cl
jne 0x2501d
movq %r14, %rdi
movq %rbx, %rsi
callq 0x2753a
jmp 0x2501b
movq (%rdi), %rax
movq 0x8(%rdi), %rbx
movq (%rax), %rax
movq (%rax), %rsi
leaq -0x30(%rbp), %rdi
callq 0x276f6
movq (%rbx), %rax
movq (%rax), %rsi
leaq -0x50(%rbp), %rdi
callq 0x276f6
leaq -0x30(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x12250
testb %al, %al
je 0x25113
leaq -0x50(%rbp), %rdi
callq 0x4598
leaq -0x30(%rbp), %rdi
callq 0x4598
jmp 0x25015
leaq -0x50(%rbp), %rbx
leaq -0x30(%rbp), %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x12250
movq %rbx, %rdi
callq 0x4598
movq %r14, %rdi
callq 0x4598
jmp 0x2501b
movq %rax, %rbx
leaq -0x30(%rbp), %rdi
callq 0x4598
movq %rbx, %rdi
callq 0x4500
nop