// File: /workspace/github_cpp_makefile_star2_O1/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 0x105c3(%rip), %rdi     # 0x17fd0
movl $0x1, %edx
callq 0x32d0
movzbl %r12b, %eax
cmpl $0x3d, %eax
jg 0x7a68
cmpl $0x26, %eax
je 0x7aad
cmpl $0x3c, %eax
jne 0x7b16
cmpb $0x3d, (%r15)
jne 0x7a77
movq (%r14), %rdi
movq %r15, %rsi
callq 0x3320
movb 0x10(%r14), %al
leaq -0x22(%rbp), %rsi
movb %al, (%rsi)
movq 0x1057c(%rip), %rdi     # 0x17fd0
movl $0x1, %edx
callq 0x32d0
movl $0x1a, %eax
jmp 0x7b6a
cmpl $0x3e, %eax
je 0x7a77
cmpl $0x7c, %eax
je 0x7ae3
jmp 0x7b16
cmpb $0x3d, (%r15)
jne 0x7aad
movq (%r14), %rdi
movq %r15, %rsi
callq 0x3320
movb 0x10(%r14), %al
leaq -0x23(%rbp), %rsi
movb %al, (%rsi)
movq 0x10537(%rip), %rdi     # 0x17fd0
movl $0x1, %edx
callq 0x32d0
movl $0x1b, %eax
jmp 0x7b6a
cmpb $0x26, (%r15)
jne 0x7ae3
movq (%r14), %rdi
movq %r15, %rsi
callq 0x3320
movb 0x10(%r14), %al
leaq -0x24(%rbp), %rsi
movb %al, (%rsi)
movq 0x10501(%rip), %rdi     # 0x17fd0
movl $0x1, %edx
callq 0x32d0
movl $0x1c, %eax
jmp 0x7b6a
cmpb $0x7c, (%r15)
jne 0x7b16
movq (%r14), %rdi
movq %r15, %rsi
callq 0x3320
movb 0x10(%r14), %al
leaq -0x25(%rbp), %rsi
movb %al, (%rsi)
movq 0x104cb(%rip), %rdi     # 0x17fd0
movl $0x1, %edx
callq 0x32d0
movl $0x1d, %eax
jmp 0x7b6a
movq 0x107eb(%rip), %rdx     # 0x18308
leaq 0x107dc(%rip), %rax     # 0x18300
movq %rax, %rcx
testq %rdx, %rdx
je 0x7b4b
leaq 0x107cd(%rip), %rcx     # 0x18300
xorl %esi, %esi
cmpb %r12b, 0x20(%rdx)
setl %sil
cmovgeq %rdx, %rcx
movq 0x10(%rdx,%rsi,8), %rdx
testq %rdx, %rdx
jne 0x7b33
movq %rax, %rdx
cmpq %rax, %rcx
je 0x7b62
cmpb 0x20(%rcx), %r12b
leaq 0x107a2(%rip), %rdx     # 0x18300
cmovgeq %rcx, %rdx
cmpq %rax, %rdx
je 0x7b90
movl 0x24(%rdx), %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 0x10459(%rip), %rdi     # 0x17ff0
leaq 0xa6d3(%rip), %rsi      # 0x12271
callq 0x3270
movl $0x1, %edi
callq 0x32f0
nop