feat: function (WIP)
This commit is contained in:
21
src/vm/vm.rs
21
src/vm/vm.rs
@@ -1,3 +1,5 @@
|
||||
use std::ops::Index;
|
||||
|
||||
use anyhow::Result;
|
||||
|
||||
use crate::builtins::env;
|
||||
@@ -81,8 +83,23 @@ impl VM {
|
||||
let func = stack.pop()?;
|
||||
stack.push(func.call(args))?;
|
||||
}
|
||||
OpCode::Func { param, length } => {
|
||||
todo!()
|
||||
OpCode::Func { idx } => {
|
||||
stack.push(Value::Func(Func::new(self.thunks[idx].unwrap_code())))?;
|
||||
}
|
||||
OpCode::PushIdentParam { sym } => {
|
||||
stack.tos_mut()?.as_mut().unwrap_func().push_ident_param(sym);
|
||||
}
|
||||
OpCode::PushFormalParam { sym } => {
|
||||
stack.tos_mut()?.as_mut().unwrap_func().push_formal_param(sym);
|
||||
}
|
||||
OpCode::PushDefaultParam { idx } => {
|
||||
stack.tos_mut()?.as_mut().unwrap_func().push_default_param(idx);
|
||||
}
|
||||
OpCode::SetEllipsis => {
|
||||
stack.tos_mut()?.as_mut().unwrap_func().set_ellipsis();
|
||||
}
|
||||
OpCode::SetAlias { sym } => {
|
||||
stack.tos_mut()?.as_mut().unwrap_func().set_alias(sym);
|
||||
}
|
||||
OpCode::Ret => {
|
||||
todo!()
|
||||
|
||||
Reference in New Issue
Block a user