// File: /workspace/github_c_makefile_star2_O0/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 %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x20(%rbp)
movq %rdi, -0x18(%rbp)
movq %rsi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
callq 0x8240
movq -0x8(%rbp), %rax
movl 0xc(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x8(%rbp), %rax
movl 0x14(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0x8(%rbp), %rax
movl 0x1c(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x18(%rax)
movq -0x8(%rbp), %rdi
callq 0x82f0
testb $0x1, %al
jne 0x7f06
jmp 0x7f18
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
callq 0x8320
jmp 0x8228
movq -0x8(%rbp), %rdi
callq 0x8380
movb %al, -0x9(%rbp)
movsbl -0x9(%rbp), %edi
callq 0x83c0
testb $0x1, %al
jne 0x7f33
jmp 0x7f45
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
callq 0x8410
jmp 0x8228
movsbl -0x9(%rbp), %edi
callq 0x84a0
testb $0x1, %al
jne 0x7f54
jmp 0x7f66
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
callq 0x84d0
jmp 0x8228
movsbl -0x9(%rbp), %eax
addl $-0xa, %eax
movl %eax, %ecx
movq %rcx, -0x28(%rbp)
subl $0x73, %eax
ja 0x8214
movq -0x28(%rbp), %rax
leaq 0x78d1(%rip), %rcx      # 0xf858
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0x7, %edx
callq 0x8580
jmp 0x8228
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0xa, %edx
callq 0x8580
jmp 0x8228
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0x6, %edx
callq 0x8580
jmp 0x8228
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0x9, %edx
callq 0x8580
jmp 0x8228
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0x5, %edx
callq 0x8580
jmp 0x8228
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0x8, %edx
callq 0x8580
jmp 0x8228
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0xb, %edx
callq 0x8580
jmp 0x8228
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
xorl %edx, %edx
callq 0x8580
jmp 0x8228
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0x1, %edx
callq 0x8580
jmp 0x8228
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0x2, %edx
callq 0x8580
jmp 0x8228
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0x3, %edx
callq 0x8580
jmp 0x8228
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0x4, %edx
callq 0x8580
jmp 0x8228
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0x14, %edx
callq 0x8580
jmp 0x8228
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0x16, %edx
callq 0x8580
jmp 0x8228
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0x17, %edx
callq 0x8580
jmp 0x8228
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0x18, %edx
callq 0x8580
jmp 0x8228
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0x15, %edx
callq 0x8580
jmp 0x8228
movq -0x8(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rdi
movl $0x3d, %esi
callq 0x8630
movq -0x20(%rbp), %rdi
movq -0x30(%rbp), %rsi
movb %al, %cl
movl $0xd, %edx
movl $0xc, %eax
testb $0x1, %cl
cmovnel %eax, %edx
callq 0x8580
jmp 0x8228
movq -0x8(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rdi
movl $0x3d, %esi
callq 0x8630
movq -0x20(%rbp), %rdi
movq -0x38(%rbp), %rsi
movb %al, %cl
movl $0xf, %edx
movl $0xe, %eax
testb $0x1, %cl
cmovnel %eax, %edx
callq 0x8580
jmp 0x8228
movq -0x8(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x8(%rbp), %rdi
movl $0x3d, %esi
callq 0x8630
movq -0x20(%rbp), %rdi
movq -0x40(%rbp), %rsi
movb %al, %cl
movl $0x13, %edx
movl $0x12, %eax
testb $0x1, %cl
cmovnel %eax, %edx
callq 0x8580
jmp 0x8228
movq -0x8(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x8(%rbp), %rdi
movl $0x3d, %esi
callq 0x8630
movq -0x20(%rbp), %rdi
movq -0x48(%rbp), %rsi
movb %al, %cl
movl $0x11, %edx
movl $0x10, %eax
testb $0x1, %cl
cmovnel %eax, %edx
callq 0x8580
jmp 0x8228
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
callq 0x8690
jmp 0x8228
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
callq 0x8750
jmp 0x8228
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
leaq 0x78fd(%rip), %rdx      # 0xfb20
callq 0x87a0
movq -0x18(%rbp), %rax
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)