summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/types/expression_stack.rs10
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))