aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/transform/PatternMatcher.scala
diff options
context:
space:
mode:
authorDmitry Petrashko <dmitry.petrashko@gmail.com>2014-10-24 20:59:53 +0200
committerMartin Odersky <odersky@gmail.com>2014-10-26 16:24:02 +0100
commita5878de9409c4d511c482a296ec6a3e85e868b93 (patch)
tree3d5296d11b0120808183f3147ed191e8afb11d76 /src/dotty/tools/dotc/transform/PatternMatcher.scala
parent8b0f2d62ca3100362a70c0e175fc95d7d21a452a (diff)
downloaddotty-a5878de9409c4d511c482a296ec6a3e85e868b93.tar.gz
dotty-a5878de9409c4d511c482a296ec6a3e85e868b93.tar.bz2
dotty-a5878de9409c4d511c482a296ec6a3e85e868b93.zip
Fix pattern matcher double defining symbols used in type tests that are known to succeed.
Diffstat (limited to 'src/dotty/tools/dotc/transform/PatternMatcher.scala')
-rw-r--r--src/dotty/tools/dotc/transform/PatternMatcher.scala8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/transform/PatternMatcher.scala b/src/dotty/tools/dotc/transform/PatternMatcher.scala
index ac92bb80c..4a1a66fbc 100644
--- a/src/dotty/tools/dotc/transform/PatternMatcher.scala
+++ b/src/dotty/tools/dotc/transform/PatternMatcher.scala
@@ -393,12 +393,14 @@ class PatternMatcher extends MiniPhaseTransform with DenotTransformer {thisTrans
val res: Tree
val nextBinder: Symbol
- lazy val introducedRebindings =
+ lazy val introducedRebindings = /*
if(nextBinder ne prevBinder) Rebindings(prevBinder, nextBinder)
- else NoRebindings
+ else */ NoRebindings
def chainBefore(next: Tree)(casegen: Casegen): Tree =
- /*atPos(pos)(*/casegen.flatMapCond(cond, res, nextBinder, next)//)
+ if(prevBinder ne nextBinder) // happens when typeTest is known to succeed
+ /*atPos(pos)(*/casegen.flatMapCond(cond, res, nextBinder, next)//)
+ else casegen.flatMapGuard(cond, next)
}
// unless we're optimizing, emit local variable bindings for all subpatterns of extractor/case class patterns