// File: acliusBackHome[P]kamaya/dist/ParseType.cpp
// Function: ParseType::operator<(ParseType const&) const
bool ParseType::operator<(const ParseType &other) const {
    if (type_size < other.type_size) {
        return true;
    } else if (type_size > other.type_size) {
        return false;
    }
    if (base_type < other.base_type) {
        return true;
    } else if (base_type > other.base_type) {
        return false;
    }
    if (specifier < other.specifier) {
        return true;
    } else if (specifier > other.specifier) {
        return false;
    }
    if (lower_type < other.lower_type) {
        return true;
    } else if (lower_type > other.lower_type) {
        return false;
    }
    if (pointer_level < other.pointer_level) {
        return true;
    } else if (pointer_level > other.pointer_level) {
        return false;
    }
    if (array_size < other.array_size) {
        return true;
    } else if (array_size > other.array_size) {
        return false;
    }
    if (!fields && other.fields) {
        return true;
    } else if (fields && !other.fields) {
        return false;
    } else if (fields && other.fields) {
        if (fields->size() < other.fields->size()) {
            return true;
        } else if (fields->size() > other.fields->size()) {
            return false;
        }
        set<string> all_fields;
        // 字典比较遵循以下原则: 遍历字典: 对两者都有的键来说, 没有键的一方小
        // 同样键中, 值小的一方小
        for (const auto &each : *fields) {
            if (all_fields.find(each.first) == all_fields.end()) {
                all_fields.insert(each.first);
            }
        }
        for (const auto &each : *other.fields) {
            if (all_fields.find(each.first) == all_fields.end()) {
                all_fields.insert(each.first);
            }
        }
        for (const auto &each: all_fields) {
            auto iter_this = fields->find(each), iter_other = other.fields->find(each);
            if (iter_this == fields->end() && iter_other != other.fields->end()) {
                return true;
            } else if (iter_this != fields->end() && iter_other == other.fields->end()) {
                return false;
            } else {
                // 到这一步一定都存在该键值
                if (iter_this->second < iter_other->second) {
                    return true;
                } else if (iter_this->second > iter_other->second) {
                    return false;
                }
            }
        }
    }
    // 到了这一步说明相等
    return false;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1a0, %rsp            # imm = 0x1A0
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x138(%rbp)
movq 0x20(%rax), %rax
movq -0x18(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jae 0x57da5
movb $0x1, -0x1(%rbp)
jmp 0x58460
movq -0x138(%rbp), %rax
movq 0x20(%rax), %rax
movq -0x18(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jbe 0x57dc3
movb $0x0, -0x1(%rbp)
jmp 0x58460
jmp 0x57dc5
movq -0x138(%rbp), %rax
movl (%rax), %eax
movq -0x18(%rbp), %rcx
cmpl (%rcx), %eax
jge 0x57ddf
movb $0x1, -0x1(%rbp)
jmp 0x58460
movq -0x138(%rbp), %rax
movl (%rax), %eax
movq -0x18(%rbp), %rcx
cmpl (%rcx), %eax
jle 0x57df9
movb $0x0, -0x1(%rbp)
jmp 0x58460
jmp 0x57dfb
movq -0x138(%rbp), %rax
movl 0x4(%rax), %eax
movq -0x18(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jge 0x57e17
movb $0x1, -0x1(%rbp)
jmp 0x58460
movq -0x138(%rbp), %rax
movl 0x4(%rax), %eax
movq -0x18(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jle 0x57e33
movb $0x0, -0x1(%rbp)
jmp 0x58460
jmp 0x57e35
movq -0x138(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x18(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x57e53
movb $0x1, -0x1(%rbp)
jmp 0x58460
movq -0x138(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x18(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jbe 0x57e71
movb $0x0, -0x1(%rbp)
jmp 0x58460
jmp 0x57e73
movq -0x138(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x18(%rbp), %rcx
cmpq 0x28(%rcx), %rax
jae 0x57e91
movb $0x1, -0x1(%rbp)
jmp 0x58460
movq -0x138(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x18(%rbp), %rcx
cmpq 0x28(%rcx), %rax
jbe 0x57eaf
movb $0x0, -0x1(%rbp)
jmp 0x58460
jmp 0x57eb1
movq -0x138(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x18(%rbp), %rcx
cmpq 0x30(%rcx), %rax
jae 0x57ecf
movb $0x1, -0x1(%rbp)
jmp 0x58460
movq -0x138(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x18(%rbp), %rcx
cmpq 0x30(%rcx), %rax
jbe 0x57eed
movb $0x0, -0x1(%rbp)
jmp 0x58460
jmp 0x57eef
movq -0x138(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x57f11
movq -0x18(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x57f11
movb $0x1, -0x1(%rbp)
jmp 0x58460
movq -0x138(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x57f33
movq -0x18(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x57f33
movb $0x0, -0x1(%rbp)
jmp 0x58460
movq -0x138(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x58458
movq -0x18(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x58458
movq -0x138(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x59710
movq %rax, -0x140(%rbp)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x59710
movq %rax, %rcx
movq -0x140(%rbp), %rax
cmpq %rcx, %rax
jae 0x57f90
movb $0x1, -0x1(%rbp)
jmp 0x58460
movq -0x138(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x59710
movq %rax, -0x148(%rbp)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x59710
movq %rax, %rcx
movq -0x148(%rbp), %rax
cmpq %rcx, %rax
jbe 0x57fcc
movb $0x0, -0x1(%rbp)
jmp 0x58460
jmp 0x57fce
leaq -0x48(%rbp), %rdi
callq 0x59730
movq -0x138(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rdi
callq 0x593f0
movq %rax, -0x58(%rbp)
movq -0x50(%rbp), %rdi
callq 0x344a0
movq %rax, -0x60(%rbp)
leaq -0x58(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x344f0
testb $0x1, %al
jne 0x58016
jmp 0x580cc
leaq -0x58(%rbp), %rdi
callq 0x39f20
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rsi
leaq -0x48(%rbp), %rdi
callq 0x59780
movq %rax, -0x150(%rbp)
jmp 0x58039
movq -0x150(%rbp), %rax
movq %rax, -0x70(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x597c0
movq %rax, -0x88(%rbp)
leaq -0x70(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x59750
testb $0x1, %al
jne 0x5806a
jmp 0x580bc
movq -0x68(%rbp), %rsi
leaq -0x48(%rbp), %rdi
callq 0x597f0
movb %dl, -0x159(%rbp)
movq %rax, -0x158(%rbp)
jmp 0x58086
movb -0x159(%rbp), %al
movq -0x158(%rbp), %rcx
movq %rcx, -0x98(%rbp)
movb %al, -0x90(%rbp)
jmp 0x580bc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x598f0
jmp 0x5846e
jmp 0x580be
leaq -0x58(%rbp), %rdi
callq 0x3a9a0
jmp 0x58000
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0xa0(%rbp)
movq -0xa0(%rbp), %rdi
callq 0x593f0
movq %rax, -0xa8(%rbp)
movq -0xa0(%rbp), %rdi
callq 0x344a0
movq %rax, -0xb0(%rbp)
leaq -0xa8(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x344f0
testb $0x1, %al
jne 0x5811d
jmp 0x581cc
leaq -0xa8(%rbp), %rdi
callq 0x39f20
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rsi
leaq -0x48(%rbp), %rdi
callq 0x59780
movq %rax, -0x168(%rbp)
jmp 0x58149
movq -0x168(%rbp), %rax
movq %rax, -0xc0(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x597c0
movq %rax, -0xc8(%rbp)
leaq -0xc0(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x59750
testb $0x1, %al
jne 0x58180
jmp 0x581b9
movq -0xb8(%rbp), %rsi
leaq -0x48(%rbp), %rdi
callq 0x597f0
movb %dl, -0x171(%rbp)
movq %rax, -0x170(%rbp)
jmp 0x5819f
movb -0x171(%rbp), %al
movq -0x170(%rbp), %rcx
movq %rcx, -0xd8(%rbp)
movb %al, -0xd0(%rbp)
jmp 0x581bb
leaq -0xa8(%rbp), %rdi
callq 0x3a9a0
jmp 0x58101
leaq -0x48(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq -0xe0(%rbp), %rdi
callq 0x59840
movq %rax, -0xe8(%rbp)
movq -0xe0(%rbp), %rdi
callq 0x597c0
movq %rax, -0xf0(%rbp)
leaq -0xe8(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x59870
testb $0x1, %al
jne 0x58219
jmp 0x58435
leaq -0xe8(%rbp), %rdi
callq 0x598a0
movq %rax, %rcx
movq -0x138(%rbp), %rax
movq %rcx, -0xf8(%rbp)
movq 0x10(%rax), %rdi
movq -0xf8(%rbp), %rsi
callq 0x34440
movq %rax, -0x180(%rbp)
jmp 0x5824f
movq -0x180(%rbp), %rax
movq %rax, -0x100(%rbp)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0xf8(%rbp), %rsi
callq 0x34440
movq %rax, -0x188(%rbp)
jmp 0x5827a
movq -0x138(%rbp), %rax
movq -0x188(%rbp), %rcx
movq %rcx, -0x108(%rbp)
movq 0x10(%rax), %rdi
callq 0x344a0
movq %rax, -0x110(%rbp)
leaq -0x100(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x34470
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x189(%rbp)
jne 0x582c3
jmp 0x582f0
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x344a0
movq %rax, -0x118(%rbp)
leaq -0x108(%rbp), %rdi
leaq -0x118(%rbp), %rsi
callq 0x344f0
movb %al, -0x189(%rbp)
movb -0x189(%rbp), %al
testb $0x1, %al
jne 0x582fc
jmp 0x5830f
movb $0x1, -0x1(%rbp)
movl $0x1, -0x11c(%rbp)
jmp 0x5843f
movq -0x138(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x344a0
movq %rax, -0x128(%rbp)
leaq -0x100(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x344f0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x18a(%rbp)
jne 0x5834a
jmp 0x58377
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x344a0
movq %rax, -0x130(%rbp)
leaq -0x108(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x34470
movb %al, -0x18a(%rbp)
movb -0x18a(%rbp), %al
testb $0x1, %al
jne 0x58383
jmp 0x58396
movb $0x0, -0x1(%rbp)
movl $0x1, -0x11c(%rbp)
jmp 0x5843f
leaq -0x100(%rbp), %rdi
callq 0x344d0
movq 0x20(%rax), %rax
movq %rax, -0x198(%rbp)
leaq -0x108(%rbp), %rdi
callq 0x344d0
movq %rax, %rcx
movq -0x198(%rbp), %rax
cmpq 0x20(%rcx), %rax
jae 0x583d9
movb $0x1, -0x1(%rbp)
movl $0x1, -0x11c(%rbp)
jmp 0x5843f
leaq -0x100(%rbp), %rdi
callq 0x344d0
movq 0x20(%rax), %rax
movq %rax, -0x1a0(%rbp)
leaq -0x108(%rbp), %rdi
callq 0x344d0
movq %rax, %rcx
movq -0x1a0(%rbp), %rax
cmpq 0x20(%rcx), %rax
jbe 0x5841c
movb $0x0, -0x1(%rbp)
movl $0x1, -0x11c(%rbp)
jmp 0x5843f
jmp 0x5841e
jmp 0x58420
jmp 0x58422
jmp 0x58424
leaq -0xe8(%rbp), %rdi
callq 0x598c0
jmp 0x581fd
movl $0x0, -0x11c(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x598f0
movl -0x11c(%rbp), %eax
testl %eax, %eax
je 0x58456
jmp 0x58454
jmp 0x58460
jmp 0x58458
jmp 0x5845a
jmp 0x5845c
movb $0x0, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x1a0, %rsp            # imm = 0x1A0
popq %rbp
retq
movq -0x78(%rbp), %rdi
callq 0x45e0
nopw (%rax,%rax)