package test
import dotty.tools.dotc._
import core._, ast._
import Trees._
import Contexts.Context
object parsePackage extends ParserTest {
import ast.untpd._
var nodes = 0
val transformer = new UntypedTreeMap {
override def transform(tree: Tree)(implicit ctx: Context): Tree = {
nodes += 1
tree match {
case Ident(name) =>
Ident(name)
case This(name) =>
This(name)
case TypedSplice(t) =>
TypedSplice(t)
case SymbolLit(str) =>
tree
case InterpolatedString(id, segments) =>
InterpolatedString(id, segments map transform)
case mdef @ ModuleDef(name, impl) =>
ModuleDef(name, transformSub(impl)).withMods(mdef.mods)
case Function(params, body) =>
Function(params map transform, body)
case InfixOp(l, o, r) =>
InfixOp(transform(l), o, transform(r))
case PostfixOp(l, o) =>
PostfixOp(transform(l), o)
case PrefixOp(o, t) =>
PrefixOp(o, transform(t))
case Parens(t) =>
Parens(transform(t))
case Tuple(ts) =>
Tuple(ts map transform)
case WhileDo(cond, body) =>
WhileDo(transform(cond), transform(body))
case DoWhile(body, cond) =>
DoWhile(transform(body), transform(cond))
case ForYield(enums, expr) =>
ForYield(enums map transform, transform(expr))
case ForDo(enums, expr) =>
ForDo(enums map transform, transform(expr))
case GenFrom(pat, expr) =>
GenFrom(transform(pat), transform(expr))
case GenAlias(pat, expr) =>
GenAlias(transform(pat), transform(expr))
case PatDef(mods, pats, tpt, expr) =>
PatDef(mods, pats map transform, transform(tpt), transform(expr))
case ContextBounds(bounds, cxBounds) =>
ContextBounds(transformSub(bounds), cxBounds map transform)
case _ =>
super.transform(tree)
}
}
}
def test() = {
reset()
nodes = 0
val start = System.nanoTime()
parseDir("./src")
parseDir("./scala-scala/src")
val ms1 = (System.nanoTime() - start)/1000000
val buf = parsedTrees map transformer.transform
val ms2 = (System.nanoTime() - start)/1000000
println(s"$parsed files parsed in ${ms1}ms, $nodes nodes transformed in ${ms2-ms1}ms, total trees created = ${Trees.ntrees}")
ctx.reporter.printSummary(ctx)
}
def main(args: Array[String]): Unit = {
// parse("/Users/odersky/workspace/scala/src/compiler/scala/tools/nsc/doc/model/ModelFactoryTypeSupport.scala")
for (i <- 0 until 10) test()
}
}