Skip to content

Commit 4f7f34c

Browse files
committed
Propagate targs to the unapply placeholder
1 parent 181eaca commit 4f7f34c

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
@@ -1257,16 +1257,21 @@ class Typer extends Namer
12571257
val sym = t.symbol
12581258
val cls = ctx.newNormalizedClassSymbol(ctx.owner, tpnme.ANON_CLASS, Synthetic | Final, List(defn.ObjectType), coord = sym.coord)
12591259
val constr = ctx.newConstructor(cls, Synthetic, Nil, Nil, coord = sym.coord).entered
1260-
val unappplySym = ctx.newSymbol(cls, sym.name.toTermName, Synthetic | Method, sym.info, coord = sym.coord).entered
1261-
val unapply = polyDefDef(unappplySym, targs => argss =>
1262-
Inliner.inlineCall(t.fun.appliedToTypes(targs).appliedToArgss(argss).withSpan(t.span))(ctx.withOwner(unappplySym))
1263-
)
1264-
val cdef = ClassDef(cls, DefDef(constr), List(unapply))
1265-
val newUnapply = Block(cdef :: Nil, New(cls.typeRef, Nil))
1260+
12661261
val targs = t.fun match
12671262
case TypeApply(_, targs) => targs
12681263
case _ => Nil
1269-
val newFun = newUnapply.select(unappplySym).appliedToTypeTrees(targs).withSpan(t.span)
1264+
val unapplyInfo = sym.info match
1265+
case info: PolyType => info.instantiate(targs.map(_.tpe))
1266+
case info => info
1267+
1268+
val unappplySym = ctx.newSymbol(cls, sym.name.toTermName, Synthetic | Method, unapplyInfo, coord = sym.coord).entered
1269+
val unapply = DefDef(unappplySym, argss =>
1270+
Inliner.inlineCall(t.fun.appliedToArgss(argss).withSpan(t.span))(ctx.withOwner(unappplySym))
1271+
)
1272+
val cdef = ClassDef(cls, DefDef(constr), List(unapply))
1273+
val newUnapply = Block(cdef :: Nil, New(cls.typeRef, Nil))
1274+
val newFun = newUnapply.select(unappplySym).withSpan(t.span)
12701275
cpy.UnApply(t)(newFun, t.implicits, t.patterns)
12711276
case t => t
12721277
}

0 commit comments

Comments
 (0)