Skip to content

Commit

Permalink
Merge pull request scala#5651 from rorygraves/2.12.x_symbol_marking
Browse files Browse the repository at this point in the history
Improve performance of Symbol marking
  • Loading branch information
retronym authored Jan 20, 2017
2 parents 82b2470 + 9f2aa0d commit b9d4089
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions src/reflect/scala/reflect/internal/Symbols.scala
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down

0 comments on commit b9d4089

Please sign in to comment.