Skip to main content

Module

Struct Module 

pub struct Module { /* private fields */ }
Expand description

The abstract syntax tree for a single Miden Assembly module.

All module kinds share this AST representation, as they are largely identical. However, the ModuleKind dictates how the parsed module is semantically analyzed and validated.

Implementations§

§

impl Module

Constants

pub const FILE_EXTENSION: &'static str = "masm"

File extension for a Assembly Module.

pub const ROOT: &'static str = "mod"

Name of the root module.

pub const ROOT_FILENAME: &'static str = "mod.masm"

File name of the root module.

§

impl Module

Construction

pub fn new(kind: ModuleKind, path: impl AsRef<Path>) -> Module

Creates a new Module with the specified kind and fully-qualified path, e.g. std::math::u64.

pub fn new_kernel() -> Module

An alias for creating the default, but empty, #kernel Module.

pub fn new_executable() -> Module

An alias for creating the default, but empty, $exec Module.

pub fn with_span(self, span: SourceSpan) -> Module

Specifies the source span in the source file in which this module was defined, that covers the full definition of this module.

pub fn set_path(&mut self, path: impl AsRef<Path>)

Sets the Path for this module

pub fn set_parent(&mut self, ns: impl AsRef<Path>)

Modifies the path of this module by overriding the portion of the path preceding Self::name, i.e. the portion returned by Self::parent.

See PathBuf::set_parent for details.

pub fn set_docs(&mut self, docs: Option<Span<String>>)

Sets the documentation for this module

pub fn set_span(&mut self, span: SourceSpan)

Like Module::with_span, but does not require ownership of the Module.

pub fn define_constant( &mut self, constant: Constant, ) -> Result<(), SemanticAnalysisError>

Defines a constant, raising an error if the constant conflicts with a previous definition

pub fn define_type( &mut self, ty: TypeAlias, ) -> Result<(), SemanticAnalysisError>

Defines a type alias, raising an error if the alias conflicts with a previous definition

pub fn define_enum(&mut self, ty: EnumType) -> Result<(), SemanticAnalysisError>

Define a new enum type ty with visibility

Returns Err if:

  • A type alias with the same name as the enum type is already defined
  • Two or more variants of the given enum type have the same name
  • A constant (including those implicitly defined by variants of other enums in this module) with the same name as any of the variants of the given enum type, is already defined
  • The concrete type of the enumeration is not an integral type

pub fn define_procedure( &mut self, procedure: Procedure, source_manager: Arc<dyn SourceManager>, ) -> Result<(), SemanticAnalysisError>

Defines a procedure, raising an error if the procedure is invalid, or conflicts with a previous definition

pub fn define_alias( &mut self, item: Alias, source_manager: Arc<dyn SourceManager>, ) -> Result<(), SemanticAnalysisError>

Defines an item alias, raising an error if the alias is invalid, or conflicts with a previous definition

§

impl Module

Parsing

pub fn parse( name: impl AsRef<Path>, kind: ModuleKind, source_file: Arc<SourceFile>, source_manager: Arc<dyn SourceManager>, ) -> Result<Box<Module>, Report>

Parse a Module, name, of the given ModuleKind, from source_file.

pub fn parser(kind: ModuleKind) -> ModuleParser

Get a ModuleParser for parsing modules of the provided ModuleKind

§

impl Module

Metadata

pub fn name(&self) -> &str

Get the name of this specific module, i.e. the last component of the Path that represents the fully-qualified name of the module, e.g. u64 in std::math::u64

pub fn path(&self) -> &Path

Get the fully-qualified name of this module, e.g. std::math::u64

pub fn parent(&self) -> Option<&Path>

Get the path of the parent module of this module, e.g. std::math in std::math::u64

pub fn is_in_namespace(&self, namespace: &Path) -> bool

Returns true if this module belongs to the provided namespace.

pub fn docs(&self) -> Option<Span<&str>>

Get the module documentation for this module, if it was present in the source code the module was parsed from

pub fn kind(&self) -> ModuleKind

Get the type of module this represents:

See ModuleKind for details on the different types of modules.

pub fn set_kind(&mut self, kind: ModuleKind)

Override the type of module this represents.

See ModuleKind for details on what the different types are.

pub fn is_executable(&self) -> bool

Returns true if this module is an executable module.

pub fn is_kernel(&self) -> bool

Returns true if this module is the top-level kernel module.

