Skip to main content

Compiler

Struct Compiler 

Source
pub struct Compiler { /* private fields */ }
Expand description

Compiler state for generating bytecode from AST nodes.

Implementations§

Source§

impl Compiler

Source

pub fn new() -> Self

Creates a new compiler with empty instruction stream and constant pool.

Source

pub fn with_state(symbols_table: SymbolsTable, constants: Vec<Value>) -> Self

Creates a compiler with existing symbols table and constants.

This enables REPL sessions where variable definitions and constants persist across multiple compilation passes.

Source

pub fn symbols_table_mut(&mut self) -> &mut SymbolsTable

Returns a mutable reference to the compiler’s symbols table.

Used by the module pipeline to define imported symbols before compilation, so that cross-module references resolve correctly.

Source

pub fn register_type(&mut self, typedef: TypeDef)

Registers a type definition (struct or enum) in the type registry.

Used by the module pipeline to register imported type definitions so that construction and field access work across module boundaries.

Source

pub fn bytecode(self) -> Result<Bytecode>

Extracts the compiled bytecode and constants.

§Errors

Returns CompileError::ScopeUnderflow if the scope stack is empty, which indicates an internal compiler invariant violation.

Source

pub fn symbols_table(&self) -> &SymbolsTable

Returns a reference to the compiler’s symbols table.

Used for state persistence in REPL sessions where symbol definitions must carry over across compilation passes.

Source

pub fn compile(&mut self, node: &Node) -> Result<()>

Compiles an AST node into bytecode.

This recursively traverses the AST, emitting instructions for each node. Returns an error if an unsupported node type or operator is encountered.

Source

pub fn compile_program(&mut self, program: &Program) -> Result<()>

Compiles a program node (list of statements).

Trait Implementations§

Source§

impl Clone for Compiler

Source§

fn clone(&self) -> Compiler

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 Compiler

Source§

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

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

impl Default for Compiler

Source§

fn default() -> Self

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

Auto Trait Implementations§

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, 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.