Fix tabbing.... Please fix your editors so they do tabbing correctly!!! (Spaces...
[IRC.git] / Robust / src / IR / Flat / FlatWriteDynamicVarNode.java
index 552b845b74e30e1b69ab7738ce4b1743c345b604..d6cbe7f216295028e4432491832273423dd689eb 100644 (file)
@@ -1,9 +1,9 @@
 package IR.Flat;
-import Analysis.MLP.VSTWrapper;
+import Analysis.OoOJava.VSTWrapper;
 import java.util.Hashtable;
 
 
-// This node is inserted by the MLP analysis
+// This node is inserted by the OOOJava analysis
 // in between a (tail -> head) IR graph edge.
 // It is for tracking SESE variables with
 // dynamic sources
@@ -12,17 +12,17 @@ public class FlatWriteDynamicVarNode extends FlatNode {
 
   protected FlatNode tailNode;
   protected FlatNode headNode;
-  
+
   protected Hashtable<TempDescriptor, VSTWrapper> var2src;
 
   protected FlatSESEEnterNode enclosingSESE;
 
 
-  public FlatWriteDynamicVarNode( FlatNode t,
-                                 FlatNode h,
-                                 Hashtable<TempDescriptor, VSTWrapper> v2s,
-                                 FlatSESEEnterNode c
-                               ) {
+  public FlatWriteDynamicVarNode(FlatNode t,
+                                 FlatNode h,
+                                 Hashtable<TempDescriptor, VSTWrapper> v2s,
+                                 FlatSESEEnterNode c
+                                 ) {
     tailNode      = t;
     headNode      = h;
     var2src       = v2s;
@@ -30,15 +30,32 @@ public class FlatWriteDynamicVarNode extends FlatNode {
   }
 
   public void spliceIntoIR() {
-    tailNode.removeNext( headNode );
-    headNode.removePrev( tailNode );
-    
-    tailNode.addNext( this );
-    this.addNext( headNode );
+
+    if(tailNode instanceof FlatCondBranch) {
+
+      headNode.removePrev(tailNode);
+
+      if(tailNode.next.elementAt(0).equals(headNode)) {
+       tailNode.removeNext(headNode);
+       ((FlatCondBranch)tailNode).addTrueNext(this);
+      } else {
+       tailNode.removeNext(headNode);
+       ((FlatCondBranch)tailNode).addFalseNext(this);
+      }
+
+      this.addNext(headNode);
+    } else {
+      tailNode.removeNext(headNode);
+      headNode.removePrev(tailNode);
+
+      tailNode.addNext(this);
+      this.addNext(headNode);
+    }
+
   }
 
-  public void addMoreVar2Src( Hashtable<TempDescriptor, VSTWrapper> more ) {
-    var2src.putAll( more );
+  public void addMoreVar2Src(Hashtable<TempDescriptor, VSTWrapper> more) {
+    var2src.putAll(more);
   }
 
   public Hashtable<TempDescriptor, VSTWrapper> getVar2src() {
@@ -58,11 +75,11 @@ public class FlatWriteDynamicVarNode extends FlatNode {
   }
 
   public FlatNode clone(TempMap t) {
-    return new FlatWriteDynamicVarNode( tailNode, 
-                                       headNode, 
-                                       var2src, 
-                                       enclosingSESE 
-                                       );
+    return new FlatWriteDynamicVarNode(tailNode,
+                                       headNode,
+                                       var2src,
+                                       enclosingSESE
+                                       );
   }
   public void rewriteUse(TempMap t) {
   }