// File: joncampbell123[P]haxcc/haxpp.cpp
// Function: is_keyword(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
enum token::token_t is_keyword(const string &s) {
    if (s == "_Alignas")
        return token::ALIGNAS;
    if (s == "_Alignof")
        return token::ALIGNOF;
    if (s == "_Atomic")
        return token::ATOMIC;
    if (s == "_Bool")
        return token::BOOL_KW;
    if (s == "_Complex")
        return token::COMPLEX;
    if (s == "_Generic")
        return token::GENERIC;
    if (s == "_Imaginary")
        return token::IMAGINARY;
    if (s == "_Noreturn")
        return token::NORETURN;
    if (s == "_Pragma")
        return token::PRAGMA;
    if (s == "_Static_assert")
        return token::STATIC_ASSERT;
    if (s == "_Thread_local")
        return token::THREAD_LOCAL;
    if (s == "auto")
        return token::AUTO;
    if (s == "break")
        return token::BREAK;
    if (s == "case")
        return token::CASE;
    if (s == "char")
        return token::CHAR;
    if (s == "const")
        return token::CONST;
    if (s == "continue")
        return token::CONTINUE;
    if (s == "default")
        return token::DEFAULT;
    if (s == "do")
        return token::DO;
    if (s == "double")
        return token::DOUBLE;
    if (s == "else")
        return token::ELSE;
    if (s == "enum")
        return token::ENUM;
    if (s == "extern")
        return token::EXTERN;
    if (s == "float")
        return token::FLOAT_KW;
    if (s == "for")
        return token::FOR;
    if (s == "goto")
        return token::GOTO;
    if (s == "if")
        return token::IF;
    if (s == "int")
        return token::INT;
    if (s == "long")
        return token::LONG;
    if (s == "register")
        return token::REGISTER;
    if (s == "return")
        return token::RETURN;
    if (s == "short")
        return token::SHORT;
    if (s == "signed")
        return token::SIGNED;
    if (s == "sizeof")
        return token::SIZEOF;
    if (s == "static")
        return token::STATIC;
    if (s == "struct")
        return token::STRUCT;
    if (s == "switch")
        return token::SWITCH;
    if (s == "typedef")
        return token::TYPEDEF;
    if (s == "union")
        return token::UNION;
    if (s == "unsigned")
        return token::UNSIGNED;
    if (s == "void")
        return token::VOID;
    if (s == "volatile")
        return token::VOLATILE;
    if (s == "while")
        return token::WHILE;

    /* GCC treats these as keywords anyway, why not do the same? */
    if (s == "__VA_ARGS__")
        return token::VA_ARGS;
    if (s == "__VA_OPT__")
        return token::VA_OPT;

