summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2012-07-21 09:54:10 -0700
committerPaul Phillips <paulp@improving.org>2012-07-21 09:55:04 -0700
commit729aad67224e987849114770b63f81897845f15a (patch)
tree326cf5e511e323277e7ded2ae9c5f5b1157f145d
parent85a002dcd957ebca57db6a2c3be9f80a42fca75a (diff)
downloadscala-729aad67224e987849114770b63f81897845f15a.tar.gz
scala-729aad67224e987849114770b63f81897845f15a.tar.bz2
scala-729aad67224e987849114770b63f81897845f15a.zip
Tweak to symbol tracer.
Stop recording symbols once the shutdown hook is triggered so that the symbols created in the act of dumping the symbols do not pollute the view of what symbols were created naturally.
-rw-r--r--src/reflect/scala/reflect/internal/util/TraceSymbolActivity.scala29
1 files changed, 17 insertions, 12 deletions
diff --git a/src/reflect/scala/reflect/internal/util/TraceSymbolActivity.scala b/src/reflect/scala/reflect/internal/util/TraceSymbolActivity.scala
index 5fbeb5f576..cecf8e4658 100644
--- a/src/reflect/scala/reflect/internal/util/TraceSymbolActivity.scala
+++ b/src/reflect/scala/reflect/internal/util/TraceSymbolActivity.scala
@@ -8,7 +8,8 @@ trait TraceSymbolActivity {
val global: SymbolTable
import global._
- if (traceSymbolActivity && global.isCompilerUniverse)
+ private[this] var enabled = traceSymbolActivity
+ if (enabled && global.isCompilerUniverse)
scala.sys addShutdownHook showAllSymbols()
private type Set[T] = scala.collection.immutable.Set[T]
@@ -21,23 +22,26 @@ trait TraceSymbolActivity {
val allTrees = mutable.Set[Tree]()
def recordSymbolsInTree(tree: Tree) {
- allTrees += tree
+ if (enabled)
+ allTrees += tree
}
def recordNewSymbol(sym: Symbol) {
- if (sym.id > 1) {
+ if (enabled && sym.id > 1) {
allSymbols(sym.id) = sym
allChildren(sym.owner.id) ::= sym.id
}
}
def recordNewSymbolOwner(sym: Symbol, newOwner: Symbol) {
- val sid = sym.id
- val oid = sym.owner.id
- val nid = newOwner.id
-
- prevOwners(sid) ::= (oid -> phase)
- allChildren(oid) = allChildren(oid) filterNot (_ == sid)
- allChildren(nid) ::= sid
+ if (enabled) {
+ val sid = sym.id
+ val oid = sym.owner.id
+ val nid = newOwner.id
+
+ prevOwners(sid) ::= (oid -> phase)
+ allChildren(oid) = allChildren(oid) filterNot (_ == sid)
+ allChildren(nid) ::= sid
+ }
}
/** TODO.
@@ -86,7 +90,7 @@ trait TraceSymbolActivity {
def prefix = (" " * (sym.ownerChain.length - 1)) + sym.id
try println("%s#%s %s".format(prefix, sym.accurateKindString, sym.name.decode))
catch {
- case x => println(prefix + " failed: " + x)
+ case x: Throwable => println(prefix + " failed: " + x)
}
allChildren(sym.id).sorted foreach showIdAndRemove
}
@@ -128,7 +132,8 @@ trait TraceSymbolActivity {
private def runBeforeErasure[T](body: => T): T = atPhase(findErasurePhase)(body)
def showAllSymbols() {
- if (!traceSymbolActivity) return
+ if (!enabled) return
+ enabled = false
allSymbols(1) = NoSymbol
println("" + allSymbols.size + " symbols created.")