TreeTransformScope

cps.macros.forest.TreeTransformScope
trait TreeTransformScope[F[_], CT, CC <: CpsMonadContext[F]] extends CpsTreeScope[F, CT, CC] with KnownTreeFragments[F, CT, CC] with TypeApplyTreeTransform[F, CT, CC] with RootTreeTransform[F, CT, CC] with ApplyTreeTransform[F, CT, CC] with ApplicationHelper[F, CT, CC] with AwaitTreeTransform[F, CT, CC] with SelectTreeTransform[F, CT, CC] with LambdaTreeTransform[F, CT, CC] with MatchTreeTransform[F, CT, CC] with AsyncTreeShifter[F, CT, CC] with RepeatedTreeTransform[F, CT, CC] with InlinedTreeTransform[F, CT, CC] with SelectOuterTreeTransform[F, CT, CC] with BlockTreeTransform[F, CT, CC] with ValDefTreeTransform[F, CT, CC]

Attributes

Graph
Supertypes
trait ValDefTreeTransform[F, CT, CC]
trait BlockTreeTransform[F, CT, CC]
trait SelectOuterTreeTransform[F, CT, CC]
trait InlinedTreeTransform[F, CT, CC]
trait RepeatedTreeTransform[F, CT, CC]
trait AsyncTreeShifter[F, CT, CC]
trait MatchTreeTransform[F, CT, CC]
trait LambdaTreeTransform[F, CT, CC]
trait SelectTreeTransform[F, CT, CC]
trait AwaitTreeTransform[F, CT, CC]
trait ApplicationHelper[F, CT, CC]
trait PartialShiftedApplyScope[F, CT, CC]
trait ApplyArgBuilderScope[F, CT, CC]
trait ApplyArgRecordScope[F, CT, CC]
trait ApplyTreeTransform[F, CT, CC]
trait RootTreeTransform[F, CT, CC]
trait TypeApplyTreeTransform[F, CT, CC]
trait KnownTreeFragments[F, CT, CC]
trait CpsTreeScope[F, CT, CC]
class Object
trait Matchable
class Any
Known subtypes

Members list

Concise view

Type members

Classlikes

case class MessageWithPos(message: String, pos: Position)

Attributes

Graph
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any

Inherited classlikes

case class AppendCpsTree(frs: CpsTree, snd: CpsTree) extends CpsTree

append cps tree, which is frs and then snd. we use this representation instead Mapped/Flatmapped in cases, where we later can apply await to append term and simplify tree instead wrapping awaited tree in extra flatMap

append cps tree, which is frs and then snd. we use this representation instead Mapped/Flatmapped in cases, where we later can apply await to append term and simplify tree instead wrapping awaited tree in extra flatMap

Attributes

Inherited from:
CpsTreeScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class CpsTree
class Object
trait Matchable
class Any
case class ApplyArgByNameRecord(term: Term, index: Int, cpsTree: CpsTree, optShiftType: Option[ApplicationShiftType]) extends ApplyArgRecord

Attributes

Inherited from:
ApplyArgRecordScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any

Attributes

Inherited from:
ApplyArgRecordScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
case class ApplyArgLambdaRecord(term: Term, index: Int, cpsBody: CpsTree, optShiftType: Option[ApplicationShiftType], existsLambdaUnshift: Boolean) extends ApplyArgRecord

Attributes

Inherited from:
ApplyArgRecordScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
case class ApplyArgNamedRecord(term: NamedArg, name: String, nested: ApplyArgRecord) extends ApplyArgRecord

Attributes

Inherited from:
ApplyArgRecordScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
case class ApplyArgNoPrecalcTermRecord(term: Term, index: Int, isChanged: Boolean) extends ApplyArgRecord

Attributes

Inherited from:
ApplyArgRecordScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
case class ApplyArgPrecalcTermRecord(term: Term, index: Int, termCpsTree: CpsTree, valDef: ValDef, ident: Term) extends ApplyArgRecord

Attributes

Inherited from:
ApplyArgRecordScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
sealed trait ApplyArgRecord

Attributes

Inherited from:
ApplyArgRecordScope
Graph
Supertypes
class Object
trait Matchable
class Any
Known subtypes
case class ApplyArgRepeatRecord(term: Repeated, index: Int, elements: List[ApplyArgRecord], seqTypeTree: TypeTree) extends ApplyArgRecord

Attributes

Inherited from:
ApplyArgRecordScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
case class ApplyArgsSummaryProperties(step1: ApplyArgsSummaryPropertiesStep1, usePrepend: Boolean)

