summaryrefslogtreecommitdiff
path: root/src/parsers/constant_expression.rs
diff options
context:
space:
mode:
authorBen Bridle <ben@derelict.engineering>2025-02-27 14:53:21 +1300
committerBen Bridle <ben@derelict.engineering>2025-02-27 14:53:31 +1300
commit67470aea034fd46f4bbcfe815c51ad3451043188 (patch)
tree83d78d3d28e094d6a3af347d2ff2ff16472e5421 /src/parsers/constant_expression.rs
parent4e8fae09f0f7d6f3a4ddbe285aeb01ef0622b761 (diff)
downloadtorque-asm-67470aea034fd46f4bbcfe815c51ad3451043188.zip
Finish first working version of Torque
This is a huge and messy commit, worked on piecemeal while traveling and while the language was still being designed.
Diffstat (limited to 'src/parsers/constant_expression.rs')
-rw-r--r--src/parsers/constant_expression.rs52
1 files changed, 0 insertions, 52 deletions
diff --git a/src/parsers/constant_expression.rs b/src/parsers/constant_expression.rs
deleted file mode 100644
index 78dc697..0000000
--- a/src/parsers/constant_expression.rs
+++ /dev/null
@@ -1,52 +0,0 @@
-use crate::*;
-
-
-pub fn parse_constant_expression(string: &str, parent: &Tokeniser) -> ConstantExpression {
- use ConstantExpressionTokenVariant as TokenVar;
- use ConstantExpressionParseError as ParseError;
-
- let mut tokens = Vec::new();
- let mut t = Tokeniser::new_child(string, parent);
- t.position.to_next_char(); // skip opening delimiter
-
- loop {
- t.drop_whitespace();
- t.mark_start_position();
- 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::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::IntegerLiteral(value),
- Err(_) => TokenVar::Error(
- ParseError::InvalidHexadecimalLiteral(stripped.to_string())),
- }
- } else {
- match usize::from_str_radix(&token, 10) {
- Ok(value) => TokenVar::IntegerLiteral(value),
- Err(_) => TokenVar::SymbolReference(token.to_string()),
- }
- }
- };
-
- let source = t.mark_end_position();
- tokens.push(ConstantExpressionToken { source, variant });
- }
-
- return ConstantExpression { tokens };
-}