@@ -11,22 +11,36 @@ import reporting.trace
1111import printing .{Showable , Printer }
1212import printing .Texts .*
1313
14- case class CaptureSet private (elems : CaptureSet .Refs ) extends Showable :
14+ case class CaptureSet private (elems0 : CaptureSet .Refs ) extends Showable :
1515 import CaptureSet .*
1616
17- def isEmpty : Boolean = elems.isEmpty
18- def nonEmpty : Boolean = ! isEmpty
17+ def isEmpty ( using Context ) : Boolean = elems.isEmpty
18+ def nonEmpty ( using Context ) : Boolean = ! isEmpty
1919
20- def ++ (that : CaptureSet ): CaptureSet =
20+ private var isProvisional = true
21+ private var myElems : CaptureSet .Refs = elems0
22+
23+ def elems (using Context ): CaptureSet .Refs =
24+ if isProvisional then
25+ isProvisional = false
26+ myElems.foreach {
27+ case tv : TypeVar =>
28+ if tv.isInstantiated then myElems = myElems - tv ++ tv.inst.captureSet.elems
29+ else isProvisional = true
30+ case _ =>
31+ }
32+ myElems
33+
34+ def ++ (that : CaptureSet )(using Context ): CaptureSet =
2135 if this .isEmpty then that
2236 else if that.isEmpty then this
23- else CaptureSet (elems ++ that.elems)
37+ else CaptureSet (myElems ++ that.elems)
2438
25- def + (ref : CaptureRef ) =
39+ def + (ref : CaptureRef )( using Context ) =
2640 if elems.contains(ref) then this
2741 else CaptureSet (elems + ref)
2842
29- def intersect (that : CaptureSet ): CaptureSet =
43+ def intersect (that : CaptureSet )( using Context ) : CaptureSet =
3044 CaptureSet (this .elems.intersect(that.elems))
3145
3246 /** {x} <:< this where <:< is subcapturing */
@@ -46,10 +60,10 @@ case class CaptureSet private (elems: CaptureSet.Refs) extends Showable:
4660 case ref => ref.singletonCaptureSet
4761 }
4862
49- override def toString = elems .toString
63+ override def toString = myElems .toString
5064
5165 override def toText (printer : Printer ): Text =
52- Str (" {" ) ~ Text (elems .toList.map(printer.toTextCaptureRef), " , " ) ~ Str (" }" )
66+ Str (" {" ) ~ Text (myElems .toList.map(printer.toTextCaptureRef), " , " ) ~ Str (" }" )
5367
5468object CaptureSet :
5569 type Refs = SimpleIdentitySet [CaptureRef ]
0 commit comments