diff options
author | Felix Mulder <felix.mulder@gmail.com> | 2016-05-27 15:46:42 +0200 |
---|---|---|
committer | Felix Mulder <felix.mulder@gmail.com> | 2016-05-27 16:41:38 +0200 |
commit | 6c7b7e3eea21d4a704bea9014a2867fd330294da (patch) | |
tree | d8fcfa70af14baffe0b945ca5bb9cb1afb7922ed /src/dotty/tools/dotc/typer/Typer.scala | |
parent | 8f08b714424b3ada8a12156bdc3fd43e13ad09ee (diff) | |
download | dotty-6c7b7e3eea21d4a704bea9014a2867fd330294da.tar.gz dotty-6c7b7e3eea21d4a704bea9014a2867fd330294da.tar.bz2 dotty-6c7b7e3eea21d4a704bea9014a2867fd330294da.zip |
Fix `A*` propagating outside matches
Diffstat (limited to 'src/dotty/tools/dotc/typer/Typer.scala')
-rw-r--r-- | src/dotty/tools/dotc/typer/Typer.scala | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/typer/Typer.scala b/src/dotty/tools/dotc/typer/Typer.scala index 9f38ac0f0..4f27912f1 100644 --- a/src/dotty/tools/dotc/typer/Typer.scala +++ b/src/dotty/tools/dotc/typer/Typer.scala @@ -420,10 +420,15 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit case _ => ifExpr } def ascription(tpt: Tree, isWildcard: Boolean) = { + val underlyingTreeTpe = + if (isRepeatedParamType(tpt)) TypeTree(defn.SeqType.appliedTo(pt :: Nil)) + else tpt + val expr1 = - if (isWildcard) tree.expr.withType(tpt.tpe) + if (isRepeatedParamType(tpt)) tree.expr.withType(defn.SeqType.appliedTo(pt :: Nil)) + else if (isWildcard) tree.expr.withType(tpt.tpe) else typed(tree.expr, tpt.tpe.widenSkolem) - assignType(cpy.Typed(tree)(expr1, tpt), tpt) + assignType(cpy.Typed(tree)(expr1, tpt), underlyingTreeTpe) } if (untpd.isWildcardStarArg(tree)) cases( |