@@ -181,7 +181,7 @@ sealed abstract class CaptureSet extends Showable:
181181 /** {x} <:< this where <:< is subcapturing, but treating all variables
182182 * as frozen.
183183 */
184- def accountsFor (x : CaptureRef )(using ctx : Context , vs : VarState = VarState .Separate ): Boolean =
184+ def accountsFor (x : CaptureRef )(using ctx : Context )( using vs : VarState = VarState .Separate ): Boolean =
185185
186186 def debugInfo (using Context ) = i " $this accountsFor $x, which has capture set ${x.captureSetOfInfo}"
187187
@@ -210,7 +210,7 @@ sealed abstract class CaptureSet extends Showable:
210210 def mightAccountFor (x : CaptureRef )(using Context ): Boolean =
211211 reporting.trace(i " $this mightAccountFor $x, ${x.captureSetOfInfo}? " , show = true ):
212212 CCState .withCapAsRoot: // OK here since we opportunistically choose an alternative which gets checked later
213- elems.exists(_.subsumes(x)(using ctx, VarState .ClosedUnrecorded ))
213+ elems.exists(_.subsumes(x)(using ctx)( using VarState .ClosedUnrecorded ))
214214 || ! x.isRootCapability
215215 && {
216216 val elems = x.captureSetOfInfo.elems
@@ -405,8 +405,6 @@ object CaptureSet:
405405 type Vars = SimpleIdentitySet [Var ]
406406 type Deps = SimpleIdentitySet [CaptureSet ]
407407
408- @ sharable private var varId = 0
409-
410408 /** If set to `true`, capture stack traces that tell us where sets are created */
411409 private final val debugSets = false
412410
@@ -485,7 +483,7 @@ object CaptureSet:
485483 object Fluid extends Const (emptyRefs):
486484 override def isAlwaysEmpty (using Context ) = false
487485 override def addThisElem (elem : CaptureRef )(using Context , VarState ) = CompareResult .OK
488- override def accountsFor (x : CaptureRef )(using Context , VarState ): Boolean = true
486+ override def accountsFor (x : CaptureRef )(using Context )( using VarState ): Boolean = true
489487 override def mightAccountFor (x : CaptureRef )(using Context ): Boolean = true
490488 override def toString = " <fluid>"
491489 end Fluid
@@ -497,8 +495,9 @@ object CaptureSet:
497495
498496 /** A unique identification number for diagnostics */
499497 val id =
500- varId += 1
501- varId
498+ val ccs = ccState
499+ ccs.varId += 1
500+ ccs.varId
502501
503502 // assert(id != 40)
504503
@@ -1221,37 +1220,36 @@ object CaptureSet:
12211220 * reference `r` only if `r` is already present in the hidden set of the instance.
12221221 * No new references can be added.
12231222 */
1224- @ sharable
1225- object Separate extends Separating
1223+ def Separate (using Context ): Separating = ccState.Separate
12261224
12271225 /** Like Separate but in addition we assume that `cap` never subsumes anything else.
12281226 * Used in `++` to not lose track of dependencies between function parameters.
12291227 */
1230- @ sharable
1231- object HardSeparate extends Separating
1228+ def HardSeparate (using Context ): Separating = ccState.HardSeparate
12321229
12331230 /** A special state that turns off recording of elements. Used only
1234- * in `addSub` to prevent cycles in recordings.
1231+ * in `addSub` to prevent cycles in recordings. Instantiated in ccState.Unrecorded.
12351232 */
1236- @ sharable
1237- private [CaptureSet ] object Unrecorded extends VarState :
1233+ class Unrecorded extends VarState :
12381234 override def putElems (v : Var , refs : Refs ) = true
12391235 override def putDeps (v : Var , deps : Deps ) = true
12401236 override def rollBack (): Unit = ()
12411237 override def addHidden (hidden : HiddenSet , elem : CaptureRef )(using Context ): Boolean = true
12421238 override def toString = " unrecorded varState"
12431239
1240+ def Unrecorded (using Context ): Unrecorded = ccState.Unrecorded
1241+
12441242 /** A closed state that turns off recording of hidden elements (but allows
1245- * adding them). Used in `mightAccountFor`.
1243+ * adding them). Used in `mightAccountFor`. Instantiated in ccState.ClosedUnrecorded.
12461244 */
1247- @ sharable
1248- private [CaptureSet ] object ClosedUnrecorded extends Closed :
1245+ class ClosedUnrecorded extends Closed :
12491246 override def addHidden (hidden : HiddenSet , elem : CaptureRef )(using Context ): Boolean = true
12501247 override def toString = " closed unrecorded varState"
12511248
1249+ def ClosedUnrecorded (using Context ): ClosedUnrecorded = ccState.ClosedUnrecorded
1250+
12521251 end VarState
12531252
1254- @ sharable
12551253 /** The current VarState, as passed by the implicit context */
12561254 def varState (using state : VarState ): VarState = state
12571255
0 commit comments