@@ -430,15 +430,20 @@ class Setup extends PreRecheck, SymTransformer, SetupAPI:
430
430
def setupTraverser (checker : CheckerAPI ) = new TreeTraverserWithPreciseImportContexts :
431
431
import checker .*
432
432
433
+ private val paramSigChange = util.EqHashSet [Tree ]()
434
+
433
435
/** Transform type of tree, and remember the transformed type as the type the tree */
434
436
private def transformTT (tree : TypeTree , sym : Symbol , boxed : Boolean )(using Context ): Unit =
435
437
if ! tree.hasNuType then
436
- val transformed =
438
+ var transformed =
437
439
if tree.isInferred
438
440
then transformInferredType(tree.tpe)
439
441
else transformExplicitType(tree.tpe, tptToCheck = tree)
442
+ if boxed then transformed = box(transformed)
443
+ if sym.is(Param ) && (transformed ne tree.tpe) then
444
+ paramSigChange += tree
440
445
tree.setNuType(
441
- if boxed then box( transformed) else Fresh .fromCap(transformed, sym))
446
+ if boxed then transformed else Fresh .fromCap(transformed, sym))
442
447
443
448
/** Transform the type of a val or var or the result type of a def */
444
449
def transformResultType (tpt : TypeTree , sym : Symbol )(using Context ): Unit =
@@ -504,6 +509,9 @@ class Setup extends PreRecheck, SymTransformer, SetupAPI:
504
509
inContext(ctx.withOwner(sym))
505
510
traverseChildren(tree)
506
511
512
+ case tree @ TypeDef (_, rhs : TypeTree ) =>
513
+ transformTT(rhs, tree.symbol, boxed = false )
514
+
507
515
case tree @ SeqLiteral (elems, tpt : TypeTree ) =>
508
516
traverse(elems)
509
517
tpt.setNuType(box(transformInferredType(tpt.tpe)))
@@ -547,8 +555,8 @@ class Setup extends PreRecheck, SymTransformer, SetupAPI:
547
555
def paramSignatureChanges = tree.match
548
556
case tree : DefDef =>
549
557
tree.paramss.nestedExists:
550
- case param : ValDef => param.tpt.hasNuType
551
- case param : TypeDef => param.rhs.hasNuType
558
+ case param : ValDef => paramSigChange.contains( param.tpt)
559
+ case param : TypeDef => paramSigChange.contains( param.rhs)
552
560
case _ => false
553
561
554
562
// A symbol's signature changes if some of its parameter types or its result type
@@ -583,7 +591,7 @@ class Setup extends PreRecheck, SymTransformer, SetupAPI:
583
591
mt.paramInfos
584
592
else
585
593
val subst = SubstParams (psyms :: prevPsymss, mt1 :: prevLambdas)
586
- psyms.map(psym => adaptedInfo(psym, subst(psym.nextInfo).asInstanceOf [mt.PInfo ])),
594
+ psyms.map(psym => adaptedInfo(psym, subst(Fresh .toCap( psym.nextInfo) ).asInstanceOf [mt.PInfo ])),
587
595
mt1 =>
588
596
integrateRT(mt.resType, psymss.tail, resType, psyms :: prevPsymss, mt1 :: prevLambdas)
589
597
)
0 commit comments