trait MatchOptimization extends MatchTreeMaking with MatchApproximation
Optimize and analyze matches based on their TreeMaker-representation.
The patmat translation doesn't rely on this, so it could be disabled in principle.
- well, not quite: the backend crashes if we emit duplicates in switches (e.g. scala/bug#7290)
- Source
- MatchOptimization.scala
- Alphabetic
- By Inheritance
- MatchOptimization
- MatchApproximation
- ScalaLogic
- Logic
- TreeAndTypeAnalysis
- MatchTreeMaking
- Debugging
- MatchCodeGen
- Interface
- TreeDSL
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- Protected
Type Members
- trait MatchMonadInterface extends AnyRef
- Definition Classes
- Interface
- trait TypedSubstitution extends MatchMonadInterface
- Definition Classes
- Interface
- trait PropositionalLogic extends AnyRef
- Definition Classes
- Logic
- trait MatchApproximator extends TreeMakers with TreesAndTypesDomain
Represent a match as a formula in propositional logic that encodes whether the match matches (abstractly: we only consider types)
Represent a match as a formula in propositional logic that encodes whether the match matches (abstractly: we only consider types)
- Definition Classes
- MatchApproximation
- trait CodegenCore extends MatchMonadInterface
- Definition Classes
- MatchCodeGen
- trait OptimizedCodegen extends CodegenCore with TypedSubstitution with MatchMonadInterface
- Definition Classes
- MatchCodeGen
- trait CommonSubconditionElimination extends OptimizedCodegen with MatchApproximator
- trait MatchOptimizer extends OptimizedCodegen with SwitchEmission with CommonSubconditionElimination
- trait SwitchEmission extends TreeMakers with MatchMonadInterface
- final case class Suppression extends Product with Serializable
- Definition Classes
- MatchTreeMaking
- trait TreeMakers extends TypedSubstitution with CodegenCore
- Definition Classes
- MatchTreeMaking
- trait TreesAndTypesDomain extends PropositionalLogic with CheckableTreeAndTypeAnalysis
- Definition Classes
- ScalaLogic
- trait CheckableTreeAndTypeAnalysis extends AnyRef
- Definition Classes
- TreeAndTypeAnalysis
Concrete Value Members
- object CODE
- Definition Classes
- TreeDSL
- object debug
- Definition Classes
- Debugging
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- def +(other: String): String
- Implicit
- This member is added by an implicit conversion from MatchOptimization toany2stringadd[MatchOptimization] performed by method any2stringadd in scala.Predef.
- Definition Classes
- any2stringadd
- def ->[B](y: B): (MatchOptimization, B)
- Implicit
- This member is added by an implicit conversion from MatchOptimization toArrowAssoc[MatchOptimization] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @inline()
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- def alignAcrossRows(xss: List[List[Any]], sep: String, lineSep: String = "\n"): String
- Definition Classes
- Logic
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def binderTypeImpliedByPattern(pat: Global.Tree, pt: Global.Type): Global.Type
Compute the type T implied for a value
v
matched by a patternpat
(with expected typept
).Compute the type T implied for a value
v
matched by a patternpat
(with expected typept
).Usually, this is the pattern's type because pattern matching implies instance-of checks.
However, Stable Identifier and Literal patterns are matched using
==
, which does not imply a type for the binder that binds the matched value. E.g., incase x@Nil => x
, all we know aboutx
is that it satisfiesNil == x
, which could be anything. A type pattern with a literal type works the same as the corresponding literal pattern. A literal pattern with a Boolean or Unit pattern does enforce that the respective value (true
,false
,()
) was matched, so in those cases, the pattern type is assumed.The other patterns imply type tests, so we can safely deduce that the binder has the pattern's type when the pattern matches. Concretely, a literal, type pattern, a case class (the constructor's result type) or extractor (the unapply's argument type) all imply type tests.
See scala/bug#1503, scala/bug#5024: don't cast binders to types we're not sure they have
- Definition Classes
- TreeAndTypeAnalysis
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- def ensuring(cond: (MatchOptimization) => Boolean, msg: => Any): MatchOptimization
- Implicit
- This member is added by an implicit conversion from MatchOptimization toEnsuring[MatchOptimization] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- def ensuring(cond: (MatchOptimization) => Boolean): MatchOptimization
- Implicit
- This member is added by an implicit conversion from MatchOptimization toEnsuring[MatchOptimization] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- def ensuring(cond: Boolean, msg: => Any): MatchOptimization
- Implicit
- This member is added by an implicit conversion from MatchOptimization toEnsuring[MatchOptimization] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- def ensuring(cond: Boolean): MatchOptimization
- Implicit
- This member is added by an implicit conversion from MatchOptimization toEnsuring[MatchOptimization] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def equivalentTree(a: Global.Tree, b: Global.Tree): Boolean
- Definition Classes
- TreeAndTypeAnalysis
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def instanceOfTpImplies(tp: Global.Type, tpImplied: Global.Type): Boolean
- Definition Classes
- TreeAndTypeAnalysis
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- object Suppression extends java.io.Serializable
- Definition Classes
- MatchTreeMaking
Deprecated Value Members
- def formatted(fmtstr: String): String
- Implicit
- This member is added by an implicit conversion from MatchOptimization toStringFormat[MatchOptimization] performed by method StringFormat in scala.Predef.
- Definition Classes
- StringFormat
- Annotations
- @deprecated @inline()
- Deprecated
(Since version 2.12.16) Use
formatString.format(value)
instead ofvalue.formatted(formatString)
, or use thef""
string interpolator. In Java 15 and later,formatted
resolves to the new method in String which has reversed parameters.
- def →[B](y: B): (MatchOptimization, B)
- Implicit
- This member is added by an implicit conversion from MatchOptimization toArrowAssoc[MatchOptimization] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @deprecated
- Deprecated
(Since version 2.13.0) Use
->
instead. If you still wish to display it as one character, consider using a font with programming ligatures such as Fira Code.
The Scala compiler and reflection APIs.