// File: RuiDGPires[P]CrimLang/src/tokenizer.cpp
// Function: Tracker::parse_symbol(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
bool Tracker::parse_symbol(std::string str){
	if (str.compare("*") == 0)
		this->current_token.type = crl::Token::Type::TIMES;
	else if (str.compare("+") == 0)
		this->current_token.type = crl::Token::Type::PLUS;
	else if (str.compare("++") == 0)
		this->current_token.type = crl::Token::Type::INC;
	else if (str.compare("-") == 0)
		this->current_token.type = crl::Token::Type::MINUS;
	else if (str.compare("--") == 0)
		this->current_token.type = crl::Token::Type::DECR;
	else if (str.compare("/") == 0)
		this->current_token.type = crl::Token::Type::SLASH;
	else if (str.compare(".") == 0)
		this->current_token.type = crl::Token::Type::DOT;
	else if (str.compare("(") == 0)
		this->current_token.type = crl::Token::Type::LPAREN;
	else if (str.compare(")") == 0)
		this->current_token.type = crl::Token::Type::RPAREN;
	else if (str.compare("{") == 0)
		this->current_token.type = crl::Token::Type::LBRACK;
	else if (str.compare("}") == 0)
		this->current_token.type = crl::Token::Type::RBRACK;
	else if (str.compare("[") == 0)
		this->current_token.type = crl::Token::Type::LSBR;
	else if (str.compare("]") == 0)
		this->current_token.type = crl::Token::Type::RSBR;
	else if (str.compare("$") == 0)
		this->current_token.type = crl::Token::Type::DOLLAR;
	else if (str.compare("&") == 0)
		this->current_token.type = crl::Token::Type::AND;
	else if (str.compare("&&") == 0)
		this->current_token.type = crl::Token::Type::LAND;
	else if (str.compare("|") == 0)
		this->current_token.type = crl::Token::Type::OR;
	else if (str.compare("||") == 0)
		this->current_token.type = crl::Token::Type::LOR;
	else if (str.compare(":") == 0)
		this->current_token.type = crl::Token::Type::CLN;
	else if (str.compare(";") == 0)
		this->current_token.type = crl::Token::Type::SEMICLN;
	else if (str.compare(",") == 0)
		this->current_token.type = crl::Token::Type::COMMA;
	else if (str.compare("=") == 0)
		this->current_token.type = crl::Token::Type::BECOMES;
	else if (str.compare("+=") == 0)
		this->current_token.type = crl::Token::Type::PLEQ;
	else if (str.compare("-=") == 0)
		this->current_token.type = crl::Token::Type::MIEQ;
	else if (str.compare("*=") == 0)
		this->current_token.type = crl::Token::Type::TIEQ;
	else if (str.compare("/=") == 0)
		this->current_token.type = crl::Token::Type::SLEQ;
	else if (str.compare("==") == 0)
		this->current_token.type = crl::Token::Type::EQL;
	else if (str.compare(">=") == 0)
		this->current_token.type = crl::Token::Type::GEQ;
	else if (str.compare("<=") == 0)
		this->current_token.type = crl::Token::Type::LEQ;
	else if (str.compare(">") == 0)
		this->current_token.type = crl::Token::Type::GTR;
	else if (str.compare("<") == 0)
		this->current_token.type = crl::Token::Type::LSS;
	else if (str.compare("!=") == 0)
		this->current_token.type = crl::Token::Type::NEQ;
	else if (str.compare("//") == 0){
		this->current_token.type = crl::Token::Type::NONE;
		this->current_token.str = ""; 
		this->state = PState::COMMENT;
	}
	else return 0;

	return 1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rsi, -0x30(%rbp)
movq %rdi, %rax
movq -0x30(%rbp), %rdi
movq %rdi, -0x28(%rbp)
movq %rax, -0x10(%rbp)
movq %rdi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x20(%rbp)
leaq 0x360a(%rip), %rsi      # 0x2bdc8
callq 0x4100
cmpl $0x0, %eax
jne 0x287d8
movq -0x20(%rbp), %rax
movl $0x15, 0x20(%rax)
jmp 0x28ccc
movq -0x28(%rbp), %rdi
leaq 0x35e8(%rip), %rsi      # 0x2bdcb
callq 0x4100
cmpl $0x0, %eax
jne 0x287fd
movq -0x20(%rbp), %rax
movl $0x16, 0x20(%rax)
jmp 0x28cca
movq -0x28(%rbp), %rdi
leaq 0x35c2(%rip), %rsi      # 0x2bdca
callq 0x4100
cmpl $0x0, %eax
jne 0x28822
movq -0x20(%rbp), %rax
movl $0x18, 0x20(%rax)
jmp 0x28cc8
movq -0x28(%rbp), %rdi
leaq 0x35a1(%rip), %rsi      # 0x2bdce
callq 0x4100
cmpl $0x0, %eax
jne 0x28847
movq -0x20(%rbp), %rax
movl $0x17, 0x20(%rax)
jmp 0x28cc6
movq -0x28(%rbp), %rdi
leaq 0x357b(%rip), %rsi      # 0x2bdcd
callq 0x4100
cmpl $0x0, %eax
jne 0x2886c
movq -0x20(%rbp), %rax
movl $0x19, 0x20(%rax)
jmp 0x28cc4
movq -0x28(%rbp), %rdi
leaq 0x3588(%rip), %rsi      # 0x2bdff
callq 0x4100
cmpl $0x0, %eax
jne 0x28891
movq -0x20(%rbp), %rax
movl $0x1a, 0x20(%rax)
jmp 0x28cc2
movq -0x28(%rbp), %rdi
leaq 0x3534(%rip), %rsi      # 0x2bdd0
callq 0x4100
cmpl $0x0, %eax
jne 0x288b6
movq -0x20(%rbp), %rax
movl $0x1d, 0x20(%rax)
jmp 0x28cc0
movq -0x28(%rbp), %rdi
leaq 0x2894(%rip), %rsi      # 0x2b155
callq 0x4100
cmpl $0x0, %eax
jne 0x288db
movq -0x20(%rbp), %rax
movl $0x20, 0x20(%rax)
jmp 0x28cbe
movq -0x28(%rbp), %rdi
leaq 0x34b7(%rip), %rsi      # 0x2bd9d
callq 0x4100
cmpl $0x0, %eax
jne 0x28900
movq -0x20(%rbp), %rax
movl $0x21, 0x20(%rax)
jmp 0x28cbc
movq -0x28(%rbp), %rdi
leaq 0x34c7(%rip), %rsi      # 0x2bdd2
callq 0x4100
cmpl $0x0, %eax
jne 0x28925
movq -0x20(%rbp), %rax
movl $0x24, 0x20(%rax)
jmp 0x28cba
movq -0x28(%rbp), %rdi
leaq 0x34a4(%rip), %rsi      # 0x2bdd4
callq 0x4100
cmpl $0x0, %eax
jne 0x2894a
movq -0x20(%rbp), %rax
movl $0x25, 0x20(%rax)
jmp 0x28cb8
movq -0x28(%rbp), %rdi
leaq 0x2a69(%rip), %rsi      # 0x2b3be
callq 0x4100
cmpl $0x0, %eax
jne 0x2896f
movq -0x20(%rbp), %rax
movl $0x22, 0x20(%rax)
jmp 0x28cb6
movq -0x28(%rbp), %rdi
leaq 0x3425(%rip), %rsi      # 0x2bd9f
callq 0x4100
cmpl $0x0, %eax
jne 0x28994
movq -0x20(%rbp), %rax
movl $0x23, 0x20(%rax)
jmp 0x28cb4
movq -0x28(%rbp), %rdi
leaq 0x3437(%rip), %rsi      # 0x2bdd6
callq 0x4100
cmpl $0x0, %eax
jne 0x289b9
movq -0x20(%rbp), %rax
movl $0x26, 0x20(%rax)
jmp 0x28cb2
movq -0x28(%rbp), %rdi
leaq 0x3415(%rip), %rsi      # 0x2bdd9
callq 0x4100
cmpl $0x0, %eax
jne 0x289de
movq -0x20(%rbp), %rax
movl $0x1e, 0x20(%rax)
jmp 0x28cb0
movq -0x28(%rbp), %rdi
leaq 0x33ef(%rip), %rsi      # 0x2bdd8
callq 0x4100
cmpl $0x0, %eax
jne 0x28a03
movq -0x20(%rbp), %rax
movl $0x36, 0x20(%rax)
jmp 0x28cae
movq -0x28(%rbp), %rdi
leaq 0x33ce(%rip), %rsi      # 0x2bddc
callq 0x4100
cmpl $0x0, %eax
jne 0x28a28
movq -0x20(%rbp), %rax
movl $0x1f, 0x20(%rax)
jmp 0x28cac
movq -0x28(%rbp), %rdi
leaq 0x33a8(%rip), %rsi      # 0x2bddb
callq 0x4100
cmpl $0x0, %eax
jne 0x28a4d
movq -0x20(%rbp), %rax
movl $0x35, 0x20(%rax)
jmp 0x28caa
movq -0x28(%rbp), %rdi
leaq 0x3386(%rip), %rsi      # 0x2bdde
callq 0x4100
cmpl $0x0, %eax
jne 0x28a72
movq -0x20(%rbp), %rax
movl $0x27, 0x20(%rax)
jmp 0x28ca8
movq -0x28(%rbp), %rdi
leaq 0x3363(%rip), %rsi      # 0x2bde0
callq 0x4100
cmpl $0x0, %eax
jne 0x28a97
movq -0x20(%rbp), %rax
movl $0x28, 0x20(%rax)
jmp 0x28ca6
movq -0x28(%rbp), %rdi
leaq 0x3340(%rip), %rsi      # 0x2bde2
callq 0x4100
cmpl $0x0, %eax
jne 0x28abc
movq -0x20(%rbp), %rax
movl $0x29, 0x20(%rax)
jmp 0x28ca4
movq -0x28(%rbp), %rdi
leaq 0x3335(%rip), %rsi      # 0x2bdfc
callq 0x4100
cmpl $0x0, %eax
jne 0x28ae1
movq -0x20(%rbp), %rax
movl $0x2a, 0x20(%rax)
jmp 0x28ca2
movq -0x28(%rbp), %rdi
leaq 0x32f8(%rip), %rsi      # 0x2bde4
callq 0x4100
cmpl $0x0, %eax
jne 0x28b06
movq -0x20(%rbp), %rax
movl $0x2b, 0x20(%rax)
jmp 0x28ca0
movq -0x28(%rbp), %rdi
leaq 0x32d6(%rip), %rsi      # 0x2bde7
callq 0x4100
cmpl $0x0, %eax
jne 0x28b2b
movq -0x20(%rbp), %rax
movl $0x2c, 0x20(%rax)
jmp 0x28c9e
movq -0x28(%rbp), %rdi
leaq 0x32b4(%rip), %rsi      # 0x2bdea
callq 0x4100
cmpl $0x0, %eax
jne 0x28b50
movq -0x20(%rbp), %rax
movl $0x2d, 0x20(%rax)
jmp 0x28c9c
movq -0x28(%rbp), %rdi
leaq 0x3292(%rip), %rsi      # 0x2bded
callq 0x4100
cmpl $0x0, %eax
jne 0x28b75
movq -0x20(%rbp), %rax
movl $0x2e, 0x20(%rax)
jmp 0x28c9a
movq -0x28(%rbp), %rdi
leaq 0x3270(%rip), %rsi      # 0x2bdf0
callq 0x4100
cmpl $0x0, %eax
jne 0x28b9a
movq -0x20(%rbp), %rax
movl $0x2f, 0x20(%rax)
jmp 0x28c98
movq -0x28(%rbp), %rdi
leaq 0x324e(%rip), %rsi      # 0x2bdf3
callq 0x4100
cmpl $0x0, %eax
jne 0x28bbf
movq -0x20(%rbp), %rax
movl $0x30, 0x20(%rax)
jmp 0x28c96
movq -0x28(%rbp), %rdi
leaq 0x322c(%rip), %rsi      # 0x2bdf6
callq 0x4100
cmpl $0x0, %eax
jne 0x28be4
movq -0x20(%rbp), %rax
movl $0x31, 0x20(%rax)
jmp 0x28c94
movq -0x28(%rbp), %rdi
leaq 0x3239(%rip), %rsi      # 0x2be28
callq 0x4100
cmpl $0x0, %eax
jne 0x28c09
movq -0x20(%rbp), %rax
movl $0x32, 0x20(%rax)
jmp 0x28c92
movq -0x28(%rbp), %rdi
leaq 0x31e5(%rip), %rsi      # 0x2bdf9
callq 0x4100
cmpl $0x0, %eax
jne 0x28c2b
movq -0x20(%rbp), %rax
movl $0x33, 0x20(%rax)
jmp 0x28c90
movq -0x28(%rbp), %rdi
leaq 0x31c5(%rip), %rsi      # 0x2bdfb
callq 0x4100
cmpl $0x0, %eax
jne 0x28c4d
movq -0x20(%rbp), %rax
movl $0x34, 0x20(%rax)
jmp 0x28c8e
movq -0x28(%rbp), %rdi
leaq 0x31a6(%rip), %rsi      # 0x2bdfe
callq 0x4100
cmpl $0x0, %eax
jne 0x28c86
movq -0x20(%rbp), %rdi
movl $0x0, 0x20(%rdi)
leaq 0x2870(%rip), %rsi      # 0x2b4e4
callq 0x4440
movq -0x20(%rbp), %rax
movl $0x6, 0x38(%rax)
jmp 0x28c8c
movb $0x0, -0x1(%rbp)
jmp 0x28cd0
jmp 0x28c8e
jmp 0x28c90
jmp 0x28c92
jmp 0x28c94
jmp 0x28c96
jmp 0x28c98
jmp 0x28c9a
jmp 0x28c9c
jmp 0x28c9e
jmp 0x28ca0
jmp 0x28ca2
jmp 0x28ca4
jmp 0x28ca6
jmp 0x28ca8
jmp 0x28caa
jmp 0x28cac
jmp 0x28cae
jmp 0x28cb0
jmp 0x28cb2
jmp 0x28cb4
jmp 0x28cb6
jmp 0x28cb8
jmp 0x28cba
jmp 0x28cbc
jmp 0x28cbe
jmp 0x28cc0
jmp 0x28cc2
jmp 0x28cc4
jmp 0x28cc6
jmp 0x28cc8
jmp 0x28cca
jmp 0x28ccc
movb $0x1, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax,%rax)