@@ -505,13 +505,13 @@ class Semantic {
505
505
*
506
506
* This is a fast track for early promotion of values.
507
507
*/
508
- def canPromoteExtrinsic : Contextual [Boolean ] =
508
+ def canPromoteExtrinsic : Contextual [Boolean ] = log( " canPromoteExtrinsic " + value + " , promoted = " + promoted, printer) {
509
509
value match
510
510
case Hot => true
511
511
case Cold => false
512
512
513
513
case warm : Warm =>
514
- warm.outer. canPromoteExtrinsic && {
514
+ ( warm.outer :: warm.args).forall(_. canPromoteExtrinsic) && {
515
515
promoted.add(warm)
516
516
true
517
517
}
@@ -537,10 +537,10 @@ class Semantic {
537
537
case RefSet (refs) =>
538
538
refs.forall(_.canPromoteExtrinsic)
539
539
540
- end canPromoteExtrinsic
540
+ }
541
541
542
542
/** Promotion of values to hot */
543
- def promote (msg : String , source : Tree ): Contextual [List [Error ]] =
543
+ def promote (msg : String , source : Tree ): Contextual [List [Error ]] = log( " promoting " + value + " , promoted = " + promoted, printer) {
544
544
value match
545
545
case Hot => Nil
546
546
@@ -574,6 +574,7 @@ class Semantic {
574
574
575
575
case RefSet (refs) =>
576
576
refs.flatMap(_.promote(msg, source))
577
+ }
577
578
end extension
578
579
579
580
extension (warm : Warm )
@@ -594,7 +595,7 @@ class Semantic {
594
595
* system more flexible in other dimentions: e.g. leak to
595
596
* methods or constructors, or use ownership for creating cold data structures.
596
597
*/
597
- def tryPromote (msg : String , source : Tree ): Contextual [List [Error ]] = log(" promote " + warm.show, printer) {
598
+ def tryPromote (msg : String , source : Tree ): Contextual [List [Error ]] = log(" promote " + warm.show + " , promoted = " + promoted , printer) {
598
599
val classRef = warm.klass.appliedRef
599
600
if classRef.memberClasses.nonEmpty then
600
601
return PromoteError (msg, source, trace.toVector) :: Nil
0 commit comments