summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHubert Plociniczak <hubert.plociniczak@epfl.ch>2011-01-08 20:57:45 +0000
committerHubert Plociniczak <hubert.plociniczak@epfl.ch>2011-01-08 20:57:45 +0000
commit18b563879c0cac2727e417762ba2efdee4acfcfb (patch)
treed00f17a6f7891ef71524b7f6b00f3d6cbd364551
parent8752d5888450f1e188203821fe3748216e1e902f (diff)
downloadscala-18b563879c0cac2727e417762ba2efdee4acfcfb.tar.gz
scala-18b563879c0cac2727e417762ba2efdee4acfcfb.tar.bz2
scala-18b563879c0cac2727e417762ba2efdee4acfcfb.zip
Reverting fix for #4047 until I figure out why ...
Reverting fix for #4047 until I figure out why it is failing on chara and not on my machine. No review.
-rw-r--r--src/compiler/scala/tools/nsc/transform/Erasure.scala13
-rw-r--r--test/files/run/t4047.check5
-rw-r--r--test/files/run/t4047.scala34
3 files changed, 5 insertions, 47 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/Erasure.scala b/src/compiler/scala/tools/nsc/transform/Erasure.scala
index 1a97c1f6c9..1df0b5bf3b 100644
--- a/src/compiler/scala/tools/nsc/transform/Erasure.scala
+++ b/src/compiler/scala/tools/nsc/transform/Erasure.scala
@@ -449,10 +449,7 @@ abstract class Erasure extends AddInterfaces with typechecker.Analyzer with ast.
case _ =>
typedPos(tree.pos)(tree.tpe.typeSymbol match {
case UnitClass =>
- // Although lazy vals are pure expressions,
- // we should still call them in bridge methods
- if (treeInfo.isPureExpr(tree) && (tree.symbol == null || !tree.symbol.isLazy))
- REF(BoxedUnit_UNIT)
+ if (treeInfo isPureExpr tree) REF(BoxedUnit_UNIT)
else BLOCK(tree, REF(BoxedUnit_UNIT))
case x =>
assert(x != ArrayClass)
@@ -821,15 +818,15 @@ abstract class Erasure extends AddInterfaces with typechecker.Analyzer with ast.
while (opc.hasNext) {
val member = opc.overriding
val other = opc.overridden
- //Console.println("bridge? " + member + ":" + member.tpe + member.locationString + " to " + other + ":" + other.tpe + other.locationString)//DEBUG
+ //Console.println("bridge? " + member + ":" + member.tpe + member.locationString + " to " + other + ":" + other.tpe + other.locationString);//DEBUG
if (atPhase(currentRun.explicitouterPhase)(!member.isDeferred)) {
- val otpe = erasure(other.tpe)
+ val otpe = erasure(other.tpe);
val bridgeNeeded = atPhase(phase.next) (
!(other.tpe =:= member.tpe) &&
!(deconstMap(other.tpe) =:= deconstMap(member.tpe)) &&
{ var e = bridgesScope.lookupEntry(member.name)
while ((e ne null) && !((e.sym.tpe =:= otpe) && (bridgeTarget(e.sym) == member)))
- e = bridgesScope.lookupNextEntry(e)
+ e = bridgesScope.lookupNextEntry(e);
(e eq null)
}
);
@@ -863,7 +860,7 @@ abstract class Erasure extends AddInterfaces with typechecker.Analyzer with ast.
log("generating bridge from " + other + "(" + Flags.flagsToString(bridge.flags) + ")" + ":" + otpe + other.locationString + " to " + member + ":" + erasure(member.tpe) + member.locationString + " =\n " + bridgeDef);
bridgeDef
}
- } :: bridges
+ } :: bridges;
}
}
opc.next
diff --git a/test/files/run/t4047.check b/test/files/run/t4047.check
deleted file mode 100644
index 2a942a70e0..0000000000
--- a/test/files/run/t4047.check
+++ /dev/null
@@ -1,5 +0,0 @@
-Unit: called A.foo
-Unit: called B.foo
-Unit: called C.foo
-Unit: called D.foo
-Unit: called D.foo
diff --git a/test/files/run/t4047.scala b/test/files/run/t4047.scala
deleted file mode 100644
index cd42a8b4df..0000000000
--- a/test/files/run/t4047.scala
+++ /dev/null
@@ -1,34 +0,0 @@
-trait Foo[T] { val foo: T}
-
-class A extends Foo[Unit]{
- lazy val foo = println("Unit: called A.foo")
-}
-
-class B extends Foo[Unit]{
- val foo = println("Unit: called B.foo")
-}
-
-trait Bar[T] { def foo: T}
-
-class C extends Bar[Unit]{
- lazy val foo = println("Unit: called C.foo")
-}
-
-class D extends Bar[Unit]{
- def foo = println("Unit: called D.foo")
-}
-
-object Test extends Application {
- val a: Foo[Unit] = new A
- a.foo
- a.foo
- val b: Foo[Unit] = new B
- b.foo
- b.foo
- val c: Bar[Unit] = new C
- c.foo
- c.foo
- val d: Bar[Unit] = new D
- d.foo
- d.foo
-}