@@ -1311,20 +1311,29 @@ object CaptureSet:
13111311 */
13121312 def HardSeparate (using Context ): Separating = ccState.HardSeparate
13131313
1314- /** A special state that turns off recording of hidden elements. Used only
1315- * in `addSub` to prevent cycles in recordings. Instantiated in ccState.Unrecorded.
1316- */
1317- class Unrecorded extends VarState :
1314+ /** A mixin trait that overrides the addHidden and unify operations to
1315+ * not depend in state. */
1316+ trait Stateless extends VarState :
1317+
1318+ /** Allow adding hidden elements, but don't store them */
13181319 override def addHidden (hidden : HiddenSet , elem : Capability )(using Context ): Boolean = true
1320+
1321+ /** Don't allow to unify result caps */
1322+ override def unify (c1 : ResultCap , c2 : ResultCap )(using Context ): Boolean = false
1323+ end Stateless
1324+
1325+ /** An open state that turns off recording of hidden elements (but allows
1326+ * adding them). Used in `addAsDependentTo`. Instantiated in ccState.Unrecorded.
1327+ */
1328+ class Unrecorded extends VarState , Stateless :
13191329 override def toString = " unrecorded varState"
13201330
13211331 def Unrecorded (using Context ): Unrecorded = ccState.Unrecorded
13221332
13231333 /** A closed state that turns off recording of hidden elements (but allows
13241334 * adding them). Used in `mightAccountFor`. Instantiated in ccState.ClosedUnrecorded.
13251335 */
1326- class ClosedUnrecorded extends Closed :
1327- override def addHidden (hidden : HiddenSet , elem : Capability )(using Context ): Boolean = true
1336+ class ClosedUnrecorded extends Closed , Stateless :
13281337 override def toString = " closed unrecorded varState"
13291338
13301339 def ClosedUnrecorded (using Context ): ClosedUnrecorded = ccState.ClosedUnrecorded
0 commit comments