// File: /workspace/github_cpp_makefile_star2_O2/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 0x27f53
jle 0x27eda
xorl %eax, %eax
jmp 0x27f53
pushq %rbp
movq %rsp, %rbp
cmpl $0x4, %ecx
ja 0x27f50
movl %ecx, %ecx
leaq 0x13818(%rip), %rdx     # 0x3b704
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq 0x8(%rdi), %rcx
movq 0x8(%rsi), %rdx
movq 0x8(%rcx), %rsi
movq 0x8(%rdx), %rdi
cmpq %rdi, %rsi
jb 0x27f52
ja 0x27f50
xorl %eax, %eax
cmpq %rax, %rsi
je 0x27f50
movq (%rcx), %rdi
movb (%rdi,%rax), %dil
movq (%rdx), %r8
movb (%r8,%rax), %r8b
incq %rax
cmpb %dil, %r8b
je 0x27f0e
setg %al
jmp 0x27f52
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 0x27f52
xorb $0x1, %cl
orb %dl, %cl
testb $0x1, %cl
je 0x27f52
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 0x27f50
jmp 0x27f52
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 0x27f52
jmp 0x27f50
movq 0x8(%rdi), %rax
movq 0x8(%rsi), %rcx
movq (%rax), %rax
movq (%rcx), %rcx
cmpq %rcx, %rax
setl %al
je 0x27f50
jmp 0x27f52
nop