@@ -162,37 +162,6 @@ class Setup extends PreRecheck, SymTransformer, SetupAPI:
162
162
else symd
163
163
end transformSym
164
164
165
- /** If `tp` is an unboxed capturing type or a function returning an unboxed capturing type,
166
- * convert it to be boxed.
167
- */
168
- private def box (tp : Type )(using Context ): Type =
169
- def recur (tp : Type ): Type = tp.dealiasKeepAnnotsAndOpaques match
170
- case tp @ CapturingType (parent, refs) =>
171
- if tp.isBoxed || parent.derivesFrom(defn.Caps_CapSet ) then tp
172
- else tp.boxed
173
- case tp @ AnnotatedType (parent, ann) =>
174
- if ann.symbol.isRetains && ! parent.derivesFrom(defn.Caps_CapSet )
175
- then CapturingType (parent, ann.tree.toCaptureSet, boxed = true )
176
- else tp.derivedAnnotatedType(box(parent), ann)
177
- case tp1 @ AppliedType (tycon, args) if defn.isNonRefinedFunction(tp1) =>
178
- val res = args.last
179
- val boxedRes = recur(res)
180
- if boxedRes eq res then tp
181
- else tp1.derivedAppliedType(tycon, args.init :+ boxedRes)
182
- case tp1 @ defn.RefinedFunctionOf (rinfo : MethodType ) =>
183
- val boxedRinfo = recur(rinfo)
184
- if boxedRinfo eq rinfo then tp
185
- else boxedRinfo.toFunctionType(alwaysDependent = true )
186
- case tp1 : MethodOrPoly =>
187
- val res = tp1.resType
188
- val boxedRes = recur(res)
189
- if boxedRes eq res then tp
190
- else tp1.derivedLambdaType(resType = boxedRes)
191
- case _ => tp
192
- tp match
193
- case tp : MethodOrPoly => tp // don't box results of methods outside refinements
194
- case _ => recur(tp)
195
-
196
165
private trait SetupTypeMap extends FollowAliasesMap :
197
166
private var isTopLevel = true
198
167
@@ -257,9 +226,9 @@ class Setup extends PreRecheck, SymTransformer, SetupAPI:
257
226
CapturingType (OrType (tp1, parent2, tp.isSoft), refs2, tp2.isBoxed)
258
227
case tp @ AppliedType (tycon, args)
259
228
if ! defn.isFunctionClass(tp.dealias.typeSymbol) && (tp.dealias eq tp) =>
260
- tp.derivedAppliedType(tycon, args.mapConserve(box ))
229
+ tp.derivedAppliedType(tycon, args.mapConserve(_.boxDeeply ))
261
230
case tp : RealTypeBounds =>
262
- tp.derivedTypeBounds(tp.lo, box( tp.hi) )
231
+ tp.derivedTypeBounds(tp.lo, tp.hi.boxDeeply )
263
232
case tp : LazyRef =>
264
233
normalizeCaptures(tp.ref)
265
234
case _ =>
@@ -542,7 +511,7 @@ class Setup extends PreRecheck, SymTransformer, SetupAPI:
542
511
if tree.isInferred
543
512
then transformInferredType(tree.tpe)
544
513
else transformExplicitType(tree.tpe, sym, freshen = ! boxed, tptToCheck = tree)
545
- if boxed then transformed = box( transformed)
514
+ if boxed then transformed = transformed.boxDeeply
546
515
tree.setNuType(
547
516
if sym.hasAnnotation(defn.UncheckedCapturesAnnot ) then makeUnchecked(transformed)
548
517
else transformed)
@@ -612,7 +581,7 @@ class Setup extends PreRecheck, SymTransformer, SetupAPI:
612
581
613
582
case tree @ SeqLiteral (elems, tpt : TypeTree ) =>
614
583
traverse(elems)
615
- tpt.setNuType(box( transformInferredType(tpt.tpe)) )
584
+ tpt.setNuType(transformInferredType(tpt.tpe).boxDeeply )
616
585
617
586
case tree @ Try (body, catches, finalizer) =>
618
587
val tryOwner = firstCanThrowEvidence(body) match
0 commit comments