// File: /workspace/github_c_makefile_star2_O2/adamjedlicka[P]blu/src/vm/parser/parser.c
// Function: bluParserNextToken
bluToken bluParserNextToken(bluParser* parser) {
	skipWhitespace(parser);

	parser->from = parser->at;
	parser->lineFrom = parser->lineTo;
	parser->columnFrom = parser->columnTo;

	if (isAtEnd(parser)) return eof(parser);

	char c = advance(parser);
	if (isAlpha(c)) return identifier(parser);
	if (isDigit(c)) return number(parser);

	switch (c) {
	case '(': return makeToken(parser, TOKEN_LEFT_PAREN);
	case ')': return makeToken(parser, TOKEN_RIGHT_PAREN);
	case '[': return makeToken(parser, TOKEN_LEFT_BRACKET);
	case ']': return makeToken(parser, TOKEN_RIGHT_BRACKET);
	case '{': return makeToken(parser, TOKEN_LEFT_BRACE);
	case '}': return makeToken(parser, TOKEN_RIGHT_BRACE);
	case ';': return makeToken(parser, TOKEN_SEMICOLON);
	case '@': return makeToken(parser, TOKEN_AT);
	case '^': return makeToken(parser, TOKEN_CARET);
	case ':': return makeToken(parser, TOKEN_COLON);
	case ',': return makeToken(parser, TOKEN_COMMA);
	case '.': return makeToken(parser, TOKEN_DOT);
	case '-': return makeToken(parser, TOKEN_MINUS);
	case '+': return makeToken(parser, TOKEN_PLUS);
	case '/': return makeToken(parser, TOKEN_SLASH);
	case '*': return makeToken(parser, TOKEN_STAR);
	case '%': return makeToken(parser, TOKEN_PERCENT);
	case '!': return makeToken(parser, match(parser, '=') ? TOKEN_BANG_EQUAL : TOKEN_BANG);
	case '=': return makeToken(parser, match(parser, '=') ? TOKEN_EQUAL_EQUAL : TOKEN_EQUAL);
	case '<': return makeToken(parser, match(parser, '=') ? TOKEN_LESS_EQUAL : TOKEN_LESS);
	case '>': return makeToken(parser, match(parser, '=') ? TOKEN_GREATER_EQUAL : TOKEN_GREATER);
	case '"': return string(parser);
	case '\n': return newline(parser);
	}

	return errorToken(parser, "Unexpected character.");
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movq (%r14), %rdx
movl 0xc(%r14), %eax
movslq %eax, %rsi
movzbl (%rdx,%rsi), %eax
cmpl $0x9, %eax
je 0x5df9
cmpl $0xd, %eax
je 0x5df9
cmpl $0x2f, %eax
je 0x5e03
cmpl $0x20, %eax
jne 0x5e2c
movq %r14, %rdi
callq 0x632c
jmp 0x5dd7
cmpb $0x2f, 0x1(%rdx,%rsi)
jne 0x5e2c
movb $0x2f, %al
movzbl %al, %eax
testb %al, %al
je 0x5dd7
cmpl $0xa, %eax
je 0x5dd7
movq %r14, %rdi
callq 0x632c
movq (%r14), %rax
movslq 0xc(%r14), %rcx
movb (%rax,%rcx), %al
jmp 0x5e0c
movl %esi, 0x8(%r14)
movl 0x14(%r14), %eax
movl 0x1c(%r14), %ecx
movl %eax, 0x10(%r14)
movl %ecx, 0x18(%r14)
cmpb $0x0, (%rdx,%rsi)
je 0x5f18
movq %r14, %rdi
callq 0x632c
cmpb $0x5f, %al
je 0x5e98
movl %eax, %ecx
andb $-0x21, %cl
addb $-0x41, %cl
cmpb $0x19, %cl
jbe 0x5e98
leal -0x30(%rax), %ecx
cmpb $0x9, %cl
ja 0x5f51
movq (%r14), %rax
movslq 0xc(%r14), %rcx
movb (%rax,%rcx), %dl
leal -0x30(%rdx), %esi
cmpb $0x9, %sil
ja 0x5fb8
movq %r14, %rdi
callq 0x632c
jmp 0x5e6f
movq %r14, %rdi
callq 0x632c
movq (%r14), %rax
movslq 0xc(%r14), %rcx
movb (%rax,%rcx), %dl
leal -0x30(%rdx), %esi
cmpb $0xa, %sil
jb 0x5e90
cmpb $0x5f, %dl
je 0x5e90
andb $-0x21, %dl
addb $-0x41, %dl
cmpb $0x19, %dl
jbe 0x5e90
movslq 0x8(%r14), %rsi
movzbl (%rax,%rsi), %edi
pushq $0x19
popq %rdx
addl $-0x61, %edi
cmpl $0x16, %edi
ja 0x617f
leaq 0x49d7(%rip), %r8       # 0xa8b0
movslq (%r8,%rdi,4), %rdi
addq %r8, %rdi
jmpq *%rdi
subl %esi, %ecx
cmpl $0x2, %ecx
jl 0x617f
movzbl 0x1(%rax,%rsi), %eax
cmpl $0x73, %eax
je 0x62a0
cmpl $0x6e, %eax
jne 0x617f
leaq 0x4abd(%rip), %rcx      # 0xa9c8
pushq $0x2
popq %rsi
pushq $0x1
popq %rdx
pushq $0x1c
jmp 0x6173
cmpb $0x0, 0x60(%r14)
je 0x5f2c
movb $0x5, %dl
leaq 0x4a2e(%rip), %rsi      # 0xa956
pushq $0x2f
jmp 0x5f3c
movb $0x1, 0x60(%r14)
movb $0x9, %dl
leaq 0x4a12(%rip), %rsi      # 0xa94c
pushq $0x30
popq %rdi
movl %edi, (%rbx)
movq %rsi, 0x8(%rbx)
movb %dl, 0x10(%rbx)
movl %eax, 0x14(%rbx)
movl %ecx, 0x18(%rbx)
jmp 0x618a
movzbl %al, %eax
leal -0x21(%rax), %ecx
cmpl $0x1f, %ecx
ja 0x5fe7
leaq 0x48c9(%rip), %rax      # 0xa830
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movq %r14, %rdi
callq 0x6390
movzbl %al, %edx
xorl $0xd, %edx
jmp 0x617f
movq (%r14), %rax
movslq 0xc(%r14), %rcx
movzbl (%rax,%rcx), %eax
cmpl $0xa, %eax
je 0x5fa5
testl %eax, %eax
je 0x62c3
cmpl $0x22, %eax
jne 0x5fae
jmp 0x62b4
incl 0x14(%r14)
andl $0x0, 0x1c(%r14)
movq %r14, %rdi
callq 0x632c
jmp 0x5f83
cmpb $0x2e, %dl
jne 0x5fdf
movb 0x1(%rax,%rcx), %al
addb $-0x30, %al
cmpb $0x9, %al
ja 0x5fdf
movq %r14, %rdi
callq 0x632c
movq (%r14), %rax
movslq 0xc(%r14), %rcx
movb (%rax,%rcx), %al
addb $-0x30, %al
cmpb $0xa, %al
jb 0x5fc7
pushq $0x1a
popq %rdx
jmp 0x617f
cmpl $0xa, %eax
je 0x624a
cmpl $0x5b, %eax
je 0x6243
cmpl $0x5d, %eax
je 0x622e
cmpl $0x5e, %eax
je 0x623c
cmpl $0x7b, %eax
je 0x6235
cmpl $0x7d, %eax
jne 0x6195
pushq $0x8
jmp 0x5fe1
subl %esi, %ecx
cmpl $0x2, %ecx
jl 0x617f
cmpb $0x72, 0x1(%rax,%rsi)
jne 0x617f
leaq 0x3929(%rip), %rcx      # 0x9967
pushq $0x2
popq %rdx
pushq $0x2c
jmp 0x614a
subl %esi, %ecx
cmpl $0x2, %ecx
jl 0x617f
movzbl 0x1(%rax,%rsi), %edi
cmpl $0x6f, %edi
je 0x62ed
cmpl $0x6e, %edi
je 0x62da
cmpl $0x61, %edi
jne 0x617f
leaq 0x4945(%rip), %rcx      # 0xa9bf
pushq $0x2
popq %rsi
pushq $0x3
popq %rdx
pushq $0x22
jmp 0x6173
leaq 0x48b9(%rip), %rcx      # 0xa947
pushq $0x1
popq %rsi
pushq $0x4
popq %rdx
pushq $0x2e
jmp 0x6173
subl %esi, %ecx
cmpl $0x2, %ecx
jl 0x617f
movzbl 0x1(%rax,%rsi), %eax
cmpl $0x6d, %eax
je 0x627b
cmpl $0x66, %eax
jne 0x617f
pushq $0x2
popq %rsi
pushq $0x26
jmp 0x62df
leaq 0x4876(%rip), %rcx      # 0xa944
pushq $0x1
popq %rsi
pushq $0x2
popq %rdx
pushq $0x2d
jmp 0x6173
subl %esi, %ecx
cmpl $0x2, %ecx
jl 0x617f
movzbl 0x1(%rax,%rsi), %eax
cmpl $0x6c, %eax
je 0x628f
cmpl $0x63, %eax
jne 0x617f
leaq 0x4828(%rip), %rcx      # 0xa92c
pushq $0x2
popq %rdx
pushq $0x20
jmp 0x614a
leaq 0x3923(%rip), %rcx      # 0x9a35
pushq $0x1
popq %rsi
pushq $0x4
popq %rdx
pushq $0x1f
jmp 0x6173
leaq 0x4804(%rip), %rcx      # 0xa927
pushq $0x1
popq %rsi
pushq $0x4
popq %rdx
pushq $0x1e
jmp 0x6173
leaq 0x3919(%rip), %rcx      # 0x9a4d
pushq $0x1
popq %rsi
pushq $0x2
popq %rdx
pushq $0x28
jmp 0x6173
leaq 0x4800(%rip), %rcx      # 0xa945
pushq $0x1
popq %rdx
pushq $0x29
popq %r8
movq %r14, %rdi
movl %edx, %esi
jmp 0x6178
leaq 0x47e4(%rip), %rcx      # 0xa93e
pushq $0x1
popq %rsi
pushq $0x5
popq %rdx
pushq $0x2b
jmp 0x6173
leaq 0x47cd(%rip), %rcx      # 0xa938
pushq $0x1
popq %rsi
pushq $0x5
popq %rdx
pushq $0x2a
popq %r8
movq %r14, %rdi
callq 0x63e6
movl %eax, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x6340
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x4770(%rip), %rdx      # 0xa90c
jmp 0x62ca
movq %r14, %rdi
callq 0x6390
movzbl %al, %edx
xorl $0x11, %edx
jmp 0x617f
pushq $0x14
jmp 0x5fe1
pushq $0x16
jmp 0x5fe1
pushq $0x4
jmp 0x5fe1
pushq $0x15
jmp 0x5fe1
movq %r14, %rdi
callq 0x6390
movzbl %al, %edx
xorl $0x13, %edx
jmp 0x617f
pushq $0xa
jmp 0x5fe1
pushq $0x7
jmp 0x5fe1
pushq $0x3
jmp 0x5fe1
pushq $0xb
jmp 0x5fe1
pushq $0x18
jmp 0x5fe1
pushq $0x2
jmp 0x5fe1
pushq $0x17
jmp 0x5fe1
movq %rbx, %rdi
movq %r14, %rsi
xorl %edx, %edx
jmp 0x6185
movq %r14, %rdi
callq 0x6390
movzbl %al, %edx
xorl $0xf, %edx
jmp 0x617f
pushq $0x9
jmp 0x5fe1
pushq $0x5
jmp 0x5fe1
pushq $0x1
jmp 0x5fe1
pushq $0x6
jmp 0x5fe1
incl 0x14(%r14)
andl $0x0, 0x1c(%r14)
movl $0x30, (%rbx)
leaq 0x46ec(%rip), %rax      # 0xa94c
movq %rax, 0x8(%rbx)
movb $0x9, 0x10(%rbx)
movl 0x10(%r14), %eax
movl %eax, 0x14(%rbx)
movl 0x18(%r14), %eax
movl %eax, 0x18(%rbx)
jmp 0x618a
leaq 0x46b1(%rip), %rcx      # 0xa933
pushq $0x2
popq %rsi
pushq $0x4
popq %rdx
pushq $0x27
jmp 0x6173
leaq 0x472a(%rip), %rcx      # 0xa9c0
pushq $0x2
popq %rdx
pushq $0x21
jmp 0x614a
leaq 0x467b(%rip), %rcx      # 0xa922
pushq $0x2
popq %rsi
pushq $0x4
popq %rdx
pushq $0x1d
jmp 0x6173
movq %r14, %rdi
callq 0x632c
pushq $0x1b
jmp 0x5fe1
leaq 0x4692(%rip), %rdx      # 0xa95c
movq %rbx, %rdi
movq %r14, %rsi
callq 0x63ad
jmp 0x618a
pushq $0x2
popq %rsi
pushq $0x23
popq %r8
movq %r14, %rdi
xorl %edx, %edx
xorl %ecx, %ecx
jmp 0x6178
cmpl $0x2, %ecx
je 0x617f
cmpb $0x72, 0x2(%rax,%rsi)
jne 0x617f
cmpl $0x4, %ecx
jb 0x6325
cmpb $0x65, 0x3(%rax,%rsi)
jne 0x617f
leaq 0x4617(%rip), %rcx      # 0xa92f
pushq $0x4
popq %rsi
pushq $0x3
popq %rdx
pushq $0x25
jmp 0x6173
pushq $0x3
popq %rsi
pushq $0x24
jmp 0x62df