Struct Assembler

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

The Assembler is the primary interface for compiling Miden Assembly to the Merkelized Abstract Syntax Tree (MAST).

§Usage

Depending on your needs, there are multiple ways of using the assembler, and whether or not you want to provide a custom kernel.

Programs compiled with an empty kernel cannot use the `syscall` instruction.

Implementations§

Source§

impl Assembler

This impl block contains no items.

Procedure Invocation

Source§

impl Assembler

This impl block contains no items.

Instruction Compilation

Source§

impl Assembler

Constructors

Source

pub fn new(source_manager: Arc<dyn SourceManager + Send + Sync>) -> Assembler

Start building an Assembler

Source

pub fn with_kernel( source_manager: Arc<dyn SourceManager + Send + Sync>, kernel_lib: KernelLibrary, ) -> Assembler

Start building an Assembler with a kernel defined by the provided KernelLibrary.

Source

pub fn with_warnings_as_errors(self, yes: bool) -> Assembler

Sets the default behavior of this assembler with regard to warning diagnostics.

When true, any warning diagnostics that are emitted will be promoted to errors.

Source

pub fn with_debug_mode(self, yes: bool) -> Assembler

Puts the assembler into the debug mode.

Source

pub fn set_debug_mode(&mut self, yes: bool)

Sets the debug mode flag of the assembler

Source

pub fn with_module(self, module: impl Compile) -> Result<Assembler, Report>

Adds module to the module graph of the assembler.

The given module must be a library module, or an error will be returned.

Source

pub fn with_module_and_options( self, module: impl Compile, options: Options, ) -> Result<Assembler, Report>

Adds module to the module graph of the assembler with the given options.

The given module must be a library module, or an error will be returned.

Source

pub fn add_module( &mut self, module: impl Compile, ) -> Result<ModuleIndex, Report>

Adds module to the module graph of the assembler.

The given module must be a library module, or an error will be returned.

Source

pub fn add_module_with_options( &mut self, module: impl Compile, options: Options, ) -> Result<ModuleIndex, Report>

Adds module to the module graph of the assembler, using the provided options.

The given module must be a library or kernel module, or an error will be returned.

Source

pub fn add_modules_with_options( &mut self, modules: impl IntoIterator<Item = impl Compile>, options: Options, ) -> Result<Vec<ModuleIndex>, Report>

Adds a set of modules to the module graph of the assembler, using the provided options.

The modules must all be library or kernel modules, or an error will be returned.

Source

pub fn add_modules_from_dir( &mut self, namespace: LibraryNamespace, dir: &Path, ) -> Result<(), Report>

Adds all modules (defined by “.masm” files) from the specified directory to the module of this assembler graph.

The modules will be added under the specified namespace, but otherwise preserving the structure of the directory. Any module named mod.masm will be added using parent directory path For example, if namespace = “ns”, modules from the ~/masm directory will be added as follows:

  • ~/masm/foo.masm -> “ns::foo”
  • ~/masm/bar/mod.masm -> “ns::bar”
  • ~/masm/bar/baz.masm -> “ns::bar::baz”
Source

pub fn add_library( &mut self, library: impl AsRef<Library>, ) -> Result<(), Report>

Adds the compiled library to provide modules for the compilation.

All calls to the library’s procedures will be compiled down to a vm_core::mast::ExternalNode (i.e. a reference to the procedure’s MAST root). The library’s source code is expected to be loaded in the processor at execution time. This means that when executing a program compiled against a library, the processor will not be able to differentiate procedures with the same MAST root but different decorators.

Hence, it is not recommended to export two procedures that have the same MAST root (i.e. are identical except for their decorators). Note however that we don’t expect this scenario to be frequent in practice. For example, this could occur when APIs are being renamed and/or moved between modules, and for some deprecation period, the same is exported under both its old and new paths. Or possibly with common small functions that are implemented by the main program and one of its dependencies.

Source

pub fn with_library( self, library: impl AsRef<Library>, ) -> Result<Assembler, Report>

Adds the compiled library to provide modules for the compilation.

See Self::add_library for more detailed information.

Source

pub fn add_vendored_library( &mut self, library: impl AsRef<Library>, ) -> Result<(), Report>

Adds a compiled library from which procedures will be vendored into the assembled code.

Vendoring in this context means that when a procedure from this library is invoked from the assembled code, the entire procedure MAST will be copied into the assembled code. Thus, when the resulting code is executed on the VM, the vendored library does not need to be provided to the VM to resolve external calls.

Source

pub fn with_vendored_library( self, library: impl AsRef<Library>, ) -> Result<Assembler, Report>

Adds a compiled library from which procedures will be vendored into the assembled code.

See Self::add_vendored_library

Source§

impl Assembler

Public Accessors

Source

pub fn warnings_as_errors(&self) -> bool

Returns true if this assembler promotes warning diagnostics as errors by default.

Source

pub fn in_debug_mode(&self) -> bool

Returns true if this assembler was instantiated in debug mode.

Source

pub fn kernel(&self) -> &Kernel

Returns a reference to the kernel for this assembler.

If the assembler was instantiated without a kernel, the internal kernel will be empty.

Source

pub fn source_manager(&self) -> Arc<dyn SourceManager + Send + Sync>

Returns a link to the source manager used by this assembler.

Source§

impl Assembler

Compilation/Assembly

Source

pub fn assemble_library( self, modules: impl IntoIterator<Item = impl Compile>, ) -> Result<Library, Report>

Assembles a set of modules into a Library.

§Errors

Returns an error if parsing or compilation of the specified modules fails.

Source

pub fn assemble_kernel( self, module: impl Compile, ) -> Result<KernelLibrary, Report>

Assembles the provided module into a KernelLibrary intended to be used as a Kernel.

§Errors

Returns an error if parsing or compilation of the specified modules fails.

Source

pub fn assemble_program(self, source: impl Compile) -> Result<Program, Report>

Compiles the provided module into a Program. The resulting program can be executed on Miden VM.

§Errors

Returns an error if parsing or compilation of the specified program fails, or if the source doesn’t have an entrypoint.

Trait Implementations§

Source§

impl Clone for Assembler

Source§

fn clone(&self) -> Assembler

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 Default for Assembler

Source§

fn default() -> Assembler

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

Source§

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

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

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<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

impl<T> Same for T

Source§

type Output = T

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

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

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

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