diff options
author | Martin Odersky <odersky@gmail.com> | 2012-02-22 19:00:24 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2012-02-22 19:00:24 +0100 |
commit | 4c151ccd186779feb4499e0b9aec1c52d4681fbf (patch) | |
tree | 0b1489cd714543e0d40dad35aebd4885529697ed /src | |
parent | 7fe2892e4207746b6473e7f0a6fab73a3288238d (diff) | |
download | scala-4c151ccd186779feb4499e0b9aec1c52d4681fbf.tar.gz scala-4c151ccd186779feb4499e0b9aec1c52d4681fbf.tar.bz2 scala-4c151ccd186779feb4499e0b9aec1c52d4681fbf.zip |
Make this substituter on trees also act on types, just as the other tree substitutres do.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/reflect/internal/Trees.scala | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/compiler/scala/reflect/internal/Trees.scala b/src/compiler/scala/reflect/internal/Trees.scala index 5ef7ee3a27..91492f973a 100644 --- a/src/compiler/scala/reflect/internal/Trees.scala +++ b/src/compiler/scala/reflect/internal/Trees.scala @@ -348,10 +348,16 @@ trait Trees extends api.Trees { self: SymbolTable => override def toString = substituterString("Symbol", "Tree", from, to) } + /** Substitute clazz.this with `to`. `to` must be an attributed tree. + */ class ThisSubstituter(clazz: Symbol, to: => Tree) extends Transformer { - override def transform(tree: Tree) = tree match { - case This(_) if tree.symbol == clazz => to - case _ => super.transform(tree) + val newtpe = to.tpe + override def transform(tree: Tree) = { + if (tree.tpe ne null) tree.tpe = tree.tpe.substThis(clazz, newtpe) + tree match { + case This(_) if tree.symbol == clazz => to + case _ => super.transform(tree) + } } } |