// File: ps-george[P]ansi_c_compiler/src/lexer/lexer_main.cpp
// Function: classname[abi:cxx11](yytokentype)
std::string classname(yytokentype t){
  switch((int)t){
  /* KEYWORDS */
    case AUTO:
    case BREAK:
    case DOUBLE:
    case ELSE:
    case ENUM:
    case EXTERN:
    case FLOAT:
    case FOR:
    case GOTO:
    case IF:
    case CASE:
    case CHAR:
    case CONST:
    case CONTINUE:
    case DEFAULT:
    case DO:
    case INT:
    case LONG:
    case STRUCT:
    case SWITCH:
    case REGISTER:
    case TYPEDEF:
    case UNION:
    case UNSIGNED:
    case VOID:
    case VOLATILE:
    case WHILE:
    case RETURN:
    case SHORT:
    case SIGNED:
    case SIZEOF:
    case STATIC: return "Keyword";
    /* Identifiers */
    case ID: return "Identifier";
     /* Operators */
    case '=':
    case '?':
    case '!':
    case '~':
    case '|':
    case '&':
    case '^':
    case '+':
    case '-':
    case '*':
    case '/':
    case '%':
    case LE:
    case GE:
    case EQ:
    case NE:
    case GT:
    case LT:
    case LOR:
    case LAND:
    case ';':
    case ':':
    case ',':
    case '.':
    case ARROW:
    case LL:
    case RR:
    case ELLIP:
    case INCR:
    case DECR:
    case RRASS:
    case LLASS:
    case ADDASS:
    case SUBASS:
    case MULASS:
    case DIVASS:
    case MODASS:
    case ANDASS:
    case XORASS:
    case ORASS:
    case '[':
    case ']':
    case '(':
    case ')':
    case '{':
    case '}': return "Operator";
    /* Constants */
    case I_CONSTANT:
    case C_CONSTANT: 
    case F_CONSTANT: 
      return "Constant";
    /* StringLiterals */
    case STRING: return "StringLiteral";
    //  Unncessary
    // case NEWLINE: return "Newline";
    case Invalid: return "Invalid";
    default: fprintf(stderr, "Invalid: %s, StreamLine: %s, ColNum: %s\n", yylval.raw->c_str(), quote(yylineno).c_str(), quote(yylcolno).c_str() ); return "Invalid";
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xf0, %rsp
movq %rdi, -0x88(%rbp)
movq %rdi, %rax
movq %rax, -0x80(%rbp)
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movl -0xc(%rbp), %eax
addl $-0x21, %eax
movl %eax, %ecx
movq %rcx, -0x78(%rbp)
subl $0x11e, %eax            # imm = 0x11E
ja 0x2bf3
movq -0x78(%rbp), %rax
leaq 0x5612(%rip), %rcx      # 0x8004
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq -0xd(%rbp), %rdi
movq %rdi, -0x90(%rbp)
callq 0x2360
movq -0x88(%rbp), %rdi
movq -0x90(%rbp), %rdx
leaq 0x5a62(%rip), %rsi      # 0x8482
callq 0x3360
jmp 0x2a27
leaq -0xd(%rbp), %rdi
callq 0x21f0
jmp 0x2d04
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0xd(%rbp), %rdi
callq 0x21f0
jmp 0x2d11
leaq -0x1d(%rbp), %rdi
movq %rdi, -0x98(%rbp)
callq 0x2360
movq -0x88(%rbp), %rdi
movq -0x98(%rbp), %rdx
leaq 0x5a16(%rip), %rsi      # 0x848a
callq 0x3360
jmp 0x2a7b
leaq -0x1d(%rbp), %rdi
callq 0x21f0
jmp 0x2d04
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x1d(%rbp), %rdi
callq 0x21f0
jmp 0x2d11
leaq -0x1e(%rbp), %rdi
movq %rdi, -0xa0(%rbp)
callq 0x2360
movq -0x88(%rbp), %rdi
movq -0xa0(%rbp), %rdx
leaq 0x59cd(%rip), %rsi      # 0x8495
callq 0x3360
jmp 0x2acf
leaq -0x1e(%rbp), %rdi
callq 0x21f0
jmp 0x2d04
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x1e(%rbp), %rdi
callq 0x21f0
jmp 0x2d11
leaq -0x1f(%rbp), %rdi
movq %rdi, -0xa8(%rbp)
callq 0x2360
movq -0x88(%rbp), %rdi
movq -0xa8(%rbp), %rdx
leaq 0x5982(%rip), %rsi      # 0x849e
callq 0x3360
jmp 0x2b23
leaq -0x1f(%rbp), %rdi
callq 0x21f0
jmp 0x2d04
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x1f(%rbp), %rdi
callq 0x21f0
jmp 0x2d11
leaq -0x20(%rbp), %rdi
movq %rdi, -0xb0(%rbp)
callq 0x2360
movq -0x88(%rbp), %rdi
movq -0xb0(%rbp), %rdx
leaq 0x5937(%rip), %rsi      # 0x84a7
callq 0x3360
jmp 0x2b77
leaq -0x20(%rbp), %rdi
callq 0x21f0
jmp 0x2d04
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x21f0
jmp 0x2d11
leaq -0x21(%rbp), %rdi
movq %rdi, -0xb8(%rbp)
callq 0x2360
movq -0x88(%rbp), %rdi
movq -0xb8(%rbp), %rdx
leaq 0x58f1(%rip), %rsi      # 0x84b5
callq 0x3360
jmp 0x2bcb
leaq -0x21(%rbp), %rdi
callq 0x21f0
jmp 0x2d04
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x21(%rbp), %rdi
callq 0x21f0
jmp 0x2d11
movq 0x93d6(%rip), %rax      # 0xbfd0
movq (%rax), %rax
movq %rax, -0xd8(%rbp)
movq 0x9625(%rip), %rdi      # 0xc230
callq 0x20b0
movq %rax, -0xd0(%rbp)
leaq 0x95fa(%rip), %rax      # 0xc218
movl (%rax), %esi
leaq -0x48(%rbp), %rdi
movq %rdi, -0xc8(%rbp)
callq 0x25a0
movq -0xc8(%rbp), %rdi
callq 0x20b0
movq %rax, -0xc0(%rbp)
movl 0x95bf(%rip), %esi      # 0xc208
leaq -0x68(%rbp), %rdi
callq 0x25a0
jmp 0x2c54
leaq -0x68(%rbp), %rdi
movq %rdi, -0xe8(%rbp)
callq 0x20b0
movq -0xd8(%rbp), %rdi
movq -0xd0(%rbp), %rdx
movq -0xc0(%rbp), %rcx
movq %rax, %r8
leaq 0x583a(%rip), %rsi      # 0x84bd
xorl %eax, %eax
callq 0x22a0
movq -0xe8(%rbp), %rdi
callq 0x23f8
leaq -0x48(%rbp), %rdi
callq 0x23f8
leaq -0x69(%rbp), %rdi
movq %rdi, -0xe0(%rbp)
callq 0x2360
movq -0x88(%rbp), %rdi
movq -0xe0(%rbp), %rdx
leaq 0x57f1(%rip), %rsi      # 0x84b5
callq 0x3360
jmp 0x2ccb
leaq -0x69(%rbp), %rdi
callq 0x21f0
jmp 0x2d04
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x23f8
jmp 0x2d11
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x69(%rbp), %rdi
callq 0x21f0
jmp 0x2d11
movq -0x80(%rbp), %rax
addq $0xf0, %rsp
popq %rbp
retq
movq -0x18(%rbp), %rdi
callq 0x2350
nopw (%rax,%rax)