Dotty Documentation


class ExpandSAMs
extends MiniPhaseTransform

Expand SAM closures that cannot be represented by the JVM as lambdas to anonymous classes. These fall into five categories

  1. Partial function closures, we need to generate a isDefinedAt method for these.
  2. Closures implementing non-trait classes.
  3. Closures implementing classes that inherit from a class other than Object (a lambda cannot not be a run-time subtype of such a class)
  4. Closures that implement traits which run initialization code.
  5. Closures that get synthesized abstract methods in the transformation pipeline. These methods can be (1) superaccessors, (2) outer references, (3) accessors for fields.

[-] Constructors

ExpandSAMs ( )

[-] Members

[+] private def checkRefinements ( tpe: Type , pos: Position ) ( implicit ctx: Context ) : Unit
[+] def isPlatformSam ( cls: ClassSymbol ) ( implicit ctx: Context ) : Boolean

Is the SAMType cls also a SAM under the rules of the platform?

[+] override def phaseName : String

A name given to the Phase that can be used to debug the compiler. For instance, it is possible to print trees after a given phase using:

$ ./bin/dotc -Xprint:<phaseNameHere> sourceFile.scala
[+] private def toPartialFunction ( tree: Block ) ( implicit ctx: Context , info: TransformerInfo ) : Tree
[+] override def transformBlock ( tree: Block ) ( implicit ctx: Context , info: TransformerInfo ) : Tree