Skip to main content

BopFn

Struct BopFn 

Source
pub struct BopFn {
    pub params: Vec<String>,
    pub captures: Vec<(String, Value)>,
    pub body: FnBody,
    pub self_name: Option<String>,
}
Expand description

A Bop function value — the runtime representation of a closure or a reified fn foo(...) { ... } declaration. Shared by Rc so first-class usage (let g = f; pass(f)) is cheap.

The body is engine-opaque: the tree-walker produces an FnBody::Ast for direct interpretation; the bytecode VM produces an FnBody::Compiled carrying a pre-compiled body. Each engine only ever dispatches its own variant.

Fields§

§params: Vec<String>§captures: Vec<(String, Value)>

Values captured from the enclosing scope at construction time, cloned by value. Free variables in the body that aren’t parameters and aren’t in this list fall through to the outer module / global lookup at call time.

§body: FnBody§self_name: Option<String>

Some(name) when this BopFn is bound to its own name for self-reference (the lowering of fn foo(...) { ... }). Lambdas created from an fn(...) { ... } expression leave this None.

Trait Implementations§

Source§

impl Debug for BopFn

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for BopFn

§

impl !RefUnwindSafe for BopFn

§

impl !Send for BopFn

§

impl !Sync for BopFn

§

impl Unpin for BopFn

§

impl UnsafeUnpin for BopFn

§

impl !UnwindSafe for BopFn

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.