Struct Lambda

Source
pub struct Lambda {
    pub decls: usize,
    pub code: Vec<u8>,
    pub spans: Vec<(usize, Span)>,
    pub constants: Vec<Data>,
    pub captures: Vec<Captured>,
    pub ffi: Vec<FFIFunction>,
}
Expand description

Represents a single interpretable chunk of bytecode, think a function.

Fields§

§decls: usize

Number of variables declared in this scope.

§code: Vec<u8>

Each byte is an opcode or a number-stream.

§spans: Vec<(usize, Span)>

Each usize indexes the bytecode op that begins each line.

§constants: Vec<Data>

Number-stream indexed, used to load constants.

§captures: Vec<Captured>

List of positions of locals in the scope where this lambda is defined, indexes must be gauranteed to be data on the heap.

§ffi: Vec<FFIFunction>

List of FFI functions (i.e. Rust functions) that can be called from this function.

Implementations§

Source§

impl Lambda

Source

pub fn empty() -> Lambda

Creates a new empty Lambda to be filled.

Source

pub fn emit(&mut self, op: Opcode)

Emits an opcode as a byte.

Source

pub fn emit_bytes(&mut self, bytes: &mut Vec<u8>)

Emits a series of bytes.

Source

pub fn emit_span(&mut self, span: &Span)

Emits a span, should be called before an opcode is emmited. This function ties opcodes to spans in source. See index_span as well.

Source

pub fn demit(&mut self)

Removes the last emitted byte.

Source

pub fn index_data(&mut self, data: Data) -> usize

Given some data, this function adds it to the constants table, and returns the data’s index. The constants table is push only, so constants are identified by their index. The resulting usize can be split up into a number byte stream, and be inserted into the bytecode.

Source

pub fn index_span(&self, index: usize) -> Span

Look up the nearest span at or before the index of a specific bytecode op.

Source

pub fn add_ffi(&mut self, function: FFIFunction) -> usize

Adds a ffi function to the ffi table, without checking for duplicates. The Compiler ensures that functions are valid and not duplicated during codegen.

Trait Implementations§

Source§

impl Clone for Lambda

Source§

fn clone(&self) -> Lambda

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Lambda

Source§

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

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

impl Display for Lambda

Source§

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

Dump a human-readable breakdown of a Lambda’s bytecode. Including constants, captures, and variables declared.

Source§

impl PartialEq for Lambda

Source§

fn eq(&self, other: &Lambda) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Lambda

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
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.