// File: /workspace/github_cpp_makefile_star2_O1/acliusBackHome[P]kamaya/dist/ParseDeclaration.cpp
// Function: ParseConstant::operator<(ParseConstant const&) const
bool ParseConstant::operator<(const ParseConstant &other) const {
    if (type < other.type) {
        return true;
    } else if (other.type < type) {
        return false;
    }
    switch (type) {
        case C_STRING: {
            const string &this_value = *(string *) value, &that_value = *(string *) other.value;
            if (this_value.length() < that_value.length()) {
                return true;
            } else if (that_value.length() < this_value.length()) {
                return false;
            }
            for (size_t i = 0; i < this_value.length(); ++i) {
                if (this_value[i] < that_value[i]) {
                    return true;
                } else if (that_value[i] < this_value[i]) {
                    return false;
                }
            }
            break;
        }
        case C_SIGNED: {
            const long long &this_value = *(long long *) value, &that_value = *(long long *) other.value;
            if (this_value < that_value) {
                return true;
            } else if (that_value < this_value) {
                return false;
            }
            break;
        }
        case C_UNSIGNED: {
            const unsigned long long &this_value = *(unsigned long long *) value,
                    &that_value = *(unsigned long long *) other.value;
            if (this_value < that_value) {
                return true;
            } else if (that_value < this_value) {
                return false;
            }
            break;
        }
        case C_FLOAT: {
            const long double &this_value = *(long double *) value,
                    &that_value = *(long double *) other.value;
            if (this_value < that_value) {
                return true;
            } else if (that_value < this_value) {
                return false;
            }
            break;
        }
        case C_BOOL: {
            bool this_value = *(bool *) value,
                    that_value = *(bool *) other.value;
            if (!this_value && that_value) {
                return true;
            } else if (!that_value && this_value) {
                return false;
            }
            break;
        }
        case C_UNDEFINED:
            break;
    }
    return false;
}

// Assembly:
movl (%rdi), %ecx
movl (%rsi), %edx
movb $0x1, %al
cmpl %edx, %ecx
jl 0x2fd36
jle 0x2fcd8
xorl %eax, %eax
jmp 0x2fd36
pushq %rbp
movq %rsp, %rbp
cmpl $0x4, %ecx
ja 0x2fd33
movl %ecx, %eax
leaq 0x17a82(%rip), %rcx     # 0x4776c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x8(%rdi), %rdx
movq 0x8(%rsi), %rsi
movq 0x8(%rdx), %rax
movq 0x8(%rsi), %rdi
movb $0x1, %cl
cmpq %rdi, %rax
jae 0x2fd84
movb $0x1, %al
jmp 0x2fdb4
movq 0x8(%rdi), %rax
movb (%rax), %cl
movq 0x8(%rsi), %rax
movb (%rax), %dl
movl %edx, %eax
xorb $0x1, %al
orb %cl, %al
xorb $0x1, %al
testb $0x1, %al
jne 0x2fd35
xorb $0x1, %cl
orb %dl, %cl
testb $0x1, %cl
je 0x2fd35
xorl %eax, %eax
popq %rbp
andb $0x1, %al
retq
movq 0x8(%rdi), %rax
movq 0x8(%rsi), %rcx
movq (%rax), %rax
movq (%rcx), %rcx
cmpq %rcx, %rax
setb %al
je 0x2fd33
jmp 0x2fd35
movq 0x8(%rdi), %rax
movq 0x8(%rsi), %rcx
fldt (%rax)
fldt (%rcx)
fucomi %st(1), %st
seta %al
fxch %st(1)
fucompi %st(1), %st
fstp %st(0)
jne 0x2fd35
jmp 0x2fd33
movq 0x8(%rdi), %rax
movq 0x8(%rsi), %rcx
movq (%rax), %rax
movq (%rcx), %rcx
cmpq %rcx, %rax
setl %al
je 0x2fd33
jmp 0x2fd35
jbe 0x2fd8a
xorl %eax, %eax
jmp 0x2fdb4
testq %rax, %rax
je 0x2fdb2
movq (%rdx), %rdx
movq (%rsi), %rsi
xorl %edi, %edi
movb (%rdx,%rdi), %r8b
movb (%rsi,%rdi), %r9b
cmpb %r9b, %r8b
jl 0x2fd0a
jg 0x2fd86
incq %rdi
cmpq %rdi, %rax
jne 0x2fd97
xorl %ecx, %ecx
testb %cl, %cl
je 0x2fd33
jmp 0x2fd35
nop