@@ -3,7 +3,7 @@ package dotc
3
3
package typer
4
4
5
5
import core ._
6
- import ast ._
6
+ import ast .{ tpd , _ }
7
7
import Trees ._
8
8
import Constants ._
9
9
import StdNames ._
@@ -28,15 +28,17 @@ import EtaExpansion.etaExpand
28
28
import dotty .tools .dotc .transform .Erasure .Boxing
29
29
import util .Positions ._
30
30
import util .common ._
31
- import util .{SourcePosition , Property }
31
+ import util .{Property , SourcePosition }
32
+
32
33
import collection .mutable
33
34
import annotation .tailrec
34
35
import Implicits ._
35
- import util .Stats .{track , record }
36
- import config .Printers .{typr , gadts }
36
+ import util .Stats .{record , track }
37
+ import config .Printers .{gadts , typr }
37
38
import rewrite .Rewrites .patch
38
39
import NavigateAST ._
39
40
import transform .SymUtils ._
41
+
40
42
import language .implicitConversions
41
43
import printing .SyntaxHighlighting ._
42
44
@@ -2122,18 +2124,7 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit
2122
2124
typed(untpd.Select (untpd.TypedSplice (tree), nme.apply), pt)
2123
2125
}
2124
2126
else if (ctx.mode is Mode .Pattern ) {
2125
- tree match {
2126
- case _ : RefTree | _ : Literal
2127
- if ! isVarPattern(tree) &&
2128
- ! (tree.tpe <:< pt)(ctx.addMode(Mode .GADTflexible )) &&
2129
- ! this .isInstanceOf [ReTyper ] =>
2130
- val cmp =
2131
- untpd.Apply (
2132
- untpd.Select (untpd.TypedSplice (tree), nme.EQ ),
2133
- untpd.TypedSplice (dummyTreeOfType(pt)))
2134
- typedExpr(cmp, defn.BooleanType )(ctx.retractMode(Mode .Pattern ))
2135
- case _ =>
2136
- }
2127
+ checkEqualityEvidence(tree, pt)
2137
2128
tree
2138
2129
}
2139
2130
else if (tree.tpe <:< pt) {
@@ -2278,4 +2269,18 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit
2278
2269
}
2279
2270
}
2280
2271
}
2272
+
2273
+ protected def checkEqualityEvidence (tree : tpd.Tree , pt : Type )(implicit ctx : Context ) : Unit = {
2274
+ tree match {
2275
+ case _ : RefTree | _ : Literal
2276
+ if ! isVarPattern(tree) &&
2277
+ ! (tree.tpe <:< pt) (ctx.addMode(Mode .GADTflexible )) =>
2278
+ val cmp =
2279
+ untpd.Apply (
2280
+ untpd.Select (untpd.TypedSplice (tree), nme.EQ ),
2281
+ untpd.TypedSplice (dummyTreeOfType(pt)))
2282
+ typedExpr(cmp, defn.BooleanType )(ctx.retractMode(Mode .Pattern ))
2283
+ case _ =>
2284
+ }
2285
+ }
2281
2286
}
0 commit comments