pub struct OptionLoweringVisitor<'a> {
pub state: &'a mut CompilerState,
pub program: Symbol,
pub module: Vec<Symbol>,
pub function: Option<Symbol>,
pub new_structs: IndexMap<Symbol, Composite>,
pub reconstructed_structs: IndexMap<Vec<Symbol>, Composite>,
}Fields§
§state: &'a mut CompilerState§program: Symbol§module: Vec<Symbol>§function: Option<Symbol>§new_structs: IndexMap<Symbol, Composite>§reconstructed_structs: IndexMap<Vec<Symbol>, Composite>Implementations§
Source§impl OptionLoweringVisitor<'_>
impl OptionLoweringVisitor<'_>
Sourcepub fn in_module_scope<T>(
&mut self,
module: &[Symbol],
func: impl FnOnce(&mut Self) -> T,
) -> T
pub fn in_module_scope<T>( &mut self, module: &[Symbol], func: impl FnOnce(&mut Self) -> T, ) -> T
Enter module scope with path module, execute func, and then return to the parent module.
Sourcepub fn wrap_optional_value(&mut self, expr: Expression, ty: Type) -> Expression
pub fn wrap_optional_value(&mut self, expr: Expression, ty: Type) -> Expression
Wraps an expression of a given type in an Optional<T>-like struct representing Some(value).
This function creates a struct expression that encodes an optional value with is_some = true
and the provided expression as the val field. It also ensures that the type is fully
reconstructed, which guarantees that all necessary struct definitions are available and registered.
§Parameters
expr: The expression to wrap as the value of the optional.ty: The type of the expression.
§Returns
- An
Expressionrepresenting the constructedOptional<T>struct instance.
Sourcepub fn wrap_none(&mut self, inner_ty: &Type) -> Expression
pub fn wrap_none(&mut self, inner_ty: &Type) -> Expression
Constructs an Optional<T>-like struct representing None for a given inner type.
The returned struct expression sets is_some = false, and provides a zero value for the val
field, where “zero” is defined according to the type:
numeric types use literal zero, structs are recursively zero-initialized, etc.
This function assumes that all required struct types are already reconstructed and registered.
§Parameters
inner_ty: The typeTinside theOptional<T>.
§Returns
- An
Expressionrepresenting the constructedOptional<T>struct instance withNone.
Sourcepub fn insert_optional_wrapper_struct(&mut self, ty: &Type) -> Symbol
pub fn insert_optional_wrapper_struct(&mut self, ty: &Type) -> Symbol
Inserts (or reuses) a compiler-generated struct representing Optional<T>.
The struct has two fields:
is_some: bool— indicates whether the value is present.val: T— the wrapped value.
If the struct for this type already exists, it’s reused; otherwise, a new one is created.
Returns the Symbol for the struct name.
Trait Implementations§
Source§impl AstReconstructor for OptionLoweringVisitor<'_>
impl AstReconstructor for OptionLoweringVisitor<'_>
type AdditionalInput = Option<Type>
type AdditionalOutput = Vec<Statement>
fn reconstruct_array_type( &mut self, input: ArrayType, ) -> (Type, Self::AdditionalOutput)
fn reconstruct_composite_type( &mut self, input: CompositeType, ) -> (Type, Self::AdditionalOutput)
fn reconstruct_optional_type( &mut self, input: OptionalType, ) -> (Type, Self::AdditionalOutput)
fn reconstruct_expression( &mut self, input: Expression, additional: &Option<Type>, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_array_access( &mut self, input: ArrayAccess, _additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_associated_function( &mut self, input: AssociatedFunctionExpression, _additional: &Option<Type>, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_member_access( &mut self, input: MemberAccess, _additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_repeat( &mut self, input: RepeatExpression, additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_tuple_access( &mut self, input: TupleAccess, _additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_array( &mut self, input: ArrayExpression, additional: &Option<Type>, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_binary( &mut self, input: BinaryExpression, _additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_call( &mut self, input: CallExpression, _additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_cast( &mut self, input: CastExpression, _additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_struct_init( &mut self, input: StructExpression, additional: &Option<Type>, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_ternary( &mut self, input: TernaryExpression, additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_tuple( &mut self, input: TupleExpression, additional: &Option<Type>, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_unary( &mut self, input: UnaryExpression, _additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_assert( &mut self, input: AssertStatement, ) -> (Statement, Self::AdditionalOutput)
fn reconstruct_assign( &mut self, input: AssignStatement, ) -> (Statement, Self::AdditionalOutput)
fn reconstruct_conditional( &mut self, input: ConditionalStatement, ) -> (Statement, Self::AdditionalOutput)
fn reconstruct_const( &mut self, input: ConstDeclaration, ) -> (Statement, Self::AdditionalOutput)
fn reconstruct_block(&mut self, block: Block) -> (Block, Self::AdditionalOutput)
fn reconstruct_definition( &mut self, input: DefinitionStatement, ) -> (Statement, Self::AdditionalOutput)
fn reconstruct_expression_statement( &mut self, input: ExpressionStatement, ) -> (Statement, Self::AdditionalOutput)
fn reconstruct_iteration( &mut self, input: IterationStatement, ) -> (Statement, Self::AdditionalOutput)
fn reconstruct_return( &mut self, input: ReturnStatement, ) -> (Statement, Self::AdditionalOutput)
fn reconstruct_type(&mut self, input: Type) -> (Type, Self::AdditionalOutput)
fn reconstruct_future_type( &mut self, input: FutureType, ) -> (Type, Self::AdditionalOutput)
fn reconstruct_mapping_type( &mut self, input: MappingType, ) -> (Type, Self::AdditionalOutput)
fn reconstruct_tuple_type( &mut self, input: TupleType, ) -> (Type, Self::AdditionalOutput)
fn reconstruct_vector_type( &mut self, input: VectorType, ) -> (Type, Self::AdditionalOutput)
fn reconstruct_associated_constant( &mut self, input: AssociatedConstantExpression, _additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_async( &mut self, input: AsyncExpression, _additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_err( &mut self, _input: ErrExpression, _additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_path( &mut self, input: Path, _additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_literal( &mut self, input: Literal, _additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_locator( &mut self, input: LocatorExpression, _additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_unit( &mut self, input: UnitExpression, _additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_statement( &mut self, input: Statement, ) -> (Statement, Self::AdditionalOutput)
Source§impl ProgramReconstructor for OptionLoweringVisitor<'_>
impl ProgramReconstructor for OptionLoweringVisitor<'_>
fn reconstruct_program(&mut self, input: Program) -> Program
fn reconstruct_program_scope(&mut self, input: ProgramScope) -> ProgramScope
fn reconstruct_module(&mut self, input: Module) -> Module
fn reconstruct_function(&mut self, input: Function) -> Function
fn reconstruct_stub(&mut self, input: Stub) -> Stub
fn reconstruct_constructor(&mut self, input: Constructor) -> Constructor
fn reconstruct_function_stub(&mut self, input: FunctionStub) -> FunctionStub
fn reconstruct_struct(&mut self, input: Composite) -> Composite
fn reconstruct_import(&mut self, input: Program) -> Program
fn reconstruct_mapping(&mut self, input: Mapping) -> Mapping
fn reconstruct_storage_variable( &mut self, input: StorageVariable, ) -> StorageVariable
Auto Trait Implementations§
impl<'a> Freeze for OptionLoweringVisitor<'a>
impl<'a> !RefUnwindSafe for OptionLoweringVisitor<'a>
impl<'a> !Send for OptionLoweringVisitor<'a>
impl<'a> !Sync for OptionLoweringVisitor<'a>
impl<'a> Unpin for OptionLoweringVisitor<'a>
impl<'a> !UnwindSafe for OptionLoweringVisitor<'a>
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