diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2021-01-30 12:10:49 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2021-01-30 12:10:49 +0100 |
| commit | e93e9e7ff4a73bc98a0dcd410eff87dffff3aa1c (patch) | |
| tree | 992024e5df64d7735618d2b0d0f85bbc313c6416 /src/vm.rs | |
| parent | 674695d7e28f03218aa5a3facd933b87d508ea7d (diff) | |
| download | sylt-e93e9e7ff4a73bc98a0dcd410eff87dffff3aa1c.tar.gz | |
external functions proc macro
Diffstat (limited to 'src/vm.rs')
| -rw-r--r-- | src/vm.rs | 12 |
1 files changed, 8 insertions, 4 deletions
@@ -6,8 +6,9 @@ use std::path::{Path, PathBuf}; use std::rc::Rc; use std::cell::RefCell; +pub use crate::compiler::Type; + use crate::compiler::RustFunction; -use crate::compiler::Type; use crate::error::{Error, ErrorKind}; use crate::compiler::{Prog, Blob}; @@ -629,7 +630,7 @@ impl VM { } Value::ExternFunction(slot) => { let extern_func = self.extern_functions[slot]; - let res = extern_func(&self.stack[new_base+1..]); + let res = extern_func(&self.stack[new_base+1..], false).unwrap(); //FIXME self.stack.truncate(new_base); self.stack.push(res); } @@ -869,8 +870,11 @@ impl VM { self.stack.truncate(new_base + 1); } - Value::ExternFunction(_slot) => { - self.stack.truncate(new_base + 1); + Value::ExternFunction(slot) => { + let extern_func = self.extern_functions[slot]; + let res = extern_func(&self.stack[new_base+1..], true).unwrap(); //FIXME + self.stack.truncate(new_base); + self.stack.push(res); } _ => { error!(self, |
