2 import Analysis.MLP.VariableSourceToken;
3 import Analysis.MLP.VarSrcTokTable;
4 import Analysis.MLP.SESEandAgePair;
5 import IR.MethodDescriptor;
6 import IR.ClassDescriptor;
7 import IR.TypeDescriptor;
8 import IR.Tree.SESENode;
11 public class FlatSESEEnterNode extends FlatNode {
13 // SESE class identifiers should be numbered
14 // sequentially from 0 to 1-(total # SESE's)
15 private static int identifier=0;
18 protected FlatSESEExitNode exit;
19 protected SESENode treeNode;
20 protected FlatSESEEnterNode parent;
21 protected Integer oldestAgeToTrack;
22 protected boolean isCallerSESEplaceholder;
24 protected Set<FlatSESEEnterNode> children;
26 protected Set<TempDescriptor> inVars;
27 protected Set<TempDescriptor> outVars;
29 protected Set<SESEandAgePair> needStaticNameInCode;
31 protected Set<SESEandAgePair> staticInVarSrcs;
33 protected Set<TempDescriptor> readyInVars;
34 protected Set<TempDescriptor> staticInVars;
35 protected Set<TempDescriptor> dynamicInVars;
37 protected Set<TempDescriptor> dynamicVars;
39 protected Hashtable<TempDescriptor, VariableSourceToken> staticInVar2src;
42 // scope info for this SESE
43 protected FlatMethod fmEnclosing;
44 protected MethodDescriptor mdEnclosing;
45 protected ClassDescriptor cdEnclosing;
47 // structures that allow SESE to appear as
48 // a normal method to code generation
49 protected FlatMethod fmBogus;
50 protected MethodDescriptor mdBogus;
53 public FlatSESEEnterNode( SESENode sn ) {
54 this.id = identifier++;
57 oldestAgeToTrack = new Integer( 0 );
59 children = new HashSet<FlatSESEEnterNode>();
60 inVars = new HashSet<TempDescriptor>();
61 outVars = new HashSet<TempDescriptor>();
62 needStaticNameInCode = new HashSet<SESEandAgePair>();
63 staticInVarSrcs = new HashSet<SESEandAgePair>();
64 readyInVars = new HashSet<TempDescriptor>();
65 staticInVars = new HashSet<TempDescriptor>();
66 dynamicInVars = new HashSet<TempDescriptor>();
67 dynamicVars = new HashSet<TempDescriptor>();
69 staticInVar2src = new Hashtable<TempDescriptor, VariableSourceToken>();
75 isCallerSESEplaceholder = false;
78 public void rewriteUse() {
81 public void rewriteDef() {
84 public void setFlatExit( FlatSESEExitNode fsexn ) {
88 public FlatSESEExitNode getFlatExit() {
93 return FKind.FlatSESEEnterNode;
96 public SESENode getTreeNode() {
100 public int getIdentifier() {
104 public String getPrettyIdentifier() {
105 if( treeNode.getID() != null ) {
106 return treeNode.getID();
111 public String toString() {
112 return "sese "+getPrettyIdentifier()+" enter";
115 public void setParent( FlatSESEEnterNode parent ) {
116 this.parent = parent;
119 public FlatSESEEnterNode getParent() {
123 public void addChild( FlatSESEEnterNode child ) {
124 children.add( child );
127 public Set<FlatSESEEnterNode> getChildren() {
131 public void addInVar( TempDescriptor td ) {
135 public void addOutVar( TempDescriptor td ) {
139 public void addInVarSet( Set<TempDescriptor> s ) {
143 public void addOutVarSet( Set<TempDescriptor> s ) {
147 public Set<TempDescriptor> getInVarSet() {
151 Vector<TempDescriptor> vecinVars;
153 HashSet<TempDescriptor> paramset=new HashSet<TempDescriptor>();
154 paramset.addAll(inVars);
155 paramset.addAll(outVars);
156 vecinVars=new Vector<TempDescriptor>();
157 vecinVars.addAll(paramset);
160 public TempDescriptor getParameter(int i) {
161 if (vecinVars==null) {
164 return vecinVars.get(i);
167 public int numParameters() {
168 if (vecinVars==null) {
171 return vecinVars.size();
174 public Set<FlatNode> getNodeSet() {
175 HashSet<FlatNode> tovisit=new HashSet<FlatNode>();
176 HashSet<FlatNode> visited=new HashSet<FlatNode>();
178 while(!tovisit.isEmpty()) {
179 FlatNode fn=tovisit.iterator().next();
184 for(int i=0; i<fn.numNext(); i++) {
185 FlatNode nn=fn.getNext(i);
186 if (!visited.contains(nn))
194 public Set<TempDescriptor> getOutVarSet() {
198 public void addNeededStaticName( SESEandAgePair p ) {
199 needStaticNameInCode.add( p );
202 public Set<SESEandAgePair> getNeededStaticNames() {
203 return needStaticNameInCode;
206 public void addStaticInVarSrc( SESEandAgePair p ) {
207 staticInVarSrcs.add( p );
210 public Set<SESEandAgePair> getStaticInVarSrcs() {
211 return staticInVarSrcs;
214 public void addReadyInVar( TempDescriptor td ) {
215 readyInVars.add( td );
218 public Set<TempDescriptor> getReadyInVarSet() {
222 public void addStaticInVar( TempDescriptor td ) {
223 staticInVars.add( td );
226 public Set<TempDescriptor> getStaticInVarSet() {
230 public void putStaticInVar2src( TempDescriptor staticInVar,
231 VariableSourceToken vst ) {
232 staticInVar2src.put( staticInVar, vst );
235 public VariableSourceToken getStaticInVarSrc( TempDescriptor staticInVar ) {
236 return staticInVar2src.get( staticInVar );
239 public void addDynamicInVar( TempDescriptor td ) {
240 dynamicInVars.add( td );
243 public Set<TempDescriptor> getDynamicInVarSet() {
244 return dynamicInVars;
247 public void addDynamicVar( TempDescriptor td ) {
248 dynamicVars.add( td );
251 public Set<TempDescriptor> getDynamicVarSet() {
255 public void mustTrackAtLeastAge( Integer age ) {
256 if( age > oldestAgeToTrack ) {
257 oldestAgeToTrack = new Integer( age );
261 public Integer getOldestAgeToTrack() {
262 return oldestAgeToTrack;
265 public void setfmEnclosing( FlatMethod fm ) { fmEnclosing = fm; }
266 public FlatMethod getfmEnclosing() { return fmEnclosing; }
268 public void setmdEnclosing( MethodDescriptor md ) { mdEnclosing = md; }
269 public MethodDescriptor getmdEnclosing() { return mdEnclosing; }
271 public void setcdEnclosing( ClassDescriptor cd ) { cdEnclosing = cd; }
272 public ClassDescriptor getcdEnclosing() { return cdEnclosing; }
274 public void setfmBogus( FlatMethod fm ) { fmBogus = fm; }
275 public FlatMethod getfmBogus() { return fmBogus; }
277 public void setmdBogus( MethodDescriptor md ) { mdBogus = md; }
278 public MethodDescriptor getmdBogus() { return mdBogus; }
280 public String getSESEmethodName() {
281 assert cdEnclosing != null;
282 assert mdBogus != null;
285 cdEnclosing.getSafeSymbol()+
286 mdBogus.getSafeSymbol()+
288 mdBogus.getSafeMethodDescriptor();
291 public String getSESErecordName() {
292 assert cdEnclosing != null;
293 assert mdBogus != null;
297 cdEnclosing.getSafeSymbol()+
298 mdBogus.getSafeSymbol()+
300 mdBogus.getSafeMethodDescriptor()+
304 public void setCallerSESEplaceholder() {
305 isCallerSESEplaceholder = true;
308 public boolean getIsCallerSESEplaceholder() {
309 return isCallerSESEplaceholder;
313 public boolean equals( Object o ) {
318 if( !(o instanceof FlatSESEEnterNode) ) {
322 FlatSESEEnterNode fsen = (FlatSESEEnterNode) o;
323 return id == fsen.id;
326 public int hashCode() {