feat: function (WIP)

This commit is contained in:
2025-05-04 13:58:34 +08:00
parent 63fd380514
commit 6ecd20854a
12 changed files with 228 additions and 79 deletions

View File

@@ -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!()