summaryrefslogtreecommitdiff
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
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.
-rw-r--r--src/stages/semantic.rs17
-rw-r--r--src/stages/semantic_tokens.rs8
2 files changed, 16 insertions, 9 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));
+ }
+ }
}
_ => (),
};
diff --git a/src/stages/semantic_tokens.rs b/src/stages/semantic_tokens.rs
index f112f7f..95a7f21 100644
--- a/src/stages/semantic_tokens.rs
+++ b/src/stages/semantic_tokens.rs
@@ -21,7 +21,7 @@ pub struct ArgumentDefinition {
pub enum ArgumentType {
Integer,
Block,
- String,
+ List,
}
impl std::fmt::Display for ArgumentType {
@@ -29,7 +29,7 @@ impl std::fmt::Display for ArgumentType {
match self {
ArgumentType::Integer => write!(f, "an integer"),
ArgumentType::Block => write!(f, "a block"),
- ArgumentType::String => write!(f, "a string"),
+ ArgumentType::List => write!(f, "a list"),
}
}
}
@@ -216,8 +216,8 @@ fn print_argument_definition(i: usize, argument: &ArgumentDefinition) {
ArgumentType::Block => {
indent!(i, "Argument({}, block)", argument.name)
}
- ArgumentType::String => {
- indent!(i, "Argument({}, string)", argument.name)
+ ArgumentType::List => {
+ indent!(i, "Argument({}, list)", argument.name)
}
}
}