private void RemoveSubtype(ClassHierarchyNode superType, ClassHierarchyNode subType)
 {
     if (!superType.get_SubTypes().Contains(subType))
     {
         throw new ArgumentOutOfRangeException(String.Format("No such relation between {0} and {1}.", this, subType));
     }
     dummyVar0 = superType.get_SubTypes().Remove(subType);
     dummyVar1 = subType.get_CanAssignTo().Remove(superType);
     return;
 }
 private void RecursiveDfs(ClassHierarchyNode node)
 {
     this.preorderNumber = this.preorderNumber + 1;
     this.used.Add(node, this.preorderNumber);
     this.s.Push(node);
     this.p.Push(node);
     V_0 = node.get_CanAssignTo().GetEnumerator();
     try
     {
         while (V_0.MoveNext())
         {
             V_1 = V_0.get_Current();
             if (this.used.ContainsKey(V_1))
             {
                 if (this.nodeToComponent.ContainsKey(V_1))
                 {
                     continue;
                 }
                 V_2 = this.used.get_Item(V_1);
                 while (V_2 < this.used.get_Item(this.p.Peek()))
                 {
                     dummyVar0 = this.p.Pop();
                 }
             }
             else
             {
                 this.RecursiveDfs(V_1);
             }
         }
     }
     finally
     {
         if (V_0 != null)
         {
             V_0.Dispose();
         }
     }
     if (this.p.Peek() == node)
     {
         while (this.s.Peek() != node)
         {
             V_3 = this.s.Pop();
             this.nodeToComponent.Add(V_3, this.componentCount);
         }
         this.nodeToComponent.Add(this.p.Pop(), this.componentCount);
         dummyVar1           = this.s.Pop();
         this.componentCount = this.componentCount + 1;
     }
     return;
 }