From b1adda5e885880d95dd675a127349c4bc8376bb9 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Thu, 28 Feb 2013 15:02:28 +0100 Subject: fixes to flags --- src/dotty/tools/dotc/core/Flags.scala | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'src/dotty/tools/dotc/core/Flags.scala') diff --git a/src/dotty/tools/dotc/core/Flags.scala b/src/dotty/tools/dotc/core/Flags.scala index cc6d003fa..d846e4405 100644 --- a/src/dotty/tools/dotc/core/Flags.scala +++ b/src/dotty/tools/dotc/core/Flags.scala @@ -97,7 +97,9 @@ object Flags { * conjunctively. I.e. for a flag conjunction `fc`, * `x is fc` tests whether `x` contains all flags in `fc`. */ - case class FlagConjunction(bits: Long) + case class FlagConjunction(bits: Long) { + override def toString = FlagSet(bits).toString + } private final val TYPESHIFT = 2 private final val TERMindex = 0 @@ -143,12 +145,17 @@ object Flags { FlagSet(TERMS | TYPES | (1L << index)) } + /** The union of all flags in given flag set */ + def union(flagss: FlagSet*) = (EmptyFlags /: flagss)(_ | _) + /** The conjunction of all flags in given flag set */ def allOf(flagss: FlagSet*) = { assert(flagss forall (_.numFlags == 1)) - FlagConjunction((EmptyFlags /: flagss)(_ | _).bits) + FlagConjunction(union(flagss: _*).bits) } + def commonFlags(flagss: FlagSet*) = union(flagss.map(_.toCommonFlags): _*) + /** The empty flag set */ final val EmptyFlags = FlagSet(0) @@ -339,8 +346,8 @@ object Flags { /** Flags representing source modifiers */ final val ModifierFlags = - (Private | Protected | Abstract | Final | - Sealed | Case | Implicit | AbsOverride | Lazy).toCommonFlags + commonFlags(Private, Protected, Abstract, Final, + Sealed, Case, Implicit, AbsOverride, Lazy) /** Flags representing access rights */ final val AccessFlags = Private | Protected | Local @@ -394,7 +401,7 @@ object Flags { final val ExpandedTypeParam = allOf(ExpandedName, TypeParam) /** A Java interface */ - final val JavaInterface = allOf(JavaDefined | Trait) + final val JavaInterface = allOf(JavaDefined, Trait) /** Labeled private[this] */ final val PrivateLocal = allOf(Private, Local) -- cgit v1.2.3