// File: 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
subq $0xc0, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xa8(%rbp)
movl 0x28(%rax), %eax
movq -0x18(%rbp), %rcx
cmpl 0x28(%rcx), %eax
jge 0x62503
movb $0x1, -0x1(%rbp)
jmp 0x627eb
movq -0xa8(%rbp), %rcx
movq -0x18(%rbp), %rax
movl 0x28(%rax), %eax
cmpl 0x28(%rcx), %eax
jge 0x6251f
movb $0x0, -0x1(%rbp)
jmp 0x627eb
jmp 0x62521
movq -0xa8(%rbp), %rax
movq 0x20(%rax), %rax
movq -0x18(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jae 0x6253f
movb $0x1, -0x1(%rbp)
jmp 0x627eb
movq -0xa8(%rbp), %rax
movq 0x20(%rax), %rax
movq -0x18(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jae 0x6255d
movb $0x0, -0x1(%rbp)
jmp 0x627eb
jmp 0x6255f
movq -0xa8(%rbp), %rax
movl 0x28(%rax), %eax
movq %rax, -0xb0(%rbp)
subq $0x19, %rax
ja 0x627e7
movq -0xb0(%rbp), %rax
leaq 0x2dbf0(%rip), %rcx     # 0x90178
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x627e7
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x69cf0
testb $0x1, %al
jne 0x625c2
jmp 0x625cb
movb $0x1, -0x1(%rbp)
jmp 0x627eb
movq -0x28(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x69cf0
testb $0x1, %al
jne 0x625de
jmp 0x625e7
movb $0x0, -0x1(%rbp)
jmp 0x627eb
jmp 0x625e9
jmp 0x627e7
movq $0x0, -0x30(%rbp)
cmpq $0x2, -0x30(%rbp)
jae 0x6265b
movq -0xa8(%rbp), %rax
movq -0x30(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq -0x18(%rbp), %rcx
movq -0x30(%rbp), %rdx
cmpq (%rcx,%rdx,8), %rax
jae 0x62623
movb $0x1, -0x1(%rbp)
jmp 0x627eb
movq -0xa8(%rbp), %rax
movq -0x30(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq -0x18(%rbp), %rcx
movq -0x30(%rbp), %rdx
cmpq (%rcx,%rdx,8), %rax
jbe 0x62649
movb $0x0, -0x1(%rbp)
jmp 0x627eb
jmp 0x6264b
jmp 0x6264d
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x625f6
jmp 0x627e7
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x6267c
movb $0x1, -0x1(%rbp)
jmp 0x627eb
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
cmpq (%rcx), %rax
jbe 0x62698
movb $0x0, -0x1(%rbp)
jmp 0x627eb
jmp 0x6269a
jmp 0x627e7
movq -0xa8(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x38(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
movq %rsi, -0xb8(%rbp)
callq 0x65250
movq (%rax), %rsi
leaq -0x60(%rbp), %rdi
callq 0x68bc0
movq -0xb8(%rbp), %rsi
movq -0x40(%rbp), %rdi
callq 0x65250
movq (%rax), %rsi
leaq -0x80(%rbp), %rdi
callq 0x68bc0
jmp 0x626f3
leaq -0x60(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x28ae0
testb $0x1, %al
jne 0x62706
jmp 0x62736
movb $0x1, -0x1(%rbp)
movl $0x1, -0x90(%rbp)
jmp 0x62765
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x4688
jmp 0x627f9
leaq -0x80(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x28ae0
testb $0x1, %al
jne 0x62749
jmp 0x62759
movb $0x0, -0x1(%rbp)
movl $0x1, -0x90(%rbp)
jmp 0x62765
jmp 0x6275b
movl $0x2, -0x90(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x4688
leaq -0x60(%rbp), %rdi
callq 0x4688
movl -0x90(%rbp), %eax
subl $0x1, %eax
je 0x627eb
jmp 0x62784
jmp 0x627e7
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x98(%rbp)
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xa0(%rbp)
movq -0x98(%rbp), %rdi
movq -0xa0(%rbp), %rsi
callq 0x687d0
testb $0x1, %al
jne 0x627be
jmp 0x627c4
movb $0x1, -0x1(%rbp)
jmp 0x627eb
movq -0xa0(%rbp), %rdi
movq -0x98(%rbp), %rsi
callq 0x687d0
testb $0x1, %al
jne 0x627dd
jmp 0x627e3
movb $0x0, -0x1(%rbp)
jmp 0x627eb
jmp 0x627e5
jmp 0x627e7
movb $0x0, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0xc0, %rsp
popq %rbp
retq
movq -0x88(%rbp), %rdi
callq 0x45e0
nopw %cs:(%rax,%rax)