diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2014-10-24 20:59:53 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-10-26 16:24:02 +0100 |
commit | a5878de9409c4d511c482a296ec6a3e85e868b93 (patch) | |
tree | 3d5296d11b0120808183f3147ed191e8afb11d76 /src/dotty/tools/dotc/transform/PatternMatcher.scala | |
parent | 8b0f2d62ca3100362a70c0e175fc95d7d21a452a (diff) | |
download | dotty-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.scala | 8 |
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 |