Lines Matching defs:Effect
29 struct Effect {
35 Effect() : modality(DEFINITE) {}
36 explicit Effect(Bounds b, Modality m = DEFINITE) : modality(m), bounds(b) {}
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
96 void Seq(Var var, Effect effect) {
99 effect = Effect::Seq(locator.value(), effect, Base::zone());
110 void Alt(Var var, Effect effect) {
113 effect = Effect::Alt(locator.value(), effect, Base::zone());
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;
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(); }