summaryrefslogtreecommitdiff
path: root/src/reflect/scala/reflect/internal/util
diff options
context:
space:
mode:
authorSimon Ochsenreither <simon@ochsenreither.de>2013-11-19 19:41:43 +0100
committerSimon Ochsenreither <simon@ochsenreither.de>2014-01-03 02:03:45 +0100
commit5e1e472fa10145606fbe3ff2966c35e2842d3894 (patch)
treeec94101520add84606c941007503a20bd4b8faf3 /src/reflect/scala/reflect/internal/util
parentb2bf66a4681dec76281da9469e66e0100ad2709f (diff)
downloadscala-5e1e472fa10145606fbe3ff2966c35e2842d3894.tar.gz
scala-5e1e472fa10145606fbe3ff2966c35e2842d3894.tar.bz2
scala-5e1e472fa10145606fbe3ff2966c35e2842d3894.zip
SI-7974 Avoid calling nonPrivateMember after erasure
One example were this would lead to subtle bugs otherwise is Symbol_apply, where after erasure an overloaded symbol containing Symbol#apply and UniquenessCache#apply is returned. // findMember considered harmful after erasure; e.g. // // scala> exitingErasure(Symbol_apply).isOverloaded // res27: Boolean = true
Diffstat (limited to 'src/reflect/scala/reflect/internal/util')
-rw-r--r--src/reflect/scala/reflect/internal/util/TraceSymbolActivity.scala11
1 files changed, 2 insertions, 9 deletions
diff --git a/src/reflect/scala/reflect/internal/util/TraceSymbolActivity.scala b/src/reflect/scala/reflect/internal/util/TraceSymbolActivity.scala
index f61c1f3c50..e4a6503184 100644
--- a/src/reflect/scala/reflect/internal/util/TraceSymbolActivity.scala
+++ b/src/reflect/scala/reflect/internal/util/TraceSymbolActivity.scala
@@ -41,7 +41,8 @@ trait TraceSymbolActivity {
}
}
- private def signature(id: Int) = runBeforeErasure(allSymbols(id).defString)
+ private lazy val erasurePhase = findPhaseWithName("erasure")
+ private def signature(id: Int) = enteringPhase(erasurePhase)(allSymbols(id).defString)
private def dashes(s: Any): String = ("" + s) map (_ => '-')
private def show(s1: Any, ss: Any*) {
@@ -87,14 +88,6 @@ trait TraceSymbolActivity {
private def showFreq[T, U](xs: Traversable[T])(groupFn: T => U, showFn: U => String) = {
showMapFreq(xs.toList groupBy groupFn)(showFn)
}
- private lazy val findErasurePhase: Phase = {
- var ph = phase
- while (ph != NoPhase && ph.name != "erasure") {
- ph = ph.prev
- }
- if (ph eq NoPhase) phase else ph
- }
- private def runBeforeErasure[T](body: => T): T = enteringPhase(findErasurePhase)(body)
def showAllSymbols() {
if (!enabled) return