// File: /workspace/github_c_makefile_star2_O0/gaultier[P]lox-c/lex.c
// Function: identifier_type
static TokenType identifier_type(const char* s, size_t s_len) {
    assert(s_len >= 1);

    switch (s[0]) {
        case 'a':
            if (str_eq("nd", 2, s + 1, s_len - 1)) {
                return TOKEN_AND;
            } else {
                break;
            }
        case 'c':
            if (str_eq("lass", 4, s + 1, s_len - 1)) {
                return TOKEN_CLASS;
            } else {
                break;
            }
        case 'e':
            if (str_eq("lse", 3, s + 1, s_len - 1)) {
                return TOKEN_ELSE;
            } else {
                break;
            }
        case 'f':
            if (str_eq("alse", 4, s + 1, s_len - 1)) {
                return TOKEN_FALSE;
            } else if (str_eq("or", 2, s + 1, s_len - 1)) {
                return TOKEN_FOR;
            } else if (str_eq("un", 2, s + 1, s_len - 1)) {
                return TOKEN_FUN;
            } else {
                break;
            }
        case 'i':
            if (str_eq("f", 1, s + 1, s_len - 1)) {
                return TOKEN_IF;
            } else {
                break;
            }
        case 'n':
            if (str_eq("il", 2, s + 1, s_len - 1)) {
                return TOKEN_NIL;
            } else {
                break;
            }
        case 'o':
            if (str_eq("r", 1, s + 1, s_len - 1)) {
                return TOKEN_OR;
            } else {
                break;
            }
        case 'p':
            if (str_eq("rint", 4, s + 1, s_len - 1)) {
                return TOKEN_PRINT;
            } else {
                break;
            }
        case 'r':
            if (str_eq("eturn", 5, s + 1, s_len - 1)) {
                return TOKEN_RETURN;
            } else {
                break;
            }
        case 's':
            if (str_eq("uper", 4, s + 1, s_len - 1)) {
                return TOKEN_SUPER;
            } else {
                break;
            }
        case 't':
            if (str_eq("his", 3, s + 1, s_len - 1)) {
                return TOKEN_THIS;
            } else if (str_eq("rue", 3, s + 1, s_len - 1)) {
                return TOKEN_TRUE;
            } else {
                break;
            }
        case 'v':
            if (str_eq("ar", 2, s + 1, s_len - 1)) {
                return TOKEN_VAR;
            } else {
                break;
            }
        case 'w':
            if (str_eq("hile", 4, s + 1, s_len - 1)) {
                return TOKEN_WHILE;
            } else {
                break;
            }
        default:
            break;
    }

    return TOKEN_IDENTIFIER;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x18(%rsp)
movq %rsi, 0x10(%rsp)
cmpq $0x1, 0x10(%rsp)
jb 0x2778
jmp 0x2797
leaq 0x8e5c(%rip), %rdi      # 0xb5db
leaq 0x8e60(%rip), %rsi      # 0xb5e6
movl $0xb6, %edx
leaq 0x8e5a(%rip), %rcx      # 0xb5ec
callq 0x10e0
movq 0x18(%rsp), %rax
movsbl (%rax), %eax
addl $-0x61, %eax
movl %eax, %ecx
movq %rcx, 0x8(%rsp)
subl $0x16, %eax
ja 0x2b56
movq 0x8(%rsp), %rax
leaq 0x8a62(%rip), %rcx      # 0xb220
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x18(%rsp), %rdx
addq $0x1, %rdx
movq 0x10(%rsp), %rcx
subq $0x1, %rcx
leaq 0x8e3c(%rip), %rdi      # 0xb61c
movl $0x2, %esi
callq 0x6500
testb $0x1, %al
jne 0x27f0
jmp 0x27fd
movl $0x17, 0x24(%rsp)
jmp 0x2b60
jmp 0x2b58
movq 0x18(%rsp), %rdx
addq $0x1, %rdx
movq 0x10(%rsp), %rcx
subq $0x1, %rcx
leaq 0x8e04(%rip), %rdi      # 0xb61f
movl $0x4, %esi
callq 0x6500
testb $0x1, %al
jne 0x282b
jmp 0x2838
movl $0x18, 0x24(%rsp)
jmp 0x2b60
jmp 0x2b58
movq 0x18(%rsp), %rdx
addq $0x1, %rdx
movq 0x10(%rsp), %rcx
subq $0x1, %rcx
leaq 0x9647(%rip), %rdi      # 0xbe9d
movl $0x3, %esi
callq 0x6500
testb $0x1, %al
jne 0x2866
jmp 0x2873
movl $0x19, 0x24(%rsp)
jmp 0x2b60
jmp 0x2b58
movq 0x18(%rsp), %rdx
addq $0x1, %rdx
movq 0x10(%rsp), %rcx
subq $0x1, %rcx
leaq 0x960b(%rip), %rdi      # 0xbe9c
movl $0x4, %esi
callq 0x6500
testb $0x1, %al
jne 0x28a1
jmp 0x28ae
movl $0x1a, 0x24(%rsp)
jmp 0x2b60
movq 0x18(%rsp), %rdx
addq $0x1, %rdx
movq 0x10(%rsp), %rcx
subq $0x1, %rcx
leaq 0x8d5d(%rip), %rdi      # 0xb624
movl $0x2, %esi
callq 0x6500
testb $0x1, %al
jne 0x28d7
jmp 0x28e4
movl $0x1b, 0x24(%rsp)
jmp 0x2b60
movq 0x18(%rsp), %rdx
addq $0x1, %rdx
movq 0x10(%rsp), %rcx
subq $0x1, %rcx
leaq 0x8d69(%rip), %rdi      # 0xb666
movl $0x2, %esi
callq 0x6500
testb $0x1, %al
jne 0x290d
jmp 0x291a
movl $0x1c, 0x24(%rsp)
jmp 0x2b60
jmp 0x2b58
movq 0x18(%rsp), %rdx
addq $0x1, %rdx
movq 0x10(%rsp), %rcx
subq $0x1, %rcx
leaq 0x8cef(%rip), %rdi      # 0xb627
movl $0x1, %esi
callq 0x6500
testb $0x1, %al
jne 0x2948
jmp 0x2955
movl $0x1d, 0x24(%rsp)
jmp 0x2b60
jmp 0x2b58
movq 0x18(%rsp), %rdx
addq $0x1, %rdx
movq 0x10(%rsp), %rcx
subq $0x1, %rcx
leaq 0x952f(%rip), %rdi      # 0xbea2
movl $0x2, %esi
callq 0x6500
testb $0x1, %al
jne 0x2983
jmp 0x2990
movl $0x1e, 0x24(%rsp)
jmp 0x2b60
jmp 0x2b58
movq 0x18(%rsp), %rdx
addq $0x1, %rdx
movq 0x10(%rsp), %rcx
subq $0x1, %rcx
leaq 0x8c90(%rip), %rdi      # 0xb63e
movl $0x1, %esi
callq 0x6500
testb $0x1, %al
jne 0x29be
jmp 0x29cb
movl $0x1f, 0x24(%rsp)
jmp 0x2b60
jmp 0x2b58
movq 0x18(%rsp), %rdx
addq $0x1, %rdx
movq 0x10(%rsp), %rcx
subq $0x1, %rcx
leaq 0x8c40(%rip), %rdi      # 0xb629
movl $0x4, %esi
callq 0x6500
testb $0x1, %al
jne 0x29f9
jmp 0x2a06
movl $0x20, 0x24(%rsp)
jmp 0x2b60
jmp 0x2b58
movq 0x18(%rsp), %rdx
addq $0x1, %rdx
movq 0x10(%rsp), %rcx
subq $0x1, %rcx
leaq 0x8c0a(%rip), %rdi      # 0xb62e
movl $0x5, %esi
callq 0x6500
testb $0x1, %al
jne 0x2a34
jmp 0x2a41
movl $0x21, 0x24(%rsp)
jmp 0x2b60
jmp 0x2b58
movq 0x18(%rsp), %rdx
addq $0x1, %rdx
movq 0x10(%rsp), %rcx
subq $0x1, %rcx
leaq 0x8bd5(%rip), %rdi      # 0xb634
movl $0x4, %esi
callq 0x6500
testb $0x1, %al
jne 0x2a6f
jmp 0x2a7c
movl $0x22, 0x24(%rsp)
jmp 0x2b60
jmp 0x2b58
movq 0x18(%rsp), %rdx
addq $0x1, %rdx
movq 0x10(%rsp), %rcx
subq $0x1, %rcx
leaq 0x8b9f(%rip), %rdi      # 0xb639
movl $0x3, %esi
callq 0x6500
testb $0x1, %al
jne 0x2aaa
jmp 0x2ab7
movl $0x23, 0x24(%rsp)
jmp 0x2b60
movq 0x18(%rsp), %rdx
addq $0x1, %rdx
movq 0x10(%rsp), %rcx
subq $0x1, %rcx
leaq 0x93c7(%rip), %rdi      # 0xbe97
movl $0x3, %esi
callq 0x6500
testb $0x1, %al
jne 0x2ae0
jmp 0x2aea
movl $0x24, 0x24(%rsp)
jmp 0x2b60
jmp 0x2b58
movq 0x18(%rsp), %rdx
addq $0x1, %rdx
movq 0x10(%rsp), %rcx
subq $0x1, %rcx
leaq 0x8b38(%rip), %rdi      # 0xb63d
movl $0x2, %esi
callq 0x6500
testb $0x1, %al
jne 0x2b15
jmp 0x2b1f
movl $0x25, 0x24(%rsp)
jmp 0x2b60
jmp 0x2b58
movq 0x18(%rsp), %rdx
addq $0x1, %rdx
movq 0x10(%rsp), %rcx
subq $0x1, %rcx
leaq 0x8b06(%rip), %rdi      # 0xb640
movl $0x4, %esi
callq 0x6500
testb $0x1, %al
jne 0x2b4a
jmp 0x2b54
movl $0x26, 0x24(%rsp)
jmp 0x2b60
jmp 0x2b58
jmp 0x2b58
movl $0x14, 0x24(%rsp)
movl 0x24(%rsp), %eax
addq $0x28, %rsp
retq
nopl (%rax)