pub enum BuilderInstruction<S: Semantics> {
Show 22 variants
ExpectParameterNode(SubstMarker, S::NodeAbstract),
ExpectContextNode(SubstMarker, S::NodeAbstract),
ExpectParameterEdge(SubstMarker, SubstMarker, S::EdgeAbstract),
StartQuery(S::BuiltinQuery, Vec<AbstractNodeId>),
EnterTrueBranch,
EnterFalseBranch,
StartShapeQuery(AbstractOperationResultMarker),
EndQuery,
ExpectShapeNode(AbstractOutputNodeMarker, S::NodeAbstract),
ExpectShapeNodeChange(AbstractNodeId, S::NodeAbstract),
ExpectShapeEdge(AbstractNodeId, AbstractNodeId, S::EdgeAbstract),
SkipMarker(Marker),
SkipAllMarkers,
AddNamedOperation(AbstractOperationResultMarker, BuilderOpLike<S>, Vec<AbstractNodeId>),
AddBangOperation(NamedMarker, BuilderOpLike<S>, Vec<AbstractNodeId>),
AddOperation(BuilderOpLike<S>, Vec<AbstractNodeId>),
ReturnNode(AbstractNodeId, AbstractOutputNodeMarker, S::NodeAbstract),
ReturnEdge(AbstractNodeId, AbstractNodeId, S::EdgeAbstract),
RenameNode(AbstractNodeId, NamedMarker),
Finalize,
SelfReturnNode(AbstractOutputNodeMarker, S::NodeAbstract),
Diverge(String),
}Variants§
ExpectParameterNode(SubstMarker, S::NodeAbstract)
ExpectContextNode(SubstMarker, S::NodeAbstract)
ExpectParameterEdge(SubstMarker, SubstMarker, S::EdgeAbstract)
StartQuery(S::BuiltinQuery, Vec<AbstractNodeId>)
EnterTrueBranch
EnterFalseBranch
StartShapeQuery(AbstractOperationResultMarker)
EndQuery
ExpectShapeNode(AbstractOutputNodeMarker, S::NodeAbstract)
ExpectShapeNodeChange(AbstractNodeId, S::NodeAbstract)
ExpectShapeEdge(AbstractNodeId, AbstractNodeId, S::EdgeAbstract)
SkipMarker(Marker)
SkipAllMarkers
AddNamedOperation(AbstractOperationResultMarker, BuilderOpLike<S>, Vec<AbstractNodeId>)
AddBangOperation(NamedMarker, BuilderOpLike<S>, Vec<AbstractNodeId>)
AddOperation(BuilderOpLike<S>, Vec<AbstractNodeId>)
ReturnNode(AbstractNodeId, AbstractOutputNodeMarker, S::NodeAbstract)
ReturnEdge(AbstractNodeId, AbstractNodeId, S::EdgeAbstract)
RenameNode(AbstractNodeId, NamedMarker)
Rename a dynamic output marker. Invariants in the interpreter require that this is never a parameter node. (E.g., since we may want to return it)
Finalize
SelfReturnNode(AbstractOutputNodeMarker, S::NodeAbstract)
Asserts that the current operation will return a node with the given abstract value and name.
Diverge(String)
Diverge with a crash message. Has a static effect: The branch is considered to never return, hence merges will always take the other branch.
Trait Implementations§
Auto Trait Implementations§
impl<S> Freeze for BuilderInstruction<S>where
<S as Semantics>::NodeAbstract: Freeze,
<S as Semantics>::EdgeAbstract: Freeze,
<S as Semantics>::BuiltinQuery: Freeze,
<S as Semantics>::BuiltinOperation: Freeze,
<S as Semantics>::NodeConcrete: Freeze,
<S as Semantics>::EdgeConcrete: Freeze,
impl<S> RefUnwindSafe for BuilderInstruction<S>where
<S as Semantics>::NodeAbstract: RefUnwindSafe,
<S as Semantics>::EdgeAbstract: RefUnwindSafe,
<S as Semantics>::BuiltinQuery: RefUnwindSafe,
<S as Semantics>::BuiltinOperation: RefUnwindSafe,
<S as Semantics>::NodeConcrete: RefUnwindSafe,
<S as Semantics>::EdgeConcrete: RefUnwindSafe,
impl<S> Send for BuilderInstruction<S>where
<S as Semantics>::NodeAbstract: Send,
<S as Semantics>::EdgeAbstract: Send,
<S as Semantics>::BuiltinQuery: Send,
<S as Semantics>::BuiltinOperation: Send,
<S as Semantics>::NodeConcrete: Send,
<S as Semantics>::EdgeConcrete: Send,
impl<S> Sync for BuilderInstruction<S>where
<S as Semantics>::NodeAbstract: Sync,
<S as Semantics>::EdgeAbstract: Sync,
<S as Semantics>::BuiltinQuery: Sync,
<S as Semantics>::BuiltinOperation: Sync,
<S as Semantics>::NodeConcrete: Sync,
<S as Semantics>::EdgeConcrete: Sync,
impl<S> Unpin for BuilderInstruction<S>where
<S as Semantics>::NodeAbstract: Unpin,
<S as Semantics>::EdgeAbstract: Unpin,
<S as Semantics>::BuiltinQuery: Unpin,
<S as Semantics>::BuiltinOperation: Unpin,
<S as Semantics>::NodeConcrete: Unpin,
<S as Semantics>::EdgeConcrete: Unpin,
impl<S> UnsafeUnpin for BuilderInstruction<S>where
<S as Semantics>::NodeAbstract: UnsafeUnpin,
<S as Semantics>::EdgeAbstract: UnsafeUnpin,
<S as Semantics>::BuiltinQuery: UnsafeUnpin,
<S as Semantics>::BuiltinOperation: UnsafeUnpin,
<S as Semantics>::NodeConcrete: UnsafeUnpin,
<S as Semantics>::EdgeConcrete: UnsafeUnpin,
impl<S> UnwindSafe for BuilderInstruction<S>where
<S as Semantics>::NodeAbstract: UnwindSafe,
<S as Semantics>::EdgeAbstract: UnwindSafe,
<S as Semantics>::BuiltinQuery: UnwindSafe,
<S as Semantics>::BuiltinOperation: UnwindSafe,
<S as Semantics>::NodeConcrete: UnwindSafe,
<S as Semantics>::EdgeConcrete: UnwindSafe,
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