summaryrefslogtreecommitdiff
path: root/src/stages/semantic.rs
diff options
context:
space:
mode:
authorBen Bridle <ben@derelict.engineering>2025-10-13 16:02:33 +1300
committerBen Bridle <ben@derelict.engineering>2025-10-14 16:54:44 +1300
commita051139f6d59cbc77eff99e9417dc21d87eaba6a (patch)
tree333e2179765188ea79c75439d690807e5f779915 /src/stages/semantic.rs
parent647b10dc6c2efb2bc59f64dfef07fa5a18d24f77 (diff)
downloadtorque-asm-a051139f6d59cbc77eff99e9417dc21d87eaba6a.zip
Change string argument syntax to list argument syntax
Changes string arguments from "name" to [name], to prepare for generic lists in the language. Doesn't compile.
Diffstat (limited to 'src/stages/semantic.rs')
-rw-r--r--src/stages/semantic.rs17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/stages/semantic.rs b/src/stages/semantic.rs
index eb9e7b6..b72cfa8 100644
--- a/src/stages/semantic.rs
+++ b/src/stages/semantic.rs
@@ -431,11 +431,13 @@ impl SemanticParser {
let token = self.syntactic.pop()?;
let source = token.source;
match token.value {
+ // Integer-type argument.
SyntacticToken::Symbol(ScopedSymbol::Global(name)) => {
let variant = ArgumentType::Integer;
let definition = ArgumentDefinition { name, variant };
return Some(Tracked::from(definition, source));
}
+ // Block-type argument.
SyntacticToken::BlockLiteral(mut tokens) => {
if tokens.len() == 1 {
let token = tokens.pop().unwrap();
@@ -446,11 +448,16 @@ impl SemanticParser {
}
}
}
- SyntacticToken::StringLiteral(string) => {
- let variant = ArgumentType::String;
- let name = string.string;
- let definition = ArgumentDefinition { name, variant };
- return Some(Tracked::from(definition, source));
+ // List-type argument.
+ SyntacticToken::Expression(mut tokens) => {
+ if tokens.len() == 1 {
+ let token = tokens.pop().unwrap();
+ if let SyntacticToken::Symbol(ScopedSymbol::Global(name)) = token.value {
+ let variant = ArgumentType::List;
+ let definition = ArgumentDefinition { name, variant };
+ return Some(Tracked::from(definition, source));
+ }
+ }
}
_ => (),
};