From: bdemsky Date: Tue, 28 Mar 2006 23:21:15 +0000 (+0000) Subject: Changes X-Git-Tag: preEdgeChange~952 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=2c46f73dedeabef0f0f05b90ebcf8afdc5e708f3;p=IRC.git Changes --- diff --git a/Robust/src/IR/Descriptor.java b/Robust/src/IR/Descriptor.java index 81e327c7..edafd624 100644 --- a/Robust/src/IR/Descriptor.java +++ b/Robust/src/IR/Descriptor.java @@ -15,7 +15,7 @@ public abstract class Descriptor { public Descriptor(String name) { this.name = name; - this.safename = "__" + name + "__"; + this.safename = "___" + name + "___"; this.uniqueid=count++; } diff --git a/Robust/src/IR/FieldDescriptor.java b/Robust/src/IR/FieldDescriptor.java index ce57b627..b8f0a201 100644 --- a/Robust/src/IR/FieldDescriptor.java +++ b/Robust/src/IR/FieldDescriptor.java @@ -21,7 +21,7 @@ public class FieldDescriptor extends Descriptor { this.td=t; this.identifier=identifier; this.en=e; - this.safename = "__" + name + "__"; + this.safename = "___" + name + "___"; this.uniqueid=count++; } diff --git a/Robust/src/IR/Flat/BuildCode.java b/Robust/src/IR/Flat/BuildCode.java index 168c253d..6c44f7be 100644 --- a/Robust/src/IR/Flat/BuildCode.java +++ b/Robust/src/IR/Flat/BuildCode.java @@ -9,8 +9,8 @@ public class BuildCode { Hashtable paramstable; Hashtable tempstable; int tag=0; - String localsprefix="__locals__"; - String paramsprefix="__params__"; + String localsprefix="___locals___"; + String paramsprefix="___params___"; private static final boolean GENERATEPRECISEGC=true; public BuildCode(State st, Hashtable temptovar) { @@ -41,6 +41,16 @@ public class BuildCode { } outstructs.println("#include \"classdefs.h\""); outmethodheader.println("#include \"structdefs.h\""); + + // Output the C declarations + // These could mutually reference each other + while(it.hasNext()) { + ClassDescriptor cn=(ClassDescriptor)it.next(); + outclassdefs.println("struct "+cn.getSafeSymbol()+";"); + } + outclassdefs.println(""); + + it=state.getClassSymbolTable().getDescriptorsIterator(); while(it.hasNext()) { ClassDescriptor cn=(ClassDescriptor)it.next(); generateCallStructs(cn, outclassdefs, outstructs, outmethodheader); @@ -53,7 +63,6 @@ public class BuildCode { Iterator classit=state.getClassSymbolTable().getDescriptorsIterator(); while(classit.hasNext()) { ClassDescriptor cn=(ClassDescriptor)classit.next(); - generateCallStructs(cn, outclassdefs, outstructs, outmethodheader); Iterator methodit=cn.getMethods(); while(methodit.hasNext()) { /* Classify parameters */ @@ -101,7 +110,10 @@ public class BuildCode { classdefout.println(" int type;"); while(fieldit.hasNext()) { FieldDescriptor fd=(FieldDescriptor)fieldit.next(); - classdefout.println(" "+fd.getType().getSafeSymbol()+" "+fd.getSafeSymbol()+";"); + if (fd.getType().isClass()) + classdefout.println(" struct "+fd.getType().getSafeSymbol()+" * "+fd.getSafeSymbol()+";"); + else + classdefout.println(" "+fd.getType().getSafeSymbol()+" "+fd.getSafeSymbol()+";"); } classdefout.println("};\n"); @@ -118,34 +130,40 @@ public class BuildCode { /* Output parameter structure */ if (GENERATEPRECISEGC) { - output.println("struct "+cn.getSymbol()+md.getSafeSymbol()+"_"+md.getSafeMethodDescriptor()+"_params {"); + output.println("struct "+cn.getSafeSymbol()+md.getSafeSymbol()+"_"+md.getSafeMethodDescriptor()+"_params {"); output.println(" int type;"); + output.println(" void * next;"); for(int i=0;i