From: bdemsky Date: Wed, 5 Apr 2006 23:01:54 +0000 (+0000) Subject: Add memory allocation X-Git-Tag: preEdgeChange~937 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=dc30c033ab14ae48c1adab08edf272c52db97dde;p=IRC.git Add memory allocation --- diff --git a/Robust/src/IR/Flat/BuildCode.java b/Robust/src/IR/Flat/BuildCode.java index 5842dad5..05d1cdc1 100644 --- a/Robust/src/IR/Flat/BuildCode.java +++ b/Robust/src/IR/Flat/BuildCode.java @@ -69,6 +69,7 @@ public class BuildCode { ClassDescriptor cn=(ClassDescriptor)it.next(); generateCallStructs(cn, outclassdefs, outstructs, outmethodheader); } + outstructs.close(); outmethodheader.close(); @@ -76,6 +77,10 @@ public class BuildCode { outmethod.println("#include \"methodheaders.h\""); outmethod.println("#include \"virtualtable.h\""); outmethod.println("#include "); + + outclassdefs.println("extern int classsize[];"); + generateSizeArray(outmethod); + Iterator classit=state.getClassSymbolTable().getDescriptorsIterator(); while(classit.hasNext()) { ClassDescriptor cn=(ClassDescriptor)classit.next(); @@ -109,15 +114,13 @@ public class BuildCode { private int maxcount=0; private void buildVirtualTables(PrintWriter outvirtual) { - int numclasses=0; Iterator classit=state.getClassSymbolTable().getDescriptorsIterator(); while(classit.hasNext()) { ClassDescriptor cd=(ClassDescriptor)classit.next(); if (virtualcalls.getMethodCount(cd)>maxcount) maxcount=virtualcalls.getMethodCount(cd); - numclasses++; } - MethodDescriptor[][] virtualtable=new MethodDescriptor[numclasses][maxcount]; + MethodDescriptor[][] virtualtable=new MethodDescriptor[state.numClasses()][maxcount]; /* Fill in virtual table */ classit=state.getClassSymbolTable().getDescriptorsIterator(); @@ -127,7 +130,7 @@ public class BuildCode { } outvirtual.print("void * virtualtable[]={"); boolean needcomma=false; - for(int i=0;i