Skip to content

Commit 345a9c0

Browse files
committed
Propagate targs to the unapply placeholder
1 parent 7f966e6 commit 345a9c0

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

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

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1262,16 +1262,21 @@ class Typer extends Namer
12621262
val sym = t.symbol
12631263
val cls = ctx.newNormalizedClassSymbol(ctx.owner, tpnme.ANON_CLASS, Synthetic | Final, List(defn.ObjectType), coord = sym.coord)
12641264
val constr = ctx.newConstructor(cls, Synthetic, Nil, Nil, coord = sym.coord).entered
1265-
val unappplySym = ctx.newSymbol(cls, sym.name.toTermName, Synthetic | Method, sym.info, coord = sym.coord).entered
1266-
val unapply = polyDefDef(unappplySym, targs => argss =>
1267-
Inliner.inlineCall(t.fun.appliedToTypes(targs).appliedToArgss(argss).withSpan(t.span))(ctx.withOwner(unappplySym))
1268-
)
1269-
val cdef = ClassDef(cls, DefDef(constr), List(unapply))
1270-
val newUnapply = Block(cdef :: Nil, New(cls.typeRef, Nil))
1265+
12711266
val targs = t.fun match
12721267
case TypeApply(_, targs) => targs
12731268
case _ => Nil
1274-
val newFun = newUnapply.select(unappplySym).appliedToTypeTrees(targs).withSpan(t.span)
1269+
val unapplyInfo = sym.info match
1270+
case info: PolyType => info.instantiate(targs.map(_.tpe))
1271+
case info => info
1272+
1273+
val unappplySym = ctx.newSymbol(cls, sym.name.toTermName, Synthetic | Method, unapplyInfo, coord = sym.coord).entered
1274+
val unapply = DefDef(unappplySym, argss =>
1275+
Inliner.inlineCall(t.fun.appliedToArgss(argss).withSpan(t.span))(ctx.withOwner(unappplySym))
1276+
)
1277+
val cdef = ClassDef(cls, DefDef(constr), List(unapply))
1278+
val newUnapply = Block(cdef :: Nil, New(cls.typeRef, Nil))
1279+
val newFun = newUnapply.select(unappplySym).withSpan(t.span)
12751280
cpy.UnApply(t)(newFun, t.implicits, t.patterns)
12761281
case t => t
12771282
}

0 commit comments

Comments
 (0)