    return token::NONE;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rdi
leaq 0x1fa20(%rip), %rsi     # 0x24ad7
callq 0x15ab0
testb $0x1, %al
jne 0x50c2
jmp 0x50ce
movl $0x27, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1fa07(%rip), %rsi     # 0x24ae0
callq 0x15ab0
testb $0x1, %al
jne 0x50e4
jmp 0x50f0
movl $0x28, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f9ee(%rip), %rsi     # 0x24ae9
callq 0x15ab0
testb $0x1, %al
jne 0x5106
jmp 0x5112
movl $0x29, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f9d4(%rip), %rsi     # 0x24af1
callq 0x15ab0
testb $0x1, %al
jne 0x5128
jmp 0x5134
movl $0x2a, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f9b8(%rip), %rsi     # 0x24af7
callq 0x15ab0
testb $0x1, %al
jne 0x514a
jmp 0x5156
movl $0x2b, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f99f(%rip), %rsi     # 0x24b00
callq 0x15ab0
testb $0x1, %al
jne 0x516c
jmp 0x5178
movl $0x2c, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f986(%rip), %rsi     # 0x24b09
callq 0x15ab0
testb $0x1, %al
jne 0x518e
jmp 0x519a
movl $0x2d, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f96f(%rip), %rsi     # 0x24b14
callq 0x15ab0
testb $0x1, %al
jne 0x51b0
jmp 0x51bc
movl $0x2e, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f957(%rip), %rsi     # 0x24b1e
callq 0x15ab0
testb $0x1, %al
jne 0x51d2
jmp 0x51de
movl $0x31, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f93d(%rip), %rsi     # 0x24b26
callq 0x15ab0
testb $0x1, %al
jne 0x51f4
jmp 0x5200
movl $0x2f, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f92a(%rip), %rsi     # 0x24b35
callq 0x15ab0
testb $0x1, %al
jne 0x5216
jmp 0x5222
movl $0x30, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f916(%rip), %rsi     # 0x24b43
callq 0x15ab0
testb $0x1, %al
jne 0x5238
jmp 0x5244
movl $0x51, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f8f9(%rip), %rsi     # 0x24b48
callq 0x15ab0
testb $0x1, %al
jne 0x525a
jmp 0x5266
movl $0x52, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f8dd(%rip), %rsi     # 0x24b4e
callq 0x15ab0
testb $0x1, %al
jne 0x527c
jmp 0x5288
movl $0x53, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1fa24(%rip), %rsi     # 0x24cb7
callq 0x15ab0
testb $0x1, %al
jne 0x529e
jmp 0x52aa
movl $0x54, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f89e(%rip), %rsi     # 0x24b53
callq 0x15ab0
testb $0x1, %al
jne 0x52c0
jmp 0x52cc
movl $0x55, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f882(%rip), %rsi     # 0x24b59
callq 0x15ab0
testb $0x1, %al
jne 0x52e2
jmp 0x52ee
movl $0x56, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f869(%rip), %rsi     # 0x24b62
callq 0x15ab0
testb $0x1, %al
jne 0x5304
jmp 0x5310
movl $0x57, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f84f(%rip), %rsi     # 0x24b6a
callq 0x15ab0
testb $0x1, %al
jne 0x5326
jmp 0x5332
movl $0x58, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f830(%rip), %rsi     # 0x24b6d
callq 0x15ab0
testb $0x1, %al
jne 0x5348
jmp 0x5354
movl $0x59, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f737(%rip), %rsi     # 0x24a96
callq 0x15ab0
testb $0x1, %al
jne 0x536a
jmp 0x5376
movl $0x5a, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f7f3(%rip), %rsi     # 0x24b74
callq 0x15ab0
testb $0x1, %al
jne 0x538c
jmp 0x5398
movl $0x5b, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f7d6(%rip), %rsi     # 0x24b79
callq 0x15ab0
testb $0x1, %al
jne 0x53ae
jmp 0x53ba
movl $0x5c, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f7bb(%rip), %rsi     # 0x24b80
callq 0x15ab0
testb $0x1, %al
jne 0x53d0
jmp 0x53dc
movl $0x5d, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f79f(%rip), %rsi     # 0x24b86
callq 0x15ab0
testb $0x1, %al
jne 0x53f2
jmp 0x53fe
movl $0x5e, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f781(%rip), %rsi     # 0x24b8a
callq 0x15ab0
testb $0x1, %al
jne 0x5414
jmp 0x5420
movl $0x5f, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x204ea(%rip), %rsi     # 0x25915
callq 0x15ab0
testb $0x1, %al
jne 0x5436
jmp 0x5442
movl $0x60, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f742(%rip), %rsi     # 0x24b8f
callq 0x15ab0
testb $0x1, %al
jne 0x5458
jmp 0x5464
movl $0x6b, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f724(%rip), %rsi     # 0x24b93
callq 0x15ab0
testb $0x1, %al
jne 0x547a
jmp 0x5486
movl $0x6c, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f707(%rip), %rsi     # 0x24b98
callq 0x15ab0
testb $0x1, %al
jne 0x549c
jmp 0x54a8
movl $0x6d, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f664(%rip), %rsi     # 0x24b17
callq 0x15ab0
testb $0x1, %al
jne 0x54be
jmp 0x54ca
movl $0x6e, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f6cc(%rip), %rsi     # 0x24ba1
callq 0x15ab0
testb $0x1, %al
jne 0x54e0
jmp 0x54ec
movl $0x6f, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f6dc(%rip), %rsi     # 0x24bd3
callq 0x15ab0
testb $0x1, %al
jne 0x5502
jmp 0x550e
movl $0x70, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f68e(%rip), %rsi     # 0x24ba7
callq 0x15ab0
testb $0x1, %al
jne 0x5524
jmp 0x5530
movl $0x26, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f673(%rip), %rsi     # 0x24bae
callq 0x15ab0
testb $0x1, %al
jne 0x5546
jmp 0x5552
movl $0x71, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f658(%rip), %rsi     # 0x24bb5
callq 0x15ab0
testb $0x1, %al
jne 0x5568
jmp 0x5574
movl $0x72, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f63d(%rip), %rsi     # 0x24bbc
callq 0x15ab0
testb $0x1, %al
jne 0x558a
jmp 0x5596
movl $0x73, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f622(%rip), %rsi     # 0x24bc3
callq 0x15ab0
testb $0x1, %al
jne 0x55ac
jmp 0x55b8
movl $0x74, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f608(%rip), %rsi     # 0x24bcb
callq 0x15ab0
testb $0x1, %al
jne 0x55ce
jmp 0x55da
movl $0x75, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f5ec(%rip), %rsi     # 0x24bd1
callq 0x15ab0
testb $0x1, %al
jne 0x55f0
jmp 0x55fc
movl $0x76, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f5d3(%rip), %rsi     # 0x24bda
callq 0x15ab0
testb $0x1, %al
jne 0x5612
jmp 0x561e
movl $0x77, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f5b6(%rip), %rsi     # 0x24bdf
callq 0x15ab0
testb $0x1, %al
jne 0x5634
jmp 0x563d
movl $0x78, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f5a0(%rip), %rsi     # 0x24be8
callq 0x15ab0
testb $0x1, %al
jne 0x5653
jmp 0x565c
movl $0x79, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f587(%rip), %rsi     # 0x24bee
callq 0x15ab0
testb $0x1, %al
jne 0x5672
jmp 0x567b
movl $0x7c, -0x4(%rbp)
jmp 0x56a1
movq -0x10(%rbp), %rdi
leaq 0x1f574(%rip), %rsi     # 0x24bfa
callq 0x15ab0
testb $0x1, %al
jne 0x5691
jmp 0x569a
movl $0x7d, -0x4(%rbp)
jmp 0x56a1
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x10, %rsp
popq %rbp
retq
nopw (%rax,%rax)