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: usize
The 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: Symbol
The name of the current program being processed
current_function: Symbol
The name of the current function being processed
new_async_functions: Vec<(Symbol, Function)>
A map of reconstructed functions in the current program scope.
modified: bool
Indicates 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
CallExpression
that 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_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
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