Attributes

Inherited from:
ApplyArgRecordScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any

Attributes

Inherited from:
ApplyArgRecordScope
Graph
Supertypes
trait Product
trait Mirror
class Object
trait Matchable
class Any
case class ApplyArgsSummaryPropertiesStep1(hasAsync: Boolean, hasShiftedLambda: Boolean, shouldBeChangedSync: Boolean)

Attributes

Inherited from:
ApplyArgRecordScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any

Attributes

Inherited from:
ApplyArgRecordScope
Graph
Supertypes
trait Product
trait Mirror
class Object
trait Matchable
class Any
sealed abstract class AsyncCpsTree extends CpsTree

Attributes

Inherited from:
CpsTreeScope
Graph
Supertypes
class CpsTree
class Object
trait Matchable
class Any
Known subtypes
case class AsyncLambdaCpsTree(originLambda: Term, params: List[ValDef], body: CpsTree, otpe: TypeRepr) extends CpsTree

Attributes

Inherited from:
CpsTreeScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class CpsTree
class Object
trait Matchable
class Any
case class AwaitAsyncCpsTree(nested: CpsTree, otpe: TypeRepr) extends AsyncCpsTree

Attributes

Inherited from:
CpsTreeScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class CpsTree
class Object
trait Matchable
class Any
case class AwaitSyncCpsTree(origin: Term, otpe: TypeRepr) extends AsyncCpsTree

Attributes

Inherited from:
CpsTreeScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class CpsTree
class Object
trait Matchable
class Any
object B2

Attributes

Inherited from:
RootTreeTransform
Graph
Supertypes
class Object
trait Matchable
class Any
case class BlockCpsTree(prevs: Queue[Statement], last: CpsTree) extends CpsTree

Attributes

Inherited from:
CpsTreeScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class CpsTree
class Object
trait Matchable
class Any

Attributes

Inherited from:
CpsTreeScope
Graph
Supertypes
trait Product
trait Mirror
class Object
trait Matchable
class Any
case class BuildApplyArgsAcc(posIndex: Int, paramIndex: Int, wasNamed: Boolean, inRepeat: Boolean, inNamed: Boolean, records: Seq[ApplyArgRecord], filledNamed: Set[Int])

Attributes

Inherited from:
ApplyArgBuilderScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
case class CallChainSubstCpsTree(origin: Term, shifted: Term, otpe: TypeRepr) extends CpsTree

when we have swhifted function, which should return F[A] but we want to have in F[A] methods with special meaning, which should be performed on F[_] before jumping into monad (exampe: Iterable.withFilter) we will catch in ApplyTree such methods and substitute to appropriative calls of shifted.

when we have swhifted function, which should return F[A] but we want to have in F[A] methods with special meaning, which should be performed on F[_] before jumping into monad (exampe: Iterable.withFilter) we will catch in ApplyTree such methods and substitute to appropriative calls of shifted.

Attributes

Inherited from:
CpsTreeScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class CpsTree
class Object
trait Matchable
class Any
sealed abstract class CpsTree

Attributes

Inherited from:
CpsTreeScope
Graph
Supertypes
class Object
trait Matchable
class Any
Known subtypes
object CpsTree

Attributes

Inherited from:
CpsTreeScope
Graph
Supertypes
trait Sum
trait Mirror
class Object
trait Matchable
class Any

Attributes

Inherited from:
MethodParamsDescriptorScope
Graph
Supertypes
class Object
trait Matchable
class Any
case object EmptyCpsTree extends CpsTree

Attributes

Inherited from:
CpsTreeScope
Graph
Supertypes
trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
class CpsTree
class Object
trait Matchable
class Any

Attributes

Inherited from:
MethodParamsDescriptorScope
Graph
Supertypes
class Object
trait Matchable
class Any
case class FlatMappedCpsTree(prev: CpsTree, opm: Term => Term, otpe: TypeRepr) extends AsyncCpsTree

Attributes

Inherited from:
CpsTreeScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class CpsTree
class Object
trait Matchable
class Any

Attributes

Inherited from:
InlinedTreeTransform
Graph
Supertypes
class Object
trait Matchable
class Any
Known subtypes
case class InlinedBindingsRecord(changes: HashMap[Symbol, InlinedBindingRecord], newBindings: List[Definition], awaitVals: List[ValDef])

Attributes

Inherited from:
InlinedTreeTransform
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
case class InlinedCpsTree(origin: Inlined, bindings: List[Definition], nested: CpsTree) extends CpsTree

