Translator
The pattern matching translator. Its general structure is a pipeline:
Match tree ---matchPlan---> Plan ---optimize---> Plan ---emit---> Tree
The pipeline consists of three steps:
- build a plan, using methods
matchPlan
,caseDefPlan
,patternPlan
. - optimize the plan, using methods listed in
optimization
, - emit the translated tree, using methods
emit
,collectSwitchCases
,emitSwitchCases
, andemitCondition
.
A plan represents the underlying decision graph. It consists of tests, let bindings, labeled blocks, return from said labeled blocks and code blocks. It's represented by its own data type. Plans are optimized by merging common tests and eliminating dead code.
Attributes
- Graph
-
- Supertypes
Members list
Type members
Classlikes
Attributes
- Supertypes
-
trait Serializabletrait Producttrait Equalsclass Testclass Objecttrait Matchableclass AnyShow all
Attributes
- Supertypes
-
trait Serializabletrait Producttrait Equalsclass Planclass Objecttrait Matchableclass AnyShow all
Attributes
- Supertypes
-
trait Serializabletrait Producttrait Equalsclass Testclass Objecttrait Matchableclass AnyShow all
Attributes
- Supertypes
-
trait Serializabletrait Producttrait Equalsclass Planclass Objecttrait Matchableclass AnyShow all
Attributes
- Supertypes
- Self type
-
NonEmptyTest.type
Attributes
- Supertypes
- Self type
-
NonNullTest.type
The different kinds of plans
The different kinds of plans
Attributes
- Supertypes
- Known subtypes
-
class LabeledPlanclass LetPlanclass ResultPlanclass ReturnPlanclass SeqPlanclass TestPlanShow all
Attributes
- Supertypes
-
trait Serializabletrait Producttrait Equalsclass Planclass Objecttrait Matchableclass AnyShow all
Attributes
- Supertypes
-
trait Serializabletrait Producttrait Equalsclass Planclass Objecttrait Matchableclass AnyShow all
Attributes
- Supertypes
-
trait Serializabletrait Producttrait Equalsclass Planclass Objecttrait Matchableclass AnyShow all
The different kinds of tests
The different kinds of tests
Attributes
- Supertypes
- Known subtypes
-
class EqualTestobject GuardTestclass LengthTestobject NonEmptyTestobject NonNullTestclass TypeTestShow all
Value members
Concrete methods
Merge identical consecutive tests.
Merge identical consecutive tests.
When we have the following shape:
if (testA) plan1 if (testA) plan2 nextPlan?
transform it to
if (testA) { plan1 plan2 } nextPlan?
Similarly, when we have equivalent let bindings:
let x1 = rhs1 in plan1 let x2 = rhs2 in plan2 nextPlan?
and rhs1 and rhs2 are equivalent, transform it to
let x1 = rhs1 in { plan1 plan2[x1/x2] }
where plan2[x1/x2] means substituting x1 for x2 in plan2.
There are some tricks to "ignore" non-patmat-generated let bindings, i.e., captures written in the source code, while identifying common subplans.
Attributes
Pretty-print plan; used for debugging
Pretty-print plan; used for debugging
Attributes
Translate pattern match to sequence of tests.
Translate pattern match to sequence of tests.