Lots of changes that aren't working yet, so new methods are commented and existing...
[IRC.git] / Robust / src / IR / Flat / FlatSESEEnterNode.java
1 package IR.Flat;
2 import Analysis.MLP.VariableSourceToken;
3 import IR.Tree.SESENode;
4 import java.util.*;
5
6 public class FlatSESEEnterNode extends FlatNode {
7   private static int identifier=0;
8   private int id;
9   protected FlatSESEExitNode exit;
10   protected SESENode treeNode;
11   protected FlatSESEEnterNode parent;
12   protected Set<FlatSESEEnterNode> children;
13   protected Set<TempDescriptor> inVars;
14   protected Set<TempDescriptor> outVars;
15   protected FlatMethod enclosing;
16
17   public FlatSESEEnterNode( SESENode sn ) {
18     this.id  = identifier++;
19     treeNode = sn;
20     children = new HashSet<FlatSESEEnterNode>();
21     inVars   = new HashSet<TempDescriptor>();
22     outVars  = new HashSet<TempDescriptor>();
23   }
24
25   public void rewriteUse() {
26   }
27
28   public void rewriteDef() {
29   }
30
31   public void setParent( FlatSESEEnterNode parent ) {
32     this.parent = parent;
33   }
34
35   public FlatSESEEnterNode getParent() {
36     return parent;
37   }
38
39   public void addChild( FlatSESEEnterNode child ) {
40     children.add( child );
41   }
42
43   public Set<FlatSESEEnterNode> getChildren() {
44     return children;
45   }
46
47   public void addInVar( TempDescriptor td ) {
48     inVars.add( td );
49   }
50
51   public void addOutVar( TempDescriptor td ) {
52     outVars.add( td );
53   }
54
55   public void addInVarSet( Set<TempDescriptor> s ) {
56     inVars.addAll( s );
57   }
58
59   public void addOutVarSet( Set<TempDescriptor> s ) {
60     outVars.addAll( s );
61   }
62
63   public Set<TempDescriptor> getInVarSet() {
64     return inVars;
65   }
66
67   Vector<TempDescriptor> vecinVars;
68   void buildvarVec() {
69     HashSet<TempDescriptor> paramset=new HashSet<TempDescriptor>();
70     paramset.addAll(inVars);
71     paramset.addAll(outVars);
72     vecinVars=new Vector<TempDescriptor>();
73     vecinVars.addAll(paramset);
74   }
75
76   public TempDescriptor getParameter(int i) {
77     if (vecinVars==null) {
78       buildvarVec();
79     }
80     return vecinVars.get(i);
81   }
82
83   public int numParameters() {
84     if (vecinVars==null) {
85       buildvarVec();
86     }
87     return vecinVars.size();
88   }
89
90   public Set<FlatNode> getNodeSet() {
91     HashSet<FlatNode> tovisit=new HashSet<FlatNode>();
92     HashSet<FlatNode> visited=new HashSet<FlatNode>();
93     tovisit.add(this);
94     while(!tovisit.isEmpty()) {
95       FlatNode fn=tovisit.iterator().next();
96       tovisit.remove(fn);
97       visited.add(fn);
98       
99       if (fn!=exit) {
100         for(int i=0; i<fn.numNext(); i++) {
101           FlatNode nn=fn.getNext(i);
102           if (!visited.contains(nn))
103             tovisit.add(nn);
104         }
105       }
106     }
107     return visited;
108   }
109
110   public Set<TempDescriptor> getOutVarSet() {
111     return outVars;
112   }
113
114   public void setEnclosingFlatMeth( FlatMethod fm ) {
115     enclosing = fm;
116   }
117
118   public FlatMethod getEnclosingFlatMeth() {
119     return enclosing;
120   }
121
122   public SESENode getTreeNode() {
123     return treeNode;
124   }
125
126   public int getIdentifier() {
127     return id;
128   }
129
130   public String getPrettyIdentifier() {    
131     if( treeNode.getID() != null ) {
132       return treeNode.getID();
133     }     
134     return ""+id;
135   }
136
137   public String toString() {
138     return "sese "+getPrettyIdentifier()+" enter";
139   }
140
141   public void setFlatExit( FlatSESEExitNode fsexn ) {
142     exit = fsexn;
143   }
144
145   public FlatSESEExitNode getFlatExit() {
146     return exit;
147   }
148
149   public int kind() {
150     return FKind.FlatSESEEnterNode;
151   }
152 }