@@ -28,15 +28,7 @@ private val adaptUnpickledFunctionTypes = false
28
28
*/
29
29
private val constrainRootsWhenMapping = true
30
30
31
- /** If true, most vals can be level owners. If false, only vals defined by a
32
- * closure as RHS can be level owners
33
- */
34
- private val valsCanBeLevelOwners = true
35
-
36
- /** If true, only vals, defs, and classes with a universal capability in a parameter
37
- * or self type are considered as level owners.
38
- */
39
- private val levelOwnersNeedCapParam = true
31
+ private val constructorsAreLevelOwners = false
40
32
41
33
def allowUniversalInBoxed (using Context ) =
42
34
Feature .sourceVersion.isAtLeast(SourceVersion .`3.3`)
@@ -390,25 +382,21 @@ extension (sym: Symbol)
390
382
def isCaseClassSynthetic = // TODO drop
391
383
symd.maybeOwner.isClass && symd.owner.is(Case ) && symd.is(Synthetic ) && symd.info.firstParamNames.isEmpty
392
384
def classQualifies =
393
- ! levelOwnersNeedCapParam
394
- || takesCappedParamIn(symd.primaryConstructor.info)
385
+ takesCappedParamIn(symd.primaryConstructor.info)
395
386
|| symd.asClass.givenSelfType.hasUniversalRootOf(sym)
396
- def termQualifies =
397
- ! levelOwnersNeedCapParam || takesCappedParamIn(symd.info)
398
387
def compute =
399
388
if symd.isClass then
400
389
symd.is(CaptureChecked ) && classQualifies || symd.isRoot
401
390
else
402
391
(symd.is(Method , butNot = Accessor )
403
- || valsCanBeLevelOwners && symd.isTerm && ! symd.isOneOf(TermParamOrAccessor | Mutable ))
392
+ || symd.isTerm && ! symd.isOneOf(TermParamOrAccessor | Mutable ))
404
393
&& (! symd.owner.isClass
405
394
|| symd.owner.is(CaptureChecked )
406
395
|| Synthetics .needsTransform(symd)
407
396
)
408
- && ! isCaseClassSynthetic
409
397
&& ! symd.isConstructor
410
398
&& (! symd.isAnonymousFunction || sym.definedLocalRoot.exists)
411
- && termQualifies
399
+ && takesCappedParamIn(symd.info)
412
400
&& { ccSetup.println(i " Level owner $sym" ); true }
413
401
414
402
ccState.isLevelOwner.getOrElseUpdate(sym, compute)
@@ -433,17 +421,13 @@ extension (sym: Symbol)
433
421
* owner.
434
422
*/
435
423
def levelOwnerNamed (name : String )(using Context ): Symbol =
436
- def recur (sym : Symbol , prev : Symbol ): Symbol =
424
+ def recur (sym : Symbol ): Symbol =
437
425
if sym.name.toString == name then
438
426
if sym.isLevelOwner then sym
439
- else if sym.isTerm && ! sym.isOneOf(Method | Module ) && prev.exists then prev
440
427
else NoSymbol
441
- else if sym == defn.RootClass then
442
- NoSymbol
443
- else
444
- val prev1 = if sym.isAnonymousFunction && sym.isLevelOwner then sym else NoSymbol
445
- recur(sym.owner, prev1)
446
- recur(sym, NoSymbol )
428
+ else if sym == defn.RootClass then NoSymbol
429
+ else recur(sym.owner)
430
+ recur(sym)
447
431
.showing(i " find outer $sym [ $name ] = $result" , capt)
448
432
449
433
/** The parameter with type caps.Cap in the leading term parameter section,
0 commit comments