@@ -19,82 +19,6 @@ import language.implicitConversions
1919
2020object 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