// File: Heptagon196[P]Gos/Reflection/JSON.cpp
// Function: Tokenizer::getToken[abi:cxx11]()
Token getToken() {
        if (lastToken.second != "") {
            Token ret = lastToken;
            lastToken.second = "";
            return ret;
        }
        char ch = getChar();
        while (ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t') {
            ch = getChar();
        }
        if (ch == EOF) {
            return { TypeID::get<void>(), "" };
        }
        std::string content;
        content = ch;
        if (ch == '"') {
            content = "";
            ch = getChar();
            while (ch != '"') {
                if (ch == '\\') {
                    ch = getChar();
                    if (ch == 'n') {
                        ch = '\n';
                    } else if (ch == 'r') {
                        ch = '\r';
                    } else if (ch == 't') {
                        ch = '\t';
                    }
                }
                content.push_back(ch);
                ch = getChar();
            }
            return { TypeID::get<std::string>(), content };
        } else if (isdigit(ch) || isalpha(ch) || ch == '-' || ch == '+' || ch == '.') {
            bool hasAlpha = isalpha(ch);
            bool hasDot = ch == '.';
            ch = getChar();
            while (isdigit(ch) || isalpha(ch) || ch == '-' || ch == '+' || ch == '.') {
                if (isalpha(ch)) {
                    hasAlpha = true;
                }
                if (ch == '.') {
                    if (hasDot) {
                        hasAlpha = true;
                    }
                    hasDot = true;
                }
                content.push_back(ch);
                ch = getChar();
            }
            backChar(ch);
            if (hasAlpha) {
                return { TypeID::get<std::string>(), content };
            } else if (hasDot) {
                return { TypeID::get<float>(), content };
            } else {
                return { TypeID::get<int>(), content };
            }
        } else {
            return { TypeID::get<void>(), content };
        }
    }

