Skip to content

Commit 6fbcc17

Browse files
committed
Keep span and attachments when typing a sequence argument
I don't know of a case where this matters currently but it's more correct.
1 parent 5f9934f commit 6fbcc17

File tree

3 files changed

+10
-8
lines changed

3 files changed

+10
-8
lines changed

compiler/src/dotty/tools/dotc/core/TypeApplications.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ class TypeApplications(val self: Type) extends AnyVal {
378378
self.derivedExprType(tp.translateParameterized(from, to))
379379
case _ =>
380380
if (self.derivesFrom(from)) {
381-
def elemType(tp: Type): Type = tp match
381+
def elemType(tp: Type): Type = tp.widenDealias match
382382
case tp: AndOrType => tp.derivedAndOrType(elemType(tp.tp1), elemType(tp.tp2))
383383
case _ => tp.baseType(from).argInfos.head
384384
val arg = elemType(self)
@@ -402,6 +402,10 @@ class TypeApplications(val self: Type) extends AnyVal {
402402
translateParameterized(defn.RepeatedParamClass, seqClass, wildcardArg = toArray)
403403
else self
404404

405+
/** Translate a `From[T]` into a `*T`. */
406+
def translateToRepeated(from: ClassSymbol)(using Context): Type =
407+
translateParameterized(from, defn.RepeatedParamClass)
408+
405409
/** If this is an encoding of a (partially) applied type, return its arguments,
406410
* otherwise return Nil.
407411
* Existential types in arguments are returned as TypeBounds instances.

compiler/src/dotty/tools/dotc/typer/TypeAssigner.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ trait TypeAssigner {
166166
else sym.info
167167

168168
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)))
170170

171171
def seqToRepeated(tree: Tree)(using Context): Tree = toRepeated(tree, defn.SeqClass)
172172

compiler/src/dotty/tools/dotc/typer/Typer.scala

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -734,12 +734,10 @@ class Typer extends Namer
734734
if (ctx.mode.is(Mode.QuotedPattern)) pt.translateFromRepeated(toArray = false)
735735
else pt.translateFromRepeated(toArray = false) | pt.translateFromRepeated(toArray = true)
736736
val tpdExpr = typedExpr(tree.expr, ptArg)
737-
tpdExpr.tpe.widenDealias match {
738-
case defn.ArrayOf(_) =>
739-
arrayToRepeated(tpdExpr)
740-
case _ =>
741-
seqToRepeated(tpdExpr)
742-
}
737+
val expr1 = typedExpr(tree.expr, ptArg)
738+
val fromCls = if expr1.tpe.derivesFrom(defn.ArrayClass) then defn.ArrayClass else defn.SeqClass
739+
val tpt1 = TypeTree(expr1.tpe.widen.translateToRepeated(fromCls)).withSpan(tree.tpt.span)
740+
assignType(cpy.Typed(tree)(expr1, tpt1), tpt1)
743741
}
744742
cases(
745743
ifPat = ascription(TypeTree(defn.RepeatedParamType.appliedTo(pt)), isWildcard = true),

0 commit comments

Comments
 (0)