Struct Compiler

Source
pub struct Compiler {
    output_directory: PathBuf,
    pub program_name: Option<String>,
    compiler_options: CompilerOptions,
    state: CompilerState,
    import_stubs: IndexMap<Symbol, Stub>,
    pub statements_before_dce: u32,
    pub statements_after_dce: u32,
}
Expand description

The primary entry point of the Leo compiler.

Fields§

§output_directory: PathBuf

The path to where the compiler outputs all generated files.

§program_name: Option<String>

The program name,

§compiler_options: CompilerOptions

Options configuring compilation.

§state: CompilerState

State.

§import_stubs: IndexMap<Symbol, Stub>

The stubs for imported programs.

§statements_before_dce: u32

How many statements were in the AST before DCE?

§statements_after_dce: u32

How many statements were in the AST after DCE?

Implementations§

Source§

impl Compiler

Source

pub fn parse( &mut self, source: &str, filename: FileName, modules: &[(&str, FileName)], ) -> Result<()>

Source

pub fn new( expected_program_name: Option<String>, is_test: bool, handler: Handler, output_directory: PathBuf, compiler_options: Option<CompilerOptions>, import_stubs: IndexMap<Symbol, Stub>, network: NetworkName, ) -> Self

Returns a new Leo compiler.

Source

fn do_pass<P: Pass>(&mut self, input: P::Input) -> Result<P::Output>

Source

pub fn intermediate_passes(&mut self) -> Result<()>

Runs the compiler stages.

Source

pub fn compile( &mut self, source: &str, filename: FileName, modules: &Vec<(&str, FileName)>, ) -> Result<String>

Compiles a program from a given source string and a list of module sources.

§Arguments
  • source - The main source code as a string slice.
  • filename - The name of the main source file.
  • modules - A vector of tuples where each tuple contains:
    • A module source as a string slice.
    • Its associated FileName.
§Returns
  • Ok(String) containing the generated bytecode if compilation succeeds.
  • Err(CompilerError) if any stage of the pipeline fails.
Source

pub fn compile_from_directory( &mut self, entry_file_path: impl AsRef<Path>, source_directory: impl AsRef<Path>, ) -> Result<String>

Compiles a program from a source file and its associated module files in the same directory tree.

This method reads the main source file and collects all other source files under the same root directory (excluding the main file itself). It assumes a modular structure where additional source files are compiled as modules, with deeper files (submodules) compiled first.

§Arguments
  • source_file_path - A path to the main source file to compile. It must have a parent directory, which is used as the root for discovering additional module files.
§Returns
  • Ok(String) containing the compiled output if successful.
  • Err(CompilerError) if reading the main file fails or a compilation error occurs.
§Panics
  • If the provided source file has no parent directory.
  • If any discovered module file cannot be read (marked as a TODO).
Source

fn write_ast_to_json(&self, file_suffix: &str) -> Result<()>

Writes the AST to a JSON file.

Source

fn write_ast(&self, file_suffix: &str) -> Result<()>

Writes the AST to a file (Leo syntax, not JSON).

Source

pub fn add_import_stubs(&mut self) -> Result<()>

Merge the imported stubs which are dependencies of the current program into the AST in topological order.

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

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. 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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,