diff options
author | Martin Odersky <odersky@gmail.com> | 2012-08-17 17:37:35 +0200 |
---|---|---|
committer | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2012-08-20 08:11:10 +0100 |
commit | 5978a523149f30b3d31b2ce34ad199eaf253f035 (patch) | |
tree | 6635401465a82f4d866fed06ed1385ae8bef38ad /src/reflect/scala/reflect/internal/Trees.scala | |
parent | 80ba5784586c11bb5d3ec2d7330eef8564f13e8b (diff) | |
download | scala-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.scala | 95 |
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) |