+2007-03-26 Raja R Harinath <rharinath@novell.com>
+
+ * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
+ replaced by a boolean. Add boolean 'is_unreachable' field, check
+ and maintain invariants.
+
2007-03-25 Marek Safar <marek.safar@gmail.com>
* anonymous.cs: Restored checks disabled for uninflated anonymous methods.
Always
}
+ bool is_unreachable;
TriState barrier;
Reachability (TriState barrier)
{
this.barrier = barrier;
+ this.is_unreachable = barrier == TriState.Always;
+ }
+
+ void Check ()
+ {
+ if (is_unreachable != (barrier == TriState.Always))
+ throw new InternalErrorException (is_unreachable + " vs. " + barrier);
}
public Reachability Clone ()
public void Meet (Reachability b)
{
barrier = TriState_Meet (barrier, b.barrier);
+ is_unreachable &= b.is_unreachable;
+ Check ();
}
public void Or (Reachability b)
{
barrier = TriState_Max (barrier, b.barrier);
+ is_unreachable |= b.is_unreachable;
+ Check ();
}
public static Reachability Always ()
}
public bool IsUnreachable {
- get { return barrier == TriState.Always; }
+ get { Check (); return is_unreachable; }
}
public void SetBarrier ()
{
barrier = TriState.Always;
+ is_unreachable = true;
}
static string ShortName (TriState t)