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
Expression
representing 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 typeT
inside theOptional<T>
.
§Returns
- An
Expression
representing the constructedOptional<T>
struct instance withNone
.
Trait Implementations§
Source§impl AstReconstructor for OptionLoweringVisitor<'_>
impl AstReconstructor for OptionLoweringVisitor<'_>
type AdditionalInput = Option<Type>
type AdditionalOutput = Vec<Statement>
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_array_type( &mut self, input: ArrayType, ) -> (Type, Self::AdditionalOutput)
fn reconstruct_composite_type( &mut self, input: CompositeType, ) -> (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_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
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