// File: /workspace/github_cpp_makefile_star2_O3/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 %r15
pushq %r14
pushq %rbx
subq $0x48, %rsp
movl 0x28(%rdi), %eax
movl 0x28(%rsi), %ecx
movb $0x1, %bl
cmpl %ecx, %eax
jl 0x2bab0
jle 0x2ba61
xorl %ebx, %ebx
jmp 0x2bab0
movq 0x20(%rdi), %rcx
cmpq 0x20(%rsi), %rcx
jb 0x2bab0
decl %eax
cmpl $0x18, %eax
ja 0x2ba5d
leaq 0x1a783(%rip), %rcx     # 0x461fc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movb $0x1, %al
xorl %ecx, %ecx
movq (%rsi,%rcx,8), %rdx
cmpq %rdx, (%rdi,%rcx,8)
jne 0x2baa0
movl $0x1, %ecx
testb $0x1, %al
movl $0x0, %eax
jne 0x2ba86
jmp 0x2ba5d
setb %bl
jmp 0x2bab0
movq (%rdi), %rax
movq (%rsi), %rcx
cmpq %rcx, %rax
jae 0x2ba5d
movl %ebx, %eax
addq $0x48, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movq (%rdi), %r14
movq (%rsi), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x2f3fc
testb %al, %al
jne 0x2bab0
movq %r15, %rdi
movq %r14, %rsi
callq 0x2f3fc
jmp 0x2baff
movq (%rdi), %r14
movq (%rsi), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x2e77c
testb %al, %al
jne 0x2bab0
movq %r15, %rdi
movq %r14, %rsi
callq 0x2e77c
testb %al, %al
jmp 0x2ba5d
movq (%rdi), %rax
movq 0x8(%rdi), %rbx
movq (%rax), %rax
movq (%rax), %rsi
leaq -0x38(%rbp), %rdi
callq 0x2e974
movq (%rbx), %rax
movq (%rax), %rsi
leaq -0x58(%rbp), %rdi
callq 0x2e974
leaq -0x38(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x2d870
movl %eax, %ebx
movb $0x1, %r14b
testb %al, %al
jne 0x2bb51
leaq -0x58(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x2d870
movl %eax, %r14d
leaq -0x48(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2bb63
callq 0x42b0
leaq -0x28(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2bb75
callq 0x42b0
testb %r14b, %r14b
je 0x2ba5d
jmp 0x2bab0
movq %rax, %rbx
leaq -0x28(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2bb98
callq 0x42b0
movq %rbx, %rdi
callq 0x4560