diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2016-02-17 10:37:44 +1000 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2016-03-04 14:10:14 +1000 |
commit | d1def30417d44ef2a6830b3337bf4063c7144b4b (patch) | |
tree | 9543d18f92884bd5e72e59859f6d0a50fc3c9847 /src/compiler/scala/tools/nsc/typechecker/Typers.scala | |
parent | 92ce5a50fea326d0bb1c2360c95baf1578520429 (diff) | |
download | scala-d1def30417d44ef2a6830b3337bf4063c7144b4b.tar.gz scala-d1def30417d44ef2a6830b3337bf4063c7144b4b.tar.bz2 scala-d1def30417d44ef2a6830b3337bf4063c7144b4b.zip |
SI-9658 Fix crosstalk between partial fun. and GADT match
When typechecking the synthetic default case of a pattern matching
anonymous partial function, we failed to create a new `Context`.
This led to crosstalk with the management of the saved type bounds
of an enclosing GADT pattern match.
This commit avoids the direct call to `typeCase` and instead
indirects through `typedCases`, which spawns a new nested typer
context, and hence avoids the crosstalk when `restoreSavedTypeBounds`
runs.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Typers.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Typers.scala | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala index 783db65b33..6676a0aeaf 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala @@ -2584,8 +2584,8 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper // the default uses applyOrElse's first parameter since the scrut's type has been widened val match_ = { - val defaultCase = methodBodyTyper.typedCase( - mkDefaultCase(methodBodyTyper.typed1(REF(default) APPLY (REF(x)), mode, B1.tpe).setType(B1.tpe)), argTp, B1.tpe) + val cdef = mkDefaultCase(methodBodyTyper.typed1(REF(default) APPLY (REF(x)), mode, B1.tpe).setType(B1.tpe)) + val List(defaultCase) = methodBodyTyper.typedCases(List(cdef), argTp, B1.tpe) treeCopy.Match(match0, match0.selector, match0.cases :+ defaultCase) } match_ setType B1.tpe |