trait MatchTreeMaking extends MatchCodeGen with Debugging
Translate our IR (TreeMakers) into actual Scala Trees using the factory methods in MatchCodeGen.
The IR is mostly concerned with sequencing, substitution, and rendering all necessary conditions, mostly agnostic to whether we're in optimized/pure (virtualized) mode.
- Source
- MatchTreeMaking.scala
- Alphabetic
- By Inheritance
- MatchTreeMaking
- Debugging
- MatchCodeGen
- Interface
- TreeDSL
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- All
Type Members
- trait MatchMonadInterface extends AnyRef
Interface with user-defined match monad? if there's a
__match
in scope, we use this as the match strategy, assuming it conforms to MatchStrategy as defined below:Interface with user-defined match monad? if there's a
__match
in scope, we use this as the match strategy, assuming it conforms to MatchStrategy as defined below:type Matcher[P[_], M[+_], A] = { def flatMap[B](f: P[A] => M[B]): M[B] def orElse[B >: A](alternative: => M[B]): M[B] } abstract class MatchStrategy[P[_], M[+_]] { // runs the matcher on the given input def runOrElse[T, U](in: P[T])(matcher: P[T] => M[U]): P[U] def zero: M[Nothing] def one[T](x: P[T]): M[T] def guard[T](cond: P[Boolean], then: => P[T]): M[T] }
P and M are derived from one's signature (
def one[T](x: P[T]): M[T]
)if no
__match
is found, we assume the following implementation (and generate optimized code accordingly)object __match extends MatchStrategy[({type Id[x] = x})#Id, Option] { def zero = None def one[T](x: T) = Some(x) // NOTE: guard's return type must be of the shape M[T], where M is the monad in which the pattern match should be interpreted def guard[T](cond: Boolean, then: => T): Option[T] = if(cond) Some(then) else None def runOrElse[T, U](x: T)(f: T => Option[U]): U = f(x) getOrElse (throw new MatchError(x)) }
- Definition Classes
- Interface
- trait TypedSubstitution extends MatchMonadInterface
- Definition Classes
- Interface
- trait CodegenCore extends MatchMonadInterface
- Definition Classes
- MatchCodeGen
- trait OptimizedCodegen extends CodegenCore with TypedSubstitution with MatchMonadInterface
- Definition Classes
- MatchCodeGen
- final case class Suppression(suppressExhaustive: Boolean, suppressUnreachable: Boolean) extends Product with Serializable
- trait TreeMakers extends TypedSubstitution with CodegenCore
Concrete Value Members
- object CODE
- Definition Classes
- TreeDSL
- object debug
- Definition Classes
- Debugging
- object vpmName
- Definition Classes
- Interface
- 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 MatchTreeMaking toany2stringadd[MatchTreeMaking] performed by method any2stringadd in scala.Predef.
- Definition Classes
- any2stringadd
- def ->[B](y: B): (MatchTreeMaking, B)
- Implicit
- This member is added by an implicit conversion from MatchTreeMaking toArrowAssoc[MatchTreeMaking] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @inline()
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- final def dealiasWiden(tp: Global.Type): Global.Type
- Attributes
- protected
- Definition Classes
- Interface
- def ensuring(cond: (MatchTreeMaking) => Boolean, msg: => Any): MatchTreeMaking
- Implicit
- This member is added by an implicit conversion from MatchTreeMaking toEnsuring[MatchTreeMaking] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- def ensuring(cond: (MatchTreeMaking) => Boolean): MatchTreeMaking
- Implicit
- This member is added by an implicit conversion from MatchTreeMaking toEnsuring[MatchTreeMaking] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- def ensuring(cond: Boolean, msg: => Any): MatchTreeMaking
- Implicit
- This member is added by an implicit conversion from MatchTreeMaking toEnsuring[MatchTreeMaking] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- def ensuring(cond: Boolean): MatchTreeMaking
- Implicit
- This member is added by an implicit conversion from MatchTreeMaking toEnsuring[MatchTreeMaking] 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 finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- def formatted(fmtstr: String): String
- Implicit
- This member is added by an implicit conversion from MatchTreeMaking toStringFormat[MatchTreeMaking] performed by method StringFormat in scala.Predef.
- Definition Classes
- StringFormat
- Annotations
- @inline()
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- final def hasStableSymbol(p: Global.Tree): Boolean
- Attributes
- protected
- Definition Classes
- Interface
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def mkFALSE: Global.Literal
- Attributes
- protected
- Definition Classes
- Interface
- final def mkTRUE: Global.Literal
- Attributes
- protected
- Definition Classes
- Interface
- 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
Deprecated Value Members
- def →[B](y: B): (MatchTreeMaking, B)
- Implicit
- This member is added by an implicit conversion from MatchTreeMaking toArrowAssoc[MatchTreeMaking] 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.