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§
Source§impl Module
Constants
impl Module
Constants
Sourcepub const FILE_EXTENSION: &'static str = "masm"
pub const FILE_EXTENSION: &'static str = "masm"
File extension for a Assembly Module.
Sourcepub const ROOT_FILENAME: &'static str = "mod.masm"
pub const ROOT_FILENAME: &'static str = "mod.masm"
File name of the root module.
Source§impl Module
Construction
impl Module
Construction
Sourcepub fn new(kind: ModuleKind, path: impl AsRef<Path>) -> Self
pub fn new(kind: ModuleKind, path: impl AsRef<Path>) -> Self
Creates a new Module with the specified kind and fully-qualified path, e.g.
std::math::u64.
Sourcepub fn new_kernel() -> Self
pub fn new_kernel() -> Self
An alias for creating the default, but empty, #kernel Module.
Sourcepub fn new_executable() -> Self
pub fn new_executable() -> Self
An alias for creating the default, but empty, $exec Module.
Sourcepub fn with_span(self, span: SourceSpan) -> Self
pub fn with_span(self, span: SourceSpan) -> Self
Specifies the source span in the source file in which this module was defined, that covers the full definition of this module.
Sourcepub fn set_parent(&mut self, ns: impl AsRef<Path>)
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.
Sourcepub fn set_span(&mut self, span: SourceSpan)
pub fn set_span(&mut self, span: SourceSpan)
Like Module::with_span, but does not require ownership of the Module.
Sourcepub fn take_items(&mut self) -> Vec<Item>
pub fn take_items(&mut self) -> Vec<Item>
Takes all items from this module, clearing the name index. Used by the linker to consume module contents.
Sourcepub fn declare_submodule(
&mut self,
name: Ident,
visibility: Visibility,
) -> Result<(), SemanticAnalysisError>
pub fn declare_submodule( &mut self, name: Ident, visibility: Visibility, ) -> Result<(), SemanticAnalysisError>
Declares that this module has a submodule named name, with the specified visibility.
This returns an error if it conflicts with a previous declaration (either a previous submodule declaration, or an imported symbol name).
Sourcepub fn declare_extern_package(
&mut self,
name: Ident,
) -> Result<(), SemanticAnalysisError>
pub fn declare_extern_package( &mut self, name: Ident, ) -> Result<(), SemanticAnalysisError>
Declares that this module has a dependency on the library target of an external package
named name.
This returns an error if it conflicts with a previous extern package declaration.
Sourcepub fn define_constant(
&mut self,
constant: Constant,
) -> Result<(), SemanticAnalysisError>
pub fn define_constant( &mut self, constant: Constant, ) -> Result<(), SemanticAnalysisError>
Defines a constant, raising an error if the constant conflicts with a previous definition
Sourcepub fn define_type(
&mut self,
ty: TypeAlias,
) -> Result<(), SemanticAnalysisError>
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
Sourcepub fn define_enum(&mut self, ty: EnumType) -> Result<(), SemanticAnalysisError>
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
Sourcepub fn define_procedure(
&mut self,
procedure: Procedure,
_source_manager: Arc<dyn SourceManager>,
) -> Result<(), SemanticAnalysisError>
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
Sourcepub fn define_import(
&mut self,
import: Import,
) -> Result<(), SemanticAnalysisError>
pub fn define_import( &mut self, import: Import, ) -> Result<(), SemanticAnalysisError>
Defines an import, raising an error if the import conflicts with a previous declaration.
Source§impl Module
Parsing
impl Module
Parsing
Sourcepub fn parse(
name: impl AsRef<Path>,
source_file: Arc<SourceFile>,
source_manager: Arc<dyn SourceManager>,
) -> Result<Box<Self>, Report>
pub fn parse( name: impl AsRef<Path>, source_file: Arc<SourceFile>, source_manager: Arc<dyn SourceManager>, ) -> Result<Box<Self>, Report>
Parse a Module, name, of the given ModuleKind, from source_file.
pub fn parse_kernel( source_file: Arc<SourceFile>, source_manager: Arc<dyn SourceManager>, ) -> Result<Box<Self>, Report>
Sourcepub fn parser(kind: Option<ModuleKind>) -> ModuleParser
pub fn parser(kind: Option<ModuleKind>) -> ModuleParser
Get a ModuleParser for parsing modules of the provided ModuleKind
If kind is None, then the module kind is inferred as either library or executable based
on whether the module contains a begin block. If you wish to parse a kernel module, it
must be done explicitly.
Source§impl Module
Metadata
impl Module
Metadata
Sourcepub fn name(&self) -> &str
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
Sourcepub fn parent(&self) -> Option<&Path>
pub fn parent(&self) -> Option<&Path>
Get the path of the parent module of this module, e.g. std::math in std::math::u64
Sourcepub fn is_in_namespace(&self, namespace: &Path) -> bool
pub fn is_in_namespace(&self, namespace: &Path) -> bool
Returns true if this module belongs to the provided namespace.
Sourcepub fn docs(&self) -> Option<Span<&str>>
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
Sourcepub fn kind(&self) -> ModuleKind
pub fn kind(&self) -> ModuleKind
Get the type of module this represents:
See ModuleKind for details on the different types of modules.
Sourcepub fn set_kind(&mut self, kind: ModuleKind)
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.
Sourcepub fn is_executable(&self) -> bool
pub fn is_executable(&self) -> bool
Returns true if this module is an executable module.
Sourcepub fn is_in_kernel(&self) -> bool
pub fn is_in_kernel(&self) -> bool
Returns true if this module is a kernel module.
Sourcepub fn has_entrypoint(&self) -> bool
pub fn has_entrypoint(&self) -> bool
Returns true if this module has an entrypoint procedure defined,
i.e. a begin..end block.
Sourcepub fn advice_map(&self) -> &AdviceMap
pub fn advice_map(&self) -> &AdviceMap
Returns a reference to the advice map derived from this module
Sourcepub fn constants(&self) -> impl Iterator<Item = &Constant> + '_
pub fn constants(&self) -> impl Iterator<Item = &Constant> + '_
Get an iterator over the constants defined in this module.
Sourcepub fn constants_mut(&mut self) -> impl Iterator<Item = &mut Constant> + '_
pub fn constants_mut(&mut self) -> impl Iterator<Item = &mut Constant> + '_
Same as Module::constants, but returns mutable references.
Sourcepub fn types(&self) -> impl Iterator<Item = &TypeDecl> + '_
pub fn types(&self) -> impl Iterator<Item = &TypeDecl> + '_
Get an iterator over the types defined in this module.
Sourcepub fn types_mut(&mut self) -> impl Iterator<Item = &mut TypeDecl> + '_
pub fn types_mut(&mut self) -> impl Iterator<Item = &mut TypeDecl> + '_
Same as Module::types, but returns mutable references.
Sourcepub fn procedures(&self) -> impl Iterator<Item = &Procedure> + '_
pub fn procedures(&self) -> impl Iterator<Item = &Procedure> + '_
Get an iterator over the procedures defined in this module.
Sourcepub fn procedures_mut(&mut self) -> impl Iterator<Item = &mut Procedure> + '_
pub fn procedures_mut(&mut self) -> impl Iterator<Item = &mut Procedure> + '_
Same as Module::procedures, but returns mutable references.
Sourcepub fn get_import(&self, name: &str) -> Option<&Import>
pub fn get_import(&self, name: &str) -> Option<&Import>
Resolves name to an Import within the context of this module.
Sourcepub fn get_import_mut(&mut self, name: &str) -> Option<&mut Import>
pub fn get_import_mut(&mut self, name: &str) -> Option<&mut Import>
Same as Module::get_import, but returns a mutable reference to the Import.
Sourcepub fn imports(&self) -> impl Iterator<Item = &Import> + '_
pub fn imports(&self) -> impl Iterator<Item = &Import> + '_
Get an iterator over imports in this module.
Sourcepub fn imports_mut(&mut self) -> impl Iterator<Item = &mut Import> + '_
pub fn imports_mut(&mut self) -> impl Iterator<Item = &mut Import> + '_
Same as Module::imports, but returns mutable references.
Sourcepub fn take_imports(&mut self) -> Vec<Import>
pub fn take_imports(&mut self) -> Vec<Import>
Takes all imports from this module.
Sourcepub fn required_packages(&self) -> &[Ident]
pub fn required_packages(&self) -> &[Ident]
Get a reference to the set of package identifiers that this module declares a dependency on
This is only reflects explicit extern package declarations of the root project module,
not actual requirements, i.e. it is not authoritative.
Sourcepub fn submodules(&self) -> &[SubmoduleDecl]
pub fn submodules(&self) -> &[SubmoduleDecl]
Get a reference to the set of submodule declarations in this module.
Sourcepub fn items_mut(&mut self) -> impl Iterator<Item = &mut Item>
pub fn items_mut(&mut self) -> impl Iterator<Item = &mut Item>
Returns a mutable iterator over the items in this module.
Note: does not expose Vec directly to preserve the name_map invariant.
Sourcepub fn exported(
&self,
) -> impl Iterator<Item = (ItemIndex, QualifiedProcedureName)> + '_
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.
Sourcepub fn procedure_signature(&self, id: ItemIndex) -> Option<&FunctionType>
pub fn procedure_signature(&self, id: ItemIndex) -> Option<&FunctionType>
Gets the type signature for the given ItemIndex, if available.
Sourcepub fn get(&self, index: ItemIndex) -> Option<&Item>
pub fn get(&self, index: ItemIndex) -> Option<&Item>
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 Item for details.
Sourcepub fn index_of<F>(&self, predicate: F) -> Option<ItemIndex>
pub fn index_of<F>(&self, predicate: F) -> Option<ItemIndex>
Get the ItemIndex for the first item in this module’s item table which returns true for
predicate.
Sourcepub fn index_of_name(&self, name: &Ident) -> Option<ItemIndex>
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.
Trait Implementations§
Source§impl Display for Module
Pretty-printed representation of this module as Miden Assembly text format
impl Display for Module
Pretty-printed representation of this module as Miden Assembly text format
NOTE: Delegates to the crate::prettier::PrettyPrint implementation internally
impl Eq for Module
Source§impl PrettyPrint for Module
The pretty-printer for Module
impl PrettyPrint for Module
The pretty-printer for Module
Source§fn to_pretty_string(&self) -> String
fn to_pretty_string(&self) -> String
Source§fn pretty_print(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn pretty_print(&self, f: &mut Formatter<'_>) -> Result<(), Error>
Source§impl SymbolTable for &Module
impl SymbolTable for &Module
Source§type SymbolIter = IntoIter<LocalSymbol>
type SymbolIter = IntoIter<LocalSymbol>
Source§fn symbols(&self, _source_manager: Arc<dyn SourceManager>) -> Self::SymbolIter
fn symbols(&self, _source_manager: Arc<dyn SourceManager>) -> Self::SymbolIter
Source§fn checked_symbols(
&self,
source_manager: Arc<dyn SourceManager>,
) -> Result<Self::SymbolIter, SymbolResolutionError>
fn checked_symbols( &self, source_manager: Arc<dyn SourceManager>, ) -> Result<Self::SymbolIter, SymbolResolutionError>
Auto Trait Implementations§
impl Freeze for Module
impl RefUnwindSafe for Module
impl Send for Module
impl Sync for Module
impl Unpin for Module
impl UnsafeUnpin for Module
impl UnwindSafe for Module
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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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 moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more