public bool AddReachedLabel(Statement label)
{
List <DefiniteAssignmentBitSet> das;
if (LabelStack == null)
{
LabelStack = new Dictionary <Statement, List <DefiniteAssignmentBitSet> > ();
das = null;
}
else
{
LabelStack.TryGetValue(label, out das);
}
if (das == null)
{
das = new List <DefiniteAssignmentBitSet> ();
das.Add(new DefiniteAssignmentBitSet(DefiniteAssignment));
LabelStack.Add(label, das);
return(false);
}
foreach (var existing in das)
{
if (DefiniteAssignmentBitSet.AreEqual(existing, DefiniteAssignment))
{
return(true);
}
}
if (DefiniteAssignment == DefiniteAssignmentBitSet.Empty)
{
das.Add(DefiniteAssignment);
}
else
{
das.Add(new DefiniteAssignmentBitSet(DefiniteAssignment));
}
return(false);
}