diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2021-01-30 12:22:37 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2021-01-30 12:22:37 +0100 |
| commit | bccdb806e7ed91ec0ffad797518d5f1fba3fb24d (patch) | |
| tree | 00f89efbb14e0ca61c83fea913f24329605b5954 | |
| parent | 87f472d8d07df6b4f09514a7722e29a39c2111b9 (diff) | |
| download | sylt-bccdb806e7ed91ec0ffad797518d5f1fba3fb24d.tar.gz | |
extern function argument type errors
| -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) |
