diff options
author | Martin Odersky <odersky@gmail.com> | 2012-02-22 09:52:33 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2012-02-22 09:52:33 +0100 |
commit | 19a48510c2e18430a35319c04dfe3bad7119f23f (patch) | |
tree | dace319b4a13cc9ab0351155975929901663fd47 /src/compiler | |
parent | cae87f6797efa22aef043b4a586456735c1c6c31 (diff) | |
download | scala-19a48510c2e18430a35319c04dfe3bad7119f23f.tar.gz scala-19a48510c2e18430a35319c04dfe3bad7119f23f.tar.bz2 scala-19a48510c2e18430a35319c04dfe3bad7119f23f.zip |
Made changeOwner more robust; now also deals with return expressions.
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/scala/reflect/internal/Trees.scala | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/compiler/scala/reflect/internal/Trees.scala b/src/compiler/scala/reflect/internal/Trees.scala index 4ae8b0d5ac..5ef7ee3a27 100644 --- a/src/compiler/scala/reflect/internal/Trees.scala +++ b/src/compiler/scala/reflect/internal/Trees.scala @@ -133,7 +133,7 @@ trait Trees extends api.Trees { self: SymbolTable => new ChangeOwnerTraverser(oldOwner, newOwner) apply t } } - + def substTreeSyms(pairs: (Symbol, Symbol)*): Tree = substTreeSyms(pairs.map(_._1).toList, pairs.map(_._2).toList) @@ -305,10 +305,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) |