Skip to content

Commit a7d47ab

Browse files
committed
Merge pull request #87 from gzm0/context-in-prep-transform
Make context available in TreeTransform.prepareForXX methods
2 parents fd76c38 + fae8d8e commit a7d47ab

File tree

1 file changed

+65
-65
lines changed

1 file changed

+65
-65
lines changed

src/dotty/tools/dotc/transform/TreeTransform.scala

Lines changed: 65 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -51,37 +51,37 @@ object TreeTransforms {
5151
/** id of this treeTransform in group */
5252
var idx: Int = _
5353

54-
def prepareForIdent(tree: Ident) = this
55-
def prepareForSelect(tree: Select) = this
56-
def prepareForThis(tree: This) = this
57-
def prepareForSuper(tree: Super) = this
58-
def prepareForApply(tree: Apply) = this
59-
def prepareForTypeApply(tree: TypeApply) = this
60-
def prepareForLiteral(tree: Literal) = this
61-
def prepareForPair(tree: Pair) = this
62-
def prepareForNew(tree: New) = this
63-
def prepareForTyped(tree: Typed) = this
64-
def prepareForAssign(tree: Assign) = this
65-
def prepareForBlock(tree: Block) = this
66-
def prepareForIf(tree: If) = this
67-
def prepareForClosure(tree: Closure) = this
68-
def prepareForMatch(tree: Match) = this
69-
def prepareForCaseDef(tree: CaseDef) = this
70-
def prepareForReturn(tree: Return) = this
71-
def prepareForTry(tree: Try) = this
72-
def prepareForThrow(tree: Throw) = this
73-
def prepareForSeqLiteral(tree: SeqLiteral) = this
74-
def prepareForTypeTree(tree: TypeTree) = this
75-
def prepareForSelectFromTypeTree(tree: SelectFromTypeTree) = this
76-
def prepareForBind(tree: Bind) = this
77-
def prepareForAlternative(tree: Alternative) = this
78-
def prepareForTypeDef(tree: TypeDef) = this
79-
def prepareForUnApply(tree: UnApply) = this
80-
def prepareForValDef(tree: ValDef) = this
81-
def prepareForDefDef(tree: DefDef) = this
82-
def prepareForTemplate(tree: Template) = this
83-
def prepareForPackageDef(tree: PackageDef) = this
84-
def prepareForStats(trees: List[Tree]) = this
54+
def prepareForIdent(tree: Ident)(implicit ctx: Context) = this
55+
def prepareForSelect(tree: Select)(implicit ctx: Context) = this
56+
def prepareForThis(tree: This)(implicit ctx: Context) = this
57+
def prepareForSuper(tree: Super)(implicit ctx: Context) = this
58+
def prepareForApply(tree: Apply)(implicit ctx: Context) = this
59+
def prepareForTypeApply(tree: TypeApply)(implicit ctx: Context) = this
60+
def prepareForLiteral(tree: Literal)(implicit ctx: Context) = this
61+
def prepareForPair(tree: Pair)(implicit ctx: Context) = this
62+
def prepareForNew(tree: New)(implicit ctx: Context) = this
63+
def prepareForTyped(tree: Typed)(implicit ctx: Context) = this
64+
def prepareForAssign(tree: Assign)(implicit ctx: Context) = this
65+
def prepareForBlock(tree: Block)(implicit ctx: Context) = this
66+
def prepareForIf(tree: If)(implicit ctx: Context) = this
67+
def prepareForClosure(tree: Closure)(implicit ctx: Context) = this
68+
def prepareForMatch(tree: Match)(implicit ctx: Context) = this
69+
def prepareForCaseDef(tree: CaseDef)(implicit ctx: Context) = this
70+
def prepareForReturn(tree: Return)(implicit ctx: Context) = this
71+
def prepareForTry(tree: Try)(implicit ctx: Context) = this
72+
def prepareForThrow(tree: Throw)(implicit ctx: Context) = this
73+
def prepareForSeqLiteral(tree: SeqLiteral)(implicit ctx: Context) = this
74+
def prepareForTypeTree(tree: TypeTree)(implicit ctx: Context) = this
75+
def prepareForSelectFromTypeTree(tree: SelectFromTypeTree)(implicit ctx: Context) = this
76+
def prepareForBind(tree: Bind)(implicit ctx: Context) = this
77+
def prepareForAlternative(tree: Alternative)(implicit ctx: Context) = this
78+
def prepareForTypeDef(tree: TypeDef)(implicit ctx: Context) = this
79+
def prepareForUnApply(tree: UnApply)(implicit ctx: Context) = this
80+
def prepareForValDef(tree: ValDef)(implicit ctx: Context) = this
81+
def prepareForDefDef(tree: DefDef)(implicit ctx: Context) = this
82+
def prepareForTemplate(tree: Template)(implicit ctx: Context) = this
83+
def prepareForPackageDef(tree: PackageDef)(implicit ctx: Context) = this
84+
def prepareForStats(trees: List[Tree])(implicit ctx: Context) = this
8585

8686
def transformIdent(tree: Ident)(implicit ctx: Context, info: TransformerInfo): Tree = tree
8787
def transformSelect(tree: Select)(implicit ctx: Context, info: TransformerInfo): Tree = tree
@@ -147,7 +147,7 @@ object TreeTransforms {
147147
idx = -1
148148
}
149149

150-
type Mutator[T] = (TreeTransform, T) => TreeTransform
150+
type Mutator[T] = (TreeTransform, T, Context) => TreeTransform
151151

152152
class TransformerInfo(val transformers: Array[TreeTransform], val nx: NXTransformations, val group:TreeTransformer, val contexts:Array[Context]) {
153153
assert(transformers.size == contexts.size)
@@ -422,7 +422,7 @@ object TreeTransforms {
422422
ctx.compilationUnit.tpdTree = newTree
423423
}
424424

425-
def mutateTransformers[T](info: TransformerInfo, mutator: Mutator[T], mutationPlan: Array[Int], tree: T, cur: Int) = {
425+
def mutateTransformers[T](info: TransformerInfo, mutator: Mutator[T], mutationPlan: Array[Int], tree: T, cur: Int)(implicit ctx: Context) = {
426426
var transformersCopied = false
427427
var nxCopied = false
428428
var result = info.transformers
@@ -432,7 +432,7 @@ object TreeTransforms {
432432
var allDone = i < l
433433
while (i < l) {
434434
val oldT = result(i)
435-
val newT = mutator(oldT, tree)
435+
val newT = mutator(oldT, tree, info.contexts(i))
436436
allDone = allDone && (newT eq NoTransform)
437437
if (!(oldT eq newT)) {
438438
if (!transformersCopied) result = result.clone()
@@ -450,37 +450,37 @@ object TreeTransforms {
450450
else new TransformerInfo(result, resultNX, info.group, info.contexts)
451451
}
452452

453-
val prepForIdent: Mutator[Ident] = (trans, tree) => trans.prepareForIdent(tree)
454-
val prepForSelect: Mutator[Select] = (trans, tree) => trans.prepareForSelect(tree)
455-
val prepForThis: Mutator[This] = (trans, tree) => trans.prepareForThis(tree)
456-
val prepForSuper: Mutator[Super] = (trans, tree) => trans.prepareForSuper(tree)
457-
val prepForApply: Mutator[Apply] = (trans, tree) => trans.prepareForApply(tree)
458-
val prepForTypeApply: Mutator[TypeApply] = (trans, tree) => trans.prepareForTypeApply(tree)
459-
val prepForNew: Mutator[New] = (trans, tree) => trans.prepareForNew(tree)
460-
val prepForPair: Mutator[Pair] = (trans, tree) => trans.prepareForPair(tree)
461-
val prepForTyped: Mutator[Typed] = (trans, tree) => trans.prepareForTyped(tree)
462-
val prepForAssign: Mutator[Assign] = (trans, tree) => trans.prepareForAssign(tree)
463-
val prepForLiteral: Mutator[Literal] = (trans, tree) => trans.prepareForLiteral(tree)
464-
val prepForBlock: Mutator[Block] = (trans, tree) => trans.prepareForBlock(tree)
465-
val prepForIf: Mutator[If] = (trans, tree) => trans.prepareForIf(tree)
466-
val prepForClosure: Mutator[Closure] = (trans, tree) => trans.prepareForClosure(tree)
467-
val prepForMatch: Mutator[Match] = (trans, tree) => trans.prepareForMatch(tree)
468-
val prepForCaseDef: Mutator[CaseDef] = (trans, tree) => trans.prepareForCaseDef(tree)
469-
val prepForReturn: Mutator[Return] = (trans, tree) => trans.prepareForReturn(tree)
470-
val prepForTry: Mutator[Try] = (trans, tree) => trans.prepareForTry(tree)
471-
val prepForThrow: Mutator[Throw] = (trans, tree) => trans.prepareForThrow(tree)
472-
val prepForSeqLiteral: Mutator[SeqLiteral] = (trans, tree) => trans.prepareForSeqLiteral(tree)
473-
val prepForTypeTree: Mutator[TypeTree] = (trans, tree) => trans.prepareForTypeTree(tree)
474-
val prepForSelectFromTypeTree: Mutator[SelectFromTypeTree] = (trans, tree) => trans.prepareForSelectFromTypeTree(tree)
475-
val prepForBind: Mutator[Bind] = (trans, tree) => trans.prepareForBind(tree)
476-
val prepForAlternative: Mutator[Alternative] = (trans, tree) => trans.prepareForAlternative(tree)
477-
val prepForUnApply: Mutator[UnApply] = (trans, tree) => trans.prepareForUnApply(tree)
478-
val prepForValDef: Mutator[ValDef] = (trans, tree) => trans.prepareForValDef(tree)
479-
val prepForDefDef: Mutator[DefDef] = (trans, tree) => trans.prepareForDefDef(tree)
480-
val prepForTypeDef: Mutator[TypeDef] = (trans, tree) => trans.prepareForTypeDef(tree)
481-
val prepForTemplate: Mutator[Template] = (trans, tree) => trans.prepareForTemplate(tree)
482-
val prepForPackageDef: Mutator[PackageDef] = (trans, tree) => trans.prepareForPackageDef(tree)
483-
val prepForStats: Mutator[List[Tree]]= (trans, trees) => trans.prepareForStats(trees)
453+
val prepForIdent: Mutator[Ident] = (trans, tree, ctx) => trans.prepareForIdent(tree)(ctx)
454+
val prepForSelect: Mutator[Select] = (trans, tree, ctx) => trans.prepareForSelect(tree)(ctx)
455+
val prepForThis: Mutator[This] = (trans, tree, ctx) => trans.prepareForThis(tree)(ctx)
456+
val prepForSuper: Mutator[Super] = (trans, tree, ctx) => trans.prepareForSuper(tree)(ctx)
457+
val prepForApply: Mutator[Apply] = (trans, tree, ctx) => trans.prepareForApply(tree)(ctx)
458+
val prepForTypeApply: Mutator[TypeApply] = (trans, tree, ctx) => trans.prepareForTypeApply(tree)(ctx)
459+
val prepForNew: Mutator[New] = (trans, tree, ctx) => trans.prepareForNew(tree)(ctx)
460+
val prepForPair: Mutator[Pair] = (trans, tree, ctx) => trans.prepareForPair(tree)(ctx)
461+
val prepForTyped: Mutator[Typed] = (trans, tree, ctx) => trans.prepareForTyped(tree)(ctx)
462+
val prepForAssign: Mutator[Assign] = (trans, tree, ctx) => trans.prepareForAssign(tree)(ctx)
463+
val prepForLiteral: Mutator[Literal] = (trans, tree, ctx) => trans.prepareForLiteral(tree)(ctx)
464+
val prepForBlock: Mutator[Block] = (trans, tree, ctx) => trans.prepareForBlock(tree)(ctx)
465+
val prepForIf: Mutator[If] = (trans, tree, ctx) => trans.prepareForIf(tree)(ctx)
466+
val prepForClosure: Mutator[Closure] = (trans, tree, ctx) => trans.prepareForClosure(tree)(ctx)
467+
val prepForMatch: Mutator[Match] = (trans, tree, ctx) => trans.prepareForMatch(tree)(ctx)
468+
val prepForCaseDef: Mutator[CaseDef] = (trans, tree, ctx) => trans.prepareForCaseDef(tree)(ctx)
469+
val prepForReturn: Mutator[Return] = (trans, tree, ctx) => trans.prepareForReturn(tree)(ctx)
470+
val prepForTry: Mutator[Try] = (trans, tree, ctx) => trans.prepareForTry(tree)(ctx)
471+
val prepForThrow: Mutator[Throw] = (trans, tree, ctx) => trans.prepareForThrow(tree)(ctx)
472+
val prepForSeqLiteral: Mutator[SeqLiteral] = (trans, tree, ctx) => trans.prepareForSeqLiteral(tree)(ctx)
473+
val prepForTypeTree: Mutator[TypeTree] = (trans, tree, ctx) => trans.prepareForTypeTree(tree)(ctx)
474+
val prepForSelectFromTypeTree: Mutator[SelectFromTypeTree] = (trans, tree, ctx) => trans.prepareForSelectFromTypeTree(tree)(ctx)
475+
val prepForBind: Mutator[Bind] = (trans, tree, ctx) => trans.prepareForBind(tree)(ctx)
476+
val prepForAlternative: Mutator[Alternative] = (trans, tree, ctx) => trans.prepareForAlternative(tree)(ctx)
477+
val prepForUnApply: Mutator[UnApply] = (trans, tree, ctx) => trans.prepareForUnApply(tree)(ctx)
478+
val prepForValDef: Mutator[ValDef] = (trans, tree, ctx) => trans.prepareForValDef(tree)(ctx)
479+
val prepForDefDef: Mutator[DefDef] = (trans, tree, ctx) => trans.prepareForDefDef(tree)(ctx)
480+
val prepForTypeDef: Mutator[TypeDef] = (trans, tree, ctx) => trans.prepareForTypeDef(tree)(ctx)
481+
val prepForTemplate: Mutator[Template] = (trans, tree, ctx) => trans.prepareForTemplate(tree)(ctx)
482+
val prepForPackageDef: Mutator[PackageDef] = (trans, tree, ctx) => trans.prepareForPackageDef(tree)(ctx)
483+
val prepForStats: Mutator[List[Tree]]= (trans, trees, ctx) => trans.prepareForStats(trees)(ctx)
484484

485485
def transform(t: Tree)(implicit ctx: Context): Tree = {
486486
val initialTransformations = transformations

0 commit comments

Comments
 (0)