Skip to content

Commit 38209fa

Browse files
committed
Revert: Add tag method to Tree nodes
(reverted from commit 0934483)
1 parent a59c06d commit 38209fa

File tree

2 files changed

+15
-168
lines changed

2 files changed

+15
-168
lines changed

compiler/src/dotty/tools/dotc/ast/Trees.scala

Lines changed: 0 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -19,82 +19,6 @@ import language.implicitConversions
1919

2020
object Trees {
2121

22-
type TreeTag = Int
23-
24-
object Tag {
25-
final val Ident = 0
26-
final val Select = 1
27-
final val This = 2
28-
final val Super = 3
29-
final val Apply = 4
30-
final val TypeApply = 5
31-
final val Literal = 6
32-
final val New = 7
33-
final val Typed = 8
34-
final val NamedArg = 9
35-
final val Assign = 10
36-
final val Block = 11
37-
final val If = 12
38-
final val Closure = 13
39-
final val Match = 14
40-
final val CaseDef = 15
41-
final val Return = 16
42-
final val Try = 17
43-
final val SeqLiteral = 18
44-
final val Inlined = 19
45-
final val TypeTree = 20
46-
final val Bind = 21
47-
final val Alternative = 22
48-
final val UnApply = 23
49-
final val ValDef = 24
50-
final val DefDef = 25
51-
final val TypeDef = 26
52-
final val Template = 27
53-
final val Import = 28
54-
final val PackageDef = 29
55-
final val Thicket = 30
56-
57-
/** The highest tree tag that can appear in a picked tree + 1 */
58-
final val NumPickledTreeTags = 31
59-
60-
final val Annotated = 31
61-
final val SingletonTypeTree = 32
62-
final val AndTypeTree = 33
63-
final val OrTypeTree = 34
64-
final val RefinedTypeTree = 35
65-
final val AppliedTypeTree = 36
66-
final val LambdaTypeTree = 37
67-
final val ByNameTypeTree = 38
68-
final val TypeBoundsTree = 39
69-
70-
/** The highest tree tag that can appear in a typed tree + 1 */
71-
final val NumTypedTreeTags = 40
72-
73-
final val TypedSplice = 40
74-
final val ModuleDef = 41
75-
final val ParsedTry = 42
76-
final val SymbolLit = 43
77-
final val InterpolatedString = 44
78-
final val Function = 45
79-
final val InfixOp = 46
80-
final val PostfixOp = 47
81-
final val PrefixOp = 48
82-
final val Parens = 49
83-
final val Tuple = 50
84-
final val Throw = 51
85-
final val WhileDo = 42
86-
final val DoWhile = 43
87-
final val ForYield = 44
88-
final val ForDo = 45
89-
final val GenFrom = 46
90-
final val GenAlias = 47
91-
final val ContextBounds = 48
92-
final val PatDef = 49
93-
94-
/** The highest tree tag + 1 */
95-
final val NumTags = 50
96-
}
97-
9822
// Note: it would be more logical to make Untyped = Nothing.
9923
// However, this interacts in a bad way with Scala's current type inference.
10024
// In fact, we cannot write something like Select(pre, name), where pre is
@@ -154,8 +78,6 @@ object Trees {
15478
/** The type constructor at the root of the tree */
15579
type ThisTree[T >: Untyped] <: Tree[T]
15680

157-
def tag: TreeTag
158-
15981
private[this] var myTpe: T = _
16082

16183
/** Destructively set the type of the tree. This should be called only when it is known that
@@ -435,7 +357,6 @@ object Trees {
435357
case class Ident[-T >: Untyped] private[ast] (name: Name)
436358
extends RefTree[T] {
437359
type ThisTree[-T >: Untyped] = Ident[T]
438-
final def tag = Tag.Ident
439360
def qualifier: Tree[T] = genericEmptyTree
440361

441362
/** Is this a `BackquotedIdent` ? */
@@ -453,7 +374,6 @@ object Trees {
453374
case class Select[-T >: Untyped] private[ast] (qualifier: Tree[T], name: Name)
454375
extends RefTree[T] {
455376
type ThisTree[-T >: Untyped] = Select[T]
456-
final def tag = Tag.Select
457377
}
458378

459379
class SelectWithSig[-T >: Untyped] private[ast] (qualifier: Tree[T], name: Name, val sig: Signature)
@@ -465,7 +385,6 @@ object Trees {
465385
case class This[-T >: Untyped] private[ast] (qual: untpd.Ident)
466386
extends DenotingTree[T] with TermTree[T] {
467387
type ThisTree[-T >: Untyped] = This[T]
468-
final def tag = Tag.This
469388
// Denotation of a This tree is always the underlying class; needs correction for modules.
470389
override def denot(implicit ctx: Context): Denotation = {
471390
typeOpt match {
@@ -481,7 +400,6 @@ object Trees {
481400
case class Super[-T >: Untyped] private[ast] (qual: Tree[T], mix: untpd.Ident)
482401
extends ProxyTree[T] with TermTree[T] {
483402
type ThisTree[-T >: Untyped] = Super[T]
484-
final def tag = Tag.Super
485403
def forwardTo = qual
486404
}
487405

@@ -496,64 +414,55 @@ object Trees {
496414
case class Apply[-T >: Untyped] private[ast] (fun: Tree[T], args: List[Tree[T]])
497415
extends GenericApply[T] {
498416
type ThisTree[-T >: Untyped] = Apply[T]
499-
final def tag = Tag.Apply
500417
}
501418

502419
/** fun[args] */
503420
case class TypeApply[-T >: Untyped] private[ast] (fun: Tree[T], args: List[Tree[T]])
504421
extends GenericApply[T] {
505422
type ThisTree[-T >: Untyped] = TypeApply[T]
506-
final def tag = Tag.TypeApply
507423
}
508424

509425
/** const */
510426
case class Literal[-T >: Untyped] private[ast] (const: Constant)
511427
extends TermTree[T] {
512428
type ThisTree[-T >: Untyped] = Literal[T]
513-
final def tag = Tag.Literal
514429
}
515430

516431
/** new tpt, but no constructor call */
517432
case class New[-T >: Untyped] private[ast] (tpt: Tree[T])
518433
extends TermTree[T] {
519434
type ThisTree[-T >: Untyped] = New[T]
520-
final def tag = Tag.New
521435
}
522436

523437
/** expr : tpt */
524438
case class Typed[-T >: Untyped] private[ast] (expr: Tree[T], tpt: Tree[T])
525439
extends ProxyTree[T] with TermTree[T] {
526440
type ThisTree[-T >: Untyped] = Typed[T]
527-
final def tag = Tag.Typed
528441
def forwardTo = expr
529442
}
530443

531444
/** name = arg, in a parameter list */
532445
case class NamedArg[-T >: Untyped] private[ast] (name: Name, arg: Tree[T])
533446
extends Tree[T] {
534447
type ThisTree[-T >: Untyped] = NamedArg[T]
535-
final def tag = Tag.NamedArg
536448
}
537449

538450
/** name = arg, outside a parameter list */
539451
case class Assign[-T >: Untyped] private[ast] (lhs: Tree[T], rhs: Tree[T])
540452
extends TermTree[T] {
541453
type ThisTree[-T >: Untyped] = Assign[T]
542-
final def tag = Tag.Assign
543454
}
544455

545456
/** { stats; expr } */
546457
case class Block[-T >: Untyped] private[ast] (stats: List[Tree[T]], expr: Tree[T])
547458
extends TermTree[T] {
548459
type ThisTree[-T >: Untyped] = Block[T]
549-
final def tag = Tag.Block
550460
}
551461

552462
/** if cond then thenp else elsep */
553463
case class If[-T >: Untyped] private[ast] (cond: Tree[T], thenp: Tree[T], elsep: Tree[T])
554464
extends TermTree[T] {
555465
type ThisTree[-T >: Untyped] = If[T]
556-
final def tag = Tag.If
557466
}
558467

559468
/** A closure with an environment and a reference to a method.
@@ -568,21 +477,18 @@ object Trees {
568477
case class Closure[-T >: Untyped] private[ast] (env: List[Tree[T]], meth: Tree[T], tpt: Tree[T])
569478
extends TermTree[T] {
570479
type ThisTree[-T >: Untyped] = Closure[T]
571-
final def tag = Tag.Closure
572480
}
573481

574482
/** selector match { cases } */
575483
case class Match[-T >: Untyped] private[ast] (selector: Tree[T], cases: List[CaseDef[T]])
576484
extends TermTree[T] {
577485
type ThisTree[-T >: Untyped] = Match[T]
578-
final def tag = Tag.Match
579486
}
580487

581488
/** case pat if guard => body; only appears as child of a Match */
582489
case class CaseDef[-T >: Untyped] private[ast] (pat: Tree[T], guard: Tree[T], body: Tree[T])
583490
extends Tree[T] {
584491
type ThisTree[-T >: Untyped] = CaseDef[T]
585-
final def tag = Tag.CaseDef
586492
}
587493

588494
/** return expr
@@ -593,7 +499,6 @@ object Trees {
593499
case class Return[-T >: Untyped] private[ast] (expr: Tree[T], from: Tree[T] = genericEmptyTree)
594500
extends TermTree[T] {
595501
type ThisTree[-T >: Untyped] = Return[T]
596-
final def tag = Tag.Return
597502
}
598503

599504
/** try block catch handler finally finalizer
@@ -618,7 +523,6 @@ object Trees {
618523
case class Try[-T >: Untyped] private[ast] (expr: Tree[T], cases: List[CaseDef[T]], finalizer: Tree[T])
619524
extends TermTree[T] {
620525
type ThisTree[-T >: Untyped] = Try[T]
621-
final def tag = Tag.Try
622526
}
623527

624528
/** Seq(elems)
@@ -627,7 +531,6 @@ object Trees {
627531
case class SeqLiteral[-T >: Untyped] private[ast] (elems: List[Tree[T]], elemtpt: Tree[T])
628532
extends Tree[T] {
629533
type ThisTree[-T >: Untyped] = SeqLiteral[T]
630-
final def tag = Tag.SeqLiteral
631534
}
632535

633536
/** Array(elems) */
@@ -655,14 +558,12 @@ object Trees {
655558
case class Inlined[-T >: Untyped] private[ast] (call: tpd.Tree, bindings: List[MemberDef[T]], expansion: Tree[T])
656559
extends Tree[T] {
657560
type ThisTree[-T >: Untyped] = Inlined[T]
658-
final def tag = Tag.Inlined
659561
}
660562

661563
/** A type tree that represents an existing or inferred type */
662564
case class TypeTree[-T >: Untyped] ()
663565
extends DenotingTree[T] with TypTree[T] {
664566
type ThisTree[-T >: Untyped] = TypeTree[T]
665-
final def tag = Tag.TypeTree
666567
override def isEmpty = !hasType
667568
override def toString =
668569
s"TypeTree${if (hasType) s"[$typeOpt]" else ""}"
@@ -672,65 +573,56 @@ object Trees {
672573
case class SingletonTypeTree[-T >: Untyped] private[ast] (ref: Tree[T])
673574
extends DenotingTree[T] with TypTree[T] {
674575
type ThisTree[-T >: Untyped] = SingletonTypeTree[T]
675-
final def tag = Tag.SingletonTypeTree
676576
}
677577

678578
/** left & right */
679579
case class AndTypeTree[-T >: Untyped] private[ast] (left: Tree[T], right: Tree[T])
680580
extends TypTree[T] {
681581
type ThisTree[-T >: Untyped] = AndTypeTree[T]
682-
final def tag = Tag.AndTypeTree
683582
}
684583

685584
/** left | right */
686585
case class OrTypeTree[-T >: Untyped] private[ast] (left: Tree[T], right: Tree[T])
687586
extends TypTree[T] {
688587
type ThisTree[-T >: Untyped] = OrTypeTree[T]
689-
final def tag = Tag.OrTypeTree
690588
}
691589

692590
/** tpt { refinements } */
693591
case class RefinedTypeTree[-T >: Untyped] private[ast] (tpt: Tree[T], refinements: List[Tree[T]])
694592
extends ProxyTree[T] with TypTree[T] {
695593
type ThisTree[-T >: Untyped] = RefinedTypeTree[T]
696-
final def tag = Tag.RefinedTypeTree
697594
def forwardTo = tpt
698595
}
699596

700597
/** tpt[args] */
701598
case class AppliedTypeTree[-T >: Untyped] private[ast] (tpt: Tree[T], args: List[Tree[T]])
702599
extends ProxyTree[T] with TypTree[T] {
703600
type ThisTree[-T >: Untyped] = AppliedTypeTree[T]
704-
final def tag = Tag.AppliedTypeTree
705601
def forwardTo = tpt
706602
}
707603

708604
/** [typeparams] -> tpt */
709605
case class LambdaTypeTree[-T >: Untyped] private[ast] (tparams: List[TypeDef[T]], body: Tree[T])
710606
extends TypTree[T] {
711607
type ThisTree[-T >: Untyped] = LambdaTypeTree[T]
712-
final def tag = Tag.LambdaTypeTree
713608
}
714609

715610
/** => T */
716611
case class ByNameTypeTree[-T >: Untyped] private[ast] (result: Tree[T])
717612
extends TypTree[T] {
718613
type ThisTree[-T >: Untyped] = ByNameTypeTree[T]
719-
final def tag = Tag.ByNameTypeTree
720614
}
721615

722616
/** >: lo <: hi */
723617
case class TypeBoundsTree[-T >: Untyped] private[ast] (lo: Tree[T], hi: Tree[T])
724618
extends TypTree[T] {
725619
type ThisTree[-T >: Untyped] = TypeBoundsTree[T]
726-
final def tag = Tag.TypeBoundsTree
727620
}
728621

729622
/** name @ body */
730623
case class Bind[-T >: Untyped] private[ast] (name: Name, body: Tree[T])
731624
extends NameTree[T] with DefTree[T] with PatternTree[T] {
732625
type ThisTree[-T >: Untyped] = Bind[T]
733-
final def tag = Tag.Bind
734626
override def isType = name.isTypeName
735627
override def isTerm = name.isTermName
736628
}
@@ -739,7 +631,6 @@ object Trees {
739631
case class Alternative[-T >: Untyped] private[ast] (trees: List[Tree[T]])
740632
extends PatternTree[T] {
741633
type ThisTree[-T >: Untyped] = Alternative[T]
742-
final def tag = Tag.Alternative
743634
}
744635

745636
/** The typed translation of `extractor(patterns)` in a pattern. The translation has the following
@@ -759,14 +650,12 @@ object Trees {
759650
case class UnApply[-T >: Untyped] private[ast] (fun: Tree[T], implicits: List[Tree[T]], patterns: List[Tree[T]])
760651
extends PatternTree[T] {
761652
type ThisTree[-T >: Untyped] = UnApply[T]
762-
final def tag = Tag.UnApply
763653
}
764654

765655
/** mods val name: tpt = rhs */
766656
case class ValDef[-T >: Untyped] private[ast] (name: TermName, tpt: Tree[T], private var preRhs: LazyTree)
767657
extends ValOrDefDef[T] {
768658
type ThisTree[-T >: Untyped] = ValDef[T]
769-
final def tag = Tag.ValDef
770659
assert(isEmpty || tpt != genericEmptyTree)
771660
def unforced = preRhs
772661
protected def force(x: AnyRef) = preRhs = x
@@ -777,7 +666,6 @@ object Trees {
777666
vparamss: List[List[ValDef[T]]], tpt: Tree[T], private var preRhs: LazyTree)
778667
extends ValOrDefDef[T] {
779668
type ThisTree[-T >: Untyped] = DefDef[T]
780-
final def tag = Tag.DefDef
781669
assert(tpt != genericEmptyTree)
782670
def unforced = preRhs
783671
protected def force(x: AnyRef) = preRhs = x
@@ -791,7 +679,6 @@ object Trees {
791679
case class TypeDef[-T >: Untyped] private[ast] (name: TypeName, rhs: Tree[T])
792680
extends MemberDef[T] {
793681
type ThisTree[-T >: Untyped] = TypeDef[T]
794-
final def tag = Tag.TypeDef
795682

796683
/** Is this a definition of a class? */
797684
def isClassDef = rhs.isInstanceOf[Template[_]]
@@ -801,7 +688,6 @@ object Trees {
801688
case class Template[-T >: Untyped] private[ast] (constr: DefDef[T], parents: List[Tree[T]], self: ValDef[T], private var preBody: LazyTreeList)
802689
extends DefTree[T] with WithLazyField[List[Tree[T]]] {
803690
type ThisTree[-T >: Untyped] = Template[T]
804-
final def tag = Tag.Template
805691
def unforcedBody = unforced
806692
def unforced = preBody
807693
protected def force(x: AnyRef) = preBody = x
@@ -815,22 +701,19 @@ object Trees {
815701
case class Import[-T >: Untyped] private[ast] (expr: Tree[T], selectors: List[Tree[Untyped]])
816702
extends DenotingTree[T] {
817703
type ThisTree[-T >: Untyped] = Import[T]
818-
final def tag = Tag.Import
819704
}
820705

821706
/** package pid { stats } */
822707
case class PackageDef[-T >: Untyped] private[ast] (pid: RefTree[T], stats: List[Tree[T]])
823708
extends ProxyTree[T] {
824709
type ThisTree[-T >: Untyped] = PackageDef[T]
825-
final def tag = Tag.PackageDef
826710
def forwardTo = pid
827711
}
828712

829713
/** arg @annot */
830714
case class Annotated[-T >: Untyped] private[ast] (arg: Tree[T], annot: Tree[T])
831715
extends ProxyTree[T] {
832716
type ThisTree[-T >: Untyped] = Annotated[T]
833-
final def tag = Tag.Annotated
834717
def forwardTo = arg
835718
}
836719

@@ -849,7 +732,6 @@ object Trees {
849732
case class Thicket[-T >: Untyped](trees: List[Tree[T]])
850733
extends Tree[T] with WithoutTypeOrPos[T] {
851734
type ThisTree[-T >: Untyped] = Thicket[T]
852-
final def tag = Tag.Thicket
853735
override def isEmpty: Boolean = trees.isEmpty
854736
override def toList: List[Tree[T]] = flatten(trees)
855737
override def toString = if (isEmpty) "EmptyTree" else "Thicket(" + trees.mkString(", ") + ")"

0 commit comments

Comments
 (0)