diff options
Diffstat (limited to 'src/stages/semantic.rs')
| -rw-r--r-- | src/stages/semantic.rs | 9 |
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) => { |