Attributes

Inherited from:
CpsTreeScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class CpsTree
class Object
trait Matchable
class Any
case class InlinedFunBindingRecord(newSym: Symbol, cpsTree: CpsTree, oldValDef: ValDef, newResultType: TypeRepr) extends InlinedBindingRecord

Attributes

Inherited from:
InlinedTreeTransform
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
case class InlinedValBindingRecord(newSym: Symbol, cpsTree: CpsTree, oldValDef: ValDef) extends InlinedBindingRecord

Attributes

Inherited from:
InlinedTreeTransform
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
case class MappedCpsTree(prev: CpsTree, op: Term => Term, otpe: TypeRepr) extends AsyncCpsTree

Attributes

Inherited from:
CpsTreeScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class CpsTree
class Object
trait Matchable
class Any

Attributes

Inherited from:
MethodParamsDescriptorScope
Graph
Supertypes
class Object
trait Matchable
class Any

Attributes

Inherited from:
MethodParamsDescriptorScope
Graph
Supertypes
class Object
trait Matchable
class Any
Known subtypes

Attributes

Inherited from:
MethodParamsDescriptorScope
Graph
Supertypes
class Object
trait Matchable
class Any
object O

Attributes

Inherited from:
ApplyArgBuilderScope
Graph
Supertypes
class Object
trait Matchable
class Any
case class PartialShiftedApply(shiftType: ApplicationShiftType, shifted: Term)

Application with one list of params.

Application with one list of params.

Attributes

Inherited from:
PartialShiftedApplyScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
case class PureCpsTree(origin: Statement, isChanged: Boolean) extends CpsTree

Attributes

Inherited from:
CpsTreeScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class CpsTree
class Object
trait Matchable
class Any
case class SelectTypeApplyCpsTree(origin: Option[Term], nested: CpsTree, targs: List[TypeTree], selects: List[SelectTypeApplyRecord], otpe: TypeRepr, changed: Boolean) extends CpsTree

represent select expression, which can be in monad or outside monad.

represent select expression, which can be in monad or outside monad.

constructor is not devoted to used directly: use SelectTypeApplyCpsTree.create instead. selects is reversed (i.e. external added to head)

Attributes

Inherited from:
CpsTreeScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class CpsTree
class Object
trait Matchable
class Any

Attributes

Inherited from:
CpsTreeScope
Graph
Supertypes
trait Product
trait Mirror
class Object
trait Matchable
class Any
case class SelectTypeApplyRecord(prevTpe: TypeRepr, symbol: Symbol, targs: List[TypeTree], level: Int)

Attributes

Inherited from:
CpsTreeScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
case class ValCpsTree(valDef: ValDef, rightPart: CpsTree, nested: CpsTree, canBeLambda: Boolean) extends CpsTree

Attributes

Inherited from:
CpsTreeScope
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class CpsTree
class Object
trait Matchable
class Any

Value members

Concrete methods

def isInMonad(tpe: TypeRepr): Boolean
def posExpr(t: Term): Expr[Any]
def posExprs(terms: Term*): Expr[Any]
def safeShow(t: Tree): String
def safeTypeShow(tp: TypeRepr): String
def unitTerm: Literal

Inherited methods

def adoptContextInMyAwait(awaitTerm: Term, arg: Term, monadContext: Term): Term

Attributes

Inherited from:
AwaitTreeTransform
def asyncShift(t: Term, shiftedSymbols: Set[Symbol]): Term

Attributes

Inherited from:
AsyncTreeShifter
def asyncShiftCaseDef(cd: CaseDef, shiftedSymbols: Set[Symbol]): CaseDef

Attributes

Inherited from:
AsyncTreeShifter
def asyncShiftDefinition(t: Definition, shiftedSymbols: Set[Symbol]): Definition

Attributes

Inherited from:
AsyncTreeShifter
def asyncShiftStatement(t: Statement, shiftedSymbols: Set[Symbol]): Statement

Attributes

Inherited from:
AsyncTreeShifter

Attributes

Inherited from:
BlockTreeTransform
def blockBuildAwaitValueDiscard(discardTerm: Term, p: Term): Term

Attributes

Inherited from:
BlockTreeTransform
def blockCheckValueDiscarded(t: Term): Boolean

Attributes

Inherited from:
BlockTreeTransform
def buildApply(cpsFun: CpsTree, fun: Term, argRecords: Seq[ApplyArgRecord], applyTerm: Apply, argsProperties: ApplyArgsSummaryProperties, inShiftedCallChain: Boolean, tails: List[Seq[ApplyArgRecord]]): CpsTree

