diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/types/expression_stack.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/types/expression_stack.rs b/src/types/expression_stack.rs index 1036842..fdf6ed8 100644 --- a/src/types/expression_stack.rs +++ b/src/types/expression_stack.rs @@ -18,7 +18,10 @@ impl ExpressionStack { 1 => { match self.stack.pop().unwrap() { IntermediateValue::Integer(value) => Ok(*value), - IntermediateValue::List(_) => Err(ExpressionError::InvalidReturnType("a list")), + IntermediateValue::List(mut list) => match list.len() { + 1 => Ok(list.pop().unwrap().value), + _ => Err(ExpressionError::InvalidReturnType("a list")), + } IntermediateValue::Block(_) => Err(ExpressionError::InvalidReturnType("a block")), } } @@ -95,7 +98,10 @@ fn null_span() -> SourceSpan { fn to_isize(value: IntermediateValue) -> Result<isize, ExpressionError> { let received = match value { IntermediateValue::Integer(integer) => return Ok(integer.value), - IntermediateValue::List(_) => "a list", + IntermediateValue::List(mut list) => match list.len() { + 1 => return Ok(list.pop().unwrap().value), + _ => "a list" + } IntermediateValue::Block(_) => "a block", }; Err(ExpressionError::InvalidArgumentType("an integer", received)) |