@@ -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