12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152open!Core_kernelopen!Importtype('a,'permission)t=('a,'permission)Types.Bvar.ttype'arepr='aTypes.Bvar.repr={mutablehas_any_waiters:bool;mutableivar:'aIvar.t}[@@derivingfields,sexp_of]letinvariantinvariant_a_t=letrepr=Types.Bvar.to_reprtinInvariant.invariant[%here]repr[%sexp_of:_repr](fun()->letcheckf=Invariant.check_fieldreprfinFields_of_repr.iter~has_any_waiters:(check(funhas_any_waiters->ifIvar.has_handlersrepr.ivarthenasserthas_any_waiters))~ivar:(check(funivar->Ivar.invariantinvariant_aivar;assert(Ivar.is_emptyivar))));;letsexp_of_t__t=let{has_any_waiters;ivar=_}=Types.Bvar.to_reprtin(* We don't show [ivar] because it's always empty. *)[%message(has_any_waiters:bool)];;includeScheduler1.Bvarletbroadcastta=letrepr=Types.Bvar.to_reprtinifrepr.has_any_waitersthen(repr.has_any_waiters<-false;Ivar.fillrepr.ivara;repr.ivar<-Ivar.create());;letwaitt=letrepr=Types.Bvar.to_reprtinrepr.has_any_waiters<-true;Ivar.readrepr.ivar;;lethas_any_waiterst=letrepr=Types.Bvar.to_reprtinrepr.has_any_waiters;;