From: bdemsky Date: Tue, 8 Aug 2006 15:37:33 +0000 (+0000) Subject: commit changes X-Git-Tag: preEdgeChange~853 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=96bd6103ed4b74b0ed6cc546f65c61868a21d322;p=IRC.git commit changes --- diff --git a/Robust/src/IR/Flat/BuildCode.java b/Robust/src/IR/Flat/BuildCode.java index ca460c3a..77a1e093 100644 --- a/Robust/src/IR/Flat/BuildCode.java +++ b/Robust/src/IR/Flat/BuildCode.java @@ -45,6 +45,8 @@ public class BuildCode { PrintWriter outmethodheader=null; PrintWriter outmethod=null; PrintWriter outvirtual=null; + PrintWriter outtask=null; + PrintWriter outtaskdefs=null; try { OutputStream str=new FileOutputStream(PREFIX+"structdefs.h"); @@ -57,6 +59,12 @@ public class BuildCode { outmethod=new java.io.PrintWriter(str, true); str=new FileOutputStream(PREFIX+"virtualtable.h"); outvirtual=new java.io.PrintWriter(str, true); + if (state.TASK) { + str=new FileOutputStream(PREFIX+"task.h"); + outtask=new java.io.PrintWriter(str, true); + str=new FileOutputStream(PREFIX+"taskdefs.c"); + outtaskdefs=new java.io.PrintWriter(str, true); + } } catch (Exception e) { e.printStackTrace(); System.exit(-1); @@ -74,6 +82,8 @@ public class BuildCode { outstructs.println("#define STRINGTYPE "+typeutil.getClass(TypeUtil.StringClass).getId()); outstructs.println("#define CHARARRAYTYPE "+ (state.getArrayNumber((new TypeDescriptor(TypeDescriptor.CHAR)).makeArray(state))+state.numClasses())); + if (state.TASK) + outstructs.println("#define STARTUPTYPE "+typeutil.getClass(TypeUtil.StartupClass).getId()); // Output the C class declarations // These could mutually reference each other @@ -95,17 +105,19 @@ public class BuildCode { if (state.TASK) { //Print out definitions for task types - outclassdefs.println("struct parameterdescriptor {"); - outclassdefs.println("int type;"); - outclassdefs.println("int numberterms;"); - outclassdefs.println("int **intarray;"); - outclassdefs.println("};"); - - outclassdefs.println("struct taskdescriptor {"); - outclassdefs.println("void * taskptr;"); - outclassdefs.println("int numParameters;"); - outclassdefs.println("struct parameterdescriptor **descriptorarray;"); - outclassdefs.println("};"); + outtask.println("struct parameterdescriptor {"); + outtask.println("int type;"); + outtask.println("int numberterms;"); + outtask.println("int *intarray;"); + outtask.println("};"); + + outtask.println("struct taskdescriptor {"); + outtask.println("void * taskptr;"); + outtask.println("int numParameters;"); + outtask.println("struct parameterdescriptor **descriptorarray;"); + outtask.println("};"); + outtask.println("extern struct taskdescriptor * taskarray[];"); + outtask.println("extern numtasks;"); } } @@ -116,7 +128,6 @@ public class BuildCode { generateCallStructs(cn, outclassdefs, outstructs, outmethodheader); } outstructs.close(); - outmethodheader.close(); if (state.TASK) { /* Map flags to integers */ @@ -129,6 +140,8 @@ public class BuildCode { generateTaskStructs(outstructs, outmethodheader); } + outmethodheader.close(); + /* Build the actual methods */ outmethod.println("#include \"methodheaders.h\""); outmethod.println("#include \"virtualtable.h\""); @@ -154,12 +167,30 @@ public class BuildCode { if (state.TASK) { /* Compile task based program */ + outtaskdefs.println("#include \"task.h\""); + outtaskdefs.println("#include \"methodheaders.h\""); Iterator taskit=state.getTaskSymbolTable().getDescriptorsIterator(); while(taskit.hasNext()) { TaskDescriptor td=(TaskDescriptor)taskit.next(); FlatMethod fm=state.getMethodFlat(td); generateFlatMethod(fm, outmethod); + generateTaskDescriptor(outtaskdefs, td); } + + taskit=state.getTaskSymbolTable().getDescriptorsIterator(); + outtaskdefs.println("struct taskdescriptor * taskarray[]= {"); + boolean first=true; + while(taskit.hasNext()) { + TaskDescriptor td=(TaskDescriptor)taskit.next(); + if (first) + first=false; + else + outtaskdefs.println(","); + outtaskdefs.print("&task_"+td.getSafeSymbol()); + } + outtaskdefs.println("};"); + outtaskdefs.println("int numtasks="+state.getTaskSymbolTable().getValueSet().size()+";"); + } else if (state.main!=null) { /* Generate main method */ outmethod.println("int main(int argc, const char *argv[]) {"); @@ -191,7 +222,7 @@ public class BuildCode { Hashtable flags=(Hashtable)flagorder.get(param_type.getClassDesc()); - output.println("int [] parameterdnf_"+i+"_"+task.getSafeSymbol()+"={"); + output.println("int parameterdnf_"+i+"_"+task.getSafeSymbol()+"[]={"); for(int j=0;j