Skip to content

Commit 53ab5f0

Browse files
committed
Add hook for phase when a TreeTransform is run.
Achieved by overridanle method treeTransformPhase in TreeTransform. This is currently by default the current phase. We should migrate it to the one after current phase.
1 parent 9326a00 commit 53ab5f0

File tree

1 file changed

+35
-33
lines changed

1 file changed

+35
-33
lines changed

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

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ object TreeTransforms {
5555

5656
def phase: MiniPhase
5757

58+
def treeTransformPhase: Phase = phase
59+
5860
/** id of this treeTransform in group */
5961
var idx: Int = _
6062

@@ -461,7 +463,7 @@ object TreeTransforms {
461463
var allDone = i < l
462464
while (i < l) {
463465
val oldTransform = result(i)
464-
val newTransform = mutator(oldTransform, tree, ctx.withPhase(oldTransform.phase))
466+
val newTransform = mutator(oldTransform, tree, ctx.withPhase(oldTransform.treeTransformPhase))
465467
allDone = allDone && (newTransform eq NoTransform)
466468
if (!(oldTransform eq newTransform)) {
467469
if (!transformersCopied) result = result.clone()
@@ -526,7 +528,7 @@ object TreeTransforms {
526528
final private[TreeTransforms] def goIdent(tree: Ident, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
527529
if (cur < info.transformers.length) {
528530
val trans = info.transformers(cur)
529-
trans.transformIdent(tree)(ctx.withPhase(trans.phase), info) match {
531+
trans.transformIdent(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
530532
case t: Ident => goIdent(t, info.nx.nxTransIdent(cur + 1))
531533
case t => transformSingle(t, cur + 1)
532534
}
@@ -537,7 +539,7 @@ object TreeTransforms {
537539
final private[TreeTransforms] def goSelect(tree: Select, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
538540
if (cur < info.transformers.length) {
539541
val trans = info.transformers(cur)
540-
trans.transformSelect(tree)(ctx.withPhase(trans.phase), info) match {
542+
trans.transformSelect(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
541543
case t: Select => goSelect(t, info.nx.nxTransSelect(cur + 1))
542544
case t => transformSingle(t, cur + 1)
543545
}
@@ -548,7 +550,7 @@ object TreeTransforms {
548550
final private[TreeTransforms] def goThis(tree: This, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
549551
if (cur < info.transformers.length) {
550552
val trans = info.transformers(cur)
551-
trans.transformThis(tree)(ctx.withPhase(trans.phase), info) match {
553+
trans.transformThis(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
552554
case t: This => goThis(t, info.nx.nxTransThis(cur + 1))
553555
case t => transformSingle(t, cur + 1)
554556
}
@@ -559,7 +561,7 @@ object TreeTransforms {
559561
final private[TreeTransforms] def goSuper(tree: Super, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
560562
if (cur < info.transformers.length) {
561563
val trans = info.transformers(cur)
562-
trans.transformSuper(tree)(ctx.withPhase(trans.phase), info) match {
564+
trans.transformSuper(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
563565
case t: Super => goSuper(t, info.nx.nxTransSuper(cur + 1))
564566
case t => transformSingle(t, cur + 1)
565567
}
@@ -570,7 +572,7 @@ object TreeTransforms {
570572
final private[TreeTransforms] def goApply(tree: Apply, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
571573
if (cur < info.transformers.length) {
572574
val trans = info.transformers(cur)
573-
trans.transformApply(tree)(ctx.withPhase(trans.phase), info) match {
575+
trans.transformApply(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
574576
case t: Apply => goApply(t, info.nx.nxTransApply(cur + 1))
575577
case t => transformSingle(t, cur + 1)
576578
}
@@ -581,7 +583,7 @@ object TreeTransforms {
581583
final private[TreeTransforms] def goTypeApply(tree: TypeApply, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
582584
if (cur < info.transformers.length) {
583585
val trans = info.transformers(cur)
584-
trans.transformTypeApply(tree)(ctx.withPhase(trans.phase), info) match {
586+
trans.transformTypeApply(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
585587
case t: TypeApply => goTypeApply(t, info.nx.nxTransTypeApply(cur + 1))
586588
case t => transformSingle(t, cur + 1)
587589
}
@@ -592,7 +594,7 @@ object TreeTransforms {
592594
final private[TreeTransforms] def goNew(tree: New, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
593595
if (cur < info.transformers.length) {
594596
val trans = info.transformers(cur)
595-
trans.transformNew(tree)(ctx.withPhase(trans.phase), info) match {
597+
trans.transformNew(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
596598
case t: New => goNew(t, info.nx.nxTransNew(cur + 1))
597599
case t => transformSingle(t, cur + 1)
598600
}
@@ -603,7 +605,7 @@ object TreeTransforms {
603605
final private[TreeTransforms] def goPair(tree: Pair, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
604606
if (cur < info.transformers.length) {
605607
val trans = info.transformers(cur)
606-
trans.transformPair(tree)(ctx.withPhase(trans.phase), info) match {
608+
trans.transformPair(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
607609
case t: Pair => goPair(t, info.nx.nxTransPair(cur + 1))
608610
case t => transformSingle(t, cur + 1)
609611
}
@@ -614,7 +616,7 @@ object TreeTransforms {
614616
final private[TreeTransforms] def goTyped(tree: Typed, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
615617
if (cur < info.transformers.length) {
616618
val trans = info.transformers(cur)
617-
trans.transformTyped(tree)(ctx.withPhase(trans.phase), info) match {
619+
trans.transformTyped(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
618620
case t: Typed => goTyped(t, info.nx.nxTransTyped(cur + 1))
619621
case t => transformSingle(t, cur + 1)
620622
}
@@ -625,7 +627,7 @@ object TreeTransforms {
625627
final private[TreeTransforms] def goAssign(tree: Assign, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
626628
if (cur < info.transformers.length) {
627629
val trans = info.transformers(cur)
628-
trans.transformAssign(tree)(ctx.withPhase(trans.phase), info) match {
630+
trans.transformAssign(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
629631
case t: Assign => goAssign(t, info.nx.nxTransAssign(cur + 1))
630632
case t => transformSingle(t, cur + 1)
631633
}
@@ -636,7 +638,7 @@ object TreeTransforms {
636638
final private[TreeTransforms] def goLiteral(tree: Literal, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
637639
if (cur < info.transformers.length) {
638640
val trans = info.transformers(cur)
639-
trans.transformLiteral(tree)(ctx.withPhase(trans.phase), info) match {
641+
trans.transformLiteral(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
640642
case t: Literal => goLiteral(t, info.nx.nxTransLiteral(cur + 1))
641643
case t => transformSingle(t, cur + 1)
642644
}
@@ -647,7 +649,7 @@ object TreeTransforms {
647649
final private[TreeTransforms] def goBlock(tree: Block, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
648650
if (cur < info.transformers.length) {
649651
val trans = info.transformers(cur)
650-
trans.transformBlock(tree)(ctx.withPhase(trans.phase), info) match {
652+
trans.transformBlock(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
651653
case t: Block => goBlock(t, info.nx.nxTransBlock(cur + 1))
652654
case t => transformSingle(t, cur + 1)
653655
}
@@ -658,7 +660,7 @@ object TreeTransforms {
658660
final private[TreeTransforms] def goIf(tree: If, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
659661
if (cur < info.transformers.length) {
660662
val trans = info.transformers(cur)
661-
trans.transformIf(tree)(ctx.withPhase(trans.phase), info) match {
663+
trans.transformIf(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
662664
case t: If => goIf(t, info.nx.nxTransIf(cur + 1))
663665
case t => transformSingle(t, cur + 1)
664666
}
@@ -669,7 +671,7 @@ object TreeTransforms {
669671
final private[TreeTransforms] def goClosure(tree: Closure, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
670672
if (cur < info.transformers.length) {
671673
val trans = info.transformers(cur)
672-
trans.transformClosure(tree)(ctx.withPhase(trans.phase), info) match {
674+
trans.transformClosure(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
673675
case t: Closure => goClosure(t, info.nx.nxTransClosure(cur + 1))
674676
case t => transformSingle(t, cur + 1)
675677
}
@@ -680,7 +682,7 @@ object TreeTransforms {
680682
final private[TreeTransforms] def goMatch(tree: Match, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
681683
if (cur < info.transformers.length) {
682684
val trans = info.transformers(cur)
683-
trans.transformMatch(tree)(ctx.withPhase(trans.phase), info) match {
685+
trans.transformMatch(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
684686
case t: Match => goMatch(t, info.nx.nxTransMatch(cur + 1))
685687
case t => transformSingle(t, cur + 1)
686688
}
@@ -691,7 +693,7 @@ object TreeTransforms {
691693
final private[TreeTransforms] def goCaseDef(tree: CaseDef, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
692694
if (cur < info.transformers.length) {
693695
val trans = info.transformers(cur)
694-
trans.transformCaseDef(tree)(ctx.withPhase(trans.phase), info) match {
696+
trans.transformCaseDef(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
695697
case t: CaseDef => goCaseDef(t, info.nx.nxTransCaseDef(cur + 1))
696698
case t => transformSingle(t, cur + 1)
697699
}
@@ -702,7 +704,7 @@ object TreeTransforms {
702704
final private[TreeTransforms] def goReturn(tree: Return, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
703705
if (cur < info.transformers.length) {
704706
val trans = info.transformers(cur)
705-
trans.transformReturn(tree)(ctx.withPhase(trans.phase), info) match {
707+
trans.transformReturn(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
706708
case t: Return => goReturn(t, info.nx.nxTransReturn(cur + 1))
707709
case t => transformSingle(t, cur + 1)
708710
}
@@ -713,7 +715,7 @@ object TreeTransforms {
713715
final private[TreeTransforms] def goTry(tree: Try, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
714716
if (cur < info.transformers.length) {
715717
val trans = info.transformers(cur)
716-
trans.transformTry(tree)(ctx.withPhase(trans.phase), info) match {
718+
trans.transformTry(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
717719
case t: Try => goTry(t, info.nx.nxTransTry(cur + 1))
718720
case t => transformSingle(t, cur + 1)
719721
}
@@ -724,7 +726,7 @@ object TreeTransforms {
724726
final private[TreeTransforms] def goThrow(tree: Throw, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
725727
if (cur < info.transformers.length) {
726728
val trans = info.transformers(cur)
727-
trans.transformThrow(tree)(ctx.withPhase(trans.phase), info) match {
729+
trans.transformThrow(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
728730
case t: Throw => goThrow(t, info.nx.nxTransThrow(cur + 1))
729731
case t => transformSingle(t, cur + 1)
730732
}
@@ -735,7 +737,7 @@ object TreeTransforms {
735737
final private[TreeTransforms] def goSeqLiteral(tree: SeqLiteral, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
736738
if (cur < info.transformers.length) {
737739
val trans = info.transformers(cur)
738-
trans.transformSeqLiteral(tree)(ctx.withPhase(trans.phase), info) match {
740+
trans.transformSeqLiteral(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
739741
case t: SeqLiteral => goSeqLiteral(t, info.nx.nxTransSeqLiteral(cur + 1))
740742
case t => transformSingle(t, cur + 1)
741743
}
@@ -746,7 +748,7 @@ object TreeTransforms {
746748
final private[TreeTransforms] def goTypeTree(tree: TypeTree, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
747749
if (cur < info.transformers.length) {
748750
val trans = info.transformers(cur)
749-
trans.transformTypeTree(tree)(ctx.withPhase(trans.phase), info) match {
751+
trans.transformTypeTree(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
750752
case t: TypeTree => goTypeTree(t, info.nx.nxTransTypeTree(cur + 1))
751753
case t => transformSingle(t, cur + 1)
752754
}
@@ -757,7 +759,7 @@ object TreeTransforms {
757759
final private[TreeTransforms] def goSelectFromTypeTree(tree: SelectFromTypeTree, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
758760
if (cur < info.transformers.length) {
759761
val trans = info.transformers(cur)
760-
trans.transformSelectFromTypeTree(tree)(ctx.withPhase(trans.phase), info) match {
762+
trans.transformSelectFromTypeTree(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
761763
case t: SelectFromTypeTree => goSelectFromTypeTree(t, info.nx.nxTransSelectFromTypeTree(cur + 1))
762764
case t => transformSingle(t, cur + 1)
763765
}
@@ -768,7 +770,7 @@ object TreeTransforms {
768770
final private[TreeTransforms] def goBind(tree: Bind, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
769771
if (cur < info.transformers.length) {
770772
val trans = info.transformers(cur)
771-
trans.transformBind(tree)(ctx.withPhase(trans.phase), info) match {
773+
trans.transformBind(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
772774
case t: Bind => goBind(t, info.nx.nxTransBind(cur + 1))
773775
case t => transformSingle(t, cur + 1)
774776
}
@@ -779,7 +781,7 @@ object TreeTransforms {
779781
final private[TreeTransforms] def goAlternative(tree: Alternative, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
780782
if (cur < info.transformers.length) {
781783
val trans = info.transformers(cur)
782-
trans.transformAlternative(tree)(ctx.withPhase(trans.phase), info) match {
784+
trans.transformAlternative(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
783785
case t: Alternative => goAlternative(t, info.nx.nxTransAlternative(cur + 1))
784786
case t => transformSingle(t, cur + 1)
785787
}
@@ -790,7 +792,7 @@ object TreeTransforms {
790792
final private[TreeTransforms] def goValDef(tree: ValDef, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
791793
if (cur < info.transformers.length) {
792794
val trans = info.transformers(cur)
793-
trans.transformValDef(tree)(ctx.withPhase(trans.phase), info) match {
795+
trans.transformValDef(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
794796
case t: ValDef => goValDef(t, info.nx.nxTransValDef(cur + 1))
795797
case t => transformSingle(t, cur + 1)
796798
}
@@ -801,7 +803,7 @@ object TreeTransforms {
801803
final private[TreeTransforms] def goDefDef(tree: DefDef, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
802804
if (cur < info.transformers.length) {
803805
val trans = info.transformers(cur)
804-
trans.transformDefDef(tree)(ctx.withPhase(trans.phase), info) match {
806+
trans.transformDefDef(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
805807
case t: DefDef => goDefDef(t, info.nx.nxTransDefDef(cur + 1))
806808
case t => transformSingle(t, cur + 1)
807809
}
@@ -812,7 +814,7 @@ object TreeTransforms {
812814
final private[TreeTransforms] def goUnApply(tree: UnApply, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
813815
if (cur < info.transformers.length) {
814816
val trans = info.transformers(cur)
815-
trans.transformUnApply(tree)(ctx.withPhase(trans.phase), info) match {
817+
trans.transformUnApply(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
816818
case t: UnApply => goUnApply(t, info.nx.nxTransUnApply(cur + 1))
817819
case t => transformSingle(t, cur + 1)
818820
}
@@ -823,7 +825,7 @@ object TreeTransforms {
823825
final private[TreeTransforms] def goTypeDef(tree: TypeDef, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
824826
if (cur < info.transformers.length) {
825827
val trans = info.transformers(cur)
826-
trans.transformTypeDef(tree)(ctx.withPhase(trans.phase), info) match {
828+
trans.transformTypeDef(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
827829
case t: TypeDef => goTypeDef(t, info.nx.nxTransTypeDef(cur + 1))
828830
case t => transformSingle(t, cur + 1)
829831
}
@@ -834,7 +836,7 @@ object TreeTransforms {
834836
final private[TreeTransforms] def goTemplate(tree: Template, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
835837
if (cur < info.transformers.length) {
836838
val trans = info.transformers(cur)
837-
trans.transformTemplate(tree)(ctx.withPhase(trans.phase), info) match {
839+
trans.transformTemplate(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
838840
case t: Template => goTemplate(t, info.nx.nxTransTemplate(cur + 1))
839841
case t => transformSingle(t, cur + 1)
840842
}
@@ -845,7 +847,7 @@ object TreeTransforms {
845847
final private[TreeTransforms] def goPackageDef(tree: PackageDef, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
846848
if (cur < info.transformers.length) {
847849
val trans = info.transformers(cur)
848-
trans.transformPackageDef(tree)(ctx.withPhase(trans.phase), info) match {
850+
trans.transformPackageDef(tree)(ctx.withPhase(trans.treeTransformPhase), info) match {
849851
case t: PackageDef => goPackageDef(t, info.nx.nxTransPackageDef(cur + 1))
850852
case t => transformSingle(t, cur + 1)
851853
}
@@ -855,7 +857,7 @@ object TreeTransforms {
855857
final private[TreeTransforms] def goOther(tree: Tree, cur: Int)(implicit ctx: Context, info: TransformerInfo): Tree = {
856858
if (cur < info.transformers.length) {
857859
val trans = info.transformers(cur)
858-
val t = trans.transformOther(tree)(ctx.withPhase(trans.phase), info)
860+
val t = trans.transformOther(tree)(ctx.withPhase(trans.treeTransformPhase), info)
859861
transformSingle(t, cur + 1)
860862
} else tree
861863
}
@@ -1167,7 +1169,7 @@ object TreeTransforms {
11671169
if (cur < info.transformers.length) {
11681170
// if cur > 0 then some of the symbols can be created by already performed transformations
11691171
// this means that their denotations could not exists in previous period
1170-
val pctx = ctx.withPhase(info.transformers(cur).phase)
1172+
val pctx = ctx.withPhase(info.transformers(cur).treeTransformPhase)
11711173
tree match {
11721174
//split one big match into 2 smaller ones
11731175
case tree: NameTree => transformNamed(tree, info, cur)(pctx)

0 commit comments

Comments
 (0)