diff options
author | Martin Odersky <odersky@gmail.com> | 2011-11-22 18:07:51 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2011-11-22 18:07:51 +0000 |
commit | ac031789039d421186567cf3b9a484957e6e5f8e (patch) | |
tree | 5145e02ea0debdf1cd2a467ad8568e2813a03c56 /src/compiler/scala/tools/nsc/ast/TreeGen.scala | |
parent | cd696035896fd82c622687107ec4b70cf3f3298e (diff) | |
download | scala-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.scala | 12 |
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( |