@@ -5,6 +5,7 @@ import core._
55import Contexts ._
66import Types ._
77import Symbols ._
8+ import StdNames ._
89import Decorators ._
910import typer .ProtoTypes ._
1011import ast .{tpd , untpd }
@@ -24,17 +25,20 @@ import config.Printers.typr
2425class ReTyper extends Typer {
2526 import tpd ._
2627
28+ private def assertTyped (tree : untpd.Tree )(implicit ctx : Context ): Unit =
29+ assert(tree.hasType, i " $tree ${tree.getClass} ${tree.uniqueId}" )
30+
2731 /** Checks that the given tree has been typed */
2832 protected def promote (tree : untpd.Tree )(implicit ctx : Context ): tree.ThisTree [Type ] = {
29- assert (tree.hasType, i " $tree ${tree.getClass} ${tree.uniqueId} " )
33+ assertTyped (tree)
3034 tree.withType(tree.typeOpt)
3135 }
3236
3337 override def typedIdent (tree : untpd.Ident , pt : Type )(implicit ctx : Context ): Tree =
3438 promote(tree)
3539
3640 override def typedSelect (tree : untpd.Select , pt : Type )(implicit ctx : Context ): Tree = {
37- assert(tree.hasType, tree)
41+ assertTyped( tree)
3842 val qual1 = typed(tree.qualifier, AnySelectionProto )
3943 untpd.cpy.Select (tree)(qual1, tree.name).withType(tree.typeOpt)
4044 }
@@ -48,11 +52,22 @@ class ReTyper extends Typer {
4852 override def typedSuper (tree : untpd.Super , pt : Type )(implicit ctx : Context ): Tree =
4953 promote(tree)
5054
55+ override def typedTyped (tree : untpd.Typed , pt : Type )(implicit ctx : Context ): Tree = {
56+ assertTyped(tree)
57+ val type1 = checkSimpleKinded(typedType(tree.tpt))
58+ val tree1 = tree.expr match {
59+ case id : untpd.Ident if (ctx.mode is Mode .Pattern ) && untpd.isVarPattern(id) && (id.name == nme.WILDCARD || id.name == nme.WILDCARD_STAR ) =>
60+ tree.expr.withType(type1.tpe)
61+ case _ => typed(tree.expr)
62+ }
63+ untpd.cpy.Typed (tree)(tree1, type1).withType(tree.typeOpt)
64+ }
65+
5166 override def typedTypeTree (tree : untpd.TypeTree , pt : Type )(implicit ctx : Context ): TypeTree =
5267 promote(tree)
5368
5469 override def typedBind (tree : untpd.Bind , pt : Type )(implicit ctx : Context ): Bind = {
55- assert (tree.hasType )
70+ assertTyped (tree)
5671 val body1 = typed(tree.body, pt)
5772 untpd.cpy.Bind (tree)(tree.name, body1).withType(tree.typeOpt)
5873 }
@@ -64,6 +79,10 @@ class ReTyper extends Typer {
6479 untpd.cpy.UnApply (tree)(fun1, implicits1, patterns1).withType(tree.tpe)
6580 }
6681
82+ override def typedUnApply (tree : untpd.Apply , selType : Type )(implicit ctx : Context ): Tree = {
83+ typedApply(tree, selType)
84+ }
85+
6786 override def localDummy (cls : ClassSymbol , impl : untpd.Template )(implicit ctx : Context ) = impl.symbol
6887
6988 override def retrieveSym (tree : untpd.Tree )(implicit ctx : Context ): Symbol = tree.symbol
0 commit comments