changes
authorbdemsky <bdemsky>
Tue, 8 Jan 2008 23:47:56 +0000 (23:47 +0000)
committerbdemsky <bdemsky>
Tue, 8 Jan 2008 23:47:56 +0000 (23:47 +0000)
Robust/src/Analysis/TaskStateAnalysis/TagWrapper.java
Robust/src/Analysis/TaskStateAnalysis/TaskTagAnalysis.java

index 5ce05f27999ef44d73d2e1090deee11a99a5cf76..eedda21741a2462e62b22b05bc65b770307205ab 100644 (file)
@@ -20,4 +20,16 @@ public class TagWrapper {
        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();
+    }
 }
index d1d023f58c3146ba8b4be9d98fec957f9bd42ee0..093102e9cf255bf6094edec408d779d97d799429 100644 (file)
@@ -69,7 +69,6 @@ public class TaskTagAnalysis {
        TaskBinding tb=new TaskBinding(tqi);
        while(tb.hasNext()) {
            doAnalysis(tb);
-           
            tb.next();
        }
     }
@@ -83,14 +82,20 @@ public class TaskTagAnalysis {
                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;
     }
 
@@ -106,6 +111,7 @@ public class TaskTagAnalysis {
            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++) {