4.3. Pass Dependency Graph
The ordering constraints between passes, derived from the declarations above rather than
written by hand. Each edge names the shape that ties the two passes together, and whether
the later pass cannot handle that shape, and which pass removed it
(removes → unsupported).
Dependency edges (A → B means A must run before B). Every edge is derived from the passes' declared node kinds:
-
CheckOverrideRefinement → LiftInstanceProcedures
-
via
Pseudo.needsOverrideRules(removes → unsupported)
-
-
LiftInstanceProcedures → EliminateValueInReturns
-
via
CompositeType.instanceProcedures.cons(removes → unsupported)
-
-
EliminateValueInReturns → EliminateExceptions
-
via
StmtExpr.Return.value.some(removes → unsupported)
-
-
LiftInstanceProcedures → YieldElim
-
via
StmtExpr.InstanceCall(removes → unsupported)
-
-
MonomorphizeComposites → HeapParameterization
-
via
CompositeType.typeArgs.cons(removes → unsupported)
-
-
ConstrainedTypeElim → HeapParameterization
-
via
TypeDefinition.Constrained(removes → unsupported)
-
-
EliminateExceptions → HeapParameterization
-
via
StmtExpr.Throw(removes → unsupported),StmtExpr.Try(removes → unsupported)
-
-
EliminateValueInReturns → HeapParameterization
-
via
StmtExpr.Return.value.some(removes → unsupported)
-
-
HeapParameterization → TypeHierarchyTransform
-
via
Pseudo.implicitHeap(removes → unsupported)
-
-
HeapParameterization → ModifiesClausesTransform
-
via
Pseudo.implicitHeap(removes → unsupported)
-
-
LiftInstanceProcedures → GlobalParameterization
-
via
CompositeType.instanceProcedures.cons(removes → unsupported)
-
-
EliminateValueInReturns → GlobalParameterization
-
via
StmtExpr.Return.value.some(removes → unsupported)
-
-
EliminateExceptions → GlobalParameterization
-
via
Procedure.throwsType.some(removes → unsupported)
-
-
InferHoleTypes → EliminateDeterministicHoles
-
via
StmtExpr.Hole.type.none(removes → unsupported)
-
-
EliminateExceptions → EliminateReturnStatements
-
via
StmtExpr.Try.finally?.some(removes → unsupported)
-
-
EliminateReturnStatements → Contracts
-
via
StmtExpr.Return(removes → unsupported)
-
-
GlobalParameterization → Contracts
-
via
Program.staticFields.cons(removes → unsupported)
-
-
UniqueOverloadNames → Contracts
-
via
Pseudo.overload(removes → unsupported)
-
-
UniqueOverloadNames → Transparency
-
via
Pseudo.overload(removes → unsupported)
-
-
Transparency → FunctionalRewritePass
-
via
Pseudo.laurelProgram(removes → unsupported)
-
-
DesugarShortCircuit → LiftImperativeExpressions
-
via
Pseudo.imperativeShortCircuit(removes → unsupported)
-
-
EliminateIncrDecrAndCompoundAssign → InlineLocalVariables
-
via
StmtExpr.IncrDecr(removes → unsupported)
-
-
EliminateDoWhile → LaurelToCoreSchema
-
via
StmtExpr.While.postTest.true(removes → unsupported)
-
-
EliminateIncrDecrAndCompoundAssign → LaurelToCoreSchema
-
via
StmtExpr.IncrDecr(removes → unsupported),StmtExpr.CompoundAssign(removes → unsupported)
-
-
HeapParameterization → LaurelToCoreSchema
-
via
StmtExpr.Var.var.Field(removes → unsupported),StmtExpr.PureFieldUpdate(removes → unsupported),StmtExpr.Old.label?.some(removes → unsupported)
-
-
TypeHierarchyTransform → LaurelToCoreSchema
-
via
StmtExpr.IsType(removes → unsupported),StmtExpr.AsType(removes → unsupported),StmtExpr.New(removes → unsupported)
-
-
PushOldInward → LaurelToCoreSchema
-
via
Pseudo.oldExpr(removes → unsupported)
-
-
EliminateExceptions → LaurelToCoreSchema
-
via
StmtExpr.Throw(removes → unsupported),StmtExpr.Try(removes → unsupported)
-
-
YieldElim → LaurelToCoreSchema
-
via
StmtExpr.Yield(removes → unsupported)
-
-
CoroutineElaboration → LaurelToCoreSchema
-
via
StmtExpr.Resume(removes → unsupported),StmtExpr.HasNext(removes → unsupported)
-
-
EliminateDeterministicHoles → LaurelToCoreSchema
-
via
StmtExpr.Hole.deterministic.true(removes → unsupported)
-
-
MonomorphizeComposites → LaurelToCoreSchema
-
via
CompositeType.typeArgs.cons(removes → unsupported)
-
-
LiftImperativeExpressions → LaurelToCoreSchema
-
via
Pseudo.statementExpression(removes → unsupported)
-
-
Ordering → LaurelToCoreSchema
-
via
Pseudo.unorderedDeclarations(removes → unsupported)
-
-
InlineLocalVariables → LaurelToCoreSchema
-
via
Pseudo.letExpr(removes → unsupported)
-
-
LiftInstanceProcedures → LaurelToCoreSchema
-
via
StmtExpr.InstanceCall(removes → unsupported),CompositeType.instanceProcedures.cons(removes → unsupported),StmtExpr.This(removes → unsupported)
-
Pipeline execution order (→ X: must run before X; ← X: must run after X):
1. CoroutineElaboration → LaurelToCoreSchema 2. CheckOverrideRefinement → LiftInstanceProcedures 3. LiftInstanceProcedures → EliminateValueInReturns → YieldElim → GlobalParameterization → LaurelToCoreSchema ← CheckOverrideRefinement 4. TypeAliasElim 5. MonomorphizeComposites → HeapParameterization → LaurelToCoreSchema 6. EliminateDoWhile → LaurelToCoreSchema 7. EliminateIncrDecrAndCompoundAssign → InlineLocalVariables → LaurelToCoreSchema 8. ConstrainedTypeElim → HeapParameterization 9. EliminateValueInReturns → EliminateExceptions → HeapParameterization → GlobalParameterization ← LiftInstanceProcedures 10. EliminateExceptions → HeapParameterization → GlobalParameterization → EliminateReturnStatements → LaurelToCoreSchema ← EliminateValueInReturns 11. YieldElim → LaurelToCoreSchema ← LiftInstanceProcedures 12. HeapParameterization → TypeHierarchyTransform → ModifiesClausesTransform → LaurelToCoreSchema ← MonomorphizeComposites ← ConstrainedTypeElim ← EliminateExceptions ← EliminateValueInReturns 13. TypeHierarchyTransform → LaurelToCoreSchema ← HeapParameterization 14. ModifiesClausesTransform ← HeapParameterization 15. GlobalParameterization → Contracts ← LiftInstanceProcedures ← EliminateValueInReturns ← EliminateExceptions 16. UniqueOverloadNames → Contracts → Transparency 17. PushOldInward → LaurelToCoreSchema 18. InferHoleTypes → EliminateDeterministicHoles 19. EliminateDeterministicHoles → LaurelToCoreSchema ← InferHoleTypes 20. DesugarShortCircuit → LiftImperativeExpressions 21. EliminateReturnStatements → Contracts ← EliminateExceptions 22. LoopInvariantWellFormedness 23. Contracts ← EliminateReturnStatements ← GlobalParameterization ← UniqueOverloadNames 24. Transparency → FunctionalRewritePass ← UniqueOverloadNames 25. FunctionalRewritePass ← Transparency 26. LiftImperativeExpressions → LaurelToCoreSchema ← DesugarShortCircuit 27. InlineLocalVariables → LaurelToCoreSchema ← EliminateIncrDecrAndCompoundAssign 28. Ordering → LaurelToCoreSchema 29. LaurelToCoreSchema ← EliminateDoWhile ← EliminateIncrDecrAndCompoundAssign ← HeapParameterization ← TypeHierarchyTransform ← PushOldInward ← EliminateExceptions ← YieldElim ← CoroutineElaboration ← EliminateDeterministicHoles ← MonomorphizeComposites ← LiftImperativeExpressions ← Ordering ← InlineLocalVariables ← LiftInstanceProcedures