summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2008-10-31 08:21:32 +0000
committerIulian Dragos <jaguarul@gmail.com>2008-10-31 08:21:32 +0000
commit2bed53ea790cc763f9d0dcea34ef06b66091906c (patch)
treefbed75be975b73b01b3b9deed7311b09bb77e315
parentbcbf5a12672f5b364c24398b6d98cd04ecb2e2be (diff)
downloadscala-2bed53ea790cc763f9d0dcea34ef06b66091906c.tar.gz
scala-2bed53ea790cc763f9d0dcea34ef06b66091906c.tar.bz2
scala-2bed53ea790cc763f9d0dcea34ef06b66091906c.zip
Applied Paul's patch for #1467.
-rw-r--r--src/compiler/scala/tools/nsc/transform/Erasure.scala12
-rw-r--r--test/files/pos/looping-jsig.scala18
2 files changed, 24 insertions, 6 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/Erasure.scala b/src/compiler/scala/tools/nsc/transform/Erasure.scala
index 58fb1ef8dd..fb2b48b3b4 100644
--- a/src/compiler/scala/tools/nsc/transform/Erasure.scala
+++ b/src/compiler/scala/tools/nsc/transform/Erasure.scala
@@ -155,7 +155,9 @@ abstract class Erasure extends AddInterfaces with typechecker.Analyzer {
UnitClass -> VOID_TAG
)
- def javaSig(sym: Symbol): Option[String] = atPhase(currentRun.erasurePhase) {
+ def javaSig(sym: Symbol): Option[String] =
+ if (!needsJavaSig(sym.info)) None
+ else atPhase(currentRun.erasurePhase) {
def jsig(tp: Type): String = jsig2(false, List(), tp)
@@ -235,11 +237,9 @@ abstract class Erasure extends AddInterfaces with typechecker.Analyzer {
jsig(erasure(tp))
}
}
- if (needsJavaSig(sym.info)) {
- //println("Java sig of "+sym+":"+sym.tpe+" is "+jsig2(true, List(), sym.info))//DEBUG
- Some(jsig2(true, List(), sym.info))
- }
- else None
+
+ //println("Java sig of "+sym+":"+sym.tpe+" is "+jsig2(true, List(), sym.info))//DEBUG
+ Some(jsig2(true, List(), sym.info))
}
/** Type reference after erasure */
diff --git a/test/files/pos/looping-jsig.scala b/test/files/pos/looping-jsig.scala
new file mode 100644
index 0000000000..15ccd75cb0
--- /dev/null
+++ b/test/files/pos/looping-jsig.scala
@@ -0,0 +1,18 @@
+import scala.collection.mutable._
+
+trait BugTrack {
+ trait B[+T]
+ val cache : HashMap[A[_], B[_]] = HashMap.empty
+
+ def A[T](f: Int => B[T]): A[T]
+ = new A[T]{def apply(in: Int) = f(in)}
+
+ abstract class A[+T] extends (Int => B[T]) {
+ def giveMeSame = this
+ }
+
+ def amethod[T](p: =>A[T]): A[T] = A(in => cache.get(p) match {
+ case Some(res) => res
+ case None => p(in)
+ }).giveMeSame
+}