From 073f583830356377783525a90fef2ee6b265a26c Mon Sep 17 00:00:00 2001 From: Elias Bennour Date: Sun, 28 Jan 2024 18:57:48 +0100 Subject: [PATCH] cleanup --- njvm.c | 72 +++++++++++----------------------------------------------- 1 file changed, 13 insertions(+), 59 deletions(-) diff --git a/njvm.c b/njvm.c index 3e58ea7..9e14387 100644 --- a/njvm.c +++ b/njvm.c @@ -326,18 +326,17 @@ void tests(void) { ObjRef *heap; int heapSizeKiB; -char *memTargetPtr; //zielspeicherzeiger -char *freeHeapPtr; //freizeiger -char *halfHeapPtr; //halbspeicherende +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) -#define GET_SIZE(objRef)((objRef)->size& ~MSB) //Gets the size of an ObjRef -#define GET_REFS(objRef)((ObjRef *)((objRef)->data)) //Pointer on first ObjRef in Object +#define GET_SIZE(objRef)((objRef)->size& ~MSB) +#define GET_REFS(objRef)((ObjRef *)((objRef)->data)) ObjRef copyObjectToFreeMem(ObjRef orig) { - //printf("%s%d\n", "Size in CpyObj: ", GET_SIZE(orig) ); int size; if (IS_PRIMITIVE(orig)) { size = GET_SIZE(orig); @@ -346,32 +345,18 @@ ObjRef copyObjectToFreeMem(ObjRef orig) { } memcpy(freeHeapPtr, orig, size); ObjRef oldPtr = (ObjRef) freeHeapPtr; - //printf("%s%d\n","size after memcpy ", GET_SIZE(oldPtr)); - //printf("%s%d\n","actual Size: ", size); - //oldPtr->size = size; freeHeapPtr += size; return oldPtr; } ObjRef relocate(ObjRef orig) { - /* if (orig == NULL) { - printf("%s\n", "null"); - } else { - printf("%s%d\n","Size in relocate ", GET_SIZE(orig)); - } - */ ObjRef copy; if (orig == NULL) { -/* relocate(nil) = nil */ copy = NULL; } else { if (orig->brokenHeart == 1) { -/* Objekt ist bereits kopiert */ copy = orig->forwardPointer; - //copy->size =orig->size; - //printf("%s\n", "already copied"); } else { -/* Objekt muss noch kopiert werden*/ copy = copyObjectToFreeMem(orig); orig->brokenHeart = true; orig->forwardPointer = copy; @@ -385,32 +370,25 @@ ObjRef relocate(ObjRef orig) { void scan(void) { char *scanPtr = memTargetPtr; while (scanPtr < freeHeapPtr) { -/* es gibt noch Objekte, die -* gescannt werden müssen. -*/ ObjRef scanOr = (ObjRef) scanPtr; - // printf("%d\n", GET_SIZE(scanOr)); + ObjRef scanOr = (ObjRef) scanPtr; + if (!IS_PRIMITIVE(scanOr)) { -/* Ist ein Verbundobjekt */ for (int i = 0; i < GET_SIZE(scanOr); i++) { GET_REFS(scanOr)[i] = relocate(GET_REFS(scanOr)[i]); } scanPtr += sizeof(bool) + (GET_SIZE(scanOr) * sizeof(ObjRef *)) + sizeof(unsigned int) + sizeof(void *); } else { - //printf("%s %d\n", "is primitive, size: ", GET_SIZE(scanOr)); scanPtr += GET_SIZE(scanOr); - } } } void swap() { if (memTargetPtr == (char *) heap) { - //printf("%s\n", "swapped to second half"); freeHeapPtr = halfHeapPtr; memTargetPtr = halfHeapPtr; halfHeapPtr = ((char *) heap) + (heapSizeKiB * 1024); } else { - //printf("%s\n", "swapped to first half"); freeHeapPtr = ((char *) heap); memTargetPtr = ((char *) heap); halfHeapPtr = ((char *) heap) + ((heapSizeKiB * 1024) / 2); @@ -418,57 +396,33 @@ void swap() { } void garbageCollector() { - char *memToPurgePtr = halfHeapPtr - ((heapSizeKiB * 1024) / 2); swap(); -// printf("%s\n", "stack"); + for (int i = 0; i < *stack.current; i++) { if (stack.stack[i].isObjRef) { stack.stack[i].u.objRef = relocate(stack.stack[i].u.objRef); } } -// printf("%s\n", "globals"); + for (int i = 0; i < *sda.size; i++) { sda.sda[i] = relocate(sda.sda[i]); } -// printf("%s\n", "retVal"); - //returnValue = relocate(returnValue); -// printf("%s\n", "op1"); // bip.op1 = relocate(bip.op1); // ObjRef b = bip.op1; -// // if (b != NULL) -// //printf("%d\n", GET_SIZE(b)); -// -// //printf("%s\n", "op2"); // bip.op2 = relocate(bip.op2); -// // b = bip.op2; // if (b != NULL) -// //printf("%d\n", GET_SIZE(b)); -// -// //printf("%s\n", "res"); // bip.res = relocate(bip.res); // b = bip.res; -// -// if (b != NULL) { -// //printf("%d\n", GET_SIZE(b)); -// -// printf("%s\n", "rem"); -// bip.op1 = bip.rem; -// bigPrint(stdout); -// bip.rem = relocate(bip.rem); -// printf("%s\n", "rem"); -// } -// -// b = bip.rem; -// printf("bip finished\n"); // if (b != NULL) - //printf("%d\n", GET_SIZE(b)); -// -// +// bip.rem = relocate(bip.rem); +// b = bip.rem; +// if (b != NULL) // scan(); + if (purgeFlag) { memset(memToPurgePtr, 0, heapSizeKiB * 1024 / 2); }