diff options
| -rw-r--r-- | src/vm.rs | 14 | ||||
| -rw-r--r-- | tests/simple.tdy | 2 |
2 files changed, 13 insertions, 3 deletions
@@ -630,7 +630,10 @@ impl VM { } Value::ExternFunction(slot) => { let extern_func = self.extern_functions[slot]; - let res = extern_func(&self.stack[new_base+1..], false).unwrap(); //FIXME + let res = match extern_func(&self.stack[new_base+1..], false) { + Ok(value) => value, + Err(ek) => error!(self, ek, "Wrong arguments to external function".to_string()), + }; self.stack.truncate(new_base); self.stack.push(res); } @@ -872,7 +875,14 @@ impl VM { } Value::ExternFunction(slot) => { let extern_func = self.extern_functions[slot]; - let res = extern_func(&self.stack[new_base+1..], true).unwrap(); //FIXME + let res = match extern_func(&self.stack[new_base+1..], false) { + Ok(value) => value, + Err(ek) => { + self.stack.truncate(new_base); + self.stack.push(Value::Nil); + error!(self, ek, "Wrong arguments to external function".to_string()) + } + }; self.stack.truncate(new_base); self.stack.push(res); } diff --git a/tests/simple.tdy b/tests/simple.tdy index a1f255c..12a43c0 100644 --- a/tests/simple.tdy +++ b/tests/simple.tdy @@ -1,2 +1,2 @@ print extern_test(3.0) -print extern_test(3.0, 4.0) +print extern_test(3.0, 4.0, 5.0) |
