From: bdemsky Date: Fri, 4 May 2007 09:23:20 +0000 (+0000) Subject: fix small problems... X-Git-Tag: preEdgeChange~598 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=b27c63a58942cb60597bc52ecd6636565a9dbc34;p=IRC.git fix small problems... --- diff --git a/Robust/src/Analysis/TaskStateAnalysis/TaskAnalysis.java b/Robust/src/Analysis/TaskStateAnalysis/TaskAnalysis.java index 77c2a178..c6d17d80 100644 --- a/Robust/src/Analysis/TaskStateAnalysis/TaskAnalysis.java +++ b/Robust/src/Analysis/TaskStateAnalysis/TaskAnalysis.java @@ -15,8 +15,6 @@ public class TaskAnalysis { Hashtable flags; Hashtable extern_flags; Queue toprocess; - Hashtable map; - TempDescriptor temp; TypeUtil typeutil; /** @@ -29,7 +27,6 @@ public class TaskAnalysis { public TaskAnalysis(State state,Hashtable map) { this.state=state; - this.map=map; this.typeutil=new TypeUtil(state); } @@ -140,34 +137,33 @@ public class TaskAnalysis { private void analyseTasks(FlagState fs) { - Hashtable sourcenodes; - ClassDescriptor cd=fs.getClassDescriptor(); - - sourcenodes=(Hashtable)flagstates.get(cd); + Hashtable sourcenodes=(Hashtable)flagstates.get(cd); for(Iterator it_tasks=state.getTaskSymbolTable().getDescriptorsIterator();it_tasks.hasNext();) { TaskDescriptor td = (TaskDescriptor)it_tasks.next(); String taskname=td.getSymbol(); int trigger_ctr=0; - + TempDescriptor temp=null; + FlatMethod fm = state.getMethodFlat(td); + for(int i=0; i < td.numParameters(); i++) { FlagExpressionNode fen=td.getFlag(td.getParameter(i)); + if (typeutil.isSuperorType(td.getParamType(i).getClassDesc(),cd) && isTaskTrigger(fen,fs)) { - temp=(TempDescriptor)map.get(td.getParameter(i)); + temp=fm.getParameter(i); trigger_ctr++; } } - if (trigger_ctr==0) - return; + if (trigger_ctr==0) //Look at next task + continue; if (trigger_ctr>1) throw new Error("Illegal Operation: A single flagstate cannot satisfy more than one parameter of a task."); //Iterating through the nodes - FlatMethod fm = state.getMethodFlat(td); FlatNode fn=fm.methodEntryNode(); HashSet tovisit= new HashSet(); @@ -184,21 +180,20 @@ private void analyseTasks(FlagState fs) { if (!visited.contains(nn)) tovisit.add(nn); } - - if (fn.kind()==FKind.FlatFlagActionNode) { - if (((FlatFlagActionNode)fn).getTaskType() == FlatFlagActionNode.PRE) { - throw new Error("PRE FlagActions not supported"); - - } else if (((FlatFlagActionNode)fn).getTaskType() == FlatFlagActionNode.NEWOBJECT) { - FlagState fsnew=evalNewObjNode(fn); + if (fn1.kind()==FKind.FlatFlagActionNode) { + FlatFlagActionNode ffan=(FlatFlagActionNode)fn1; + if (ffan.getTaskType() == FlatFlagActionNode.PRE) { + if (ffan.getTempFlagPairs().hasNext()||ffan.getTempTagPairs().hasNext()) + throw new Error("PRE FlagActions not supported"); + } else if (ffan.getTaskType() == FlatFlagActionNode.NEWOBJECT) { + FlagState fsnew=evalNewObjNode(ffan); //Have we seen this node yet if (!sourcenodes.containsKey(fsnew)) { sourcenodes.put(fsnew, fsnew); toprocess.add(fsnew); } - } else if (((FlatFlagActionNode)fn).getTaskType() == FlatFlagActionNode.TASKEXIT) { - FlagState fs_taskexit=evalTaskExitNode(fn,cd,fs); - + } else if (ffan.getTaskType() == FlatFlagActionNode.TASKEXIT) { + FlagState fs_taskexit=evalTaskExitNode(ffan,cd,fs,temp); if (!sourcenodes.containsKey(fs_taskexit)) { toprocess.add(fs_taskexit); } @@ -248,13 +243,13 @@ private boolean isTaskTrigger(FlagExpressionNode fen,FlagState fs) { return fstemp; } - private FlagState evalTaskExitNode(FlatNode nn,ClassDescriptor cd,FlagState fs){ + private FlagState evalTaskExitNode(FlatNode nn,ClassDescriptor cd,FlagState fs, TempDescriptor temp){ FlagState fstemp=fs; for(Iterator it_tfp=((FlatFlagActionNode)nn).getTempFlagPairs();it_tfp.hasNext();) { TempFlagPair tfp=(TempFlagPair)it_tfp.next(); - if (temp.toString().equals(tfp.getTemp().toString())) - fstemp=fstemp.setFlag(tfp.getFlag(),((FlatFlagActionNode)nn).getFlagChange(tfp)); + if (temp==tfp.getTemp()) + fstemp=fstemp.setFlag(tfp.getFlag(),((FlatFlagActionNode)nn).getFlagChange(tfp)); } return fstemp; }