Home | History | Annotate | Download | only in src

Lines Matching defs:Effect

19 // An effect can either be definite, if the write is known to have taken place,
25 // effect cancels out any previous effect upon sequencing. A possible effect
26 // merges into a previous effect, i.e., type bounds are merged. Alternative
27 // composition always merges bounds. It yields a possible effect if at least
29 struct Effect {
35 Effect() : modality(DEFINITE) {}
36 explicit Effect(Bounds b, Modality m = DEFINITE) : modality(m), bounds(b) {}
38 // The unknown effect.
39 static Effect Unknown(Zone* zone) {
40 return Effect(Bounds::Unbounded(zone), POSSIBLE);
43 static Effect Forget(Zone* zone) {
44 return Effect(Bounds::Unbounded(zone), DEFINITE);
48 static Effect Seq(Effect e1, Effect e2, Zone* zone) {
50 return Effect(Bounds::Either(e1.bounds, e2.bounds, zone), e1.modality);
54 static Effect Alt(Effect e1, Effect e2, Zone* zone) {
55 return Effect(
83 Effect Lookup(Var var) {
86 ? locator.value() : Effect::Unknown(Base::zone());
90 Effect effect = Lookup(var);
91 return effect.modality == Effect::DEFINITE
92 ? effect.bounds : Bounds::Unbounded(Base::zone());
96 void Seq(Var var, Effect effect) {
99 effect = Effect::Seq(locator.value(), effect, Base::zone());
101 locator.set_value(effect);
110 void Alt(Var var, Effect effect) {
113 effect = Effect::Alt(locator.value(), effect, Base::zone());
115 locator.set_value(effect);
128 Effect::Forget(Base::zone()), Effects(Base::zone()) };
138 void Call(Var var, Effect effect) { self.Seq(var, effect); }
144 void Call(Var var, Effect effect) { self.Alt(var, effect); }
150 void Call(Var var, Effect effect) {
151 if (effect.modality == Effect::DEFINITE && !other.Contains(var)) {
152 effect.modality = Effect::POSSIBLE;
155 locator.set_value(effect);
163 void Call(Var var, Effect effect) { effects.Seq(var, new_effect); }
164 Effect new_effect;
189 typedef Effect Value;
191 static Effect NoValue() { return Effect(); }
318 // Create an extension of the current effect set. The current set should not