feat: recursive builtins
This commit is contained in:
@@ -2,7 +2,7 @@ use ecow::EcoString;
|
||||
use itertools::Itertools;
|
||||
use rpds::HashTrieMap;
|
||||
|
||||
use crate::bytecode::{OpCodes, ThunkIdx};
|
||||
use crate::bytecode::OpCodes;
|
||||
use crate::ty::internal::{Thunk, Value};
|
||||
|
||||
use crate::vm::{CapturedEnv, VM};
|
||||
@@ -11,7 +11,7 @@ use crate::vm::{CapturedEnv, VM};
|
||||
pub enum Param {
|
||||
Ident(EcoString),
|
||||
Formals {
|
||||
formals: Vec<(EcoString, Option<ThunkIdx>)>,
|
||||
formals: Vec<(EcoString, Option<Thunk>)>,
|
||||
ellipsis: bool,
|
||||
alias: Option<EcoString>,
|
||||
},
|
||||
@@ -60,7 +60,7 @@ impl Func {
|
||||
for (formal, default) in formals {
|
||||
let arg = arg
|
||||
.select(formal.clone().into())
|
||||
.or_else(|| default.map(|idx| Value::Thunk(Thunk(idx))))
|
||||
.or_else(|| default.map(|thunk| Value::Thunk(thunk)))
|
||||
.unwrap();
|
||||
new.insert_mut(formal.into(), arg);
|
||||
}
|
||||
@@ -89,7 +89,7 @@ impl Func {
|
||||
formals.push((param, None));
|
||||
}
|
||||
|
||||
pub fn push_default_param(&mut self, default: ThunkIdx) {
|
||||
pub fn push_default_param(&mut self, default: Thunk) {
|
||||
let Param::Formals { formals, .. } = self.param.as_mut().unwrap() else {
|
||||
panic!()
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user