// Assembly:
subq $0x148, %rsp            # imm = 0x148
movq %rdi, 0x20(%rsp)
movq %rdi, %rax
movq %rax, 0x28(%rsp)
movq %rdi, 0x140(%rsp)
movq %rsi, 0x138(%rsp)
movq 0x138(%rsp), %rdi
movq %rdi, 0x30(%rsp)
addq $0x10, %rdi
addq $0x20, %rdi
leaq 0xbcf06(%rip), %rsi     # 0x220cc6
callq 0x56430
xorb $-0x1, %al
testb $0x1, %al
jne 0x163dcd
jmp 0x163e45
movq 0x30(%rsp), %rsi
movq 0x20(%rsp), %rdi
movb $0x0, 0x137(%rsp)
addq $0x10, %rsi
callq 0x1645e0
movq 0x30(%rsp), %rdi
addq $0x30, %rdi
leaq 0xbcece(%rip), %rsi     # 0x220cc6
callq 0x1652e0
jmp 0x163dff
movb $0x1, 0x137(%rsp)
testb $0x1, 0x137(%rsp)
jne 0x163e40
jmp 0x163e36
movq 0x20(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x128(%rsp)
movl %eax, 0x124(%rsp)
callq 0x164420
jmp 0x16430d
movq 0x20(%rsp), %rdi
callq 0x164420
jmp 0x164300
movq 0x30(%rsp), %rdi
callq 0x165310
movb %al, 0x123(%rsp)
movsbl 0x123(%rsp), %ecx
movb $0x1, %al
cmpl $0x20, %ecx
movb %al, 0x1f(%rsp)
je 0x163ea1
movsbl 0x123(%rsp), %ecx
movb $0x1, %al
cmpl $0xa, %ecx
movb %al, 0x1f(%rsp)
je 0x163ea1
movsbl 0x123(%rsp), %ecx
movb $0x1, %al
cmpl $0xd, %ecx
movb %al, 0x1f(%rsp)
je 0x163ea1
movsbl 0x123(%rsp), %eax
cmpl $0x9, %eax
sete %al
movb %al, 0x1f(%rsp)
movb 0x1f(%rsp), %al
testb $0x1, %al
jne 0x163eab
jmp 0x163ebe
movq 0x30(%rsp), %rdi
callq 0x165310
movb %al, 0x123(%rsp)
jmp 0x163e56
movsbl 0x123(%rsp), %eax
cmpl $-0x1, %eax
jne 0x163ef6
leaq 0x100(%rsp), %rdi
callq 0x534e0
movq 0x20(%rsp), %rdi
leaq 0x100(%rsp), %rsi
leaq 0xbcdda(%rip), %rdx     # 0x220cc6
callq 0x165370
jmp 0x164300
leaq 0xe0(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x7ace0
movq 0x10(%rsp), %rdi
movsbl 0x123(%rsp), %esi
callq 0x165410
jmp 0x163f1c
movsbl 0x123(%rsp), %eax
cmpl $0x22, %eax
jne 0x16407c
leaq 0xbcd92(%rip), %rsi     # 0x220cc6
leaq 0xe0(%rsp), %rdi
callq 0x1652e0
jmp 0x163f43
movq 0x30(%rsp), %rdi
callq 0x165310
movb %al, 0xf(%rsp)
jmp 0x163f53
movb 0xf(%rsp), %al
movb %al, 0x123(%rsp)
movsbl 0x123(%rsp), %eax
cmpl $0x22, %eax
je 0x164041
movsbl 0x123(%rsp), %eax
cmpl $0x5c, %eax
jne 0x16400a
movq 0x30(%rsp), %rdi
callq 0x165310
movb %al, 0xe(%rsp)
jmp 0x163f90
movb 0xe(%rsp), %al
movb %al, 0x123(%rsp)
movsbl 0x123(%rsp), %eax
cmpl $0x6e, %eax
jne 0x163fd8
movb $0xa, 0x123(%rsp)
jmp 0x164008
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x128(%rsp)
movl %eax, 0x124(%rsp)
leaq 0xe0(%rsp), %rdi
callq 0x52f50
jmp 0x16430d
movsbl 0x123(%rsp), %eax
cmpl $0x72, %eax
jne 0x163fef
movb $0xd, 0x123(%rsp)
jmp 0x164006
movsbl 0x123(%rsp), %eax
cmpl $0x74, %eax
jne 0x164004
movb $0x9, 0x123(%rsp)
jmp 0x164006
jmp 0x164008
jmp 0x16400a
movsbl 0x123(%rsp), %esi
leaq 0xe0(%rsp), %rdi
callq 0x119b20
jmp 0x164021
movq 0x30(%rsp), %rdi
callq 0x165310
movb %al, 0xd(%rsp)
jmp 0x164031
movb 0xd(%rsp), %al
movb %al, 0x123(%rsp)
jmp 0x163f5e
leaq 0xc0(%rsp), %rdi
callq 0x54410
jmp 0x164050
movq 0x20(%rsp), %rdi
leaq 0xc0(%rsp), %rsi
leaq 0xe0(%rsp), %rdx
callq 0x165450
jmp 0x16406c
movl $0x1, 0xbc(%rsp)
jmp 0x1642f3
movsbl 0x123(%rsp), %edi
callq 0x132d0
cmpl $0x0, %eax
jne 0x1640cb
movsbl 0x123(%rsp), %edi
callq 0x13100
cmpl $0x0, %eax
jne 0x1640cb
movsbl 0x123(%rsp), %eax
cmpl $0x2d, %eax
je 0x1640cb
movsbl 0x123(%rsp), %eax
cmpl $0x2b, %eax
je 0x1640cb
movsbl 0x123(%rsp), %eax
cmpl $0x2e, %eax
jne 0x1642c3
movsbl 0x123(%rsp), %edi
callq 0x13100
movq 0x30(%rsp), %rdi
testl %eax, %eax
setne 0xbb(%rsp)
movb 0x123(%rsp), %al
subb $0x2e, %al
sete 0xba(%rsp)
callq 0x165310
movb %al, 0xc(%rsp)
jmp 0x164103
movb 0xc(%rsp), %al
movb %al, 0x123(%rsp)
movsbl 0x123(%rsp), %edi
callq 0x132d0
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, 0xb(%rsp)
jne 0x16417a
movsbl 0x123(%rsp), %edi
callq 0x13100
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, 0xb(%rsp)
jne 0x16417a
movsbl 0x123(%rsp), %ecx
movb $0x1, %al
cmpl $0x2d, %ecx
movb %al, 0xb(%rsp)
je 0x16417a
movsbl 0x123(%rsp), %ecx
movb $0x1, %al
cmpl $0x2b, %ecx
movb %al, 0xb(%rsp)
je 0x16417a
movsbl 0x123(%rsp), %eax
cmpl $0x2e, %eax
sete %al
movb %al, 0xb(%rsp)
movb 0xb(%rsp), %al
testb $0x1, %al
jne 0x164184
jmp 0x1641fc
movsbl 0x123(%rsp), %edi
callq 0x13100
cmpl $0x0, %eax
je 0x16419e
movb $0x1, 0xbb(%rsp)
movsbl 0x123(%rsp), %eax
cmpl $0x2e, %eax
jne 0x1641c5
testb $0x1, 0xba(%rsp)
je 0x1641bd
movb $0x1, 0xbb(%rsp)
movb $0x1, 0xba(%rsp)
movsbl 0x123(%rsp), %esi
leaq 0xe0(%rsp), %rdi
callq 0x119b20
jmp 0x1641dc
movq 0x30(%rsp), %rdi
callq 0x165310
movb %al, 0xa(%rsp)
jmp 0x1641ec
movb 0xa(%rsp), %al
movb %al, 0x123(%rsp)
jmp 0x16410e
movq 0x30(%rsp), %rdi
movsbl 0x123(%rsp), %esi
callq 0x1654a0
jmp 0x164210
testb $0x1, 0xbb(%rsp)
je 0x164255
leaq 0x98(%rsp), %rdi
callq 0x54410
jmp 0x164229
movq 0x20(%rsp), %rdi
leaq 0x98(%rsp), %rsi
leaq 0xe0(%rsp), %rdx
callq 0x165450
jmp 0x164245
movl $0x1, 0xbc(%rsp)
jmp 0x1642f3
testb $0x1, 0xba(%rsp)
je 0x164291
leaq 0x78(%rsp), %rdi
callq 0xca580
jmp 0x16426b
movq 0x20(%rsp), %rdi
leaq 0x78(%rsp), %rsi
leaq 0xe0(%rsp), %rdx
callq 0x165450
jmp 0x164284
movl $0x1, 0xbc(%rsp)
jmp 0x1642f3
leaq 0x58(%rsp), %rdi
callq 0x5ac80
jmp 0x16429d
movq 0x20(%rsp), %rdi
leaq 0x58(%rsp), %rsi
leaq 0xe0(%rsp), %rdx
callq 0x165450
jmp 0x1642b6
movl $0x1, 0xbc(%rsp)
jmp 0x1642f3
leaq 0x38(%rsp), %rdi
callq 0x534e0
jmp 0x1642cf
movq 0x20(%rsp), %rdi
leaq 0x38(%rsp), %rsi
leaq 0xe0(%rsp), %rdx
callq 0x165450
jmp 0x1642e8
movl $0x1, 0xbc(%rsp)
leaq 0xe0(%rsp), %rdi
callq 0x52f50
movq 0x28(%rsp), %rax
addq $0x148, %rsp            # imm = 0x148
retq
movq 0x128(%rsp), %rdi
callq 0x133f0
nopw (%rax,%rax)