// File: AshOlogn[P]ash-language-interpreter/src/parsetoken.cpp
// Function: toWordParseOperatorType(ParseOperatorType)
const char* toWordParseOperatorType(ParseOperatorType p) {

  switch(p) {

    case PREFIX_INC_OP: return "prefix increment";
    case PREFIX_DEC_OP: return "prefix decrement";
    case POSTFIX_INC_OP: return "postfix increment";
    case POSTFIX_DEC_OP: return "postfix decrement";
    case POSITIVE_OP: return "positive";
    case NEGATIVE_OP: return "negation";
    case ADD_OP: return "addition";
    case SUBTRACT_OP: return "subtraction";
    case NOT_OP: return "logical NOT";
    case BIT_NOT_OP: return "bitwise NOT";

    case EXPONENT_OP: return "exponentiation"; 
    case MULTIPLY_OP: return "multiplication";
    case DIVIDE_OP: return "division"; 
    case MOD_OP: return "modulus";
 
    case BIT_LEFT_OP: return "bitshift left";
    case BIT_RIGHT_OP: return "bitshift right";
    
    case GREATER_OP: return "greater-than"; 
    case LESS_OP: return "less-than"; 
    case GREATER_EQ_OP: return "greater-equal-than"; 
    case LESS_EQ_OP: return "less-equal-than";
    case EQ_EQ_OP: return "equality"; 
    case NOT_EQ_OP: return "not-equality";

    case BIT_AND_OP: return "bitwise AND";
    case BIT_XOR_OP: return "bitwise XOR";
    case BIT_OR_OP: return "bitwise OR";  

    case AND_OP: return "logical AND";
    case XOR_OP: return "logical XOR";
    case OR_OP: return "logical OR";

    case EQ_OP: return "assignment"; 
    case ADD_EQ_OP: return "addition-assignment";
    case SUBTRACT_EQ_OP: return "subtraction-assignment";
    case EXPONENT_EQ_OP: return "exponentiation-assignment";
    case MULTIPLY_EQ_OP: return "mutliplication-assignment";
    case DIVIDE_EQ_OP: return "division-assignment";
    case MOD_EQ_OP: return "modulus-assignment"; 
    case AND_EQ_OP: return "AND-assignment";
    case XOR_EQ_OP: return "XOR-assignment";
    case OR_EQ_OP: return "OR-assignment";
    case BIT_LEFT_EQ_OP: return "bitshift-left-assignment";
    case BIT_RIGHT_EQ_OP: return "bitshift-right-assignment";
    
    default: return "invalid";
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movl %edi, -0xc(%rbp)
movl -0xc(%rbp), %eax
movq %rax, -0x18(%rbp)
subq $0x2a, %rax
ja 0xbec1
movq -0x18(%rbp), %rax
leaq 0x342b5(%rip), %rcx     # 0x3ff08
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x343d3(%rip), %rax     # 0x40036
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x343d4(%rip), %rax     # 0x40047
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x343d5(%rip), %rax     # 0x40058
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x343d7(%rip), %rax     # 0x4006a
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x343d9(%rip), %rax     # 0x4007c
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x343d2(%rip), %rax     # 0x40085
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x343cb(%rip), %rax     # 0x4008e
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x343c4(%rip), %rax     # 0x40097
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x343c0(%rip), %rax     # 0x400a3
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x343bc(%rip), %rax     # 0x400af
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x343b8(%rip), %rax     # 0x400bb
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x343b7(%rip), %rax     # 0x400ca
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x343b6(%rip), %rax     # 0x400d9
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x343af(%rip), %rax     # 0x400e2
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x343a7(%rip), %rax     # 0x400ea
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x343a5(%rip), %rax     # 0x400f8
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x343a4(%rip), %rax     # 0x40107
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x343a1(%rip), %rax     # 0x40114
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x3439b(%rip), %rax     # 0x4011e
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x3439e(%rip), %rax     # 0x40131
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x343a2(%rip), %rax     # 0x40145
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x3438e(%rip), %rax     # 0x40141
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x3438b(%rip), %rax     # 0x4014e
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x34387(%rip), %rax     # 0x4015a
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x34383(%rip), %rax     # 0x40166
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x3437e(%rip), %rax     # 0x40171
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x3437a(%rip), %rax     # 0x4017d
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x34376(%rip), %rax     # 0x40189
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x38d10(%rip), %rax     # 0x44b33
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x34361(%rip), %rax     # 0x40194
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x34365(%rip), %rax     # 0x401a8
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x3436c(%rip), %rax     # 0x401bf
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x34379(%rip), %rax     # 0x401d9
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x34386(%rip), %rax     # 0x401f3
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x3438d(%rip), %rax     # 0x40207
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x34393(%rip), %rax     # 0x4021a
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x34395(%rip), %rax     # 0x40229
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x34389(%rip), %rax     # 0x4022a
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x3438a(%rip), %rax     # 0x40238
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x34396(%rip), %rax     # 0x40251
movq %rax, -0x8(%rbp)
jmp 0xbecc
leaq 0x34158(%rip), %rax     # 0x40020
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
popq %rbp
retq
nopw %cs:(%rax,%rax)