// File: /workspace/github_cpp_makefile_star2_O3/mhe[P]raytracerframework_cpp/yaml/scanner.cpp
// Function: YAML::Scanner::ScanNextToken()
void Scanner::ScanNextToken()
	{
		if(m_endedStream)
			return;

		if(!m_startedStream)
			return StartStream();

		// get rid of whitespace, etc. (in between tokens it should be irrelevent)
		ScanToNextToken();

		// check the latest simple key
		VerifySimpleKey();

		// maybe need to end some blocks
		PopIndentTo(INPUT.column);

		// *****
		// And now branch based on the next few characters!
		// *****

		// end of stream
		if(INPUT.peek() == EOF)
			return EndStream();

		if(INPUT.column == 0 && INPUT.peek() == Keys::Directive)
			return ScanDirective();

		// document token
		if(INPUT.column == 0 && Exp::DocStart.Matches(INPUT))
			return ScanDocStart();

		if(INPUT.column == 0 && Exp::DocEnd.Matches(INPUT))
			return ScanDocEnd();

		// flow start/end/entry
		if(INPUT.peek() == Keys::FlowSeqStart || INPUT.peek() == Keys::FlowMapStart)
			return ScanFlowStart();

		if(INPUT.peek() == Keys::FlowSeqEnd || INPUT.peek() == Keys::FlowMapEnd)
			return ScanFlowEnd();
	
		if(INPUT.peek() == Keys::FlowEntry)
			return ScanFlowEntry();

		// block/map stuff
		if(Exp::BlockEntry.Matches(INPUT))
			return ScanBlockEntry();

		if((m_flowLevel == 0 ? Exp::Key : Exp::KeyInFlow).Matches(INPUT))
			return ScanKey();

		if((m_flowLevel == 0 ? Exp::Value : Exp::ValueInFlow).Matches(INPUT))
			return ScanValue();

		// alias/anchor
		if(INPUT.peek() == Keys::Alias || INPUT.peek() == Keys::Anchor)
			return ScanAnchorOrAlias();

		// tag
		if(INPUT.peek() == Keys::Tag)
			return ScanTag();

		// special scalars
		if(m_flowLevel == 0 && (INPUT.peek() == Keys::LiteralScalar || INPUT.peek() == Keys::FoldedScalar))
			return ScanBlockScalar();

		if(INPUT.peek() == '\'' || INPUT.peek() == '\"')
			return ScanQuotedScalar();

		// plain scalars
		if((m_flowLevel == 0 ? Exp::PlainScalar : Exp::PlainScalarInFlow).Matches(INPUT))
			return ScanPlainScalar();

		// don't know what it is!
		throw ParserException(INPUT.line, INPUT.column, ErrorMsg::UNKNOWN_TOKEN);
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
cmpb $0x0, 0x61(%rdi)
jne 0x2ac00
movq %rdi, %rbx
cmpb $0x0, 0x60(%rdi)
je 0x2abdf
movq %rbx, %rdi
callq 0x2aea2
movq %rbx, %rdi
xorl %esi, %esi
callq 0x2eec8
movl 0xc(%rbx), %esi
movq %rbx, %rdi
callq 0x2af72
movq %rbx, %rdi
callq 0x2f2b6
cmpb $-0x1, %al
je 0x2ac09
cmpl $0x0, 0xc(%rbx)
je 0x2ac19
movq %rbx, %rdi
callq 0x2f2b6
cmpb $0x5b, %al
je 0x2abcf
movq %rbx, %rdi
callq 0x2f2b6
cmpb $0x7b, %al
jne 0x2ac35
movq %rbx, %rdi
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x2c9d2
movb $0x1, %al
movb %al, 0x60(%rbx)
movb %al, 0x62(%rbx)
addq $0xc0, %rbx
leaq -0x14(%rbp), %rsi
movl $0xffffffff, (%rsi)     # imm = 0xFFFFFFFF
movq %rbx, %rdi
callq 0x2b9e0
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
movq %rbx, %rdi
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x2b07a
movq %rbx, %rdi
callq 0x2f2b6
cmpb $0x25, %al
jne 0x2ac5d
movq %rbx, %rdi
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x2c5a8
movq %rbx, %rdi
callq 0x2f2b6
cmpb $0x5d, %al
je 0x2ac4d
movq %rbx, %rdi
callq 0x2f2b6
cmpb $0x7d, %al
jne 0x2ac8a
movq %rbx, %rdi
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x2ca82
cmpl $0x0, 0xc(%rbx)
jne 0x2abb7
leaq 0x14692(%rip), %rdi     # 0x3f300
movq %rbx, %rsi
callq 0x28ea8
testb %al, %al
je 0x2aca6
movq %rbx, %rdi
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x2c85c
movq %rbx, %rdi
callq 0x2f2b6
cmpb $0x2c, %al
jne 0x2acd7
movq %rbx, %rdi
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x2cb84
cmpl $0x0, 0xc(%rbx)
jne 0x2abb7
leaq 0x14679(%rip), %rdi     # 0x3f330
movq %rbx, %rsi
callq 0x28ea8
testb %al, %al
je 0x2abb7
movq %rbx, %rdi
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x2c916
leaq 0x146b2(%rip), %rdi     # 0x3f390
movq %rbx, %rsi
callq 0x28ea8
testb %al, %al
je 0x2acfa
movq %rbx, %rdi
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x2cc26
cmpl $0x0, 0x64(%rbx)
leaq 0x146bb(%rip), %rax     # 0x3f3c0
leaq 0x146e4(%rip), %rdi     # 0x3f3f0
cmoveq %rax, %rdi
movq %rbx, %rsi
callq 0x28ea8
testb %al, %al
je 0x2ad2c
movq %rbx, %rdi
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x2cd5a
cmpl $0x0, 0x64(%rbx)
leaq 0x146e9(%rip), %rax     # 0x3f420
leaq 0x14712(%rip), %rdi     # 0x3f450
cmoveq %rax, %rdi
movq %rbx, %rsi
callq 0x28ea8
testb %al, %al
je 0x2ad5e
movq %rbx, %rdi
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x2ce74
movq %rbx, %rdi
callq 0x2f2b6
cmpb $0x2a, %al
je 0x2ad76
movq %rbx, %rdi
callq 0x2f2b6
cmpb $0x26, %al
jne 0x2ad86
movq %rbx, %rdi
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x2cf94
movq %rbx, %rdi
callq 0x2f2b6
cmpb $0x21, %al
jne 0x2ada2
movq %rbx, %rdi
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x2d1b6
cmpl $0x0, 0x64(%rbx)
je 0x2add0
movq %rbx, %rdi
callq 0x2f2b6
cmpb $0x27, %al
je 0x2adc0
movq %rbx, %rdi
callq 0x2f2b6
cmpb $0x22, %al
jne 0x2adf8
movq %rbx, %rdi
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x2d6de
movq %rbx, %rdi
callq 0x2f2b6
cmpb $0x7c, %al
je 0x2ade8
movq %rbx, %rdi
callq 0x2f2b6
cmpb $0x3e, %al
jne 0x2ada8
movq %rbx, %rdi
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x2d990
cmpl $0x0, 0x64(%rbx)
leaq 0x146dd(%rip), %rax     # 0x3f4e0
leaq 0x14706(%rip), %rdi     # 0x3f510
cmoveq %rax, %rdi
movq %rbx, %rsi
callq 0x28ea8
testb %al, %al
je 0x2ae2a
movq %rbx, %rdi
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x2d450
movl $0x30, %edi
callq 0x4140
movq %rax, %r14
movl 0x8(%rbx), %esi
movl 0xc(%rbx), %edx
leaq 0x1412c(%rip), %rcx     # 0x3ef70
movq %rax, %rdi
callq 0x257ee
leaq 0xf805(%rip), %rsi      # 0x3a658
leaq -0x11658(%rip), %rdx    # 0x19802
movq %r14, %rdi
callq 0x4510
movq %rax, %rbx
movq %r14, %rdi
callq 0x4230
movq %rbx, %rdi
callq 0x4550
nop