aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/transform/PatternMatcher.scala
diff options
context:
space:
mode:
authorDmitry Petrashko <dmitry.petrashko@gmail.com>2014-10-13 11:09:07 +0200
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2014-10-13 11:10:47 +0200
commit2f57af3e21d6686507a7565b6be372a7ce0f5aa5 (patch)
tree0f5ca1c4f6fb3927698623407a22b76be2b71f16 /src/dotty/tools/dotc/transform/PatternMatcher.scala
parentc1cc79befdd5e5f7eaf7a2bc69cc70e6959ca57d (diff)
downloaddotty-2f57af3e21d6686507a7565b6be372a7ce0f5aa5.tar.gz
dotty-2f57af3e21d6686507a7565b6be372a7ce0f5aa5.tar.bz2
dotty-2f57af3e21d6686507a7565b6be372a7ce0f5aa5.zip
Patmat: fix negation left from isEmpty&fix scoping
Should fix #188
Diffstat (limited to 'src/dotty/tools/dotc/transform/PatternMatcher.scala')
-rw-r--r--src/dotty/tools/dotc/transform/PatternMatcher.scala8
1 files changed, 3 insertions, 5 deletions
diff --git a/src/dotty/tools/dotc/transform/PatternMatcher.scala b/src/dotty/tools/dotc/transform/PatternMatcher.scala
index 9087ba0c4..4b9b325c1 100644
--- a/src/dotty/tools/dotc/transform/PatternMatcher.scala
+++ b/src/dotty/tools/dotc/transform/PatternMatcher.scala
@@ -246,16 +246,14 @@ class PatternMatcher extends MiniPhaseTransform with DenotTransformer {thisTrans
case ((mkCase, sym), nextCase) =>
val body = mkCase(new OptimizedCasegen(nextCase)).ensureConforms(restpe)
- val caseBody = DefDef(sym, _ => Block(List(acc), body))
-
- Block(List(caseBody),ref(sym).ensureApplied)
+ DefDef(sym, _ => Block(List(acc), body))
}}
// scrutSym == NoSymbol when generating an alternatives matcher
// val scrutDef = scrutSym.fold(List[Tree]())(ValDef(_, scrut) :: Nil) // for alternatives
- caseDefs
+ Block(List(caseDefs), ref(caseSyms.head).ensureApplied)
}
class OptimizedCasegen(nextCase: Tree) extends CommonCodegen with Casegen {
@@ -283,7 +281,7 @@ class PatternMatcher extends MiniPhaseTransform with DenotTransformer {thisTrans
List(ValDef(prevSym, prev)),
// must be isEmpty and get as we don't control the target of the call (prev is an extractor call)
ifThenElseZero(
- ref(prevSym).select(nme.isDefined).select(defn.Boolean_!),
+ ref(prevSym).select(nme.isDefined),
Substitution(b, prevValue)(next)
)
)