File tree 3 files changed +10
-8
lines changed
compiler/src/dotty/tools/dotc
3 files changed +10
-8
lines changed Original file line number Diff line number Diff line change @@ -378,7 +378,7 @@ class TypeApplications(val self: Type) extends AnyVal {
378
378
self.derivedExprType(tp.translateParameterized(from, to))
379
379
case _ =>
380
380
if (self.derivesFrom(from)) {
381
- def elemType (tp : Type ): Type = tp match
381
+ def elemType (tp : Type ): Type = tp.widenDealias match
382
382
case tp : AndOrType => tp.derivedAndOrType(elemType(tp.tp1), elemType(tp.tp2))
383
383
case _ => tp.baseType(from).argInfos.head
384
384
val arg = elemType(self)
@@ -402,6 +402,10 @@ class TypeApplications(val self: Type) extends AnyVal {
402
402
translateParameterized(defn.RepeatedParamClass , seqClass, wildcardArg = toArray)
403
403
else self
404
404
405
+ /** Translate a `From[T]` into a `*T`. */
406
+ def translateToRepeated (from : ClassSymbol )(using Context ): Type =
407
+ translateParameterized(from, defn.RepeatedParamClass )
408
+
405
409
/** If this is an encoding of a (partially) applied type, return its arguments,
406
410
* otherwise return Nil.
407
411
* Existential types in arguments are returned as TypeBounds instances.
Original file line number Diff line number Diff line change @@ -166,7 +166,7 @@ trait TypeAssigner {
166
166
else sym.info
167
167
168
168
private def toRepeated (tree : Tree , from : ClassSymbol )(using Context ): Tree =
169
- Typed (tree, TypeTree (tree.tpe.widen.translateParameterized (from, defn. RepeatedParamClass )))
169
+ Typed (tree, TypeTree (tree.tpe.widen.translateToRepeated (from)))
170
170
171
171
def seqToRepeated (tree : Tree )(using Context ): Tree = toRepeated(tree, defn.SeqClass )
172
172
Original file line number Diff line number Diff line change @@ -736,12 +736,10 @@ class Typer extends Namer
736
736
if (ctx.mode.is(Mode .QuotedPattern )) pt.translateFromRepeated(toArray = false )
737
737
else pt.translateFromRepeated(toArray = false ) | pt.translateFromRepeated(toArray = true )
738
738
val tpdExpr = typedExpr(tree.expr, ptArg)
739
- tpdExpr.tpe.widenDealias match {
740
- case defn.ArrayOf (_) =>
741
- arrayToRepeated(tpdExpr)
742
- case _ =>
743
- seqToRepeated(tpdExpr)
744
- }
739
+ val expr1 = typedExpr(tree.expr, ptArg)
740
+ val fromCls = if expr1.tpe.derivesFrom(defn.ArrayClass ) then defn.ArrayClass else defn.SeqClass
741
+ val tpt1 = TypeTree (expr1.tpe.widen.translateToRepeated(fromCls)).withSpan(tree.tpt.span)
742
+ assignType(cpy.Typed (tree)(expr1, tpt1), tpt1)
745
743
}
746
744
cases(
747
745
ifPat = ascription(TypeTree (defn.RepeatedParamType .appliedTo(pt)), isWildcard = true ),
You can’t perform that action at this time.
0 commit comments