summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2012-07-30 20:50:52 +0200
committerEugene Burmako <xeno.by@gmail.com>2012-08-02 15:36:56 +0200
commit336145f979477e5a8314304202a44606348d3fb8 (patch)
treeaf0d2f9c38915a9f26ddfea6095e5b301c9e4ae7 /src
parenta727c6fc198d33842ff85d8a16d48143a6757d51 (diff)
downloadscala-336145f979477e5a8314304202a44606348d3fb8.tar.gz
scala-336145f979477e5a8314304202a44606348d3fb8.tar.bz2
scala-336145f979477e5a8314304202a44606348d3fb8.zip
simplifies flag API
Flag ops now only include | and hasFlag, flag bearer ops now only include flags and hasFlag. These abstractions are enough to implement everything else, so let's stick to them for the sake of minimalism.
Diffstat (limited to 'src')
-rw-r--r--src/library/scala/reflect/base/Base.scala1
-rw-r--r--src/library/scala/reflect/base/FlagSets.scala6
-rw-r--r--src/library/scala/reflect/base/Trees.scala5
-rw-r--r--src/reflect/scala/reflect/api/FlagSets.scala9
-rw-r--r--src/reflect/scala/reflect/api/Symbols.scala13
-rw-r--r--src/reflect/scala/reflect/api/Trees.scala2
-rw-r--r--src/reflect/scala/reflect/internal/FlagSets.scala18
-rw-r--r--src/reflect/scala/reflect/internal/Printers.scala2
8 files changed, 14 insertions, 42 deletions
diff --git a/src/library/scala/reflect/base/Base.scala b/src/library/scala/reflect/base/Base.scala
index ddb502fd44..6d13395019 100644
--- a/src/library/scala/reflect/base/Base.scala
+++ b/src/library/scala/reflect/base/Base.scala
@@ -234,7 +234,6 @@ class Base extends Universe { self =>
override val privateWithin: Name,
override val annotations: List[Tree]) extends ModifiersBase {
def hasFlag(flags: FlagSet) = (this.flags & flags) != 0
- def hasAllFlags(flags: FlagSet) = (flags & ~this.flags) == 0
}
implicit val ModifiersTag = ClassTag[Modifiers](classOf[Modifiers])
diff --git a/src/library/scala/reflect/base/FlagSets.scala b/src/library/scala/reflect/base/FlagSets.scala
index 57946d0f27..43de9970c0 100644
--- a/src/library/scala/reflect/base/FlagSets.scala
+++ b/src/library/scala/reflect/base/FlagSets.scala
@@ -13,5 +13,11 @@ trait FlagSets { self: Universe =>
/** The empty set of flags */
val NoFlags: FlagSet
+
+ /** The base API all flag bearers support */
+ trait HasFlagsBase {
+ def flags: FlagSet
+ def hasFlag(flags: FlagSet): Boolean
+ }
}
diff --git a/src/library/scala/reflect/base/Trees.scala b/src/library/scala/reflect/base/Trees.scala
index 2814450ae3..ab03b7a89f 100644
--- a/src/library/scala/reflect/base/Trees.scala
+++ b/src/library/scala/reflect/base/Trees.scala
@@ -1356,10 +1356,7 @@ trait Trees { self: Universe =>
implicit val ModifiersTag: ClassTag[Modifiers]
/** ... */
- abstract class ModifiersBase {
- def flags: FlagSet
- def hasFlag(flags: FlagSet): Boolean
- def hasAllFlags(flags: FlagSet): Boolean
+ abstract class ModifiersBase extends HasFlagsBase {
def privateWithin: Name // default: EmptyTypeName
def annotations: List[Tree] // default: List()
def mapAnnotations(f: List[Tree] => List[Tree]): Modifiers =
diff --git a/src/reflect/scala/reflect/api/FlagSets.scala b/src/reflect/scala/reflect/api/FlagSets.scala
index 969176d641..c56de49962 100644
--- a/src/reflect/scala/reflect/api/FlagSets.scala
+++ b/src/reflect/scala/reflect/api/FlagSets.scala
@@ -9,8 +9,7 @@ trait FlagSets { self: Universe =>
trait FlagOps extends Any {
def | (right: FlagSet): FlagSet
- def & (right: FlagSet): FlagSet
- def containsAll (right: FlagSet): Boolean
+ def hasFlag(flags: FlagSet): Boolean
}
implicit def addFlagOps(left: FlagSet): FlagOps
@@ -19,8 +18,6 @@ trait FlagSets { self: Universe =>
type FlagValues >: Null <: FlagValuesApi
- // [Eugene++] any other flags we would like to expose?
-
trait FlagValuesApi {
/** Flag indicating that symbol or tree represents a trait */
@@ -104,9 +101,5 @@ trait FlagSets { self: Universe =>
/** Flag indicating that trait has neither method implementations nor fields.
* This means the trait can be represented as a Java interface. */
val INTERFACE: FlagSet
-
- def union(flags: FlagSet*): FlagSet
- def intersection(flag: FlagSet*): FlagSet
- def containsAll(superset: FlagSet, subset: FlagSet): Boolean
}
}
diff --git a/src/reflect/scala/reflect/api/Symbols.scala b/src/reflect/scala/reflect/api/Symbols.scala
index c94c796279..84341177ca 100644
--- a/src/reflect/scala/reflect/api/Symbols.scala
+++ b/src/reflect/scala/reflect/api/Symbols.scala
@@ -12,15 +12,8 @@ trait Symbols extends base.Symbols { self: Universe =>
override type FreeTermSymbol >: Null <: TermSymbol with FreeTermSymbolApi
override type FreeTypeSymbol >: Null <: TypeSymbol with FreeTypeSymbolApi
- trait HasFlagsApi {
- def flags: FlagSet
- def hasFlag(fs: FlagSet): Boolean
- def hasAllFlags(fs: FlagSet): Boolean
- def flagString: String
- }
-
/** The API of symbols */
- trait SymbolApi extends SymbolBase with HasFlagsApi { this: Symbol =>
+ trait SymbolApi extends SymbolBase with HasFlagsBase { this: Symbol =>
/** The position of this symbol
*/
@@ -228,14 +221,14 @@ trait Symbols extends base.Symbols { self: Universe =>
}
/** The API of term symbols */
- trait TermSymbolApi extends SymbolApi with HasFlagsApi with TermSymbolBase { this: TermSymbol =>
+ trait TermSymbolApi extends SymbolApi with TermSymbolBase { this: TermSymbol =>
/** The overloaded alternatives of this symbol */
def alternatives: List[Symbol]
}
/** The API of type symbols */
- trait TypeSymbolApi extends SymbolApi with HasFlagsApi with TypeSymbolBase { this: TypeSymbol =>
+ trait TypeSymbolApi extends SymbolApi with TypeSymbolBase { this: TypeSymbol =>
/** Is the type parameter represented by this symbol contravariant?
*/
def isContravariant : Boolean
diff --git a/src/reflect/scala/reflect/api/Trees.scala b/src/reflect/scala/reflect/api/Trees.scala
index 2d130daa4e..28dd764c70 100644
--- a/src/reflect/scala/reflect/api/Trees.scala
+++ b/src/reflect/scala/reflect/api/Trees.scala
@@ -683,7 +683,7 @@ trait Trees extends base.Trees { self: Universe =>
type Modifiers >: Null <: ModifiersApi
- abstract class ModifiersApi extends ModifiersBase with HasFlagsApi
+ abstract class ModifiersApi extends ModifiersBase
}
diff --git a/src/reflect/scala/reflect/internal/FlagSets.scala b/src/reflect/scala/reflect/internal/FlagSets.scala
index 0354d2513c..6e77741355 100644
--- a/src/reflect/scala/reflect/internal/FlagSets.scala
+++ b/src/reflect/scala/reflect/internal/FlagSets.scala
@@ -13,8 +13,7 @@ trait FlagSets extends api.FlagSets { self: SymbolTable =>
private class FlagOpsImpl(left: Long) extends FlagOps {
def | (right: Long): Long = left | right
- def & (right: Long): Long = left & right
- def containsAll (right: Long): Boolean = (right & ~left) == 0
+ def hasFlag(right: Long): Boolean = (left & right) != 0
}
val NoFlags: FlagSet = 0L
@@ -47,20 +46,5 @@ trait FlagSets extends api.FlagSets { self: SymbolTable =>
val CONTRAVARIANT : FlagSet = Flags.CONTRAVARIANT
val DEFAULTPARAM : FlagSet = Flags.DEFAULTPARAM
val INTERFACE : FlagSet = Flags.INTERFACE
-
- def union(flags: FlagSet*): FlagSet = {
- var acc = 0L
- for (flag <- flags) acc |= flag
- acc
- }
-
- def intersection(flags: FlagSet*): FlagSet = {
- var acc = -1L
- for (flag <- flags) acc &= flag
- acc
- }
-
- def containsAll(superset: FlagSet, subset: FlagSet): Boolean =
- (subset & ~superset) == 0
}
}
diff --git a/src/reflect/scala/reflect/internal/Printers.scala b/src/reflect/scala/reflect/internal/Printers.scala
index 18f9928124..8571ac1110 100644
--- a/src/reflect/scala/reflect/internal/Printers.scala
+++ b/src/reflect/scala/reflect/internal/Printers.scala
@@ -670,7 +670,7 @@ trait Printers extends api.Printers { self: SymbolTable =>
if (flags == NoFlags) nme.NoFlags.toString
else {
val s_flags = new collection.mutable.ListBuffer[String]
- for (i <- 0 to 63 if (flags containsAll (1L << i)))
+ for (i <- 0 to 63 if (flags hasFlag (1L << i)))
s_flags += flagToString(1L << i).replace("<", "").replace(">", "").toUpperCase
s_flags mkString " | "
}