public Node Insert(Node node, AExpStm newStm)
 {
     //Node must be a node for an AExpStm
     Node newNode = new Node(newStm);
     foreach (Node successor in node.Successors)
     {
         newNode.AddSucc(successor);
     }
     foreach (Node successor in newNode.Successors)
     {
         node.RemoveSucc(successor);
     }
     node.AddSucc(newNode);
     Nodes.Insert(Nodes.IndexOf(node) + 1, newNode);
     return newNode;
 }
 public void Remove(Node node)
 {
     Nodes.Remove(node);
     //Set succ/pred of succ/pred nodes
     foreach (Node predecessor in node.Predecessors)
     {
         foreach (Node successor in node.Successors)
         {
             predecessor.AddSucc(successor);
         }
     }
     //Remove node from succ/pred lists
     for (int i = node.Predecessors.Count - 1; i >= 0; i--)
     {
         Node predecessor = node.Predecessors[i];
         node.RemovePred(predecessor);
     }
     for (int i = node.Successors.Count - 1; i >= 0; i--)
     {
         Node successor = node.Successors[i];
         node.RemoveSucc(successor);
     }
 }
 public void RemovePred(Node node)
 {
     if (Predecessors.Contains(node))
     {
         Predecessors.Remove(node);
         node.RemoveSucc(this);
     }
 }