From bd8ea855a1b3dd3f40d7cd67eb4e6c56073fde80 Mon Sep 17 00:00:00 2001 From: sivaji Date: Tue, 1 May 2007 18:30:38 +0000 Subject: [PATCH] working TaskAnalysis code(with ADJLIST) --- .../src/Analysis/TaskStateAnalysis/Edge.java | 21 +- .../Analysis/TaskStateAnalysis/FlagState.java | 46 +- .../TaskStateAnalysis/TaskAnalysis.java | 662 ++++++++---------- Robust/src/Benchmarks/Chat/ChatServer.java | 2 +- Robust/src/IR/Flat/FlatFlagActionNode.java | 5 + Robust/src/IR/Flat/FlatMethod.java | 3 + Robust/src/Main/Main.java | 15 + Robust/src/Makefile | 2 +- Robust/src/Runtime/option.c | 1 + Robust/src/Tests/TaskExample.java | 2 +- Robust/src/buildscript | 2 +- Robust/src/buildscripttask | 15 +- 12 files changed, 388 insertions(+), 388 deletions(-) diff --git a/Robust/src/Analysis/TaskStateAnalysis/Edge.java b/Robust/src/Analysis/TaskStateAnalysis/Edge.java index 2cb1bdb5..097f22f4 100644 --- a/Robust/src/Analysis/TaskStateAnalysis/Edge.java +++ b/Robust/src/Analysis/TaskStateAnalysis/Edge.java @@ -8,12 +8,12 @@ import java.util.*; /* Edge *****************/ -public static class Edge { +public class Edge { private String label; private FlagState target; private FlagState source; - private String dotnodeparams = new String(); + protected String dotnodeparams = new String(); public Edge(FlagState target, String label) { this.label = label; @@ -36,7 +36,11 @@ public static class Edge { return target; } - public void setDotNodeParameters(String param) { + public int hashCode(){ + return target.hashCode()^label.hashCode(); + } + + public void setDotNodeParameters(String param) { if (param == null) { throw new NullPointerException(); } @@ -46,4 +50,15 @@ public static class Edge { dotnodeparams = new String(); } } + public boolean equals(Object o) { + if (o instanceof Edge) { + Edge e=(Edge)o; + if (e.label.compareTo(label)!=0) + return false; + return e.target.equals(target); + } + return false; + } + + } diff --git a/Robust/src/Analysis/TaskStateAnalysis/FlagState.java b/Robust/src/Analysis/TaskStateAnalysis/FlagState.java index 3de49a19..a34c1fb2 100644 --- a/Robust/src/Analysis/TaskStateAnalysis/FlagState.java +++ b/Robust/src/Analysis/TaskStateAnalysis/FlagState.java @@ -27,7 +27,7 @@ public class FlagState { Vector edges = new Vector(); Vector inedges = new Vector(); NodeStatus status = UNVISITED; - String dotnodeparams = new String(); + protected String dotnodeparams = new String(); boolean merge=false; String nodeoption=""; @@ -41,12 +41,17 @@ public class FlagState { public void setMerge() { merge=true; } + + public FlagState(ClassDescriptor cd) { + this.flagstate=new HashSet(); + this.cd=cd; + } - public FlagState(HashSet flagstate, ClassDescriptor cd) { + private FlagState(HashSet flagstate, ClassDescriptor cd) { this.flagstate=flagstate; this.cd=cd; } - + public boolean get(FlagDescriptor fd) { return flagstate.contains(fd); } @@ -58,13 +63,33 @@ public class FlagState { public Iterator getFlags() { return flagstate.iterator(); } + + public String toString(FlagDescriptor[] flags) + { + StringBuffer sb = new StringBuffer(flagstate.size()); + for(int i=0;i < flags.length; i++) + { + if (get(flags[i])) + sb.append(1); + else + sb.append(0); + } + + return new String(sb); + } + + + public ClassDescriptor getClassDescriptor(){ + return cd; + } public FlagState setFlag(FlagDescriptor fd, boolean status) { HashSet newset=(HashSet) flagstate.clone(); if (status) newset.add(fd); - else + else if (newset.contains(fd)){ newset.remove(fd); + } return new FlagState(newset, cd); } @@ -150,11 +175,11 @@ public class FlagState { public String getTextLabel() { String label=null; for(Iterator it=getFlags();it.hasNext();) { - FlagState fs=(FlagState) it.next(); + FlagDescriptor fd=(FlagDescriptor) it.next(); if (label==null) - label=fs.toString(); + label=fd.toString(); else - label+=", "+fs.toString(); + label+=", "+fd.toString(); } return label; } @@ -247,11 +272,11 @@ public class FlagState { output.println("\tremincross=true;");*/ output.println("\tnode [fontsize=10,height=\"0.1\", width=\"0.1\"];"); output.println("\tedge [fontsize=6];"); - traverse(); + //traverse(); output.println("}\n"); } - private void traverse() { + private void traverse() { Set cycleset=FlagState.findcycles(nodes); Iterator i = nodes.iterator(); @@ -272,13 +297,14 @@ public class FlagState { if (nodes.contains(node)) { for(Iterator nodeit=nonmerge(node).iterator();nodeit.hasNext();) { FlagState node2=(FlagState)nodeit.next(); - String edgelabel = Compiler.DEBUGGRAPH ? "label=\"" + edge.getLabel() + "\"" : "label=\"\""; + String edgelabel = "label=\"" + edge.getLabel() + "\""; output.println("\t" + gn.getLabel() + " -> " + node2.getLabel() + " [" + edgelabel + edge.dotnodeparams + "];"); } } } } } + Set nonmerge(FlagState gn) { HashSet newset=new HashSet(); diff --git a/Robust/src/Analysis/TaskStateAnalysis/TaskAnalysis.java b/Robust/src/Analysis/TaskStateAnalysis/TaskAnalysis.java index fb6de754..031d071d 100644 --- a/Robust/src/Analysis/TaskStateAnalysis/TaskAnalysis.java +++ b/Robust/src/Analysis/TaskStateAnalysis/TaskAnalysis.java @@ -12,20 +12,24 @@ public class TaskAnalysis { Hashtable Adj_List; Hashtable flags; Hashtable extern_flags; - Queue q_main; + Queue q_main; + Hashtable map; + TempDescriptor temp; /** * Class Constructor * * @param state a flattened State object * @see State + * @param map Hashtable containing the temp to var mapping */ - public TaskAnalysis(State state) + public TaskAnalysis(State state,Hashtable map) { this.state=state; + this.map=map; } - /** This function returns the number of external flags, etc */ + /** This function builds a table of flags for each class **/ private void getFlagsfromClasses() { flags=new Hashtable(); @@ -79,6 +83,7 @@ public class TaskAnalysis { public void taskAnalysis() throws java.io.IOException { Adj_List=new Hashtable(); + Hashtable Adj_List_temp; getFlagsfromClasses(); @@ -87,57 +92,91 @@ public class TaskAnalysis { for(Iterator it_classes=(Iterator)flags.keys();it_classes.hasNext();) { ClassDescriptor cd=(ClassDescriptor)it_classes.next(); - externs=((Integer)extern_flags.get(cd)).intValue(); - FlagDescriptor[] fd=(FlagDescriptor[])flags.get(cd); + //Debug block System.out.println("Inside taskAnalysis;\n Class:"+ cd.getSymbol()); System.out.println("No of externs " + externs); System.out.println("No of flags: "+fd.length); //Debug block - if (fd.length == externs) { - System.out.println("extern called"); - boolean onlyExterns=true; - } else { - if ((fd.length == 1) - && (fd[0].getSymbol().compareTo("initialstate")==0)) { - FlagState fstemp=new FlagState(fd, cd); - Hashtable Adj_List_temp=new Hashtable(); - - fstemp.put(fd[0],new Boolean(true)); - Vector vtemp=new Vector(); - vtemp.add(new Edge(fstemp,"Runtime")); - Adj_List_temp.put(new FlagState(fd,cd),vtemp); - Adj_List.put(cd,Adj_List_temp); + + Adj_List.put(cd,new Hashtable()); + } + + TypeUtil typeutil=new TypeUtil(state); + ClassDescriptor startupobject=typeutil.getClass(TypeUtil.StartupClass); + Adj_List_temp=(Hashtable)Adj_List.get(startupobject); + + FlagState fsstartup=new FlagState(startupobject); + FlagDescriptor[] fd=(FlagDescriptor[])flags.get(startupobject); - Queue q_temp=analyseTasks(new TriggerState(cd,fstemp)); - + FlagState fstemp=fsstartup.setFlag(fd[0],true); + Vector vtemp=new Vector(); + Edge estartup=new Edge(fstemp,"Runtime"); + vtemp.add(estartup); - if ( q_temp != null) { - q_main.addAll(q_temp); - } + Adj_List_temp.put(fsstartup,vtemp); + + Queue q_temp=analyseTasks(fstemp); - } - } + if ( q_temp != null) { + q_main.addAll(q_temp); } + while (q_main.size() > 0) { // ****debug block******** + System.out.println("/***********contents of main q before pop**********/"); + for (Iterator it_qm=q_main.iterator();it_qm.hasNext();) + { + + FlagState fs_qm=(FlagState)it_qm.next(); + + System.out.println("FS : "+fs_qm.getClassDescriptor().toString()+" : "+fs_qm.toString((FlagDescriptor [])flags.get(fs_qm.getClassDescriptor()))); + } + System.out.println("/*********************************/"); + // ****debug block******** + FlagState trigger=q_main.poll(); + + + q_temp=createPossibleRuntimeStates(trigger); + + if ( q_temp != null){ + q_main.addAll(q_temp); + + // ****debug block******** + System.out.println("/***********contents of main q**********/"); for (Iterator it_qm=q_main.iterator();it_qm.hasNext();) { - TriggerState ts_qm=(TriggerState)it_qm.next(); - FlagState fs_qm=ts_qm.getState(); - System.out.println("FS : "+fs_qm.toString((FlagDescriptor [])flags.get(ts_qm.getClassDescriptor()))); - } + FlagState fs_qm=(FlagState)it_qm.next(); + + System.out.println("FS : "+fs_qm.getClassDescriptor().toString()+" : "+fs_qm.toString((FlagDescriptor [])flags.get(fs_qm.getClassDescriptor()))); + } System.out.println("/*********************************/"); // ****debug block******** - Queue q_temp=analyseTasks(q_main.poll()); - if ( q_temp != null) { - q_main.addAll(q_temp); - } + + q_temp=analyseTasks(trigger); + + if ( q_temp != null) + q_main.addAll(q_temp); + + // ****debug block******** + + System.out.println("/***********contents of main q after analyse tasks**********/"); + for (Iterator it_qm=q_main.iterator();it_qm.hasNext();) + { + + FlagState fs_qm=(FlagState)it_qm.next(); + + System.out.println("FS : "+fs_qm.getClassDescriptor().toString()+" : "+fs_qm.toString((FlagDescriptor [])flags.get(fs_qm.getClassDescriptor()))); + } + System.out.println("/*********************************/"); + // ****debug block******** + + } } //Creating DOT files @@ -150,73 +189,68 @@ public class TaskAnalysis { createDOTfile(cdtemp); } - } + + } - public Queue analyseTasks(TriggerState ts) throws java.io.IOException { - Queue q; - Queue qft; + public Queue analyseTasks(FlagState fs) throws java.io.IOException { + Hashtable Adj_List_temp; - Queue q_retval; + Queue q_retval; - ClassDescriptor cd=ts.getClassDescriptor(); - if (Adj_List.containsKey(cd)) { - //Debug block - System.out.println("Inside analyseTasks;\n Checking if adj_list contains the class desc:"+ cd.getSymbol()); - //Debug block - - Adj_List_temp=(Hashtable)Adj_List.get(cd); - } else { - Adj_List_temp=new Hashtable(); - Adj_List.put(cd,Adj_List_temp); - } - - + + ClassDescriptor cd=fs.getClassDescriptor(); + + Adj_List_temp=(Hashtable)Adj_List.get(cd); + int externs=((Integer)extern_flags.get(cd)).intValue(); FlagDescriptor[] fd=(FlagDescriptor[])flags.get(cd); - q = new LinkedList(); - q_retval=new LinkedList(); - q.offer(ts.getState()); - + q_retval=new LinkedList(); //***Debug Block*** - while (q.size() != 0) { + //while (q.size() != 0) { System.out.println("inside while loop in analysetasks \n"); - FlagState fsworking=q.poll(); - //***Debug Block*** - FlagDescriptor[] ftemp=(FlagDescriptor[])flags.get(cd); - System.out.println("Processing state: "+cd.getSymbol()+" " + fsworking.toString(ftemp)); + //FlagDescriptor[] ftemp=(FlagDescriptor[])flags.get(cd); + //System.out.println("Processing state: "+cd.getSymbol()+" " + fsworking.toString(ftemp)); //***Debug Block*** for(Iterator it_tasks=state.getTaskSymbolTable().getDescriptorsIterator();it_tasks.hasNext();) { TaskDescriptor td = (TaskDescriptor)it_tasks.next(); boolean taskistriggered=false; - int ctr=0; + int trigger_ctr=0; String taskname=getTaskName(td); //***Debug Block*** - System.out.println(); System.out.println("Method: AnalyseTasks"); System.out.println(taskname); System.out.println(); //***Debug Block*** - + + for(int i=0; i < td.numParameters(); i++) { FlagExpressionNode fen=td.getFlag(td.getParameter(i)); - if (isTaskTrigger(fen,fsworking)) - taskistriggered = true; + //if ( (td.getParamType(i).equals(cd))&&(isTaskTrigger(fen,fs))){ + if ((isParamOfSameClass(td.getParamType(i),cd)) && (isTaskTrigger(fen,fs))){ + taskistriggered = true; + System.out.println(td.getParamType(i).toString()+" "+cd.toString()); + temp=(TempDescriptor)map.get(td.getParameter(i)); + trigger_ctr++; + } } + + if (trigger_ctr>1) + throw new Error("Illegal Operation: A single flagstate cannot satisfy more than one parameter of a task."); if (taskistriggered) { //***Debug Block*** @@ -224,12 +258,11 @@ public class TaskAnalysis { System.out.println("inside taskistriggered"); //***Debug Block*** - if (wasFlagStateProcessed(Adj_List_temp,fsworking)) { - if (! (fd.length == externs)) - continue; - } else - Adj_List_temp.put(fsworking,new Vector()); + + taskistriggered=false; + Adj_List_temp.put(fs,new Vector()); + //Iterating through the nodes FlatMethod fm = state.getMethodFlat(td); FlatNode fn=fm.methodEntryNode(); @@ -247,68 +280,25 @@ public class TaskAnalysis { //***Debug Block*** if (((FlatFlagActionNode)nn).getFFANType() == FlatFlagActionNode.PRE) { throw new Error("PRE FlagActions not supported"); + } else if (((FlatFlagActionNode)nn).getFFANType() == FlatFlagActionNode.NEWOBJECT) { //***Debug Block*** System.out.println("NEWObject"); //***Debug Block*** + q_retval.offer(evalNewObjNode(nn)); - TempDescriptor[] tdArray = ((FlatFlagActionNode)nn).readsTemps(); - - //Under the safe assumption that all the temps in FFAN.NewObject node are of the same type(class) - ClassDescriptor cd_new=tdArray[0].getType().getClassDesc(); - - System.out.println("Class: "+cd_new.getSymbol()); - - FlagState fstemp=new FlagState((FlagDescriptor[])flags.get(cd_new), cd_new); - for(Iterator it_tfp=((FlatFlagActionNode)nn).getTempFlagPairs();it_tfp.hasNext();) { - TempFlagPair tfp=(TempFlagPair)it_tfp.next(); - if (tfp.getFlag()==null) { - System.out.println("test1"); - q_retval.addAll(createPossibleRuntimeStates(new TriggerState(cd_new,new FlagState((FlagDescriptor[])flags.get(cd_new), cd_new)))); - // ****debug block******** - System.out.println("/***********contents of q ret**********/"); - for (Iterator it_qret=q_retval.iterator();it_qret.hasNext();) { - TriggerState ts_qret=(TriggerState)it_qret.next(); - FlagState fs_qret=ts_qret.getState(); - - System.out.println("FS : "+fs_qret.toString((FlagDescriptor [])flags.get(ts_qret.getClassDescriptor()))); - } - System.out.println("/*********************************/"); - // ****debug block******** - } else - fstemp.put(tfp.getFlag(),new Boolean(((FlatFlagActionNode)nn).getFlagChange(tfp))); - - - } - //***Debug Block*** - System.out.println("test2"); - System.out.println("Newobj fsworking "+fsworking.toString((FlagDescriptor [])flags.get(cd_new))); - System.out.println("Newobj fstemp "+fstemp.toString((FlagDescriptor [])flags.get(cd_new))); - - //***Debug Block*** - - q_retval.offer(new TriggerState(cd_new,fstemp)); - - //make this a function containsExterns() - int extrns=((Integer)extern_flags.get(cd_new)).intValue(); - - if ((extrns >0) && (extrns!=((FlagDescriptor[])flags.get(cd_new)).length)) - q_retval.addAll(createPossibleRuntimeStates(new TriggerState(cd_new,fstemp))); - - fstemp=null; // ****debug block******** - System.out.println("/***********contents of q ret 1**********/"); - for (Iterator it_qret=q_retval.iterator();it_qret.hasNext();) { + // System.out.println("/***********contents of q ret **********/"); + /* for (Iterator it_qret=q_retval.iterator();it_qret.hasNext();) { TriggerState ts_qret=(TriggerState)it_qret.next(); FlagState fs_qret=ts_qret.getState(); System.out.println("FS : "+fs_qret.toString((FlagDescriptor [])flags.get(ts_qret.getClassDescriptor()))); - } - System.out.println("/*********************************/"); - // ****debug block******** + }*/ + // ****debug block******** } if (((FlatFlagActionNode)nn).getFFANType() == FlatFlagActionNode.TASKEXIT) { @@ -316,29 +306,16 @@ public class TaskAnalysis { // System.out.println("TaskExit"); //***Debug Block*** + FlagState fs_taskexit=evalTaskExitNode(nn,cd,fs); + - FlagState fstemp=new FlagState(fsworking.getStateTable(), null); //WHAT CLASS IS THIS - - for(Iterator it_tfp=((FlatFlagActionNode)nn).getTempFlagPairs();it_tfp.hasNext();) { - TempFlagPair tfp=(TempFlagPair)it_tfp.next(); - fstemp.put(tfp.getFlag(),new Boolean(((FlatFlagActionNode)nn).getFlagChange(tfp))); - } - //***Debug Block*** - System.out.println(); - System.out.println(fstemp.toString((FlagDescriptor [])flags.get(cd))); - System.out.println(); - System.out.println("taskexit fsworking "+fsworking.toString((FlagDescriptor [])flags.get(cd))); - System.out.println("taskexit fstemp "+fstemp.toString((FlagDescriptor [])flags.get(cd))); - //***Debug Block*** - if (!edgeexists(Adj_List_temp,fsworking,fstemp,taskname)) { - ((Vector)Adj_List_temp.get(fsworking)).add(new Edge(fstemp,taskname)); + if (!edgeexists(Adj_List_temp,fs,fs_taskexit,taskname)) { + ((Vector)Adj_List_temp.get(fs)).add(new Edge(fs_taskexit,taskname)); } - if (!wasFlagStateProcessed(Adj_List_temp,fstemp)) { - q.offer(fstemp); + if ((!wasFlagStateProcessed(Adj_List_temp,fs_taskexit)) && (!existsInQMain(fs_taskexit)) && (!existsInQ(q_retval,fs_taskexit))){ + q_retval.offer(fs_taskexit); } - fstemp=null; - } } @@ -346,8 +323,8 @@ public class TaskAnalysis { tovisit.add(nn); } } - } - } + + } } } if (q_retval.size()==0) @@ -371,6 +348,46 @@ public class TaskAnalysis { return false; } } + + private boolean isParamOfSameClass(TypeDescriptor typedesc, ClassDescriptor classdesc){ + if (typedesc.getSafeSymbol().equals(classdesc.getSafeSymbol())) + return true; + else + return false; + } + + + private FlagState evalNewObjNode(FlatNode nn){ + TempDescriptor[] tdArray = ((FlatFlagActionNode)nn).readsTemps(); + + //Under the safe assumption that all the temps in FFAN.NewObject node are of the same type(class) + ClassDescriptor cd_new=tdArray[0].getType().getClassDesc(); + + FlagState fstemp=new FlagState(cd_new); + + for(Iterator it_tfp=((FlatFlagActionNode)nn).getTempFlagPairs();it_tfp.hasNext();) { + TempFlagPair tfp=(TempFlagPair)it_tfp.next(); + if (! (tfp.getFlag()==null))// condition checks if the new object was created without any flag setting + { + fstemp=fstemp.setFlag(tfp.getFlag(),((FlatFlagActionNode)nn).getFlagChange(tfp)); + } + else + break; + } + return fstemp; + } + + private FlagState evalTaskExitNode(FlatNode nn,ClassDescriptor cd,FlagState fs){ + 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)); + } + return fstemp; + } + private boolean wasFlagStateProcessed(Hashtable Adj_List,FlagState fs) { Enumeration e=Adj_List.keys(); @@ -378,19 +395,30 @@ public class TaskAnalysis { while(e.hasMoreElements()) { FlagState fsv = (FlagState)(e.nextElement()); - if (fsv.isEqual(fs)) + if (fsv.equals(fs)) return true; } return false; } - private boolean existsInQueue(TriggerState ts) { + /* private boolean existsInQueue(TriggerState ts) { throw new Error("Use hashcode/contains of set method to find...no linear search allowed"); - } + }*/ - private boolean existsInFSQueue(Queue q,FlagState fs) { - throw new Error("Use hashcode/contains of set method to find...no linear search allowed"); + private boolean existsInQMain(FlagState fs) { + if (q_main.contains(fs)) + return true; + else + return false; } + + private boolean existsInQ(Queue q,FlagState fs) { + if (q.contains(fs)) + return true; + else + return false; + } + public void printAdjList(ClassDescriptor cd) { Enumeration e=((Hashtable)Adj_List.get(cd)).keys(); @@ -400,14 +428,22 @@ public class TaskAnalysis { } } - public void createDOTfile(ClassDescriptor cd) throws java.io.IOException { + public void createDOTfile(ClassDescriptor cd) throws java.io.IOException { File dotfile= new File("graph"+cd.getSymbol()+".dot"); FileWriter dotwriter=new FileWriter(dotfile,true); dotwriter.write("digraph G{ \n"); dotwriter.write("center=true;\norientation=landscape;\n"); + + //***debug*** + FlagDescriptor[] flg=(FlagDescriptor [])flags.get(cd); + for(int i = 0; i < flg.length ; i++) + { + dotwriter.write(flg[i].toString()+"\n"); + } + //*** debug*** Enumeration e=((Hashtable)Adj_List.get(cd)).keys(); while(e.hasMoreElements()) { FlagState fsv = (FlagState)(e.nextElement()); @@ -415,7 +451,7 @@ public class TaskAnalysis { Hashtable test=(Hashtable)Adj_List.get(cd); Vector edges=(Vector)test.get(fsv); for(int i=0;i < edges.size();i++) { - dotwriter.write(fsv.toString((FlagDescriptor [])flags.get(cd))+" -> "+((Edge)edges.get(i)).getState().toString((FlagDescriptor [])flags.get(cd))+"[label=\""+((Edge)edges.get(i)).getName()+"\"];\n"); + dotwriter.write(fsv.toString((FlagDescriptor [])flags.get(cd))+" -> "+((Edge)edges.get(i)).getTarget().toString((FlagDescriptor [])flags.get(cd))+"[label=\""+((Edge)edges.get(i)).getLabel()+"\"];\n"); } } @@ -429,263 +465,151 @@ public class TaskAnalysis { return st.nextToken(); } - private boolean edgeexists(Hashtable Adj_List_local,FlagState v1, FlagState v2,String name) { + private boolean edgeexists(Hashtable Adj_List_local,FlagState v1, FlagState v2,String label) { Vector edges=(Vector)Adj_List_local.get(v1); - if (edges == null) { - System.out.println("no edges"); - } else { + if (edges != null) { for(int i=0;i < edges.size();i++) { - FlagState fs=((Edge)edges.get(i)).getState(); - if (fs.isEqual(v2) && (name.compareTo(((Edge)edges.get(i)).getName())==0)) + FlagState fs=((Edge)edges.get(i)).getTarget(); + if (fs.equals(v2) && (label.compareTo(((Edge)edges.get(i)).getLabel())==0)) return true; } } return false; } - private void processExterns(boolean onlyExterns,ClassDescriptor cd) throws java.io.IOException { - int noOfIterations; - Hashtable Adj_List_temp; - if (Adj_List.containsKey(cd)) { - Adj_List_temp=(Hashtable)Adj_List.get(cd); - } else { - Adj_List_temp=new Hashtable(); - Adj_List.put(cd,Adj_List_temp); - } - - - if (onlyExterns) { - FlagDescriptor [] fd=(FlagDescriptor [])flags.get(cd); - System.out.println("onlyExterns"+fd.length); - noOfIterations=1< q_ret=new LinkedList(); - if (onlyExterns) { - noOfIterations=1< 0){ Adj_List_local=new Hashtable(); + Adj_List_local.put(fs, new Vector()); - for(int i=0; i < externs ; i++) { - System.out.println(fd[i].getSymbol()); - BoolValTable[i]=fs.get(fd[i]); - } + + for(int k=0; k "); + Vector edges=(Vector)Adj_List_local.get(fs_local); + if (edges != null) { + for(int i=0;i < edges.size();i++) { + Edge edge=(Edge)edges.get(i); + System.out.print("("+edge.getTarget().toString(fd)+" "+edge.getLabel()+")\n"); + } + } } + //***debug + for (Enumeration en=Adj_List_local.keys();en.hasMoreElements();){ + FlagState fs_local=(FlagState)en.nextElement(); + if (wasFlagStateProcessed(Adj_List_temp,fs_local)){ + System.out.println("FS: "+fs_local.toString(fd)+" processed already"); + //Add edges that don't exist already. + Vector edges=(Vector)Adj_List_local.get(fs_local); + if (edges != null) { + for(int i=0;i < edges.size();i++) { + Edge edge=(Edge)edges.get(i); + if (! ((Vector)Adj_List_temp.get(fs_local)).contains(edge)) + ((Vector)Adj_List_temp.get(fs_local)).add(edge); + } + } + //((Vector)Adj_List_temp.get(fs_local)).addAll((Vector)Adj_List_local.get(fs_local)); + } + else{ + System.out.println("FS: "+fs_local.toString(fd)+" not processed already"); + Adj_List_temp.put(fs_local,(Vector)Adj_List_local.get(fs_local)); + } + } - q_ret.offer(fstemp); - ((Vector)(Adj_List_temp.get(fs))).add(new Edge(fstemp,"Runtime")); + //***debug + for (Enumeration en=Adj_List_temp.keys();en.hasMoreElements();){ + FlagState fs_local=(FlagState)en.nextElement(); + System.out.print("Source FS: "+fs_local.toString(fd)+" -> "); + Vector edges=(Vector)Adj_List_local.get(fs_local); + if (edges != null) { + for(int i=0;i < edges.size();i++) { + Edge edge=(Edge)edges.get(i); + System.out.print("("+edge.getTarget().toString(fd)+" "+edge.getLabel()+")\n"); + } + } + } + //***debug + } - } - return q_ret; + + + return q_ret; } - } + + private void processTasksWithPost(ClassDescriptor cd, Hashtable pre) { diff --git a/Robust/src/Benchmarks/Chat/ChatServer.java b/Robust/src/Benchmarks/Chat/ChatServer.java index 773a1340..4a096293 100644 --- a/Robust/src/Benchmarks/Chat/ChatServer.java +++ b/Robust/src/Benchmarks/Chat/ChatServer.java @@ -22,7 +22,7 @@ task ProcessRoom(ChatSocket cs{ProcessRoom}, RoomObject ro{Initialized}) { taskexit(cs{!ProcessRoom, InRoom}); } -task Message(ChatSocket cs{InRoom && IOPending}) { +task Messages(ChatSocket cs{InRoom && IOPending}) { byte buffer[]=new byte[1024]; int length=cs.read(buffer); Message m=new Message(buffer, length, cs){}; diff --git a/Robust/src/IR/Flat/FlatFlagActionNode.java b/Robust/src/IR/Flat/FlatFlagActionNode.java index 3379cbb3..bce51107 100644 --- a/Robust/src/IR/Flat/FlatFlagActionNode.java +++ b/Robust/src/IR/Flat/FlatFlagActionNode.java @@ -80,6 +80,11 @@ public class FlatFlagActionNode extends FlatNode { } } + public int getFFANType() + { + return taskexit; + } + public String toString() { return "FlatFlagActionNode"; } diff --git a/Robust/src/IR/Flat/FlatMethod.java b/Robust/src/IR/Flat/FlatMethod.java index 5f179375..600c5214 100644 --- a/Robust/src/IR/Flat/FlatMethod.java +++ b/Robust/src/IR/Flat/FlatMethod.java @@ -109,6 +109,9 @@ public class FlatMethod extends FlatNode { FlatNode fn=(FlatNode)tovisit.iterator().next(); tovisit.remove(fn); visited.add(fn); + +// System.out.println("Next : "+fn.numNext()); + for(int i=0;i0) { diff --git a/Robust/src/Main/Main.java b/Robust/src/Main/Main.java index bb23c8d9..b0ff6efd 100644 --- a/Robust/src/Main/Main.java +++ b/Robust/src/Main/Main.java @@ -10,6 +10,8 @@ import IR.Flat.BuildFlat; import IR.Flat.BuildCode; import IR.State; import IR.TypeUtil; +//import IR.PrintTree; +import Analysis.TaskStateAnalysis.TaskAnalysis; public class Main { @@ -89,6 +91,9 @@ public class Main { BuildIR bir=new BuildIR(state); bir.buildtree(); +// PrintTree ptree=new PrintTree(state); + // ptree.buildtree(); + TypeUtil tu=new TypeUtil(state); SemanticCheck sc=new SemanticCheck(state,tu); @@ -98,6 +103,16 @@ public class Main { BuildFlat bf=new BuildFlat(state,tu); bf.buildFlat(); +// System.out.println("Flat"); +// PrintTree ptree1=new PrintTree(state); +// ptree1.buildtree(); + + TaskAnalysis ta=new TaskAnalysis(state,bf.getMap()); + ta.taskAnalysis(); +// ta.printAdjList(); + + + BuildCode bc=new BuildCode(state, bf.getMap(), tu); bc.buildCode(); System.exit(0); diff --git a/Robust/src/Makefile b/Robust/src/Makefile index a925c0eb..41a8e822 100644 --- a/Robust/src/Makefile +++ b/Robust/src/Makefile @@ -58,5 +58,5 @@ javadoc: clean: rm -r javadoc - rm IR/*.class IR/Tree/*.class Main/*.class Lex/*.class Parse/*.class Parse/Sym.java Parse/Parser.java IR/Flat/*.class classdefs.h methodheaders.h methods.c structdefs.h virtualtable.h task.h taskdefs.c taskdefs.h Analysis/*.class Analysis/Flag/*.class Analysis/CallGraph/*.class + rm IR/*.class IR/Tree/*.class Main/*.class Lex/*.class Parse/*.class Parse/Sym.java Parse/Parser.java IR/Flat/*.class classdefs.h methodheaders.h methods.c structdefs.h virtualtable.h task.h taskdefs.c taskdefs.h Analysis/*.class Analysis/Flag/*.class Analysis/CallGraph/*.class Analysis/TaskStateAnalysis/*.class diff --git a/Robust/src/Runtime/option.c b/Robust/src/Runtime/option.c index 552f9964..acb5079c 100644 --- a/Robust/src/Runtime/option.c +++ b/Robust/src/Runtime/option.c @@ -3,6 +3,7 @@ #include #include #include "runtime.h" +#include extern char *options; extern int injectfailures; diff --git a/Robust/src/Tests/TaskExample.java b/Robust/src/Tests/TaskExample.java index 8ad37b34..b0a53e99 100644 --- a/Robust/src/Tests/TaskExample.java +++ b/Robust/src/Tests/TaskExample.java @@ -42,7 +42,7 @@ task DoOperation(Example e{needoperation}) { * expressions. For example, needprinting && ! needoperation would * also be a legal flag expression */ -task DoPrint(Example e{needprinting}) { +task DoPrint(Example e{needprinting && ! needoperation}) { System.printInt(e.z); System.printString("\n"); taskexit(e {!needprinting}); diff --git a/Robust/src/buildscript b/Robust/src/buildscript index 01306398..f052798d 100755 --- a/Robust/src/buildscript +++ b/Robust/src/buildscript @@ -190,4 +190,4 @@ fi gcc $INCLUDES $EXTRAOPTIONS -DPRECISE_GC \ tmpbuilddirectory/methods.c $FILES -o $MAINFILE.bin -exit \ No newline at end of file +exit diff --git a/Robust/src/buildscripttask b/Robust/src/buildscripttask index 4029e403..ddabf2a0 100755 --- a/Robust/src/buildscripttask +++ b/Robust/src/buildscripttask @@ -1,3 +1,14 @@ #!/bin/bash -echo THIS FILE IS DEPRECATED. DO NOT USE IT. -./buildscript -recover -debug -o $@ + +#ROBUSTROOT=~/research/Robust/src +#MAINFILE=$1 +#shift +#mkdir tmpbuilddirectory + +#java -cp $ROBUSTROOT/../cup/:$ROBUSTROOT Main.Main -classlibrary $ROBUSTROOT/ClassLibrary/ -dir tmpbuilddirectory -precise -struct $MAINFILE -task $@ + +#gcc -DPRECISE_GC -I$ROBUSTROOT/Runtime -I. -IRuntime/include -Itmpbuilddirectory -O0 -LRuntime/lib/ -DTASK -DDEBUG -g tmpbuilddirectory/methods.c tmpbuilddirectory/taskdefs.c $ROBUSTROOT/Runtime/runtime.c $ROBUSTROOT/Runtime/file.c $ROBUSTROOT/Runtime/socket.c $ROBUSTROOT/Runtime/Queue.c $ROBUSTROOT/Runtime/SimpleHash.c $ROBUSTROOT/Runtime/checkpoint.c $ROBUSTROOT/Runtime/GenericHashtable.c $ROBUSTROOT/Runtime/option.c $ROBUSTROOT/Runtime/garbage.c -o $MAINFILE.bin +#======= +#echo THIS FILE IS DEPRECATED. DO NOT USE IT. +./buildscript -recover -o $@ +#>>>>>>> 1.15 -- 2.34.1