summaryrefslogtreecommitdiff
path: root/src/stages
diff options
context:
space:
mode:
Diffstat (limited to 'src/stages')
-rw-r--r--src/stages/semantic.rs9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/stages/semantic.rs b/src/stages/semantic.rs
index f96a0c5..1e8df56 100644
--- a/src/stages/semantic.rs
+++ b/src/stages/semantic.rs
@@ -101,7 +101,7 @@ impl SemanticParser {
while let Some(argument) = parser.pull_argument_definition() {
arguments.push(argument);
}
- let body = parser.parse_macro_definition_body(SemanticLocation::MacroDefinitionBody);
+ let body = parser.parse_macro_definition_body(&definition.name.source);
self.pull_from(parser);
let definition = MacroDefinition { name: definition.name, arguments, body };
let semantic = SemanticToken::MacroDefinition(definition);
@@ -121,8 +121,9 @@ impl SemanticParser {
}
/// Parse the remaining syntactic tokens as a macro definition body.
- fn parse_macro_definition_body(&mut self, location: SemanticLocation) -> MacroDefinitionBody {
+ fn parse_macro_definition_body(&mut self, source: &SourceSpan) -> MacroDefinitionBody {
let mut tokens = Vec::new();
+ let location = SemanticLocation::MacroDefinitionBody;
while !self.syntactic.is_empty() {
if let Some(token) = self.pull_macro_definition_body_token() {
tokens.push(token);
@@ -138,7 +139,7 @@ impl SemanticParser {
match token {
MacroDefinitionBody::Integer(integer) => {
let error = SemanticError::ExpectedBlock(location);
- let tracked = Tracked::from(error, integer.source);
+ let tracked = Tracked::from(error, source.wrap(integer.source));
self.errors.push(tracked);
}
MacroDefinitionBody::Block(mut tokens) => {
@@ -146,7 +147,7 @@ impl SemanticParser {
}
MacroDefinitionBody::List(list) => {
let error = SemanticError::ExpectedBlock(location);
- let tracked = Tracked::from(error, list.source);
+ let tracked = Tracked::from(error, source.wrap(list.source));
self.errors.push(tracked);
}
MacroDefinitionBody::Invocation(invocation) => {