diff --git a/bigint/build/bin/testbip b/bigint/build/bin/testbip index de7823f..5e8c1f2 100755 Binary files a/bigint/build/bin/testbip and b/bigint/build/bin/testbip differ diff --git a/bigint/build/lib/libbigint.a b/bigint/build/lib/libbigint.a index c3dcd7f..d7ce8d6 100644 Binary files a/bigint/build/lib/libbigint.a and b/bigint/build/lib/libbigint.a differ diff --git a/bigint/src/libbigint.a b/bigint/src/libbigint.a index c3dcd7f..d7ce8d6 100644 Binary files a/bigint/src/libbigint.a and b/bigint/src/libbigint.a differ diff --git a/bigint/tst/testbip b/bigint/tst/testbip index de7823f..5e8c1f2 100755 Binary files a/bigint/tst/testbip and b/bigint/tst/testbip differ diff --git a/njvm.c b/njvm.c index 9c9fab4..28b20df 100644 --- a/njvm.c +++ b/njvm.c @@ -336,7 +336,6 @@ int heapSizeKiB; char *memTargetPtr; char *freeHeapPtr; char *halfHeapPtr; -int gcCount = 0; #define MSB (1 << (8 * sizeof(unsigned int) - 1)) #define IS_PRIMITIVE(objRef) (((objRef)->size & MSB) == 0) @@ -348,7 +347,7 @@ ObjRef copyObjectToFreeMem(ObjRef orig) { if (IS_PRIMITIVE(orig)) { size = GET_SIZE(orig); } else { - size = sizeof(void *) + sizeof(unsigned int) + sizeof(bool) + GET_SIZE(orig) * sizeof(ObjRef *); + size = sizeof(void *) + sizeof(unsigned int) + sizeof(bool) + (GET_SIZE(orig) * sizeof(void *)); } memcpy(freeHeapPtr, orig, size); ObjRef oldPtr = (ObjRef) freeHeapPtr; @@ -369,7 +368,6 @@ ObjRef relocate(ObjRef orig) { orig->forwardPointer = copy; } } - return copy; } @@ -419,12 +417,14 @@ void garbageCollector() { for (int i = 0; i < *sda.size; i++) { sda.sda[i] = relocate(sda.sda[i]); } - scan(); + for (int i = 0; i < *reg.size; i++) { + reg.stack[i].u.objRef = relocate(reg.stack[i].u.objRef); + } + scan(); if (purgeFlag) { memset(memToPurgePtr, 0, heapSizeKiB * 1024 / 2); } - gcCount++; } ObjRef alloc(unsigned int objectSize) { diff --git a/njvm.o b/njvm.o index ae21899..e02da5d 100644 Binary files a/njvm.o and b/njvm.o differ