use crate::vm::value::{Value, VmClosure};
use std::rc::Rc;
pub struct CallFrame {
pub closure: Rc<VmClosure>,
pub ip: usize,
pub base: usize,
pub varargs: Vec<Value>,
pub want_ret: u8,
pub hook_line: u32,
pub hook_ip: usize,
}
impl CallFrame {
pub fn new(closure: Rc<VmClosure>, base: usize) -> Self {
Self {
closure,
ip: 0,
base,
varargs: Vec::new(),
want_ret: 1,
hook_line: 0,
hook_ip: 0,
}
}
pub fn with_varargs(closure: Rc<VmClosure>, base: usize, varargs: Vec<Value>) -> Self {
Self {
closure,
ip: 0,
base,
varargs,
want_ret: 1,
hook_line: 0,
hook_ip: 0,
}
}
pub fn wanting(mut self, want_ret: u8) -> Self {
self.want_ret = want_ret;
self
}
}