summaryrefslogtreecommitdiff
path: root/src/reflect/scala/reflect/internal/Trees.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2012-08-17 17:37:35 +0200
committerGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2012-08-20 08:11:10 +0100
commit5978a523149f30b3d31b2ce34ad199eaf253f035 (patch)
tree6635401465a82f4d866fed06ed1385ae8bef38ad /src/reflect/scala/reflect/internal/Trees.scala
parent80ba5784586c11bb5d3ec2d7330eef8564f13e8b (diff)
downloadscala-5978a523149f30b3d31b2ce34ad199eaf253f035.tar.gz
scala-5978a523149f30b3d31b2ce34ad199eaf253f035.tar.bz2
scala-5978a523149f30b3d31b2ce34ad199eaf253f035.zip
Partial revert of itransform commit.
Profile data actually showed a small slowdown in steady state. We keep the reordering but merge all submethods into one.
Diffstat (limited to 'src/reflect/scala/reflect/internal/Trees.scala')
-rw-r--r--src/reflect/scala/reflect/internal/Trees.scala95
1 files changed, 43 insertions, 52 deletions
diff --git a/src/reflect/scala/reflect/internal/Trees.scala b/src/reflect/scala/reflect/internal/Trees.scala
index 6d80867d02..8405b95527 100644
--- a/src/reflect/scala/reflect/internal/Trees.scala
+++ b/src/reflect/scala/reflect/internal/Trees.scala
@@ -1145,12 +1145,52 @@ trait Trees extends api.Trees { self: SymbolTable =>
}
}
- //OPT split in two and ordered according to frequency to speed it up.
+ //OPT ordered according to frequency to speed it up.
override protected def itransform(transformer: Transformer, tree: Tree): Tree = {
import transformer._
val treeCopy = transformer.treeCopy
-
- def itransform1(transformer: Transformer, tree: Tree): Tree = tree match {
+
+ // begin itransform
+ tree match {
+ case Ident(name) =>
+ treeCopy.Ident(tree, name)
+ case Select(qualifier, selector) =>
+ treeCopy.Select(tree, transform(qualifier), selector)
+ case Apply(fun, args) =>
+ treeCopy.Apply(tree, transform(fun), transformTrees(args))
+ case TypeTree() =>
+ treeCopy.TypeTree(tree)
+ case Literal(value) =>
+ treeCopy.Literal(tree, value)
+ case This(qual) =>
+ treeCopy.This(tree, qual)
+ case ValDef(mods, name, tpt, rhs) =>
+ atOwner(tree.symbol) {
+ treeCopy.ValDef(tree, transformModifiers(mods),
+ name, transform(tpt), transform(rhs))
+ }
+ case DefDef(mods, name, tparams, vparamss, tpt, rhs) =>
+ atOwner(tree.symbol) {
+ treeCopy.DefDef(tree, transformModifiers(mods), name,
+ transformTypeDefs(tparams), transformValDefss(vparamss),
+ transform(tpt), transform(rhs))
+ }
+ case Block(stats, expr) =>
+ treeCopy.Block(tree, transformStats(stats, currentOwner), transform(expr))
+ case If(cond, thenp, elsep) =>
+ treeCopy.If(tree, transform(cond), transform(thenp), transform(elsep))
+ case CaseDef(pat, guard, body) =>
+ treeCopy.CaseDef(tree, transform(pat), transform(guard), transform(body))
+ case TypeApply(fun, args) =>
+ treeCopy.TypeApply(tree, transform(fun), transformTrees(args))
+ case AppliedTypeTree(tpt, args) =>
+ treeCopy.AppliedTypeTree(tree, transform(tpt), transformTrees(args))
+ case Bind(name, body) =>
+ treeCopy.Bind(tree, name, transform(body))
+ case Function(vparams, body) =>
+ atOwner(tree.symbol) {
+ treeCopy.Function(tree, transformValDefs(vparams), transform(body))
+ }
case Match(selector, cases) =>
treeCopy.Match(tree, transform(selector), transformCaseDefs(cases))
case New(tpt) =>
@@ -1190,10 +1230,6 @@ trait Trees extends api.Trees { self: SymbolTable =>
treeCopy.TypeDef(tree, transformModifiers(mods), name,
transformTypeDefs(tparams), transform(rhs))
}
- case _ => itransform2(transformer, tree)
- }
-
- def itransform2(transformer: Transformer, tree: Tree): Tree = tree match {
case LabelDef(name, params, rhs) =>
treeCopy.LabelDef(tree, name, transformIdents(params), transform(rhs)) //bq: Martin, once, atOwner(...) works, also change `LamdaLifter.proxy'
case PackageDef(pid, stats) =>
@@ -1230,51 +1266,6 @@ trait Trees extends api.Trees { self: SymbolTable =>
case _ =>
xtransform(transformer, tree)
}
-
- // begin itransform
- tree match {
- case Ident(name) =>
- treeCopy.Ident(tree, name)
- case Select(qualifier, selector) =>
- treeCopy.Select(tree, transform(qualifier), selector)
- case Apply(fun, args) =>
- treeCopy.Apply(tree, transform(fun), transformTrees(args))
- case TypeTree() =>
- treeCopy.TypeTree(tree)
- case Literal(value) =>
- treeCopy.Literal(tree, value)
- case This(qual) =>
- treeCopy.This(tree, qual)
- case ValDef(mods, name, tpt, rhs) =>
- atOwner(tree.symbol) {
- treeCopy.ValDef(tree, transformModifiers(mods),
- name, transform(tpt), transform(rhs))
- }
- case DefDef(mods, name, tparams, vparamss, tpt, rhs) =>
- atOwner(tree.symbol) {
- treeCopy.DefDef(tree, transformModifiers(mods), name,
- transformTypeDefs(tparams), transformValDefss(vparamss),
- transform(tpt), transform(rhs))
- }
- case Block(stats, expr) =>
- treeCopy.Block(tree, transformStats(stats, currentOwner), transform(expr))
- case If(cond, thenp, elsep) =>
- treeCopy.If(tree, transform(cond), transform(thenp), transform(elsep))
- case CaseDef(pat, guard, body) =>
- treeCopy.CaseDef(tree, transform(pat), transform(guard), transform(body))
- case TypeApply(fun, args) =>
- treeCopy.TypeApply(tree, transform(fun), transformTrees(args))
- case AppliedTypeTree(tpt, args) =>
- treeCopy.AppliedTypeTree(tree, transform(tpt), transformTrees(args))
- case Bind(name, body) =>
- treeCopy.Bind(tree, name, transform(body))
- case Function(vparams, body) =>
- atOwner(tree.symbol) {
- treeCopy.Function(tree, transformValDefs(vparams), transform(body))
- }
- case _ =>
- itransform1(transformer, tree)
- }
}
private def mclass(sym: Symbol) = sym map (_.asModule.moduleClass)