Fix lexing tokens starting with '<' and '>'

This commit is contained in:
mrkubax10 2024-08-25 22:22:13 +02:00
parent e7e2f355b0
commit 7a31c754ee

View File

@ -153,22 +153,53 @@ Token Lexer::next_token() {
result.m_type = resolve_similar(ch, TokenType::TOKEN_BITWISE_XOR, TokenType::TOKEN_XOR); result.m_type = resolve_similar(ch, TokenType::TOKEN_BITWISE_XOR, TokenType::TOKEN_XOR);
break; break;
case '<': case '<':
result.m_type = resolve_similar(ch, TokenType::TOKEN_LESS, TokenType::TOKEN_BITWISE_LEFT_SHIFT); switch(m_input.peek()) {
case '<':
m_input.ignore();
if(m_input.peek()=='=') {
m_input.ignore();
result.m_type = TokenType::TOKEN_EQUALS_BITWISE_LEFT_SHIFT;
}
else
result.m_type = TokenType::TOKEN_BITWISE_LEFT_SHIFT;
break;
case '=':
m_input.ignore();
result.m_type = TokenType::TOKEN_LESS_OR_EQUAL;
break;
default:
result.m_type = TokenType::TOKEN_LESS;
break;
}
break; break;
case '>': case '>':
if(m_input.peek()=='>') { switch(m_input.peek()) {
case '>':
m_input.ignore(); m_input.ignore();
if(m_input.peek()=='>') { switch(m_input.peek()) {
case '>':
m_input.ignore(); m_input.ignore();
result.m_type = TokenType::TOKEN_ARITHMETIC_RIGHT_SHIFT; result.m_type = TokenType::TOKEN_ARITHMETIC_RIGHT_SHIFT;
} break;
else case '=':
m_input.ignore();
result.m_type = TokenType::TOKEN_EQUALS_BITWISE_RIGHT_SHIFT;
break;
default:
result.m_type = TokenType::TOKEN_BITWISE_RIGHT_SHIFT; result.m_type = TokenType::TOKEN_BITWISE_RIGHT_SHIFT;
break;
} }
else break;
case '=':
m_input.ignore();
result.m_type = TokenType::TOKEN_GREATER_OR_EQUAL;
break;
default:
result.m_type = TokenType::TOKEN_GREATER; result.m_type = TokenType::TOKEN_GREATER;
break; break;
} }
break;
}
result.m_line = m_line; result.m_line = m_line;
result.m_line_offset = static_cast<unsigned>(m_input.tellg())-m_line_start+1; result.m_line_offset = static_cast<unsigned>(m_input.tellg())-m_line_start+1;
return result; return result;