// File: /workspace/github_cpp_makefile_star2_O3/taurheim[P]AgNES/scanner.cpp
// Function: Scanner::identifySpecialToken()
Token Scanner::identifySpecialToken() {
    char firstChar = ch;
    getChar();
    switch (firstChar) {
        case '<': {
            if (ch == '=') {
                getChar();
                return Token(T_LESSEQUAL);
            }
        }
        case '>': {
            if (ch == '=') {
                getChar();
                return Token(T_GREATEREQUAL);
            }
        }
        case '&': {
            if (ch == '&') {
                getChar();
                return Token(T_AND);
            }
        }
        case '|' : {
            if (ch == '|') {
                getChar();
                return Token(T_OR);
            }
        }
        default: {
           break;
        }
    }
    auto search = charToToken.find(firstChar);
    if (search == charToToken.end()) {
        std::cerr << "Invalid character!";
        exit(1);
    } 
    return { search->second };
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x10(%rsi), %r15
movb 0x10(%rsi), %r12b
movq (%rsi), %rdi
movq %r15, %rsi
callq 0x3320
movb 0x10(%r14), %al
leaq -0x21(%rbp), %rsi
movb %al, (%rsi)
movq 0x105eb(%rip), %rdi     # 0x17fd0
movl $0x1, %edx
callq 0x32d0
movzbl %r12b, %eax
cmpl $0x3d, %eax
jg 0x7a3d
cmpl $0x26, %eax
je 0x7a50
cmpl $0x3c, %eax
jne 0x7aee
movb (%r15), %al
cmpb $0x3d, %al
jne 0x7a8c
movq (%r14), %rdi
movq %r15, %rsi
callq 0x3320
movb 0x10(%r14), %al
leaq -0x22(%rbp), %rsi
movb %al, (%rsi)
movq 0x105a7(%rip), %rdi     # 0x17fd0
movl $0x1, %edx
callq 0x32d0
movl $0x1a, %eax
jmp 0x7b2d
cmpl $0x3e, %eax
je 0x7a55
cmpl $0x7c, %eax
jne 0x7aee
movb (%r15), %al
jmp 0x7abd
movb (%r15), %al
jmp 0x7a8c
movb (%r15), %al
cmpb $0x3d, %al
jne 0x7a8c
movq (%r14), %rdi
movq %r15, %rsi
callq 0x3320
movb 0x10(%r14), %al
leaq -0x23(%rbp), %rsi
movb %al, (%rsi)
movq 0x10558(%rip), %rdi     # 0x17fd0
movl $0x1, %edx
callq 0x32d0
movl $0x1b, %eax
jmp 0x7b2d
cmpb $0x26, %al
jne 0x7abd
movq (%r14), %rdi
movq %r15, %rsi
callq 0x3320
movb 0x10(%r14), %al
leaq -0x24(%rbp), %rsi
movb %al, (%rsi)
movq 0x10524(%rip), %rdi     # 0x17fd0
movl $0x1, %edx
callq 0x32d0
movl $0x1c, %eax
jmp 0x7b2d
cmpb $0x7c, %al
jne 0x7aee
movq (%r14), %rdi
movq %r15, %rsi
callq 0x3320
movb 0x10(%r14), %al
leaq -0x25(%rbp), %rsi
movb %al, (%rsi)
movq 0x104f3(%rip), %rdi     # 0x17fd0
movl $0x1, %edx
callq 0x32d0
movl $0x1d, %eax
jmp 0x7b2d
movq 0x10813(%rip), %rcx     # 0x18308
testq %rcx, %rcx
je 0x7b53
leaq 0x107ff(%rip), %rax     # 0x18300
xorl %edx, %edx
cmpb %r12b, 0x20(%rcx)
setl %dl
cmovgeq %rcx, %rax
movq 0x10(%rcx,%rdx,8), %rcx
testq %rcx, %rcx
jne 0x7b01
leaq 0x107e1(%rip), %rcx     # 0x18300
cmpq %rcx, %rax
je 0x7b53
cmpb 0x20(%rax), %r12b
jl 0x7b53
movl 0x24(%rax), %eax
movl %eax, (%rbx)
leaq 0x18(%rbx), %rax
movq %rax, 0x8(%rbx)
movq $0x0, 0x10(%rbx)
movb $0x0, 0x18(%rbx)
movq %rbx, %rax
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq 0x10496(%rip), %rdi     # 0x17ff0
leaq 0xa710(%rip), %rsi      # 0x12271
callq 0x3270
movl $0x1, %edi
callq 0x32f0