// File: /workspace/github_c_makefile_star2_O0/adamjedlicka[P]blu/src/vm/parser/parser.c
// Function: identifierType
static bluTokenType identifierType(bluParser* parser) {
	switch (parser->source[parser->from]) {
	case 'a':
		if (parser->at - parser->from > 1) {
			switch (parser->source[parser->from + 1]) {
			case 'n': return checkKeyword(parser, 2, 1, "d", TOKEN_AND);
			case 's': return checkKeyword(parser, 2, 4, "sert", TOKEN_ASSERT);
			}
		}
		break;
	case 'b': return checkKeyword(parser, 1, 4, "reak", TOKEN_BREAK);
	case 'c': return checkKeyword(parser, 1, 4, "lass", TOKEN_CLASS);
	case 'e':
		if (parser->at - parser->from > 1) {
			switch (parser->source[parser->from + 1]) {
			case 'c': return checkKeyword(parser, 2, 2, "ho", TOKEN_ECHO);
			case 'l': return checkKeyword(parser, 2, 2, "se", TOKEN_ELSE);
			}
		}

		break;
	case 'f':
		if (parser->at - parser->from > 1) {
			switch (parser->source[parser->from + 1]) {
			case 'a': return checkKeyword(parser, 2, 3, "lse", TOKEN_FALSE);
			case 'n': return checkKeyword(parser, 2, 0, NULL, TOKEN_FN);
			case 'o': {
				if (parser->at - parser->from > 2) {
					switch (parser->source[parser->from + 2]) {
					case 'r': {
						if (parser->at - parser->from > 3) {
							switch (parser->source[parser->from + 3]) {
							case 'e': return checkKeyword(parser, 4, 3, "ign", TOKEN_FOREIGN);
							}
						} else {
							return checkKeyword(parser, 3, 0, NULL, TOKEN_FOR);
						}
						break;
					}
					}
				}
				break;
			}
			}
		}
		break;
	case 'i':
		if (parser->at - parser->from > 1) {
			switch (parser->source[parser->from + 1]) {
			case 'f': return checkKeyword(parser, 2, 0, NULL, TOKEN_IF);
			case 'm': return checkKeyword(parser, 2, 4, "port", TOKEN_IMPORT);
			}
		}
		break;
	case 'n': return checkKeyword(parser, 1, 2, "il", TOKEN_NIL);
	case 'o': return checkKeyword(parser, 1, 1, "r", TOKEN_OR);
	case 'r': return checkKeyword(parser, 1, 5, "eturn", TOKEN_RETURN);
	case 's': return checkKeyword(parser, 1, 5, "tatic", TOKEN_STATIC);
	case 't':
		if (parser->at - parser->from > 1) {
			switch (parser->source[parser->from + 1]) {
			case 'r': return checkKeyword(parser, 2, 2, "ue", TOKEN_TRUE);
			}
		}
		break;
	case 'v': return checkKeyword(parser, 1, 2, "ar", TOKEN_VAR);
	case 'w': return checkKeyword(parser, 1, 4, "hile", TOKEN_WHILE);
	}

	return TOKEN_IDENTIFIER;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rcx
movq (%rcx), %rax
movslq 0x8(%rcx), %rcx
movsbl (%rax,%rcx), %eax
addl $-0x61, %eax
movl %eax, %ecx
movq %rcx, -0x18(%rbp)
subl $0x16, %eax
ja 0x8d13
movq -0x18(%rbp), %rax
leaq 0x721c(%rip), %rcx      # 0xfac4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
movq -0x10(%rbp), %rcx
subl 0x8(%rcx), %eax
cmpl $0x1, %eax
jle 0x893a
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movslq 0x8(%rax), %rax
movsbl 0x1(%rax,%rcx), %eax
movl %eax, -0x1c(%rbp)
subl $0x6e, %eax
je 0x88e8
jmp 0x88de
movl -0x1c(%rbp), %eax
subl $0x73, %eax
je 0x8910
jmp 0x8938
movq -0x10(%rbp), %rdi
movl $0x2, %esi
movl $0x1, %edx
leaq 0x72e3(%rip), %rcx      # 0xfbe0
movl $0x1c, %r8d
callq 0x8d30
movl %eax, -0x4(%rbp)
jmp 0x8d1a
movq -0x10(%rbp), %rdi
movl $0x2, %esi
movl $0x4, %edx
leaq 0x7211(%rip), %rcx      # 0xfb36
movl $0x1d, %r8d
callq 0x8d30
movl %eax, -0x4(%rbp)
jmp 0x8d1a
jmp 0x893a
jmp 0x8d13
movq -0x10(%rbp), %rdi
movl $0x1, %esi
movl $0x4, %edx
leaq 0x71e7(%rip), %rcx      # 0xfb3b
movl $0x1e, %r8d
callq 0x8d30
movl %eax, -0x4(%rbp)
jmp 0x8d1a
movq -0x10(%rbp), %rdi
movl $0x1, %esi
movl $0x4, %edx
leaq 0x60f1(%rip), %rcx      # 0xea6d
movl $0x1f, %r8d
callq 0x8d30
movl %eax, -0x4(%rbp)
jmp 0x8d1a
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
movq -0x10(%rbp), %rcx
subl 0x8(%rcx), %eax
cmpl $0x1, %eax
jle 0x8a12
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movslq 0x8(%rax), %rax
movsbl 0x1(%rax,%rcx), %eax
movl %eax, -0x20(%rbp)
subl $0x63, %eax
je 0x89c6
jmp 0x89bc
movl -0x20(%rbp), %eax
subl $0x6c, %eax
je 0x89eb
jmp 0x8a10
movq -0x10(%rbp), %rdi
movl $0x2, %edx
leaq 0x716a(%rip), %rcx      # 0xfb40
movl $0x20, %r8d
movl %edx, %esi
callq 0x8d30
movl %eax, -0x4(%rbp)
jmp 0x8d1a
movq -0x10(%rbp), %rdi
movl $0x2, %edx
leaq 0x71dd(%rip), %rcx      # 0xfbd8
movl $0x21, %r8d
movl %edx, %esi
callq 0x8d30
movl %eax, -0x4(%rbp)
jmp 0x8d1a
jmp 0x8a12
jmp 0x8d13
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
movq -0x10(%rbp), %rcx
subl 0x8(%rcx), %eax
cmpl $0x1, %eax
jle 0x8b51
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movslq 0x8(%rax), %rax
movsbl 0x1(%rax,%rcx), %eax
movl %eax, -0x24(%rbp)
subl $0x61, %eax
je 0x8a5f
jmp 0x8a48
movl -0x24(%rbp), %eax
subl $0x6e, %eax
je 0x8a87
jmp 0x8a52
movl -0x24(%rbp), %eax
subl $0x6f, %eax
je 0x8aa9
jmp 0x8b4f
movq -0x10(%rbp), %rdi
movl $0x2, %esi
movl $0x3, %edx
leaq 0x7163(%rip), %rcx      # 0xfbd7
movl $0x22, %r8d
callq 0x8d30
movl %eax, -0x4(%rbp)
jmp 0x8d1a
movq -0x10(%rbp), %rdi
movl $0x2, %esi
xorl %edx, %edx
xorl %eax, %eax
movl %eax, %ecx
movl $0x23, %r8d
callq 0x8d30
movl %eax, -0x4(%rbp)
jmp 0x8d1a
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
movq -0x10(%rbp), %rcx
subl 0x8(%rcx), %eax
cmpl $0x2, %eax
jle 0x8b4d
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movslq 0x8(%rax), %rax
movb 0x2(%rax,%rcx), %al
subb $0x72, %al
jne 0x8b4b
jmp 0x8ad5
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
movq -0x10(%rbp), %rcx
subl 0x8(%rcx), %eax
cmpl $0x3, %eax
jle 0x8b27
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movslq 0x8(%rax), %rax
movb 0x3(%rax,%rcx), %al
subb $0x65, %al
jne 0x8b25
jmp 0x8afd
movq -0x10(%rbp), %rdi
movl $0x4, %esi
movl $0x3, %edx
leaq 0x7031(%rip), %rcx      # 0xfb43
movl $0x25, %r8d
callq 0x8d30
movl %eax, -0x4(%rbp)
jmp 0x8d1a
jmp 0x8b49
movq -0x10(%rbp), %rdi
movl $0x3, %esi
xorl %edx, %edx
xorl %eax, %eax
movl %eax, %ecx
movl $0x24, %r8d
callq 0x8d30
movl %eax, -0x4(%rbp)
jmp 0x8d1a
jmp 0x8b4b
jmp 0x8b4d
jmp 0x8b4f
jmp 0x8b51
jmp 0x8d13
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
movq -0x10(%rbp), %rcx
subl 0x8(%rcx), %eax
cmpl $0x1, %eax
jle 0x8bd9
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movslq 0x8(%rax), %rax
movsbl 0x1(%rax,%rcx), %eax
movl %eax, -0x28(%rbp)
subl $0x66, %eax
je 0x8b8d
jmp 0x8b83
movl -0x28(%rbp), %eax
subl $0x6d, %eax
je 0x8baf
jmp 0x8bd7
movq -0x10(%rbp), %rdi
movl $0x2, %esi
xorl %edx, %edx
xorl %eax, %eax
movl %eax, %ecx
movl $0x26, %r8d
callq 0x8d30
movl %eax, -0x4(%rbp)
jmp 0x8d1a
movq -0x10(%rbp), %rdi
movl $0x2, %esi
movl $0x4, %edx
leaq 0x6f83(%rip), %rcx      # 0xfb47
movl $0x27, %r8d
callq 0x8d30
movl %eax, -0x4(%rbp)
jmp 0x8d1a
jmp 0x8bd9
jmp 0x8d13
movq -0x10(%rbp), %rdi
movl $0x1, %esi
movl $0x2, %edx
leaq 0x5e92(%rip), %rcx      # 0xea85
movl $0x28, %r8d
callq 0x8d30
movl %eax, -0x4(%rbp)
jmp 0x8d1a
movq -0x10(%rbp), %rdi
movl $0x1, %edx
leaq 0x6f43(%rip), %rcx      # 0xfb59
movl $0x29, %r8d
movl %edx, %esi
callq 0x8d30
movl %eax, -0x4(%rbp)
jmp 0x8d1a
movq -0x10(%rbp), %rdi
movl $0x1, %esi
movl $0x5, %edx
leaq 0x6f0c(%rip), %rcx      # 0xfb4c
movl $0x2a, %r8d
callq 0x8d30
movl %eax, -0x4(%rbp)
jmp 0x8d1a
movq -0x10(%rbp), %rdi
movl $0x1, %esi
movl $0x5, %edx
leaq 0x6eea(%rip), %rcx      # 0xfb52
movl $0x2b, %r8d
callq 0x8d30
movl %eax, -0x4(%rbp)
jmp 0x8d1a
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
movq -0x10(%rbp), %rcx
subl 0x8(%rcx), %eax
cmpl $0x1, %eax
jle 0x8cc7
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movslq 0x8(%rax), %rax
movb 0x1(%rax,%rcx), %al
subb $0x72, %al
jne 0x8cc5
jmp 0x8ca3
movq -0x10(%rbp), %rdi
movl $0x2, %edx
leaq 0x5ce8(%rip), %rcx      # 0xe99b
movl $0x2c, %r8d
movl %edx, %esi
callq 0x8d30
movl %eax, -0x4(%rbp)
jmp 0x8d1a
jmp 0x8cc7
jmp 0x8d13
movq -0x10(%rbp), %rdi
movl $0x1, %esi
movl $0x2, %edx
leaq 0x6e7a(%rip), %rcx      # 0xfb58
movl $0x2d, %r8d
callq 0x8d30
movl %eax, -0x4(%rbp)
jmp 0x8d1a
movq -0x10(%rbp), %rdi
movl $0x1, %esi
movl $0x4, %edx
leaq 0x6e58(%rip), %rcx      # 0xfb5b
movl $0x2e, %r8d
callq 0x8d30
movl %eax, -0x4(%rbp)
jmp 0x8d1a
movl $0x19, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)