PickleQuotes

Translates quoted terms and types to unpickleExpr or unpickleType method calls.

Transforms top level quote

'{ ...
   val x1 = ???
   val x2 = ???
   ...
   ${ ... '{ ... x1 ... x2 ...} ... }
   ...
 }

to

 unpickleExpr(
   pickled = [[ // PICKLED TASTY
     ...
     val x1 = ???
     val x2 = ???
     ...
     Hole(<i> | x1, x2)
     ...
   ]],
   typeHole = (idx: Int, args: List[Any]) => idx match {
     case 0 => ...
   },
   termHole = (idx: Int, args: List[Any], qctx: Quotes) => idx match {
     case 0 => ...
     ...
     case <i> =>
       val x1$1 = args(0).asInstanceOf[Expr[T]]
       val x2$1 = args(1).asInstanceOf[Expr[T]] // can be asInstanceOf[Type[T]]
        ...
       { ... '{ ... ${x1$1} ... ${x2$1} ...} ... }
   },
 )

and then performs the same transformation on '{ ... ${x1$1} ... ${x2$1} ...}.

Companion
object
class Phase
class Object
trait Matchable
class Any

Type members

Inherited classlikes

Inherited from
MacroTransform

Value members

Concrete methods

Definition Classes
override def checkPostCondition(tree: Tree)(using Context): Unit
Definition Classes
override def phaseName: String
Definition Classes
override def run(using Context): Unit
Definition Classes

Inherited methods

final def <=(that: Phase): Boolean
Inherited from
Phase

Can this transform change the base types of a type?

Can this transform change the base types of a type?

Inherited from
Phase

Can this transform create or delete non-private members?

Can this transform create or delete non-private members?

Inherited from
Phase

Can this transform change the parents of a class?

Can this transform change the parents of a class?

Inherited from
Phase
Inherited from
Phase
def end: PhaseId
Inherited from
Phase
final def erasedTypes: Boolean
Inherited from
Phase
Inherited from
Phase
final def flatClasses: Boolean
Inherited from
Phase
final def hasNext: Boolean
Inherited from
Phase
def id: Int

The sequence position of this phase in the given context where 0 is reserved for NoPhase and the first real phase is at position 1. -1 if the phase is not installed in the context.

The sequence position of this phase in the given context where 0 is reserved for NoPhase and the first real phase is at position 1. -1 if the phase is not installed in the context.

Inherited from
Phase
Inherited from
Phase

Output should be checkable by TreeChecker

Output should be checkable by TreeChecker

Inherited from
Phase
Inherited from
Phase
Inherited from
Phase

Is this phase the standard typerphase? True for FrontEnd, but not for other first phases (such as FromTasty). The predicate is tested in some places that perform checks and corrections. It's different from ctx.isAfterTyper (and cheaper to test).

Is this phase the standard typerphase? True for FrontEnd, but not for other first phases (such as FromTasty). The predicate is tested in some places that perform checks and corrections. It's different from ctx.isAfterTyper (and cheaper to test).

Inherited from
Phase
final def iterator: Iterator[Phase]
Inherited from
Phase
Inherited from
Phase
final def next: Phase
Inherited from
Phase
Inherited from
Phase
Inherited from
Phase
final def prev: Phase
Inherited from
Phase
final def refChecked: Boolean
Inherited from
Phase

If set, allow missing or superfluous arguments in applications and type applications.

If set, allow missing or superfluous arguments in applications and type applications.

Inherited from
Phase
Inherited from
Phase

List of names of phases that should precede this phase

List of names of phases that should precede this phase

Inherited from
Phase
Inherited from
Phase
Inherited from
Phase
Inherited from
Phase
def start: Int
Inherited from
Phase
override def toString: String
Definition Classes
Phase -> Any
Inherited from
Phase
protected def transformPhase(using Context): Phase

The phase in which the transformation should be run. By default this is the phase given by the this macro transformer, but it could be overridden to be the phase following that one.

The phase in which the transformation should be run. By default this is the phase given by the this macro transformer, but it could be overridden to be the phase following that one.

Inherited from
MacroTransform