pub struct VValFun {
pub fun: FunType,
pub upvalue_pos: Rc<Vec<VarPos>>,
pub upvalues: Vec<VVal>,
pub local_size: usize,
pub min_args: Option<usize>,
pub max_args: Option<usize>,
pub err_arg_ok: bool,
pub syn_pos: Option<SynPos>,
pub label: VVal,
}
Expand description
This structure is the runtime representation of a WLambda function value.
Fields
fun: FunType
The closure or vm program that runs the function.
upvalue_pos: Rc<Vec<VarPos>>
The positions of the upvalues that are being captured by this function.
upvalues: Vec<VVal>
Contains any caught upvalues.
local_size: usize
The number of local variables defined in this functions.
This value is used to reserve stack space for storing them.
min_args: Option<usize>
Min number of arguments this functions requires.
max_args: Option<usize>
Max number of arguments this functions requires.
err_arg_ok: bool
If true, then this function accepts error values without panic. Functions by default don’t accept errors as argument. It needs to be explicitly enabled.
syn_pos: Option<SynPos>
The location of the definition of this function.
label: VVal
The return label of the function:
Implementations
sourceimpl VValFun
impl VValFun
sourcepub fn new_fun<T>(
fun: T,
min_args: Option<usize>,
max_args: Option<usize>,
err_arg_ok: bool
) -> VVal where
T: 'static + Fn(&mut Env, usize) -> Result<VVal, StackAction>,
pub fn new_fun<T>(
fun: T,
min_args: Option<usize>,
max_args: Option<usize>,
err_arg_ok: bool
) -> VVal where
T: 'static + Fn(&mut Env, usize) -> Result<VVal, StackAction>,
Creates a new VVal containing the given closure with the given minimum
and maximum parameters (see also add_func
of GlobalEnv).
There is also a new more convenient (because provided by VVal itself)
function: VVal::new_fun
which has the same parameters.
The err_arg_ok
parameter specifies whether the function accepts
error values as arguments. If it doesn’t, the program will panic
once an error value is encountered. This makes programs more maintainable.
This is usually useful if you want to add functions to the EvalContext. at runtime.
use wlambda::compiler::EvalContext;
use wlambda::vval::{VVal, VValFun, Env};
let mut ctx = wlambda::compiler::EvalContext::new_empty_global_env();
ctx.set_global_var("xyz",
&VValFun::new_fun(
move |env: &mut Env, argc: usize| {
Ok(VVal::new_str("xyz"))
}, None, None, false));
assert_eq!(ctx.eval("xyz[]").unwrap().s_raw(), "xyz")
pub fn new_fun_with_pos<T>(
fun: T,
min_args: Option<usize>,
max_args: Option<usize>,
err_arg_ok: bool,
spos: SynPos
) -> VVal where
T: 'static + Fn(&mut Env, usize) -> Result<VVal, StackAction>,
sourcepub fn new_val(
fun: ClosNodeRef,
upvalues: Vec<VVal>,
env_size: usize,
min_args: Option<usize>,
max_args: Option<usize>,
err_arg_ok: bool,
syn_pos: Option<SynPos>,
upvalue_pos: Rc<Vec<VarPos>>
) -> VVal
pub fn new_val(
fun: ClosNodeRef,
upvalues: Vec<VVal>,
env_size: usize,
min_args: Option<usize>,
max_args: Option<usize>,
err_arg_ok: bool,
syn_pos: Option<SynPos>,
upvalue_pos: Rc<Vec<VarPos>>
) -> VVal
Internal utility function. Use at your own risk, API might change.
sourcepub fn new_prog(
prog: Rc<Prog>,
upvalues: Vec<VVal>,
env_size: usize,
min_args: Option<usize>,
max_args: Option<usize>,
err_arg_ok: bool,
syn_pos: Option<SynPos>,
upvalue_pos: Rc<Vec<VarPos>>,
label: VVal
) -> VVal
pub fn new_prog(
prog: Rc<Prog>,
upvalues: Vec<VVal>,
env_size: usize,
min_args: Option<usize>,
max_args: Option<usize>,
err_arg_ok: bool,
syn_pos: Option<SynPos>,
upvalue_pos: Rc<Vec<VarPos>>,
label: VVal
) -> VVal
Internal utility function. Use at your own risk, API might change.
sourcepub fn dump_upvals(&self) -> VVal
pub fn dump_upvals(&self) -> VVal
Dumps captured up values of this function. Useful only if you want to debug functions/closures creates by WLambda code.
Trait Implementations
Auto Trait Implementations
impl !RefUnwindSafe for VValFun
impl !Send for VValFun
impl !Sync for VValFun
impl Unpin for VValFun
impl !UnwindSafe for VValFun
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more