@@ -214,36 +214,16 @@ object SepCheck:
214
214
private def directFootprint (using Context ): Refs =
215
215
computeFootprint(followHidden = false )
216
216
217
- /** The hidden footprint of a set of capabilities `refs` is the closure
217
+ /** The complete footprint of a set of capabilities `refs` is the closure
218
218
* of `refs` under `_.captureSetOfInfo` and `_.hiddenElems`, dropping any shared terminal
219
219
* capabilities.
220
220
*/
221
- private def hiddenFootprint (using Context ): Refs =
221
+ private def completeFootprint (using Context ): Refs =
222
222
computeFootprint(followHidden = true )
223
223
224
- /** Same as hiddenFootprint.peaks under new scheme. Was maximal elements before */
225
- private def transPeaks (using Context ): Refs =
226
- def recur (seen : Refs , acc : Refs , newElems : List [Capability ]): Refs = trace(i " peaks $acc, $newElems = " ):
227
- newElems match
228
- case newElem :: newElems1 =>
229
- if seen.contains(newElem) then
230
- recur(seen, acc, newElems1)
231
- else newElem.stripRestricted.stripReadOnly match
232
- case elem : FreshCap if ! elem.isKnownClassifiedAs(defn.Caps_SharedCapability ) =>
233
- if elem.hiddenSet.deps.isEmpty then recur(seen + newElem, acc + newElem, newElems1)
234
- else
235
- val superCaps =
236
- if newElem.isReadOnly then elem.hiddenSet.superCaps.map(_.readOnly)
237
- else elem.hiddenSet.superCaps
238
- recur(seen + newElem, acc, superCaps ++ newElems)
239
- case _ =>
240
- if newElem.isTerminalCapability
241
- // || newElem.isInstanceOf[TypeRef | TypeParamRef]
242
- then recur(seen + newElem, acc, newElems1)
243
- else recur(seen + newElem, acc, newElem.captureSetOfInfo.dropEmpties().elems.toList ++ newElems1)
244
- case Nil => acc
245
- if ccConfig.newScheme then hiddenFootprint.peaks
246
- else recur(emptyRefs, emptyRefs, refs.toList)
224
+ /** Same as completeFootprint.peaks under new scheme. Was maximal elements before */
225
+ private def allPeaks (using Context ): Refs =
226
+ completeFootprint.peaks
247
227
248
228
/** The shared elements between the peak sets `refs` and `other`.
249
229
* These are the core capabilities and fresh capabilities that appear
@@ -403,7 +383,7 @@ class SepCheck(checker: CheckCaptures.CheckerAPI) extends tpd.TreeTraverser:
403
383
val overlap = hiddenFootprint.overlapWith(clashFootprint)
404
384
if ! overlap.isEmpty then i " ${CaptureSet (overlap)}"
405
385
else
406
- val sharedPeaks = hiddenSet.transPeaks .sharedPeaks(clashSet.transPeaks )
386
+ val sharedPeaks = hiddenSet.allPeaks .sharedPeaks(clashSet.allPeaks )
407
387
assert(! sharedPeaks.isEmpty, i " no overlap for $hiddenSet vs $clashSet" )
408
388
sharedPeaksStr(sharedPeaks)
409
389
@@ -540,7 +520,7 @@ class SepCheck(checker: CheckCaptures.CheckerAPI) extends tpd.TreeTraverser:
540
520
val (qual, fnCaptures) = methPart(fn) match
541
521
case Select (qual, _) => (qual, qual.nuType.captureSet)
542
522
case _ => (fn, CaptureSet .empty)
543
- var currentPeaks = PeaksPair (fnCaptures.elems.transPeaks , emptyRefs)
523
+ var currentPeaks = PeaksPair (fnCaptures.elems.allPeaks , emptyRefs)
544
524
val partsWithPeaks = mutable.ListBuffer [(Tree , PeaksPair )]() += (qual -> currentPeaks)
545
525
546
526
capt.println(
@@ -554,8 +534,8 @@ class SepCheck(checker: CheckCaptures.CheckerAPI) extends tpd.TreeTraverser:
554
534
555
535
for arg <- args do
556
536
val argPeaks = PeaksPair (
557
- spanCaptures(arg).transPeaks ,
558
- if arg.needsSepCheck then formalCaptures(arg).transHiddenSet.transPeaks else emptyRefs)
537
+ spanCaptures(arg).allPeaks ,
538
+ if arg.needsSepCheck then formalCaptures(arg).transHiddenSet.allPeaks else emptyRefs)
559
539
val argDeps = deps(arg)
560
540
561
541
def clashingPart (argPeaks : Refs , selector : PeaksPair => Refs ): Tree =
@@ -607,9 +587,9 @@ class SepCheck(checker: CheckCaptures.CheckerAPI) extends tpd.TreeTraverser:
607
587
val used = tree.markedFree.elems
608
588
if ! used.isEmpty then
609
589
capt.println(i " check use $tree: $used" )
610
- val usedPeaks = used.transPeaks
611
- val overlap = defsShadow.transPeaks .sharedPeaks(usedPeaks)
612
- if ! defsShadow.transPeaks .sharedPeaks(usedPeaks).isEmpty then
590
+ val usedPeaks = used.allPeaks
591
+ val overlap = defsShadow.allPeaks .sharedPeaks(usedPeaks)
592
+ if ! defsShadow.allPeaks .sharedPeaks(usedPeaks).isEmpty then
613
593
val sym = tree.symbol
614
594
615
595
def findClashing (prevDefs : List [DefInfo ]): Option [DefInfo ] = prevDefs match
@@ -757,7 +737,7 @@ class SepCheck(checker: CheckCaptures.CheckerAPI) extends tpd.TreeTraverser:
757
737
val captured = part.deepCaptureSet.elems.pruned
758
738
val hidden = captured.transHiddenSet.pruned
759
739
val actual = captured ++ hidden
760
- val partPeaks = PeaksPair (actual.transPeaks , hidden.transPeaks )
740
+ val partPeaks = PeaksPair (actual.allPeaks , hidden.allPeaks )
761
741
/*
762
742
println(i"""check parts $parts
763
743
|current = ${currentPeaks.actual}/${currentPeaks.hidden}
@@ -933,7 +913,7 @@ class SepCheck(checker: CheckCaptures.CheckerAPI) extends tpd.TreeTraverser:
933
913
val resultType = mtpe.finalResultType
934
914
val resultCaptures =
935
915
(resultArgCaptures(resultType) ++ resultType.deepCaptureSet.elems).filter(! isLocalRef(_))
936
- val resultPeaks = resultCaptures.transPeaks
916
+ val resultPeaks = resultCaptures.allPeaks
937
917
capt.println(i " deps for $app = ${deps.toList}" )
938
918
(deps, resultPeaks)
939
919
@@ -959,7 +939,7 @@ class SepCheck(checker: CheckCaptures.CheckerAPI) extends tpd.TreeTraverser:
959
939
960
940
def pushDef (tree : ValOrDefDef , hiddenByDef : Refs )(using Context ): Unit =
961
941
defsShadow ++= hiddenByDef
962
- previousDefs = DefInfo (tree, tree.symbol, hiddenByDef, hiddenByDef.transPeaks ) :: previousDefs
942
+ previousDefs = DefInfo (tree, tree.symbol, hiddenByDef, hiddenByDef.allPeaks ) :: previousDefs
963
943
964
944
/** Check (result-) type of `tree` for separation conditions using `checkType`.
965
945
* Excluded are parameters and definitions that have an =unsafeAssumeSeparate
0 commit comments