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
impl Compiler
pub fn parse( &mut self, source: &str, filename: FileName, modules: &[(&str, FileName)], ) -> Result<()>
Sourcepub 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
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.
fn do_pass<P: Pass>(&mut self, input: P::Input) -> Result<P::Output>
Sourcepub fn intermediate_passes(&mut self) -> Result<()>
pub fn intermediate_passes(&mut self) -> Result<()>
Runs the compiler stages.
Sourcepub fn compile(
&mut self,
source: &str,
filename: FileName,
modules: &Vec<(&str, FileName)>,
) -> Result<String>
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.
Sourcepub fn compile_from_directory(
&mut self,
entry_file_path: impl AsRef<Path>,
source_directory: impl AsRef<Path>,
) -> Result<String>
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).
Sourcefn write_ast_to_json(&self, file_suffix: &str) -> Result<()>
fn write_ast_to_json(&self, file_suffix: &str) -> Result<()>
Writes the AST to a JSON file.
Sourcefn write_ast(&self, file_suffix: &str) -> Result<()>
fn write_ast(&self, file_suffix: &str) -> Result<()>
Writes the AST to a file (Leo syntax, not JSON).
Sourcepub fn add_import_stubs(&mut self) -> Result<()>
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§
impl !Freeze for Compiler
impl !RefUnwindSafe for Compiler
impl !Send for Compiler
impl !Sync for Compiler
impl Unpin for Compiler
impl !UnwindSafe for Compiler
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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