Struct tvix_eval::value::function::Lambda

source ·
pub struct Lambda {
    pub(crate) chunk: Chunk,
    pub(crate) name: Option<SmolStr>,
    pub(crate) upvalue_count: usize,
    pub(crate) formals: Option<Formals>,
}
Expand description

The opcodes for a thunk or closure, plus the number of non-executable opcodes which are allowed after an OpThunkClosure or OpThunkSuspended referencing it. At runtime Lambda is usually wrapped in Rc to avoid copying the Chunk it holds (which can be quite large).

In order to correctly reproduce cppnix’s “pointer equality” semantics it is important that we never clone a Lambda – use Rc<Lambda>::clone() instead. This struct deliberately does not derive(Clone) in order to prevent this from being done accidentally.

Fields§

§chunk: Chunk§name: Option<SmolStr>

Name of the function (equivalent to the name of the identifier (e.g. a value in a let-expression or an attribute set entry) it is located in).

§upvalue_count: usize

Number of upvalues which the code in this Lambda closes over, and which need to be initialised at runtime. Information about the variables is emitted using data-carrying opcodes (see [crate::opcode::OpCode::DataStackIdx]).

§formals: Option<Formals>

Implementations§

source§

impl Lambda

source

pub fn chunk(&mut self) -> &mut Chunk

Trait Implementations§

source§

impl Debug for Lambda

source§

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

Formats the value using the given formatter. Read more
source§

impl Default for Lambda

source§

fn default() -> Lambda

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl Freeze for Lambda

§

impl !RefUnwindSafe for Lambda

§

impl !Send for Lambda

§

impl !Sync for Lambda

§

impl Unpin for Lambda

§

impl !UnwindSafe for Lambda

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> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

impl<T> Same for T

source§

type Output = T

Should always be Self
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.
source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V