pub fn is_in_kernel(&self) -> bool

Returns true if this module is a kernel module.

pub fn has_entrypoint(&self) -> bool

Returns true if this module has an entrypoint procedure defined, i.e. a begin..end block.

pub fn advice_map(&self) -> &AdviceMap

Returns a reference to the advice map derived from this module

pub fn constants(&self) -> impl Iterator<Item = &Constant>

Get an iterator over the constants defined in this module.

pub fn constants_mut(&mut self) -> impl Iterator<Item = &mut Constant>

Same as Module::constants, but returns mutable references.

pub fn types(&self) -> impl Iterator<Item = &TypeDecl>

Get an iterator over the types defined in this module.

pub fn types_mut(&mut self) -> impl Iterator<Item = &mut TypeDecl>

Same as Module::types, but returns mutable references.

pub fn procedures(&self) -> impl Iterator<Item = &Procedure>

Get an iterator over the procedures defined in this module.

pub fn procedures_mut(&mut self) -> impl Iterator<Item = &mut Procedure>

Same as Module::procedures, but returns mutable references.

pub fn aliases(&self) -> impl Iterator<Item = &Alias>

Get an iterator over the item aliases in this module.

pub fn aliases_mut(&mut self) -> impl Iterator<Item = &mut Alias>

Same as Module::aliases, but returns mutable references.

pub fn items(&self) -> &[Export]

Get a reference to the items stored in this module

pub fn items_mut(&mut self) -> &mut Vec<Export>

Get a mutable reference to the storage for items defined in this module

pub fn exported( &self, ) -> impl Iterator<Item = (ItemIndex, QualifiedProcedureName)>

Returns items exported from this module.

Each exported item is represented by its local item index and a fully qualified name.

pub fn procedure_signature(&self, id: ItemIndex) -> Option<&FunctionType>

Gets the type signature for the given ItemIndex, if available.

pub fn get(&self, index: ItemIndex) -> Option<&Export>

Get the item at index in this module’s item table.

The item returned may be either a locally-defined item, or a re-exported item. See Export for details.

pub fn index_of<F>(&self, predicate: F) -> Option<ItemIndex>
where F: FnMut(&Export) -> bool,

Get the ItemIndex for the first item in this module’s item table which returns true for predicate.

pub fn index_of_name(&self, name: &Ident) -> Option<ItemIndex>

Get the ItemIndex for the item whose name is name in this module’s item table, if that item is exported.

Non-exported items can be retrieved by using Module::index_of.

pub fn resolve( &self, name: Span<&str>, source_manager: Arc<dyn SourceManager>, ) -> Result<SymbolResolution, SymbolResolutionError>

Resolves name to an item within the local scope of this module

pub fn resolve_path( &self, path: Span<&Path>, source_manager: Arc<dyn SourceManager>, ) -> Result<SymbolResolution, SymbolResolutionError>

Resolves path to an item within the local scope of this module

pub fn resolver( &self, source_manager: Arc<dyn SourceManager>, ) -> LocalSymbolResolver

Construct a search structure that can resolve procedure names local to this module

pub fn get_import(&self, module_name: &str) -> Option<&Alias>

Resolves module_name to an Alias within the context of this module

pub fn get_import_mut(&mut self, module_name: &str) -> Option<&mut Alias>

Same as Module::get_import, but returns a mutable reference to the Alias

pub fn resolve_type( &self, ty: &TypeExpr, source_manager: Arc<dyn SourceManager>, ) -> Result<Option<Type>, SymbolResolutionError>

Resolves a user-expressed type, ty, to a concrete type

pub fn type_resolver( &self, source_manager: Arc<dyn SourceManager>, ) -> impl TypeResolver<SymbolResolutionError>

Get a type resolver for this module

Trait Implementations§

§

impl Clone for Module

§

fn clone(&self) -> Module

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
§

impl Debug for Module

Debug representation of this module

§

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

Formats the value using the given formatter. Read more
§

impl Display for Module

Pretty-printed representation of this module as Miden Assembly text format

NOTE: Delegates to the [crate::prettier::PrettyPrint] implementation internally

§

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

Writes this Module as formatted MASM code into the formatter.

The formatted code puts each instruction on a separate line and preserves correct indentation for instruction blocks.

§

impl Index<ItemIndex> for Module

§

type Output = Export

The returned type after indexing.
§

