From bccdb806e7ed91ec0ffad797518d5f1fba3fb24d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Sat, 30 Jan 2021 12:22:37 +0100 Subject: extern function argument type errors --- src/vm.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/vm.rs b/src/vm.rs index 3559a2d..6ff2cf3 100644 --- a/src/vm.rs +++ b/src/vm.rs @@ -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); } -- cgit v1.2.1