diff options
Diffstat (limited to 'src/parsers/expression.rs')
-rw-r--r-- | src/parsers/expression.rs | 52 |
1 files changed, 0 insertions, 52 deletions
diff --git a/src/parsers/expression.rs b/src/parsers/expression.rs deleted file mode 100644 index e938881..0000000 --- a/src/parsers/expression.rs +++ /dev/null @@ -1,52 +0,0 @@ -use crate::*; - - -pub fn parse_constant_expression(mut t: Tokeniser, source: SourceSpan) -> Expression { - use ExpressionTokenVariant as TokenVar; - use ExpressionParseError as ParseError; - - let mut tokens = Vec::new(); - - loop { - t.eat_whitespace(); - t.mark_start(); - let token = t.eat_token(); - if token.is_empty() { - break; - } - - let variant = match token.as_str() { - "=" => TokenVar::Operator(Operator::Equal), - "!=" => TokenVar::Operator(Operator::NotEqual), - "<" => TokenVar::Operator(Operator::LessThan), - ">" => TokenVar::Operator(Operator::GreaterThan), - "<=" => TokenVar::Operator(Operator::LessThanEqual), - ">=" => TokenVar::Operator(Operator::GreaterThanEqual), - "+" => TokenVar::Operator(Operator::Add), - "-" => TokenVar::Operator(Operator::Subtract), - "<<" => TokenVar::Operator(Operator::LeftShift), - ">>" => TokenVar::Operator(Operator::RightShift), - "&" => TokenVar::Operator(Operator::And), - "|" => TokenVar::Operator(Operator::Or), - "^" => TokenVar::Operator(Operator::Xor), - "~" => TokenVar::Operator(Operator::Not), - _ => if let Some(stripped) = token.strip_prefix("0x") { - match usize::from_str_radix(stripped, 16) { - Ok(value) => TokenVar::Literal(value as isize), - Err(_) => TokenVar::Error( - ParseError::InvalidHexadecimalLiteral(stripped.to_string())), - } - } else { - match usize::from_str_radix(&token, 10) { - Ok(value) => TokenVar::Literal(value as isize), - Err(_) => TokenVar::Invocation(token.to_string()), - } - } - }; - - let source = t.get_source(); - tokens.push(ExpressionToken { source, variant }); - } - - return Expression { source, tokens }; -} |