summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/ast/TreeGen.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2011-11-22 18:07:51 +0000
committerMartin Odersky <odersky@gmail.com>2011-11-22 18:07:51 +0000
commitac031789039d421186567cf3b9a484957e6e5f8e (patch)
tree5145e02ea0debdf1cd2a467ad8568e2813a03c56 /src/compiler/scala/tools/nsc/ast/TreeGen.scala
parentcd696035896fd82c622687107ec4b70cf3f3298e (diff)
downloadscala-ac031789039d421186567cf3b9a484957e6e5f8e.tar.gz
scala-ac031789039d421186567cf3b9a484957e6e5f8e.tar.bz2
scala-ac031789039d421186567cf3b9a484957e6e5f8e.zip
Compiler part of fast orElse.
"According to the spec this code should not be legal. Disabling for now." Need to come back and either make it work or (more likely) make nsc reject the test)
Diffstat (limited to 'src/compiler/scala/tools/nsc/ast/TreeGen.scala')
-rw-r--r--src/compiler/scala/tools/nsc/ast/TreeGen.scala12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/TreeGen.scala b/src/compiler/scala/tools/nsc/ast/TreeGen.scala
index 5ba7465928..0dc3b1fffd 100644
--- a/src/compiler/scala/tools/nsc/ast/TreeGen.scala
+++ b/src/compiler/scala/tools/nsc/ast/TreeGen.scala
@@ -47,6 +47,18 @@ abstract class TreeGen extends reflect.internal.TreeGen {
case _ => tree
}
+ def withDefaultCase(matchExpr: Tree, defaultAction: Tree/*scrutinee*/ => Tree): Tree = matchExpr match {
+ case Match(scrutinee, cases) =>
+ if (cases exists treeInfo.isDefaultCase) matchExpr
+ else {
+ val defaultCase = CaseDef(Ident(nme.WILDCARD), EmptyTree, defaultAction(scrutinee))
+ Match(scrutinee, cases :+ defaultCase)
+ }
+ case _ =>
+ matchExpr
+ // [Martin] Adriaan: please fill in virtpatmat transformation here
+ }
+
def mkCached(cvar: Symbol, expr: Tree): Tree = {
val cvarRef = mkUnattributedRef(cvar)
Block(