pub struct ProcessingAsyncVisitor<'a> {
pub state: &'a mut CompilerState,
pub max_inputs: usize,
pub current_program: Symbol,
pub current_function: Symbol,
pub new_async_functions: Vec<(Symbol, Function)>,
pub modified: bool,
}Fields§
§state: &'a mut CompilerState§max_inputs: usizeThe maximum number of inputs allowed for a function. This is the same limit we will enforce
on the number of variables captured by an async block.
current_program: SymbolThe name of the current program being processed
current_function: SymbolThe name of the current function being processed
new_async_functions: Vec<(Symbol, Function)>A map of reconstructed functions in the current program scope.
modified: boolIndicates whether this pass actually processed any async blocks.
Implementations§
Trait Implementations§
Source§impl AstReconstructor for ProcessingAsyncVisitor<'_>
impl AstReconstructor for ProcessingAsyncVisitor<'_>
Source§fn reconstruct_async(
&mut self,
input: AsyncExpression,
_additional: &(),
) -> (Expression, Self::AdditionalOutput)
fn reconstruct_async( &mut self, input: AsyncExpression, _additional: &(), ) -> (Expression, Self::AdditionalOutput)
Transforms an AsyncExpression into a standalone async Function and returns
a call to this function. This process:
- Collects all referenced symbol accesses in the async block.
- Filters out mappings and constructs typed input parameters.
- Reconstructs an async function with those inputs and the original block.
- Builds and returns a
CallExpressionthat invokes the new function.
type AdditionalInput = ()
type AdditionalOutput = ()
fn reconstruct_block(&mut self, input: Block) -> (Block, Self::AdditionalOutput)
fn reconstruct_iteration( &mut self, input: IterationStatement, ) -> (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_optional_type( &mut self, input: OptionalType, ) -> (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_expression( &mut self, input: Expression, additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_array_access( &mut self, input: ArrayAccess, _additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_associated_constant( &mut self, input: AssociatedConstantExpression, _additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_associated_function( &mut self, input: AssociatedFunctionExpression, _additional: &Self::AdditionalInput, ) -> (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: &Self::AdditionalInput, ) -> (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: &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_ternary( &mut self, input: TernaryExpression, _additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_tuple( &mut self, input: TupleExpression, _additional: &Self::AdditionalInput, ) -> (Expression, Self::AdditionalOutput)
fn reconstruct_unary( &mut self, input: UnaryExpression, _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)
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_definition( &mut self, input: DefinitionStatement, ) -> (Statement, Self::AdditionalOutput)
fn reconstruct_expression_statement( &mut self, input: ExpressionStatement, ) -> (Statement, Self::AdditionalOutput)
fn reconstruct_return( &mut self, input: ReturnStatement, ) -> (Statement, Self::AdditionalOutput)
Source§impl ProgramReconstructor for ProcessingAsyncVisitor<'_>
impl ProgramReconstructor for ProcessingAsyncVisitor<'_>
Source§fn reconstruct_program_scope(&mut self, input: ProgramScope) -> ProgramScope
fn reconstruct_program_scope(&mut self, input: ProgramScope) -> ProgramScope
Reconstructs a ProgramScope by rewriting all contained elements:
- Updates the current program context.
- Reconstructs all functions using
reconstruct_function. - Reconstructs structs, mappings, and constants.
- Inserts reconstructed functions, including any newly created async functions, placing transitions before other functions.
This prepares the scope for further analysis or compilation, ensuring all components have gone through transformation.
fn reconstruct_function(&mut self, input: Function) -> Function
fn reconstruct_program(&mut self, input: Program) -> Program
fn reconstruct_stub(&mut self, input: Stub) -> Stub
fn reconstruct_module(&mut self, input: Module) -> Module
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 ProcessingAsyncVisitor<'a>
impl<'a> !RefUnwindSafe for ProcessingAsyncVisitor<'a>
impl<'a> !Send for ProcessingAsyncVisitor<'a>
impl<'a> !Sync for ProcessingAsyncVisitor<'a>
impl<'a> Unpin for ProcessingAsyncVisitor<'a>
impl<'a> !UnwindSafe for ProcessingAsyncVisitor<'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
Mutably borrows from an owned value. Read more
§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>
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 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>
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