dotty.tools.dotc.transform.PatternMatcher$.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
, and emitCondition
.
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 Reset zoom Hide graph Show graph
Supertypes class Object
trait Matchable
class Any
Members list Concise view
Type members
Attributes Graph Reset zoom Hide graph Show graph
Supertypes trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Attributes Graph Reset zoom Hide graph Show graph
Supertypes trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Self type
Attributes Graph Reset zoom Hide graph Show graph
Supertypes trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Attributes Graph Reset zoom Hide graph Show graph
Supertypes trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Attributes Graph Reset zoom Hide graph Show graph
Supertypes trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Attributes Graph Reset zoom Hide graph Show graph
Supertypes trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Self type
Attributes Graph Reset zoom Hide graph Show graph
Supertypes trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Self type
The different kinds of plans
The different kinds of plans
Attributes Graph Reset zoom Hide graph Show graph
Supertypes class Object
trait Matchable
class Any
Known subtypes
A superclass for plan transforms
A superclass for plan transforms
Attributes Graph Reset zoom Hide graph Show graph
Supertypes class Object
trait Matchable
class Any
Attributes Graph Reset zoom Hide graph Show graph
Supertypes trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Attributes Graph Reset zoom Hide graph Show graph
Supertypes trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Attributes Graph Reset zoom Hide graph Show graph
Supertypes trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
The different kinds of tests
The different kinds of tests
Attributes Graph Reset zoom Hide graph Show graph
Supertypes class Object
trait Matchable
class Any
Known subtypes
Attributes Companion: object Graph Reset zoom Hide graph Show graph
Supertypes trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Attributes Companion: class Graph Reset zoom Hide graph Show graph
Supertypes trait Product
trait Mirror
class Object
trait Matchable
class Any
Self type
Attributes Graph Reset zoom Hide graph Show graph
Supertypes trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Value members
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.
Attributes