aboutsummaryrefslogtreecommitdiff
path: root/test/test/showTree.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2013-05-24 16:42:35 +0200
committerMartin Odersky <odersky@gmail.com>2013-05-24 16:42:35 +0200
commit9d6a5299d01a3a808d060396ef1f10a693a1bdae (patch)
treea2e7688633d868d00fc96a53065b076804703c2a /test/test/showTree.scala
parent9b511db42e18d14318e0e85d1cdfc96fa3e42e60 (diff)
downloaddotty-9d6a5299d01a3a808d060396ef1f10a693a1bdae.tar.gz
dotty-9d6a5299d01a3a808d060396ef1f10a693a1bdae.tar.bz2
dotty-9d6a5299d01a3a808d060396ef1f10a693a1bdae.zip
Added tests for desugaring.
Diffstat (limited to 'test/test/showTree.scala')
-rw-r--r--test/test/showTree.scala58
1 files changed, 52 insertions, 6 deletions
diff --git a/test/test/showTree.scala b/test/test/showTree.scala
index 605f05922..69530a046 100644
--- a/test/test/showTree.scala
+++ b/test/test/showTree.scala
@@ -1,18 +1,64 @@
package test
-import dotty.tools.dotc.ast.untpd._
+import dotty.tools.dotc._
+import ast.Trees._
object showTree extends ParserTest {
+ import dotty.tools.dotc.ast.untpd._
+
+ import Mode._
+
object DeSugar extends TreeTransformer {
- override def transform(tree: Tree) = {
- val tree1 = desugar(tree, Mode.Expr)
+ var curMode: Mode.Value = Mode.Expr
+ def withMode[T](mode: Mode.Value)(op: => T) = {
+ val saved = curMode
+ curMode = mode
+ try op
+ finally curMode = saved
+ }
+
+ def transform(tree: Tree, mode: Mode.Value): Tree = withMode(mode) { transform(tree) }
+ def transform(trees: List[Tree], mode: Mode.Value): List[Tree] = withMode(mode) { transform(trees) }
+
+ override def transform(tree: Tree): Tree = {
+ val tree1 = desugar(tree, curMode)
if (tree1 ne tree) {
- println(s"repeat desugar ${tree1.getClass}")
+ //println(s"repeat desugar ${tree1.getClass}")
transform(tree1)
}
else tree1 match {
- case PostfixOp(od, op) => PostfixOp(transform(od), op)
- case tree1 => super.transform(tree1)
+ case TypedSplice(t) =>
+ tree1
+ case PostfixOp(od, op) =>
+ PostfixOp(transform(od), op)
+ case Select(qual, name) =>
+ tree1.derivedSelect(transform(qual, Expr), name)
+ case Apply(fn, args) =>
+ tree1.derivedApply(transform(fn, Expr), transform(args))
+ case TypeApply(fn, args) =>
+ tree1.derivedTypeApply(transform(fn, Expr), transform(args, Type))
+ case New(tpt) =>
+ tree1.derivedNew(transform(tpt, Type))
+ case Typed(expr, tpt) =>
+ tree1.derivedTyped(transform(expr), transform(tpt, Type))
+ case CaseDef(pat, guard, body) =>
+ tree1.derivedCaseDef(transform(pat, Pattern), transform(guard), transform(body))
+ case SeqLiteral(elempt, elems) =>
+ tree1.derivedSeqLiteral(transform(elempt, Type), transform(elems))
+ case UnApply(fun, args) =>
+ tree1.derivedUnApply(transform(fun, Expr), transform(args))
+ case ValDef(mods, name, tpt, rhs) =>
+ tree1.derivedValDef(mods, name, transform(tpt, Type), transform(rhs))
+ case DefDef(mods, name, tparams, vparamss, tpt, rhs) =>
+ tree1.derivedDefDef(mods, name, transformSub(tparams), vparamss mapConserve (transformSub(_)), transform(tpt, Type), transform(rhs))
+ case TypeDef(mods, name, tparams, rhs) =>
+ tree1.derivedTypeDef(mods, name, transformSub(tparams), transform(rhs, Type))
+ case Template(constr, parents, self, body) =>
+ tree1.derivedTemplate(transformSub(constr), transform(parents), transformSub(self), transform(body, Expr))
+ case ClassDef(mods, name, tparams, impl) =>
+ tree1.derivedClassDef(mods, name, transformSub(tparams), transformSub(impl))
+ case tree1 =>
+ super.transform(tree1)
}
}
}