aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-01-30 12:22:37 +0100
committerGustav Sörnäs <gustav@sornas.net>2021-01-30 12:22:37 +0100
commitbccdb806e7ed91ec0ffad797518d5f1fba3fb24d (patch)
tree00f89efbb14e0ca61c83fea913f24329605b5954
parent87f472d8d07df6b4f09514a7722e29a39c2111b9 (diff)
downloadsylt-bccdb806e7ed91ec0ffad797518d5f1fba3fb24d.tar.gz
extern function argument type errors
-rw-r--r--src/vm.rs14
-rw-r--r--tests/simple.tdy2
2 files changed, 13 insertions, 3 deletions
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);
}
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)