@@ -152,6 +152,8 @@ object Capabilities:
152152 val hiddenSet = CaptureSet .HiddenSet (owner, this : @ unchecked)
153153 // fails initialization check without the @unchecked
154154
155+ private [Capabilities ] var isClassified = false
156+
155157 override def equals (that : Any ) = that match
156158 case that : FreshCap => this eq that
157159 case _ => false
@@ -164,6 +166,11 @@ object Capabilities:
164166 case ResultCap (_) | _ : ParamRef => false
165167 case _ => true
166168
169+ def adoptClassifier (cls : ClassSymbol , freeze : Boolean )(using Context ): Unit =
170+ if ! isClassified then
171+ hiddenSet.adoptClassifier(cls)
172+ if freeze then isClassified = true
173+
167174 def descr (using Context ) =
168175 val originStr = origin match
169176 case Origin .InDecl (sym) if sym.exists =>
@@ -536,7 +543,8 @@ object Capabilities:
536543 case Reach (_) =>
537544 captureSetOfInfo.transClassifiers
538545 case self : CoreCapability =>
539- joinClassifiers(toClassifiers(self.classifier), captureSetOfInfo.transClassifiers)
546+ if self.derivesFromCapability then toClassifiers(self.classifier)
547+ else captureSetOfInfo.transClassifiers
540548 if myClassifiers != UnknownClassifier then
541549 classifiersValid == currentId
542550 myClassifiers
@@ -546,7 +554,8 @@ object Capabilities:
546554 cls == defn.AnyClass
547555 || this .match
548556 case self : FreshCap =>
549- self.hiddenSet.tryClassifyAs(cls)
557+ if self.isClassified then self.hiddenSet.classifier.derivesFrom(cls)
558+ else self.hiddenSet.tryClassifyAs(cls)
550559 case self : RootCapability =>
551560 true
552561 case Restricted (_, cls1) =>
@@ -559,8 +568,8 @@ object Capabilities:
559568 case Reach (_) =>
560569 captureSetOfInfo.tryClassifyAs(cls)
561570 case self : CoreCapability =>
562- self.classifier.isSubClass (cls)
563- && captureSetOfInfo.tryClassifyAs(cls)
571+ if self.derivesFromCapability then self.derivesFrom (cls)
572+ else captureSetOfInfo.tryClassifyAs(cls)
564573
565574 def isKnownClassifiedAs (cls : ClassSymbol )(using Context ): Boolean =
566575 transClassifiers match
0 commit comments