@@ -1220,6 +1220,9 @@ object CaptureSet:
1220
1220
*/
1221
1221
class HiddenSet (initialOwner : Symbol , val owningCap : FreshCap )(using @ constructorOnly ictx : Context )
1222
1222
extends Var (initialOwner):
1223
+
1224
+ // Updated by anchorCaps in CheckCaptures, but owner can be changed only
1225
+ // if it was NoSymbol before.
1223
1226
var givenOwner : Symbol = initialOwner
1224
1227
1225
1228
override def owner = givenOwner
@@ -1228,62 +1231,9 @@ object CaptureSet:
1228
1231
1229
1232
description = i " of elements subsumed by a fresh cap in $initialOwner"
1230
1233
1231
- private def aliasRef : FreshCap | Null =
1232
- if myElems.size == 1 then
1233
- myElems.nth(0 ) match
1234
- case alias : FreshCap if deps.contains(alias.hiddenSet) => alias
1235
- case _ => null
1236
- else null
1237
-
1238
- private def aliasSet : HiddenSet =
1239
- if myElems.size == 1 then
1240
- myElems.nth(0 ) match
1241
- case alias : FreshCap if deps.contains(alias.hiddenSet) => alias.hiddenSet
1242
- case _ => this
1243
- else this
1244
-
1245
- def superCaps : List [FreshCap ] =
1246
- deps.toList.map(_.asInstanceOf [HiddenSet ].owningCap)
1247
-
1248
- override def elems : Refs =
1249
- val al = aliasSet
1250
- if al eq this then super .elems else al.elems
1251
-
1252
- override def elems_= (refs : Refs ) =
1253
- val al = aliasSet
1254
- if al eq this then super .elems_=(refs) else al.elems_=(refs)
1255
-
1256
- /** Add element to hidden set. Also add it to all supersets (as indicated by
1257
- * deps of this set). Follow aliases on both hidden set and added element
1258
- * before adding. If the added element is also a Fresh instance with
1259
- * hidden set H which is a superset of this set, then make this set an
1260
- * alias of H.
1261
- */
1234
+ /** Add element to hidden set. */
1262
1235
def add (elem : Capability )(using ctx : Context , vs : VarState ): Unit =
1263
- val alias = aliasSet
1264
- if alias ne this then alias.add(elem)
1265
- else
1266
- def addToElems () =
1267
- assert(! isConst)
1268
- includeElem(elem)
1269
- deps.foreach: dep =>
1270
- assert(dep != this )
1271
- vs.addHidden(dep.asInstanceOf [HiddenSet ], elem)
1272
- elem match
1273
- case elem : FreshCap =>
1274
- if this ne elem.hiddenSet then
1275
- val alias = elem.hiddenSet.aliasRef
1276
- if alias != null then
1277
- add(alias)
1278
- else if deps.contains(elem.hiddenSet) then // make this an alias of elem
1279
- capt.println(i " Alias $this to ${elem.hiddenSet}" )
1280
- elems = SimpleIdentitySet (elem)
1281
- deps = SimpleIdentitySet (elem.hiddenSet)
1282
- else
1283
- addToElems()
1284
- elem.hiddenSet.includeDep(this )
1285
- case _ =>
1286
- addToElems()
1236
+ includeElem(elem)
1287
1237
1288
1238
/** Apply function `f` to `elems` while setting `elems` to empty for the
1289
1239
* duration. This is used to escape infinite recursions if two Freshs
0 commit comments