while(!lbtovisit.isEmpty()) {
LocalityBinding lb=(LocalityBinding) lbtovisit.iterator().next();
lbtovisit.remove(lb);
+
+ System.out.println("Analyzing "+lb);
Integer returnglobal=lb.getGlobalReturn();
MethodDescriptor md=lb.getMethod();
Hashtable<FlatNode,Hashtable<TempDescriptor, Integer>> temptable=new Hashtable<FlatNode,Hashtable<TempDescriptor, Integer>>();
break;
case FKind.FlatCall:
- processCallNode(lb, (FlatCall)fn, currtable, isAtomic(atomictable, fn));
+ processCallNode(lb, (FlatCall)fn, currtable, isAtomic(atomictable, fn), temptable.get(fn));
break;
case FKind.FlatFieldNode:
return CONFLICT;
}
- void processCallNode(LocalityBinding currlb, FlatCall fc, Hashtable<TempDescriptor, Integer> currtable, boolean isatomic) {
+ void processCallNode(LocalityBinding currlb, FlatCall fc, Hashtable<TempDescriptor, Integer> currtable, boolean isatomic, Hashtable<TempDescriptor,Integer> oldtable) {
MethodDescriptor nodemd=fc.getMethod();
Set methodset=null;
Set runmethodset=null;
}
Integer currreturnval=EITHER; //Start off with the either value
+ if (oldtable!=null&&fc.getReturnTemp()!=null&&
+ oldtable.get(fc.getReturnTemp())!=null) {
+ //ensure termination
+ currreturnval=merge(currreturnval, oldtable.get(fc.getReturnTemp()));
+ }
+
for(Iterator methodit=methodset.iterator(); methodit.hasNext();) {
MethodDescriptor md=(MethodDescriptor) methodit.next();