@@ -2,106 +2,46 @@ package scala.tools.nsc.tasty
22
33/** Flags from TASTy with no equivalent in scalac
44 */
5- trait TastyFlags { self =>
6- type TastyFlagSet
7- type SingletonSets [_]
8-
9- val EmptyFlags : TastyFlagSet
10- val Erased : TastyFlagSet
11- val Internal : TastyFlagSet
12- val Inline : TastyFlagSet
13- val InlineProxy : TastyFlagSet
14- val Opaque : TastyFlagSet
15- val Scala2x : TastyFlagSet
16- val Extension : TastyFlagSet
17- val Given : TastyFlagSet
18- val Exported : TastyFlagSet
19- val NoInits : TastyFlagSet
20-
21- protected def union (as : TastyFlagSet , bs : TastyFlagSet ): TastyFlagSet
22- protected def intersect (as : TastyFlagSet , bs : TastyFlagSet ): TastyFlagSet
23- protected def equal (set : TastyFlagSet , other : TastyFlagSet ): Boolean
24- protected def remove (set : TastyFlagSet , mask : TastyFlagSet ): TastyFlagSet
25- protected def toSingletonSets (multiset : TastyFlagSet ): SingletonSets [TastyFlagSet ]
26- protected def map [A ](set : SingletonSets [TastyFlagSet ], f : TastyFlagSet => A ): Iterable [A ]
27- }
28-
295object TastyFlags {
306
31- type TastyFlagSet = Live .TastyFlagSet
32- type SingletonSets [T ] = Live .SingletonSets [T ]
33-
34- implicit final class TastyFlagSetAPI (private val flagset : TastyFlagSet ) extends AnyVal {
35-
36- def toSingletonSets : SingletonSets [TastyFlagSet ] = Live .toSingletonSets(flagset)
37- def | (other : TastyFlagSet ): TastyFlagSet = Live .union(flagset, other)
38- def & (mask : TastyFlagSet ): TastyFlagSet = Live .intersect(flagset, mask)
39- def === (set : TastyFlagSet ): Boolean = Live .equal(flagset, set)
40- def &~ (mask : TastyFlagSet ): TastyFlagSet = Live .remove(flagset, mask)
41- def unary_! : Boolean = flagset === Live .EmptyFlags
42- def is (mask : TastyFlagSet ): Boolean = (flagset & mask).hasFlags
7+ val EmptyFlags : TastyFlagSet = TastyFlagSet (0 )
8+ val Erased : TastyFlagSet = TastyFlagSet (1 << 0 )
9+ val Internal : TastyFlagSet = TastyFlagSet (1 << 1 )
10+ val Inline : TastyFlagSet = TastyFlagSet (1 << 2 )
11+ val InlineProxy : TastyFlagSet = TastyFlagSet (1 << 3 )
12+ val Opaque : TastyFlagSet = TastyFlagSet (1 << 4 )
13+ val Scala2x : TastyFlagSet = TastyFlagSet (1 << 5 )
14+ val Extension : TastyFlagSet = TastyFlagSet (1 << 6 )
15+ val Given : TastyFlagSet = TastyFlagSet (1 << 7 )
16+ val Exported : TastyFlagSet = TastyFlagSet (1 << 8 )
17+ val NoInits : TastyFlagSet = TastyFlagSet (1 << 9 )
18+
19+ case class TastyFlagSet private [TastyFlags ](private val flags : Int ) extends AnyVal {
20+ def toSingletonSets : SingletonSets = SingletonSets (flags)
21+ def | (other : TastyFlagSet ): TastyFlagSet = TastyFlagSet (flags | other.flags)
22+ def & (mask : TastyFlagSet ): TastyFlagSet = TastyFlagSet (flags & mask.flags)
23+ def &~ (mask : TastyFlagSet ): TastyFlagSet = TastyFlagSet (flags & ~ mask.flags)
24+ def unary_! : Boolean = this == EmptyFlags
25+ def is (mask : TastyFlagSet ): Boolean = (this & mask).hasFlags
4326 def is (mask : TastyFlagSet , butNot : TastyFlagSet ): Boolean = if (! butNot) is(mask) else is(mask) && not(butNot)
4427 def not (mask : TastyFlagSet ): Boolean = ! is(mask)
45- def hasFlags : Boolean = ! (! flagset)
46- def except (mask : TastyFlagSet ): (Boolean , TastyFlagSet ) = (is(mask), flagset &~ mask)
47-
48- def show : String = {
49- import Live ._
50- if (! flagset) " EmptyFlags"
51- else flagset.toSingletonSets.map {
52- case f if f === Erased => " Erased"
53- case f if f === Internal => " Internal"
54- case f if f === Inline => " Inline"
55- case f if f === InlineProxy => " InlineProxy"
56- case f if f === Opaque => " Opaque"
57- case f if f === Scala2x => " Scala2x"
58- case f if f === Extension => " Extension"
59- case f if f === Given => " Given"
60- case f if f === Exported => " Exported"
61- case f if f === NoInits => " NoInits"
62- }.mkString(" | " )
63- }
64-
65- }
66-
67- implicit final class SingletonSetsAPI (private val flagsets : SingletonSets [TastyFlagSet ]) extends AnyVal {
68- def map [A ](f : TastyFlagSet => A ): Iterable [A ] = Live .map(flagsets, f)
28+ def hasFlags : Boolean = ! (! this )
29+ def except (mask : TastyFlagSet ): (Boolean , TastyFlagSet ) = is(mask) -> (this &~ mask)
6930 }
7031
71- val Live : TastyFlags = new TastyFlags {
72-
73- type TastyFlagSet = Int
74- type SingletonSets [X ] = X
75-
76- val EmptyFlags = 0
77- val Erased = 1 << 0
78- val Internal = 1 << 1
79- val Inline = 1 << 2
80- val InlineProxy = 1 << 3
81- val Opaque = 1 << 4
82- val Scala2x = 1 << 5
83- val Extension = 1 << 6
84- val Given = 1 << 7
85- val Exported = 1 << 8
86- val NoInits = 1 << 9
87-
88- final def union (a : TastyFlagSet , b : TastyFlagSet ) = a | b
89- final def intersect (a : TastyFlagSet , b : TastyFlagSet ) = a & b
90- final def equal (set : TastyFlagSet , other : TastyFlagSet ) = set == other
91- final def remove (set : TastyFlagSet , mask : TastyFlagSet ) = set & ~ mask
92- final def toSingletonSets (set : TastyFlagSet ) = set
93-
94- final def map [A ](set : SingletonSets [TastyFlagSet ], f : TastyFlagSet => A ) = {
32+ case class SingletonSets private [TastyFlags ](private val set : Int ) extends AnyVal {
33+ def map [A ](f : TastyFlagSet => A ): Iterable [A ] = {
9534 val buf = Iterable .newBuilder[A ]
9635 var i = 0
9736 while (i <= 9 ) {
9837 val flag = 1 << i
9938 if ((flag & set) != 0 ) {
100- buf += f(flag)
39+ buf += f(TastyFlagSet ( flag) )
10140 }
10241 i += 1
10342 }
10443 buf.result
10544 }
10645 }
46+
10747}
0 commit comments