Attributes

Inherited from:
ApplyTreeTransform
def buildShiftedApply(cpsFun: CpsTree, fun: Term, argRecords: Seq[ApplyArgRecord], withAsync: Boolean, tails: List[Seq[ApplyArgRecord]], applyTerm: Apply): CpsTree

Attributes

Inherited from:
ApplyTreeTransform
def checkLambdaDef(term: Term): Option[Term]

Attributes

Inherited from:
InlinedTreeTransform
def cpsShiftedMethodType(paramNames: List[String], paramTypes: List[TypeRepr], otpe: TypeRepr): MethodType

method type for (p1 ... pn) => F[otpe]

method type for (p1 ... pn) => F[otpe]

Attributes

Inherited from:
LambdaTreeTransform
def exprToTree[T](expr: CpsExpr[F, T], e: Term): CpsTree

Attributes

Inherited from:
RootTreeTransform
def findAsyncShiftTerm(e: Term): (ImplicitSearchResult, TypeRepr)

Attributes

Inherited from:
ApplyTreeTransform
def generateAwaitFor(term: Term, tpe: TypeRepr): Term

Attributes

Inherited from:
InlinedTreeTransform
def handleArgs1(applyTerm: Apply, fun: Term, cpsFun: CpsTree, args: List[Term], tails: List[Seq[ApplyArgRecord]], unpure: Boolean): CpsTree

How to handle arguments? We want keep evaluation order from left to right, so, imagine we have function f(a1,a2,a3) and a2 is async, a1, a3 - sync. we will transform this to

How to handle arguments? We want keep evaluation order from left to right, so, imagine we have function f(a1,a2,a3) and a2 is async, a1, a3 - sync. we will transform this to

