Packages

t

scala.tools.nsc.transform.patmat

MatchTreeMaking

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
Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. MatchTreeMaking
  2. Debugging
  3. MatchCodeGen
  4. Interface
  5. TreeDSL
  6. AnyRef
  7. Any
Implicitly
  1. by any2stringadd
  2. by StringFormat
  3. by Ensuring
  4. by ArrowAssoc
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Type Members

  1. 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
  2. trait TypedSubstitution extends MatchMonadInterface
    Definition Classes
    Interface
  3. trait CodegenCore extends MatchMonadInterface
    Definition Classes
    MatchCodeGen
  4. trait OptimizedCodegen extends CodegenCore with TypedSubstitution with MatchMonadInterface
    Definition Classes
    MatchCodeGen
  5. trait PureCodegen extends CodegenCore with PureMatchMonadInterface
    Definition Classes
    MatchCodeGen
  6. trait PureMatchMonadInterface extends MatchMonadInterface
    Definition Classes
    MatchCodeGen
  7. final case class Suppression(suppressExhaustive: Boolean, suppressUnreachable: Boolean) extends Product with Serializable
  8. trait TreeMakers extends TypedSubstitution with CodegenCore

Abstract Value Members

  1. abstract val global: Global
    Definition Classes
    Debugging

Concrete Value Members

  1. object CODE
    Definition Classes
    TreeDSL
  2. object debug
    Definition Classes
    Debugging
  3. object vpmName
    Definition Classes
    Interface
  4. object Suppression extends Serializable