@@ -3,7 +3,7 @@ package dotc
33package typer
44
55import core ._
6- import ast ._
6+ import ast .{ tpd , _ }
77import Trees ._
88import Constants ._
99import StdNames ._
@@ -28,15 +28,17 @@ import EtaExpansion.etaExpand
2828import dotty .tools .dotc .transform .Erasure .Boxing
2929import util .Positions ._
3030import util .common ._
31- import util .{SourcePosition , Property }
31+ import util .{Property , SourcePosition }
32+
3233import collection .mutable
3334import annotation .tailrec
3435import 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 }
3738import rewrite .Rewrites .patch
3839import NavigateAST ._
3940import transform .SymUtils ._
41+
4042import language .implicitConversions
4143import printing .SyntaxHighlighting ._
4244
@@ -2122,18 +2124,7 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit
21222124 typed(untpd.Select (untpd.TypedSplice (tree), nme.apply), pt)
21232125 }
21242126 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)
21372128 tree
21382129 }
21392130 else if (tree.tpe <:< pt) {
@@ -2278,4 +2269,18 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit
22782269 }
22792270 }
22802271 }
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+ }
22812286}
0 commit comments