summaryrefslogtreecommitdiff
path: root/src/reflect/scala/reflect
diff options
context:
space:
mode:
authorRory Graves <rory.graves@fieldmark.co.uk>2016-09-16 17:50:19 +0100
committerRory Graves <rory.graves@fieldmark.co.uk>2017-01-16 19:38:32 +0000
commit9f2aa0d1124864bc85c98d5ea40089f6dfcc5b5b (patch)
treeef2b1c6659b2f87c9351abfb949645577b402c42 /src/reflect/scala/reflect
parent827d69d48e96d9add75ce19e06b374610784c936 (diff)
downloadscala-9f2aa0d1124864bc85c98d5ea40089f6dfcc5b5b.tar.gz
scala-9f2aa0d1124864bc85c98d5ea40089f6dfcc5b5b.tar.bz2
scala-9f2aa0d1124864bc85c98d5ea40089f6dfcc5b5b.zip
Improve performance of Symbol marking
Diffstat (limited to 'src/reflect/scala/reflect')
-rw-r--r--src/reflect/scala/reflect/internal/Symbols.scala12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/reflect/scala/reflect/internal/Symbols.scala b/src/reflect/scala/reflect/internal/Symbols.scala
index e664b5ad08..890a5796e9 100644
--- a/src/reflect/scala/reflect/internal/Symbols.scala
+++ b/src/reflect/scala/reflect/internal/Symbols.scala
@@ -3676,9 +3676,15 @@ trait Symbols extends api.Symbols { self: SymbolTable =>
val AllOps = SymbolOps(isFlagRelated = false, mask = 0L)
def FlagOps(mask: Long) = SymbolOps(isFlagRelated = true, mask = mask)
- private def relevantSymbols(syms: Seq[Symbol]) = syms.flatMap(sym => List(sym, sym.moduleClass, sym.sourceModule))
- def markFlagsCompleted(syms: Symbol*)(mask: Long): Unit = relevantSymbols(syms).foreach(_.markFlagsCompleted(mask))
- def markAllCompleted(syms: Symbol*): Unit = relevantSymbols(syms).foreach(_.markAllCompleted)
+ private def forEachRelevantSymbols(syms: Seq[Symbol], fn: Symbol => Unit): Unit =
+ syms.foreach { sym =>
+ fn(sym)
+ fn(sym.moduleClass)
+ fn(sym.sourceModule)
+ }
+
+ def markFlagsCompleted(syms: Symbol*)(mask: Long): Unit = forEachRelevantSymbols(syms, _.markFlagsCompleted(mask))
+ def markAllCompleted(syms: Symbol*): Unit = forEachRelevantSymbols(syms, _.markAllCompleted)
}
object SymbolsStats {