diff options
author | Lukas Rytz <lukas.rytz@epfl.ch> | 2012-03-23 02:28:25 -0700 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@epfl.ch> | 2012-03-23 02:28:25 -0700 |
commit | 8f42361d71d11e9522052dcb5d9be020df7e5cc5 (patch) | |
tree | b21ffde1a8633c37425daa86e110ba6b282cd331 | |
parent | 3db29dde051614d976bca92a1cdeb109c9c0ab01 (diff) | |
parent | 91c5a3ba9a38e34617315c97876baed4e7eab671 (diff) | |
download | scala-8f42361d71d11e9522052dcb5d9be020df7e5cc5.tar.gz scala-8f42361d71d11e9522052dcb5d9be020df7e5cc5.tar.bz2 scala-8f42361d71d11e9522052dcb5d9be020df7e5cc5.zip |
Merge pull request #318 from lrytz/revRev
Undo the revert.
-rw-r--r-- | src/compiler/scala/reflect/internal/Trees.scala | 12 | ||||
-rw-r--r-- | test/files/run/nonlocalreturn.check | 1 | ||||
-rw-r--r-- | test/files/run/nonlocalreturn.scala | 15 |
3 files changed, 8 insertions, 20 deletions
diff --git a/src/compiler/scala/reflect/internal/Trees.scala b/src/compiler/scala/reflect/internal/Trees.scala index ac2147d284..1a40e0105c 100644 --- a/src/compiler/scala/reflect/internal/Trees.scala +++ b/src/compiler/scala/reflect/internal/Trees.scala @@ -324,10 +324,14 @@ trait Trees extends api.Trees { self: SymbolTable => } class ChangeOwnerTraverser(val oldowner: Symbol, val newowner: Symbol) extends Traverser { - def changeOwner(tree: Tree) = { - if ((tree.isDef || tree.isInstanceOf[Function]) && - tree.symbol != NoSymbol && tree.symbol.owner == oldowner) - tree.symbol.owner = newowner + def changeOwner(tree: Tree) = tree match { + case Return(expr) => + if (tree.symbol == oldowner) + tree.symbol = newowner + case _: DefTree | _: Function => + if (tree.symbol != NoSymbol && tree.symbol.owner == oldowner) + tree.symbol.owner = newowner + case _ => } override def traverse(tree: Tree) { changeOwner(tree) diff --git a/test/files/run/nonlocalreturn.check b/test/files/run/nonlocalreturn.check deleted file mode 100644 index aeb2d5e239..0000000000 --- a/test/files/run/nonlocalreturn.check +++ /dev/null @@ -1 +0,0 @@ -Some(1) diff --git a/test/files/run/nonlocalreturn.scala b/test/files/run/nonlocalreturn.scala deleted file mode 100644 index 3c1e7420ed..0000000000 --- a/test/files/run/nonlocalreturn.scala +++ /dev/null @@ -1,15 +0,0 @@ -object Test { - def wrap[K](body: => K): K = body - - def f(): Option[Int] = { - wrap({ return Some(1) ; None }) - } - - def main(args: Array[String]) { - println(f()) - } -} -// java.lang.ClassCastException: scala.Some cannot be cast to scala.None$ -// at Test$$anonfun$f$1.apply(nonlocalreturn.scala:5) -// at Test$$anonfun$f$1.apply(nonlocalreturn.scala:5) -// at Test$.wrap(nonlocalreturn.scala:2) |