diff options
author | Martin Odersky <odersky@gmail.com> | 2016-08-22 15:46:06 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-08-26 11:13:15 +0200 |
commit | 23d1bfb4111d8aff513659f2b3e3dd695b9b6e03 (patch) | |
tree | 500cb526bde1bdb56707f6606c551a6c6eb573e9 /src/dotty/tools/dotc/typer/Typer.scala | |
parent | f5972c7904ce802e3e7668094726c21c3a603419 (diff) | |
download | dotty-23d1bfb4111d8aff513659f2b3e3dd695b9b6e03.tar.gz dotty-23d1bfb4111d8aff513659f2b3e3dd695b9b6e03.tar.bz2 dotty-23d1bfb4111d8aff513659f2b3e3dd695b9b6e03.zip |
Make expressions using GADTs type check in later phases
GADT logic is lost after PatMat. To make code typecheck, the typer
should already insert casts where a subtype check succeeded because
it involved bounds established by a GADT comparison.
Diffstat (limited to 'src/dotty/tools/dotc/typer/Typer.scala')
-rw-r--r-- | src/dotty/tools/dotc/typer/Typer.scala | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/typer/Typer.scala b/src/dotty/tools/dotc/typer/Typer.scala index 7eb022b51..39d9d267e 100644 --- a/src/dotty/tools/dotc/typer/Typer.scala +++ b/src/dotty/tools/dotc/typer/Typer.scala @@ -1715,6 +1715,7 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit else missingArgs case _ => + ctx.typeComparer.GADTused = false if (ctx.mode is Mode.Pattern) { tree match { case _: RefTree | _: Literal if !isVarPattern(tree) => @@ -1723,7 +1724,9 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit } tree } - else if (tree.tpe <:< pt) tree + else if (tree.tpe <:< pt) + if (ctx.typeComparer.GADTused) tree.asInstance(pt) + else tree else if (wtp.isInstanceOf[MethodType]) missingArgs else { typr.println(i"adapt to subtype ${tree.tpe} !<:< $pt") |