{ val arg1 = a1;
  transform(a2).flatMap( x =>
     { val arg2 = x;
       val arg3 = a3;
       f(arg1, arg2, arg3)
}    }

more generally we at first generate block: { arg1 = a1; ..... argN = aN; f(arg1,...argN) } and then transform one, knowing that all arguments to f are sync (of course, if all arguments are sync, we just call f(arg1,... arg2) without all this machinery)

Attributes

applyTerm

= Apply(fun, args) - origin apply

args
  • first argument list
fun
  • function to apply (with type-paerameters)
tails
  • next argument lists if any
unpure
  • if true, that this is call from shifted substitution, which is already return F[_] by design.
Inherited from:
ApplyTreeTransform
def handleFun(applyTerm: Apply, fun: Term, args: List[Term], tails: List[Seq[ApplyArgRecord]]): CpsTree

Attributes

Inherited from:
ApplyTreeTransform
def handleFunApply(applyTerm: Apply, fun: Term, args: List[Term], fun1: Term, args1: List[Term], tails: List[Seq[ApplyArgRecord]]): CpsTree

Attributes

Inherited from:
ApplyTreeTransform
def handleFunIdent(applyTerm: Apply, fun: Term, args: List[Term], name: String, tails: List[Seq[ApplyArgRecord]]): CpsTree

Attributes

Inherited from:
ApplyTreeTransform
def handleFunSelect(applyTerm: Apply, fun: Term, args: List[Term], obj: Term, methodName: String, tails: List[Seq[ApplyArgRecord]]): CpsTree

Attributes

Inherited from:
ApplyTreeTransform
def handleFunTypeApply(applyTerm: Apply, fun: Term, args: List[Term], obj: Term, targs: List[TypeTree], tails: List[Seq[ApplyArgRecord]]): CpsTree

applyTerm = Apply(fun, args) fun = TypeApply(obj,targs)

applyTerm = Apply(fun, args) fun = TypeApply(obj,targs)

Attributes

Inherited from:
ApplyTreeTransform
def runApply(applyTerm: Apply, fun: Term, args: List[Term], tails: List[Seq[ApplyArgRecord]]): CpsTree

case Apply(fun,args) transform application

case Apply(fun,args) transform application

tails -- list of prepared sequence of curried arguments.

Attributes

Inherited from:
ApplyTreeTransform
def runAwait(term: Term, arg: Term, awaitCpsMonadType: TypeRepr, awaitCpsMonad: Term, awaitCpsMonadContext: Term): CpsTree

Attributes

Inherited from:
AwaitTreeTransform
def runBlock(block: Block, prevs: List[Statement], last: Term): CpsTree

Attributes

Inherited from:
BlockTreeTransform
def runInlined(origin: Inlined): CpsTree

Attributes

Inherited from:
InlinedTreeTransform
def runLambda(lambdaTerm: Term, params: List[ValDef], expr: Term): CpsTree

Attributes

Inherited from:
LambdaTreeTransform
def runMatch(matchTerm: Match): CpsTree

Attributes

Inherited from:
MatchTreeTransform
def runMyAwait(awaitTerm: Term, arg: Term, context: Term): CpsTree

Attributes

Inherited from:
AwaitTreeTransform
def runOtherAwait(awaitTerm: Term, arg: Term, targ: TypeRepr, otherCpsMonad: Term, myMonadContext: Term): CpsTree

Attributes

Inherited from:
AwaitTreeTransform
def runRepeated(repeated: Term, elements: List[Term], tpt: TypeTree): CpsTree

Attributes

Inherited from:
RepeatedTreeTransform
def runRoot(term: Term, muted: Boolean): CpsTree

Attributes

Inherited from:
RootTreeTransform
def runRootUneta(term: Term, muted: Boolean): CpsTree

Attributes

Inherited from:
RootTreeTransform
def runSelect(selectTerm: Select): CpsTree

Attributes

Inherited from:
SelectTreeTransform
def runSelectOuter(term: SelectOuter): CpsTree

Attributes

Inherited from:
SelectOuterTreeTransform
def runTypeApply(applyTerm: Term, fun: Term, targs: List[TypeTree]): CpsTree

Attributes

Inherited from:
TypeApplyTreeTransform
def runValDefFromBlock(block: Block, valDef: ValDef): CpsTree

Attributes

Inherited from:
ValDefTreeTransform
def sameSelect(funTerm: Term, name: String, targs: List[TypeTree], args: List[Term]): Option[Term]

Attributes

Inherited from:
ApplyTreeTransform
def shiftedApplyCps(funCpsTree: CpsTree, argRecords: Seq[ApplyArgRecord], argTails: List[Seq[ApplyArgRecord]], applyTerm: Term, withAsync: Boolean): CpsTree

Attributes

Inherited from:
ApplyTreeTransform
def shiftedApplyTerm(funTerm: Term, argRecords: Seq[ApplyArgRecord], withAsync: Boolean): PartialShiftedApply

Attributes

Inherited from:
ApplyTreeTransform
def shiftedLambdaType(tpe: TypeRepr): TypeRepr

Attributes

Inherited from:
ApplyTreeTransform
def shiftedLambdaTypeTree(tpt: TypeTree): TypeTree

Attributes

Inherited from:
ApplyTreeTransform
def shiftedResultCpsTree(origin: Term, shifted: Term): CpsTree

Attributes

Inherited from:
ApplyTreeTransform
def termIsNoOrderDepended(x: Term): Boolean

Attributes

Inherited from:
ApplyArgRecordScope
def valDefApplyMemoization(valDef: ValDef, cpsRhs: CpsTree, rhs: Term): CpsTree

Attributes

Inherited from:
ValDefTreeTransform
def withInlineBindings(origin: Inlined, tree: CpsTree): CpsTree

Attributes

Inherited from:
ApplyTreeTransform

Abstract fields

Inherited fields

lazy val awaitSymbol: Symbol

Attributes

Inherited from:
KnownTreeFragments
lazy val flatMapSymbol: Symbol

Attributes

Inherited from:
KnownTreeFragments
lazy val mapSymbol: Symbol

Attributes

Inherited from:
KnownTreeFragments
lazy val monadTypeTree: Inferred

Attributes

Inherited from:
KnownTreeFragments
lazy val objAsyncShift: TypeRepr

Attributes

Inherited from:
KnownTreeFragments
lazy val partialFunctionType: TypeRepr

Attributes

Inherited from:
KnownTreeFragments
lazy val pureSymbol: Symbol

Attributes

Inherited from:
KnownTreeFragments

Extensions

Inherited extensions

extension (otherCake: TreeTransformScope[_[_], _, _])
def adopt(t: Term): Term

Attributes

Inherited from:
CpsTreeScope
def adoptStatement(t: Statement): Statement

Attributes

Inherited from:
CpsTreeScope
def adoptTerm(t: Term): Term

Attributes

Inherited from:
CpsTreeScope
def adoptTermFun(op: Term => Term): Term => Term

Attributes

Inherited from:
CpsTreeScope
def adoptType(t: TypeRepr): TypeRepr

Attributes

Inherited from:
CpsTreeScope

Implicits

Implicits

implicit val ccType: Type[CC]
implicit val ctType: Type[CT]
implicit val fType: Type[F]
implicit val qctx: Quotes