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 /src/vm.rs | |
| parent | 87f472d8d07df6b4f09514a7722e29a39c2111b9 (diff) | |
| download | sylt-bccdb806e7ed91ec0ffad797518d5f1fba3fb24d.tar.gz | |
extern function argument type errors
Diffstat (limited to 'src/vm.rs')
| -rw-r--r-- | src/vm.rs | 14 |
1 files changed, 12 insertions, 2 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); } |
