public Domain <E, V> EdgeConversion(APC from, APC to, bool isJoinPoint, IImmutableMap <V, LispList <V> > data, Domain <E, V> state) { if (data == null) { return(state); } SetDomain <V> oldNonNulls = state.NonNulls; SetDomain <V> nonNulls = SetDomain <V> .TopValue; SetDomain <V> oldNulls = state.Nulls; SetDomain <V> nulls = SetDomain <V> .TopValue; foreach (V variable in data.Keys) { bool nonNullContains = oldNonNulls.Contains(variable); bool nullContains = oldNulls.Contains(variable); if (nonNullContains || nullContains) { foreach (V anotherVariable in data[variable].AsEnumerable()) { if (nonNullContains) { nonNulls = nonNulls.Add(anotherVariable); } if (nullContains) { nulls = nulls.Add(anotherVariable); } } } } return(new Domain <E, V> (nonNulls, nulls)); }
public Domain <E, V> Join(Pair <APC, APC> edge, Domain <E, V> newstate, Domain <E, V> prevstate, out bool weaker, bool widen) { bool nonNullWeaker; SetDomain <V> nonNulls = prevstate.NonNulls.Join(newstate.NonNulls, widen, out nonNullWeaker); bool nullWeaker; SetDomain <V> nulls = prevstate.Nulls.Join(newstate.Nulls, widen, out nullWeaker); weaker = nonNullWeaker || nullWeaker; return(new Domain <E, V> (nonNulls, nulls)); }
public NonNullDomain(SetDomain <V> nonNulls, SetDomain <V> nulls) { this.NonNulls = nonNulls; this.Nulls = nulls; }