@@ -219,6 +219,12 @@ class Synthesizer(typer: Typer)(using @constructorOnly c: Context):
219219 case _ => true
220220 loop(formal)
221221
222+ private def checkRefinement (formal : Type , name : TypeName , expected : Type , span : Span )(using Context ): Unit =
223+ val actual = formal.lookupRefined(name)
224+ if actual.exists && ! (expected =:= actual)
225+ then report.error(
226+ em " $name missmatch, expected: $expected, found: $actual. " , ctx.source.atSpan(span))
227+
222228 private def mkMirroredMonoType (mirroredType : HKTypeLambda )(using Context ): Type =
223229 val monoMap = new TypeMap :
224230 def apply (t : Type ) = t match
@@ -260,10 +266,13 @@ class Synthesizer(typer: Typer)(using @constructorOnly c: Context):
260266 case _ =>
261267 val elems = TypeOps .nestedPairs(accessors.map(mirroredType.memberInfo(_).widenExpr))
262268 (mirroredType, elems)
269+ val elemsLabels = TypeOps .nestedPairs(elemLabels)
270+ checkRefinement(formal, tpnme.MirroredElemTypes , elemsType, span)
271+ checkRefinement(formal, tpnme.MirroredElemLabels , elemsLabels, span)
263272 val mirrorType =
264273 mirrorCore(defn.Mirror_ProductClass , monoType, mirroredType, cls.name, formal)
265274 .refinedWith(tpnme.MirroredElemTypes , TypeAlias (elemsType))
266- .refinedWith(tpnme.MirroredElemLabels , TypeAlias (TypeOps .nestedPairs(elemLabels) ))
275+ .refinedWith(tpnme.MirroredElemLabels , TypeAlias (elemsLabels ))
267276 val mirrorRef =
268277 if (cls.is(Scala2x )) anonymousMirror(monoType, ExtendsProductMirror , span)
269278 else companionPath(mirroredType, span)
0 commit comments