adding a test case
[IRC.git] / Robust / src / IR / Flat / FlatWriteDynamicVarNode.java
1 package IR.Flat;
2 import Analysis.OoOJava.VSTWrapper;
3 import java.util.Hashtable;
4
5
6 // This node is inserted by the OOOJava analysis
7 // in between a (tail -> head) IR graph edge.
8 // It is for tracking SESE variables with
9 // dynamic sources
10 public class FlatWriteDynamicVarNode extends FlatNode {
11
12
13   protected FlatNode tailNode;
14   protected FlatNode headNode;
15
16   protected Hashtable<TempDescriptor, VSTWrapper> var2src;
17
18   protected FlatSESEEnterNode enclosingSESE;
19
20
21   public FlatWriteDynamicVarNode(FlatNode t,
22                                  FlatNode h,
23                                  Hashtable<TempDescriptor, VSTWrapper> v2s,
24                                  FlatSESEEnterNode c
25                                  ) {
26     tailNode      = t;
27     headNode      = h;
28     var2src       = v2s;
29     enclosingSESE = c;
30   }
31
32   public void spliceIntoIR() {
33
34     if(tailNode instanceof FlatCondBranch) {
35
36       headNode.removePrev(tailNode);
37
38       if(tailNode.next.elementAt(0).equals(headNode)) {
39         tailNode.removeNext(headNode);
40         ((FlatCondBranch)tailNode).addTrueNext(this);
41       } else {
42         tailNode.removeNext(headNode);
43         ((FlatCondBranch)tailNode).addFalseNext(this);
44       }
45
46       this.addNext(headNode);
47     } else {
48       tailNode.removeNext(headNode);
49       headNode.removePrev(tailNode);
50
51       tailNode.addNext(this);
52       this.addNext(headNode);
53     }
54
55   }
56
57   public void addMoreVar2Src(Hashtable<TempDescriptor, VSTWrapper> more) {
58     var2src.putAll(more);
59   }
60
61   public Hashtable<TempDescriptor, VSTWrapper> getVar2src() {
62     return var2src;
63   }
64
65   public FlatSESEEnterNode getEnclosingSESE() {
66     return enclosingSESE;
67   }
68
69   public String toString() {
70     return "writeDynVars "+var2src;
71   }
72
73   public int kind() {
74     return FKind.FlatWriteDynamicVarNode;
75   }
76
77   public FlatNode clone(TempMap t) {
78     return new FlatWriteDynamicVarNode(tailNode,
79                                        headNode,
80                                        var2src,
81                                        enclosingSESE
82                                        );
83   }
84   public void rewriteUse(TempMap t) {
85   }
86 }