tw.ts=ts.clone();
return tw;
}
+
+ public boolean equals(Object o) {
+ if (o instanceof TagWrapper) {
+ TagWrapper tw=(TagWrapper)o;
+ return tw.initts.equals(initts)&&tw.ts.equals(ts);
+ }
+ return false;
+ }
+
+ public int hashCode() {
+ return initts.hashCode()^ts.hashCode();
+ }
}
TaskBinding tb=new TaskBinding(tqi);
while(tb.hasNext()) {
doAnalysis(tb);
-
tb.next();
}
}
TempDescriptor tmp=tmpit.next();
TagWrapper prevtag=prevtable.get(tmp);
if (table.containsKey(tmp)) {
+ //merge tag states
TagWrapper currtag=table.get(tmp);
+ assert(currtag.initts.equals(prevtag.initts));
+ for(Iterator<TagState> tagit=prevtag.ts.iterator();tagit.hasNext();) {
+ TagState tag=tagit.next();
+ if (!currtag.ts.contains(tag)) {
+ currtag.ts.add(tag);
+ }
+ }
} else {
table.put(tmp, prevtag.clone());
}
-
}
}
-
return table;
}
FlatNode fn=tovisit.iterator().next();
tovisit.remove(fn);
visited.add(fn);
+ Hashtable<TempDescriptor, TagState> table=computeInitialState(table, fn);
for(int i=0;i<fn.numNext();i++) {