From d580ef4afd82edcfafd6940f724d5eaa8120f54f Mon Sep 17 00:00:00 2001 From: sivaji Date: Sat, 19 May 2007 07:54:38 +0000 Subject: [PATCH] Working versions of FlagState and TaskAnalysis(with TAGs) --- .../TaskStateAnalysis/TaskAnalysis.java | 67 +++++++++++++------ 1 file changed, 46 insertions(+), 21 deletions(-) diff --git a/Robust/src/Analysis/TaskStateAnalysis/TaskAnalysis.java b/Robust/src/Analysis/TaskStateAnalysis/TaskAnalysis.java index 6469560e..cedc52aa 100644 --- a/Robust/src/Analysis/TaskStateAnalysis/TaskAnalysis.java +++ b/Robust/src/Analysis/TaskStateAnalysis/TaskAnalysis.java @@ -9,9 +9,6 @@ import java.io.FileWriter; import java.io.FileOutputStream; - - - public class TaskAnalysis { State state; Hashtable flagstates; @@ -133,6 +130,7 @@ public class TaskAnalysis { while (!toprocess.isEmpty()) { FlagState trigger=toprocess.poll(); createPossibleRuntimeStates(trigger); + analyseTasks(trigger); } @@ -162,6 +160,15 @@ public class TaskAnalysis { for(Iterator it_tasks=state.getTaskSymbolTable().getDescriptorsIterator();it_tasks.hasNext();) { TaskDescriptor td = (TaskDescriptor)it_tasks.next(); String taskname=td.getSymbol(); + + //**Debug***/ + System.out.println(); + System.out.println(cd.getSymbol()+" : "+fs.getTextLabel()); + System.out.println("Task: "+taskname); + //*********** + + + /** counter to keep track of the number of parameters (of the task being analyzed) that * are satisfied by the flagstate. */ @@ -189,6 +196,11 @@ public class TaskAnalysis { if (trigger_ctr>1) throw new Error("Illegal Operation: A single flagstate cannot satisfy more than one parameter of a task."); + + //** debug + System.out.println("Task:" + taskname +" is triggered"); + + //Iterating through the nodes FlatNode fn=fm.methodEntryNode(); @@ -212,19 +224,29 @@ public class TaskAnalysis { if (ffan.getTempFlagPairs().hasNext()||ffan.getTempTagPairs().hasNext()) throw new Error("PRE FlagActions not supported"); } else if (ffan.getTaskType() == FlatFlagActionNode.NEWOBJECT) { + //*** + System.out.println("NEWOBJ"); + //*** FlagState fsnew=evalNewObjNode(ffan); //Have we seen this node yet - if (!sourcenodes.containsKey(fsnew)) { - sourcenodes.put(fsnew, fsnew); + if(fsnew!=null){ + if (! ((Hashtable)flagstates.get(fsnew.getClassDescriptor())).containsKey(fsnew)) { + ((Hashtable)flagstates.get(fsnew.getClassDescriptor())).put(fsnew, fsnew); toprocess.add(fsnew); } + } } else if (ffan.getTaskType() == FlatFlagActionNode.TASKEXIT) { - Vector fsv_taskexit=evalTaskExitNode(ffan,cd,fs,temp); + //*** + System.out.println("TASKEXIT"); + //*** + + Vector fsv_taskexit=evalTaskExitNode(ffan,cd,fs,temp); for(Enumeration en=fsv_taskexit.elements();en.hasMoreElements();){ FlagState fs_taskexit=(FlagState)en.nextElement(); if (!sourcenodes.containsKey(fs_taskexit)) { toprocess.add(fs_taskexit); + } //seen this node already fs_taskexit=canonicalizeFlagState(sourcenodes,fs_taskexit); @@ -266,7 +288,7 @@ private boolean isTaskTrigger_flag(FlagExpressionNode fen,FlagState fs) { private boolean isTaskTrigger_tag(TagExpressionList tel, FlagState fs){ - + if (tel!=null){ for (int i=0;i sourcenodes=(Hashtable)flagstates.get(cd); FlagDescriptor[] fd=(FlagDescriptor[])flags.get(cd); int externs=((Integer)extern_flags.get(cd)).intValue(); + if(externs==0) return; -- 2.34.1