}
private void graphTasks() throws java.io.IOException {
- for(Iterator it_tasks=state.getTaskSymbolTable().getDescriptorsIterator(); it_tasks.hasNext();) {
+ for(Iterator it_tasks=state.getTaskSymbolTable().getDescriptorsIterator(); it_tasks.hasNext(); ) {
TaskDescriptor td = (TaskDescriptor)it_tasks.next();
FlatMethod fm = state.getMethodFlat(td);
writeFlatIRGraph(fm,"task"+td.getSymbol());
}
private void graphMethods() throws java.io.IOException {
- for(Iterator it_classes=state.getClassSymbolTable().getDescriptorsIterator(); it_classes.hasNext();) {
+ for(Iterator it_classes=state.getClassSymbolTable().getDescriptorsIterator(); it_classes.hasNext(); ) {
ClassDescriptor cd = (ClassDescriptor)it_classes.next();
- for(Iterator it_methods=cd.getMethods(); it_methods.hasNext();) {
- MethodDescriptor md = (MethodDescriptor)it_methods.next();
- FlatMethod fm = state.getMethodFlat(md);
- writeFlatIRGraph(fm,cd.getSymbol()+"."+md.getSymbol());
+ for(Iterator it_methods=cd.getMethods(); it_methods.hasNext(); ) {
+ MethodDescriptor md = (MethodDescriptor)it_methods.next();
+ FlatMethod fm = state.getMethodFlat(md);
+
+ // make sure the graph name reflects the method signature so
+ // overloaded methods don't clobber one another
+ String graphName = cd.getSymbol()+"."+md.getSymbol();
+ for (int i = 0; i < fm.numParameters(); ++i) {
+ graphName += fm.getParameter(i).getSymbol();
+ }
+ writeFlatIRGraph(fm, graphName);
}
}
}
-
- private void writeFlatIRGraph(FlatMethod fm, String graphname) throws java.io.IOException {
+
+ public void writeFlatIRGraph(FlatMethod fm, String graphname) throws java.io.IOException {
// give every node in the flat IR graph a unique label
// so a human being can inspect the graph and verify
// correctness
// take symbols out of graphname that cause dot to fail
graphname = graphname.replaceAll("[\\W]", "");
- flatbw=new BufferedWriter(new FileWriter(graphname+"_flatIRGraph.dot") );
+ flatbw=new BufferedWriter(new FileWriter("FLATIR_"+graphname+".dot") );
flatbw.write("digraph "+graphname+" {\n");
visited=new HashSet<FlatNode>();
visited.add(fn);
if( fn.kind() == FKind.FlatMethod ) {
- // FlatMethod does not have toString
- flatbw.write(makeDotNodeDec(graphname, flatnodetolabel.get(fn), fn.getClass().getName(), "FlatMethod") );
+ // FlatMethod does not have toString
+ flatbw.write(makeDotNodeDec(graphname, flatnodetolabel.get(fn), fn.getClass().getName(), "FlatMethod") );
} else {
- flatbw.write(makeDotNodeDec(graphname, flatnodetolabel.get(fn), fn.getClass().getName(), fn.toString() ) );
+ flatbw.write(makeDotNodeDec(graphname, flatnodetolabel.get(fn), fn.getClass().getName(), fn.toString() ) );
}
for(int i=0; i<fn.numNext(); i++) {
- FlatNode nn=fn.getNext(i);
- flatbw.write(" node"+flatnodetolabel.get(fn)+" -> node"+flatnodetolabel.get(nn)+";\n");
+ FlatNode nn=fn.getNext(i);
+ flatbw.write(" node"+flatnodetolabel.get(fn)+" -> node"+flatnodetolabel.get(nn)+";\n");
- if( !visited.contains(nn) ) {
- toVisit.add(nn);
- }
+ if( !visited.contains(nn) ) {
+ toVisit.add(nn);
+ }
}
}
for(int i=0; i<fn.numNext(); i++) {
FlatNode nn=fn.getNext(i);
if(!visited.contains(nn)) {
- labelFlatNodes(nn);
+ labelFlatNodes(nn);
}
}
}