diff options
author | Martin Odersky <odersky@gmail.com> | 2012-01-29 16:21:28 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2012-01-29 16:21:28 +0100 |
commit | a03c34c140709e95bb6ab6a8984747b83d630eea (patch) | |
tree | 99aeb46ce68d28bc378e4ccfc74050ae396cda6b /src/compiler/scala/reflect/internal/Trees.scala | |
parent | 09544b756a1274c7cc2bdd302fd9bd1d33a16b70 (diff) | |
download | scala-a03c34c140709e95bb6ab6a8984747b83d630eea.tar.gz scala-a03c34c140709e95bb6ab6a8984747b83d630eea.tar.bz2 scala-a03c34c140709e95bb6ab6a8984747b83d630eea.zip |
inline method expansion code
Diffstat (limited to 'src/compiler/scala/reflect/internal/Trees.scala')
-rw-r--r-- | src/compiler/scala/reflect/internal/Trees.scala | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/compiler/scala/reflect/internal/Trees.scala b/src/compiler/scala/reflect/internal/Trees.scala index 5bb0c98bfb..2836eb81fd 100644 --- a/src/compiler/scala/reflect/internal/Trees.scala +++ b/src/compiler/scala/reflect/internal/Trees.scala @@ -121,12 +121,15 @@ trait Trees extends api.Trees { self: SymbolTable => new ChangeOwnerTraverser(oldOwner, newOwner) apply t } } - - def substTreeSyms(pairs: (Symbol, Symbol)*): Tree = { - val list = pairs.toList - val subst = new TreeSymSubstituter(list map (_._1), list map (_._2)) - subst(tree) - } + + def substTreeSyms(pairs: (Symbol, Symbol)*): Tree = + substTreeSyms(pairs.map(_._1).toList, pairs.map(_._2).toList) + + def substTreeSyms(from: List[Symbol], to: List[Symbol]): Tree = + new TreeSymSubstituter(from, to)(tree) + + def substTreeThis(clazz: Symbol, to: Tree): Tree = new ThisSubstituter(clazz, to) transform tree + def shallowDuplicate: Tree = new ShallowDuplicator(tree) transform tree def shortClass: String = tree.getClass.getName split "[.$]" last @@ -340,6 +343,13 @@ trait Trees extends api.Trees { self: SymbolTable => override def toString = substituterString("Symbol", "Tree", from, to) } + 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) + } + } + class TypeMapTreeSubstituter(val typeMap: TypeMap) extends Traverser { override def traverse(tree: Tree) { if (tree.tpe ne null) |