fn index(&self, index: ItemIndex) -> &<Module as Index<ItemIndex>>::Output

Performs the indexing (container[index]) operation. Read more
§

impl IndexMut<ItemIndex> for Module

§

fn index_mut( &mut self, index: ItemIndex, ) -> &mut <Module as Index<ItemIndex>>::Output

Performs the mutable indexing (container[index]) operation. Read more
§

impl Parse for &Module

§

fn parse_with_options( self, source_manager: Arc<dyn SourceManager>, options: ParseOptions, ) -> Result<Box<Module>, Report>

Parse (or convert) self into a Module using the provided options. Read more
§

fn parse( self, source_manager: Arc<dyn SourceManager>, ) -> Result<Box<Module>, Report>

Parse (or convert) self into an executable Module. Read more
§

impl Parse for Box<Module>

§

fn parse_with_options( self, _source_manager: Arc<dyn SourceManager>, options: ParseOptions, ) -> Result<Box<Module>, Report>

Parse (or convert) self into a Module using the provided options. Read more
§

fn parse( self, source_manager: Arc<dyn SourceManager>, ) -> Result<Box<Module>, Report>

Parse (or convert) self into an executable Module. Read more
§

impl Parse for Module

§

fn parse_with_options( self, source_manager: Arc<dyn SourceManager>, options: ParseOptions, ) -> Result<Box<Module>, Report>

Parse (or convert) self into a Module using the provided options. Read more
§

fn parse( self, source_manager: Arc<dyn SourceManager>, ) -> Result<Box<Module>, Report>

Parse (or convert) self into an executable Module. Read more
§

impl PartialEq for Module

§

fn eq(&self, other: &Module) -> 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.
§

impl PrettyPrint for Module

The pretty-printer for Module

§

fn render(&self) -> Document

The core of the [PrettyPrint] functionality. Read more
§

fn to_pretty_string(&self) -> String

Produce a String containing the results of pretty-printing this object. Read more
§

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

Pretty-print this object to the given core::fmt::Formatter. Read more
§

impl Spanned for Module

§

fn span(&self) -> SourceSpan

§

impl SymbolTable for &Module

§

type SymbolIter = IntoIter<LocalSymbol>

The concrete iterator type for the container.
§

fn symbols( &self, source_manager: Arc<dyn SourceManager>, ) -> <&Module as SymbolTable>::SymbolIter

Get an iterator over the symbols in this symbol table, using the provided SourceManager to emit errors for symbols which are invalid/unresolvable.
§

impl Eq for Module

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.

§

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

§

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

Set the foreground color generically Read more
§

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

Set the background color generically. Read more
§

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

Change the foreground color to black
§

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

Change the background color to black
§

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

Change the foreground color to red
§

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

Change the background color to red
§

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

Change the foreground color to green
§

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

Change the background color to green
§

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

Change the foreground color to yellow
§

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

Change the background color to yellow
§

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

Change the foreground color to blue
§

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

Change the background color to blue
§

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

Change the foreground color to magenta
§

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

Change the background color to magenta
§

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

Change the foreground color to purple
§

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

Change the background color to purple
§

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

Change the foreground color to cyan
§

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

Change the background color to cyan
§

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

Change the foreground color to white
§

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

Change the background color to white
§

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

Change the foreground color to the terminal default
§

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

Change the background color to the terminal default
§

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

Change the foreground color to bright black
§

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

Change the background color to bright black
§

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

Change the foreground color to bright red
§

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

Change the background color to bright red
§

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

Change the foreground color to bright green
§

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

Change the background color to bright green
§

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

Change the foreground color to bright yellow
§

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

Change the background color to bright yellow
§

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

Change the foreground color to bright blue
§

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

Change the background color to bright blue
§

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

Change the foreground color to bright magenta
§

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

Change the background color to bright magenta
§

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

Change the foreground color to bright purple
§

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

Change the background color to bright purple
§

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

Change the foreground color to bright cyan
§

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

Change the background color to bright cyan
§

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

Change the foreground color to bright white
§

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

Change the background color to bright white
§

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

Make the text bold
§

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

Make the text dim
§

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

Make the text italicized
§

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

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

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

Swap the foreground and background colors
§

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

Hide the text
§

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

Cross out the text
§

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
§

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
§

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

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

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

Sets the foreground color to an RGB value.
§

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

Sets the background color to an RGB value.
§

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

Apply a runtime-determined style
§

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

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