@@ -51,37 +51,37 @@ object TreeTransforms {
51
51
/** id of this treeTransform in group */
52
52
var idx : Int = _
53
53
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
85
85
86
86
def transformIdent (tree : Ident )(implicit ctx : Context , info : TransformerInfo ): Tree = tree
87
87
def transformSelect (tree : Select )(implicit ctx : Context , info : TransformerInfo ): Tree = tree
@@ -147,7 +147,7 @@ object TreeTransforms {
147
147
idx = - 1
148
148
}
149
149
150
- type Mutator [T ] = (TreeTransform , T ) => TreeTransform
150
+ type Mutator [T ] = (TreeTransform , T , Context ) => TreeTransform
151
151
152
152
class TransformerInfo (val transformers : Array [TreeTransform ], val nx : NXTransformations , val group : TreeTransformer , val contexts : Array [Context ]) {
153
153
assert(transformers.size == contexts.size)
@@ -422,7 +422,7 @@ object TreeTransforms {
422
422
ctx.compilationUnit.tpdTree = newTree
423
423
}
424
424
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 ) = {
426
426
var transformersCopied = false
427
427
var nxCopied = false
428
428
var result = info.transformers
@@ -432,7 +432,7 @@ object TreeTransforms {
432
432
var allDone = i < l
433
433
while (i < l) {
434
434
val oldT = result(i)
435
- val newT = mutator(oldT, tree)
435
+ val newT = mutator(oldT, tree, info.contexts(i) )
436
436
allDone = allDone && (newT eq NoTransform )
437
437
if (! (oldT eq newT)) {
438
438
if (! transformersCopied) result = result.clone()
@@ -450,37 +450,37 @@ object TreeTransforms {
450
450
else new TransformerInfo (result, resultNX, info.group, info.contexts)
451
451
}
452
452
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 )
484
484
485
485
def transform (t : Tree )(implicit ctx : Context ): Tree = {
486
486
val initialTransformations = transformations
0 commit comments