// File: /workspace/github_cpp_makefile_star2_O1/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 0x2c383
jle 0x2c2fa
xorl %ebx, %ebx
jmp 0x2c383
movq 0x20(%rdi), %rcx
cmpq 0x20(%rsi), %rcx
jb 0x2c383
decl %eax
cmpl $0x18, %eax
ja 0x2c2f3
leaq 0x1aeea(%rip), %rcx     # 0x471fc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq (%rdi), %rdx
movq (%rsi), %rcx
cmpq %rcx, %rdx
jae 0x2c32c
movb $0x1, %bl
xorl %eax, %eax
jmp 0x2c37b
movq 0x8(%rdi), %rdi
movq 0x8(%rsi), %rsi
xorl %r9d, %r9d
xorl %r8d, %r8d
movl %r9d, %eax
cmpq %rcx, %rdx
seta %bl
orb %r9b, %bl
testb $0x1, %bl
jne 0x2c36b
movb $0x1, %r9b
movq %rsi, %rcx
movq %rdi, %rdx
movl %eax, %r8d
cmpq %rsi, %rdi
jae 0x2c33a
jmp 0x2c378
movq (%rdi), %rax
movq (%rsi), %rcx
cmpq %rcx, %rax
jae 0x2c2f3
jmp 0x2c383
cmpq %rcx, %rdx
movzbl %r8b, %ecx
movzbl %al, %eax
cmoval %ecx, %eax
xorb $0x1, %bl
testb $0x1, %al
jne 0x2c2f3
andb $0x1, %bl
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 0x2fcc8
movl %eax, %ebx
testb %al, %al
jne 0x2c383
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fcc8
jmp 0x2c3d9
movq (%rdi), %r14
movq (%rsi), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x2f042
movl %eax, %ebx
testb %al, %al
jne 0x2c383
movq %r15, %rdi
movq %r14, %rsi
callq 0x2f042
testb %al, %al
je 0x2c2f3
jmp 0x2c383
movq (%rdi), %rax
movq 0x8(%rdi), %rbx
movq (%rax), %rax
movq (%rax), %rsi
leaq -0x38(%rbp), %rdi
callq 0x2f238
movq (%rbx), %rax
movq (%rax), %rsi
leaq -0x58(%rbp), %rdi
callq 0x2f238
leaq -0x38(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x2e140
movl %eax, %ebx
movb $0x1, %r14b
testb %al, %al
jne 0x2c42e
leaq -0x58(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x2e140
movl %eax, %r14d
leaq -0x48(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2c440
callq 0x42b0
leaq -0x28(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2c452
callq 0x42b0
testb %r14b, %r14b
je 0x2c2f3
jmp 0x2c383
movq %rax, %rbx
leaq -0x28(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2c475
callq 0x42b0
movq %rbx, %rdi
callq 0x4560
nop