diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/stages/intermediate.rs | 7 | ||||
| -rw-r--r-- | src/stages/semantic.rs | 14 |
2 files changed, 15 insertions, 6 deletions
diff --git a/src/stages/intermediate.rs b/src/stages/intermediate.rs index d630cc2..c5be44f 100644 --- a/src/stages/intermediate.rs +++ b/src/stages/intermediate.rs @@ -321,8 +321,11 @@ impl IntermediateParser { let result = self.parse_invocation(invocation, source)?; match result.value { IntermediateValue::Integer(integer) => { - let source = integer.source.clone(); - Some(Tracked::from(integer, source)) + Some(Tracked::from(integer, source.clone())) + } + IntermediateValue::List(mut integers) if integers.len() == 1 => { + let integer = integers.pop().unwrap(); + Some(Tracked::from(integer, source.clone())) } IntermediateValue::Block(_) | IntermediateValue::List(_) => { let error = IntermediateError::ExpectedInteger; diff --git a/src/stages/semantic.rs b/src/stages/semantic.rs index 96cf7af..f96a0c5 100644 --- a/src/stages/semantic.rs +++ b/src/stages/semantic.rs @@ -272,10 +272,16 @@ impl SemanticParser { self.errors.push(Tracked::from(error, token.source)); None } - MacroDefinitionBody::List(list) => { - let error = SemanticError::ExpectedInteger(location); - self.errors.push(Tracked::from(error, list.source)); - None + MacroDefinitionBody::List(list) => match list.value { + // Convert a one-element list to an integer. + ListToken::ListLiteral(mut integers) if integers.len() == 1 => { + Some(integers.pop().unwrap()) + } + _ => { + let error = SemanticError::ExpectedInteger(location); + self.errors.push(Tracked::from(error, list.source)); + None + } } } } |
