From dc30c033ab14ae48c1adab08edf272c52db97dde Mon Sep 17 00:00:00 2001 From: bdemsky Date: Wed, 5 Apr 2006 23:01:54 +0000 Subject: [PATCH] Add memory allocation --- Robust/src/IR/Flat/BuildCode.java | 29 +++++++++++++++++++++++++---- Robust/src/IR/State.java | 7 +++++++ Robust/src/Runtime/runtime.c | 7 +++++++ Robust/src/f.test | 6 +++++- 4 files changed, 44 insertions(+), 5 deletions(-) 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