Skip to content

Commit bddc39a

Browse files
committed
Avoid boxing FlagSets in union and allOf
1 parent 96d8661 commit bddc39a

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

compiler/src/dotty/tools/dotc/core/Flags.scala

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,12 +172,24 @@ object Flags {
172172
}
173173

174174
/** The union of all flags in given flag set */
175-
def union(flagss: FlagSet*) = (EmptyFlags /: flagss)(_ | _)
175+
def union(flagss: FlagSet*): FlagSet = {
176+
var flag = EmptyFlags
177+
for (f <- flagss)
178+
flag |= f
179+
flag
180+
}
181+
182+
/** The conjunction of all flags in given flag set */
183+
def allOf(flags1: FlagSet, flags2: FlagSet): FlagConjunction = {
184+
assert(flags1.numFlags == 1 && flags2.numFlags == 1, "Flags.allOf doesn't support flag " + (if (flags1.numFlags != 1) flags1 else flags2))
185+
FlagConjunction((flags1 | flags2).bits)
186+
}
176187

177188
/** The conjunction of all flags in given flag set */
178-
def allOf(flagss: FlagSet*) = {
179-
assert(flagss forall (_.numFlags == 1), "Flags.allOf doesn't support flag " + flagss.find(_.numFlags != 1))
180-
FlagConjunction(union(flagss: _*).bits)
189+
def allOf(flags1: FlagSet, flags2: FlagSet, flags3: FlagSet, flagss: FlagSet*): FlagConjunction = {
190+
val flags0 = allOf(flags1, flags2) | flags3
191+
assert(flags3.numFlags == 1 && flagss.forall(_.numFlags == 1), "Flags.allOf doesn't support flag " + (if (flags3.numFlags != 1) flags3 else flagss.find(_.numFlags != 1)))
192+
FlagConjunction((flags0 | union(flagss: _*)).bits)
181193
}
182194

183195
def commonFlags(flagss: FlagSet*) = union(flagss.map(_.toCommonFlags): _*)

0 commit comments

Comments
 (0)