@@ -19,82 +19,6 @@ import language.implicitConversions
19
19
20
20
object Trees {
21
21
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
-
98
22
// Note: it would be more logical to make Untyped = Nothing.
99
23
// However, this interacts in a bad way with Scala's current type inference.
100
24
// In fact, we cannot write something like Select(pre, name), where pre is
@@ -154,8 +78,6 @@ object Trees {
154
78
/** The type constructor at the root of the tree */
155
79
type ThisTree [T >: Untyped ] <: Tree [T ]
156
80
157
- def tag : TreeTag
158
-
159
81
private [this ] var myTpe : T = _
160
82
161
83
/** Destructively set the type of the tree. This should be called only when it is known that
@@ -435,7 +357,6 @@ object Trees {
435
357
case class Ident [- T >: Untyped ] private [ast] (name : Name )
436
358
extends RefTree [T ] {
437
359
type ThisTree [- T >: Untyped ] = Ident [T ]
438
- final def tag = Tag .Ident
439
360
def qualifier : Tree [T ] = genericEmptyTree
440
361
441
362
/** Is this a `BackquotedIdent` ? */
@@ -453,7 +374,6 @@ object Trees {
453
374
case class Select [- T >: Untyped ] private [ast] (qualifier : Tree [T ], name : Name )
454
375
extends RefTree [T ] {
455
376
type ThisTree [- T >: Untyped ] = Select [T ]
456
- final def tag = Tag .Select
457
377
}
458
378
459
379
class SelectWithSig [- T >: Untyped ] private [ast] (qualifier : Tree [T ], name : Name , val sig : Signature )
@@ -465,7 +385,6 @@ object Trees {
465
385
case class This [- T >: Untyped ] private [ast] (qual : untpd.Ident )
466
386
extends DenotingTree [T ] with TermTree [T ] {
467
387
type ThisTree [- T >: Untyped ] = This [T ]
468
- final def tag = Tag .This
469
388
// Denotation of a This tree is always the underlying class; needs correction for modules.
470
389
override def denot (implicit ctx : Context ): Denotation = {
471
390
typeOpt match {
@@ -481,7 +400,6 @@ object Trees {
481
400
case class Super [- T >: Untyped ] private [ast] (qual : Tree [T ], mix : untpd.Ident )
482
401
extends ProxyTree [T ] with TermTree [T ] {
483
402
type ThisTree [- T >: Untyped ] = Super [T ]
484
- final def tag = Tag .Super
485
403
def forwardTo = qual
486
404
}
487
405
@@ -496,64 +414,55 @@ object Trees {
496
414
case class Apply [- T >: Untyped ] private [ast] (fun : Tree [T ], args : List [Tree [T ]])
497
415
extends GenericApply [T ] {
498
416
type ThisTree [- T >: Untyped ] = Apply [T ]
499
- final def tag = Tag .Apply
500
417
}
501
418
502
419
/** fun[args] */
503
420
case class TypeApply [- T >: Untyped ] private [ast] (fun : Tree [T ], args : List [Tree [T ]])
504
421
extends GenericApply [T ] {
505
422
type ThisTree [- T >: Untyped ] = TypeApply [T ]
506
- final def tag = Tag .TypeApply
507
423
}
508
424
509
425
/** const */
510
426
case class Literal [- T >: Untyped ] private [ast] (const : Constant )
511
427
extends TermTree [T ] {
512
428
type ThisTree [- T >: Untyped ] = Literal [T ]
513
- final def tag = Tag .Literal
514
429
}
515
430
516
431
/** new tpt, but no constructor call */
517
432
case class New [- T >: Untyped ] private [ast] (tpt : Tree [T ])
518
433
extends TermTree [T ] {
519
434
type ThisTree [- T >: Untyped ] = New [T ]
520
- final def tag = Tag .New
521
435
}
522
436
523
437
/** expr : tpt */
524
438
case class Typed [- T >: Untyped ] private [ast] (expr : Tree [T ], tpt : Tree [T ])
525
439
extends ProxyTree [T ] with TermTree [T ] {
526
440
type ThisTree [- T >: Untyped ] = Typed [T ]
527
- final def tag = Tag .Typed
528
441
def forwardTo = expr
529
442
}
530
443
531
444
/** name = arg, in a parameter list */
532
445
case class NamedArg [- T >: Untyped ] private [ast] (name : Name , arg : Tree [T ])
533
446
extends Tree [T ] {
534
447
type ThisTree [- T >: Untyped ] = NamedArg [T ]
535
- final def tag = Tag .NamedArg
536
448
}
537
449
538
450
/** name = arg, outside a parameter list */
539
451
case class Assign [- T >: Untyped ] private [ast] (lhs : Tree [T ], rhs : Tree [T ])
540
452
extends TermTree [T ] {
541
453
type ThisTree [- T >: Untyped ] = Assign [T ]
542
- final def tag = Tag .Assign
543
454
}
544
455
545
456
/** { stats; expr } */
546
457
case class Block [- T >: Untyped ] private [ast] (stats : List [Tree [T ]], expr : Tree [T ])
547
458
extends TermTree [T ] {
548
459
type ThisTree [- T >: Untyped ] = Block [T ]
549
- final def tag = Tag .Block
550
460
}
551
461
552
462
/** if cond then thenp else elsep */
553
463
case class If [- T >: Untyped ] private [ast] (cond : Tree [T ], thenp : Tree [T ], elsep : Tree [T ])
554
464
extends TermTree [T ] {
555
465
type ThisTree [- T >: Untyped ] = If [T ]
556
- final def tag = Tag .If
557
466
}
558
467
559
468
/** A closure with an environment and a reference to a method.
@@ -568,21 +477,18 @@ object Trees {
568
477
case class Closure [- T >: Untyped ] private [ast] (env : List [Tree [T ]], meth : Tree [T ], tpt : Tree [T ])
569
478
extends TermTree [T ] {
570
479
type ThisTree [- T >: Untyped ] = Closure [T ]
571
- final def tag = Tag .Closure
572
480
}
573
481
574
482
/** selector match { cases } */
575
483
case class Match [- T >: Untyped ] private [ast] (selector : Tree [T ], cases : List [CaseDef [T ]])
576
484
extends TermTree [T ] {
577
485
type ThisTree [- T >: Untyped ] = Match [T ]
578
- final def tag = Tag .Match
579
486
}
580
487
581
488
/** case pat if guard => body; only appears as child of a Match */
582
489
case class CaseDef [- T >: Untyped ] private [ast] (pat : Tree [T ], guard : Tree [T ], body : Tree [T ])
583
490
extends Tree [T ] {
584
491
type ThisTree [- T >: Untyped ] = CaseDef [T ]
585
- final def tag = Tag .CaseDef
586
492
}
587
493
588
494
/** return expr
@@ -593,7 +499,6 @@ object Trees {
593
499
case class Return [- T >: Untyped ] private [ast] (expr : Tree [T ], from : Tree [T ] = genericEmptyTree)
594
500
extends TermTree [T ] {
595
501
type ThisTree [- T >: Untyped ] = Return [T ]
596
- final def tag = Tag .Return
597
502
}
598
503
599
504
/** try block catch handler finally finalizer
@@ -618,7 +523,6 @@ object Trees {
618
523
case class Try [- T >: Untyped ] private [ast] (expr : Tree [T ], cases : List [CaseDef [T ]], finalizer : Tree [T ])
619
524
extends TermTree [T ] {
620
525
type ThisTree [- T >: Untyped ] = Try [T ]
621
- final def tag = Tag .Try
622
526
}
623
527
624
528
/** Seq(elems)
@@ -627,7 +531,6 @@ object Trees {
627
531
case class SeqLiteral [- T >: Untyped ] private [ast] (elems : List [Tree [T ]], elemtpt : Tree [T ])
628
532
extends Tree [T ] {
629
533
type ThisTree [- T >: Untyped ] = SeqLiteral [T ]
630
- final def tag = Tag .SeqLiteral
631
534
}
632
535
633
536
/** Array(elems) */
@@ -655,14 +558,12 @@ object Trees {
655
558
case class Inlined [- T >: Untyped ] private [ast] (call : tpd.Tree , bindings : List [MemberDef [T ]], expansion : Tree [T ])
656
559
extends Tree [T ] {
657
560
type ThisTree [- T >: Untyped ] = Inlined [T ]
658
- final def tag = Tag .Inlined
659
561
}
660
562
661
563
/** A type tree that represents an existing or inferred type */
662
564
case class TypeTree [- T >: Untyped ] ()
663
565
extends DenotingTree [T ] with TypTree [T ] {
664
566
type ThisTree [- T >: Untyped ] = TypeTree [T ]
665
- final def tag = Tag .TypeTree
666
567
override def isEmpty = ! hasType
667
568
override def toString =
668
569
s " TypeTree ${if (hasType) s " [ $typeOpt] " else " " }"
@@ -672,65 +573,56 @@ object Trees {
672
573
case class SingletonTypeTree [- T >: Untyped ] private [ast] (ref : Tree [T ])
673
574
extends DenotingTree [T ] with TypTree [T ] {
674
575
type ThisTree [- T >: Untyped ] = SingletonTypeTree [T ]
675
- final def tag = Tag .SingletonTypeTree
676
576
}
677
577
678
578
/** left & right */
679
579
case class AndTypeTree [- T >: Untyped ] private [ast] (left : Tree [T ], right : Tree [T ])
680
580
extends TypTree [T ] {
681
581
type ThisTree [- T >: Untyped ] = AndTypeTree [T ]
682
- final def tag = Tag .AndTypeTree
683
582
}
684
583
685
584
/** left | right */
686
585
case class OrTypeTree [- T >: Untyped ] private [ast] (left : Tree [T ], right : Tree [T ])
687
586
extends TypTree [T ] {
688
587
type ThisTree [- T >: Untyped ] = OrTypeTree [T ]
689
- final def tag = Tag .OrTypeTree
690
588
}
691
589
692
590
/** tpt { refinements } */
693
591
case class RefinedTypeTree [- T >: Untyped ] private [ast] (tpt : Tree [T ], refinements : List [Tree [T ]])
694
592
extends ProxyTree [T ] with TypTree [T ] {
695
593
type ThisTree [- T >: Untyped ] = RefinedTypeTree [T ]
696
- final def tag = Tag .RefinedTypeTree
697
594
def forwardTo = tpt
698
595
}
699
596
700
597
/** tpt[args] */
701
598
case class AppliedTypeTree [- T >: Untyped ] private [ast] (tpt : Tree [T ], args : List [Tree [T ]])
702
599
extends ProxyTree [T ] with TypTree [T ] {
703
600
type ThisTree [- T >: Untyped ] = AppliedTypeTree [T ]
704
- final def tag = Tag .AppliedTypeTree
705
601
def forwardTo = tpt
706
602
}
707
603
708
604
/** [typeparams] -> tpt */
709
605
case class LambdaTypeTree [- T >: Untyped ] private [ast] (tparams : List [TypeDef [T ]], body : Tree [T ])
710
606
extends TypTree [T ] {
711
607
type ThisTree [- T >: Untyped ] = LambdaTypeTree [T ]
712
- final def tag = Tag .LambdaTypeTree
713
608
}
714
609
715
610
/** => T */
716
611
case class ByNameTypeTree [- T >: Untyped ] private [ast] (result : Tree [T ])
717
612
extends TypTree [T ] {
718
613
type ThisTree [- T >: Untyped ] = ByNameTypeTree [T ]
719
- final def tag = Tag .ByNameTypeTree
720
614
}
721
615
722
616
/** >: lo <: hi */
723
617
case class TypeBoundsTree [- T >: Untyped ] private [ast] (lo : Tree [T ], hi : Tree [T ])
724
618
extends TypTree [T ] {
725
619
type ThisTree [- T >: Untyped ] = TypeBoundsTree [T ]
726
- final def tag = Tag .TypeBoundsTree
727
620
}
728
621
729
622
/** name @ body */
730
623
case class Bind [- T >: Untyped ] private [ast] (name : Name , body : Tree [T ])
731
624
extends NameTree [T ] with DefTree [T ] with PatternTree [T ] {
732
625
type ThisTree [- T >: Untyped ] = Bind [T ]
733
- final def tag = Tag .Bind
734
626
override def isType = name.isTypeName
735
627
override def isTerm = name.isTermName
736
628
}
@@ -739,7 +631,6 @@ object Trees {
739
631
case class Alternative [- T >: Untyped ] private [ast] (trees : List [Tree [T ]])
740
632
extends PatternTree [T ] {
741
633
type ThisTree [- T >: Untyped ] = Alternative [T ]
742
- final def tag = Tag .Alternative
743
634
}
744
635
745
636
/** The typed translation of `extractor(patterns)` in a pattern. The translation has the following
@@ -759,14 +650,12 @@ object Trees {
759
650
case class UnApply [- T >: Untyped ] private [ast] (fun : Tree [T ], implicits : List [Tree [T ]], patterns : List [Tree [T ]])
760
651
extends PatternTree [T ] {
761
652
type ThisTree [- T >: Untyped ] = UnApply [T ]
762
- final def tag = Tag .UnApply
763
653
}
764
654
765
655
/** mods val name: tpt = rhs */
766
656
case class ValDef [- T >: Untyped ] private [ast] (name : TermName , tpt : Tree [T ], private var preRhs : LazyTree )
767
657
extends ValOrDefDef [T ] {
768
658
type ThisTree [- T >: Untyped ] = ValDef [T ]
769
- final def tag = Tag .ValDef
770
659
assert(isEmpty || tpt != genericEmptyTree)
771
660
def unforced = preRhs
772
661
protected def force (x : AnyRef ) = preRhs = x
@@ -777,7 +666,6 @@ object Trees {
777
666
vparamss : List [List [ValDef [T ]]], tpt : Tree [T ], private var preRhs : LazyTree )
778
667
extends ValOrDefDef [T ] {
779
668
type ThisTree [- T >: Untyped ] = DefDef [T ]
780
- final def tag = Tag .DefDef
781
669
assert(tpt != genericEmptyTree)
782
670
def unforced = preRhs
783
671
protected def force (x : AnyRef ) = preRhs = x
@@ -791,7 +679,6 @@ object Trees {
791
679
case class TypeDef [- T >: Untyped ] private [ast] (name : TypeName , rhs : Tree [T ])
792
680
extends MemberDef [T ] {
793
681
type ThisTree [- T >: Untyped ] = TypeDef [T ]
794
- final def tag = Tag .TypeDef
795
682
796
683
/** Is this a definition of a class? */
797
684
def isClassDef = rhs.isInstanceOf [Template [_]]
@@ -801,7 +688,6 @@ object Trees {
801
688
case class Template [- T >: Untyped ] private [ast] (constr : DefDef [T ], parents : List [Tree [T ]], self : ValDef [T ], private var preBody : LazyTreeList )
802
689
extends DefTree [T ] with WithLazyField [List [Tree [T ]]] {
803
690
type ThisTree [- T >: Untyped ] = Template [T ]
804
- final def tag = Tag .Template
805
691
def unforcedBody = unforced
806
692
def unforced = preBody
807
693
protected def force (x : AnyRef ) = preBody = x
@@ -815,22 +701,19 @@ object Trees {
815
701
case class Import [- T >: Untyped ] private [ast] (expr : Tree [T ], selectors : List [Tree [Untyped ]])
816
702
extends DenotingTree [T ] {
817
703
type ThisTree [- T >: Untyped ] = Import [T ]
818
- final def tag = Tag .Import
819
704
}
820
705
821
706
/** package pid { stats } */
822
707
case class PackageDef [- T >: Untyped ] private [ast] (pid : RefTree [T ], stats : List [Tree [T ]])
823
708
extends ProxyTree [T ] {
824
709
type ThisTree [- T >: Untyped ] = PackageDef [T ]
825
- final def tag = Tag .PackageDef
826
710
def forwardTo = pid
827
711
}
828
712
829
713
/** arg @annot */
830
714
case class Annotated [- T >: Untyped ] private [ast] (arg : Tree [T ], annot : Tree [T ])
831
715
extends ProxyTree [T ] {
832
716
type ThisTree [- T >: Untyped ] = Annotated [T ]
833
- final def tag = Tag .Annotated
834
717
def forwardTo = arg
835
718
}
836
719
@@ -849,7 +732,6 @@ object Trees {
849
732
case class Thicket [- T >: Untyped ](trees : List [Tree [T ]])
850
733
extends Tree [T ] with WithoutTypeOrPos [T ] {
851
734
type ThisTree [- T >: Untyped ] = Thicket [T ]
852
- final def tag = Tag .Thicket
853
735
override def isEmpty : Boolean = trees.isEmpty
854
736
override def toList : List [Tree [T ]] = flatten(trees)
855
737
override def toString = if (isEmpty) " EmptyTree" else " Thicket(" + trees.mkString(" , " ) + " )"
0 commit comments