diff --git a/debugMenu.c b/debugMenu.c index e8ef35c..6f15234 100644 --- a/debugMenu.c +++ b/debugMenu.c @@ -27,10 +27,10 @@ void inspect(struct stack s, int fp){ } } } -void list(){ +void list(void){ //todo } -void breakpoint(){ +void breakpoint(void){ //todo } diff --git a/njvm.c b/njvm.c index c9b5faa..04168b7 100644 --- a/njvm.c +++ b/njvm.c @@ -251,14 +251,12 @@ void execute(struct program program) { case GETF: if (debug == 1) printf("getf"); tempObj = pop(stack).u.objRef; - if (SIGN_EXTEND(IMMEDIATE(program.program[i])) < 0 || SIGN_EXTEND(IMMEDIATE(program.program[i])) > GET_ELEMENT_COUNT(tempObj)) exit(1); push(stack, stackSlotWithObjRef(getField(tempObj,SIGN_EXTEND(IMMEDIATE(program.program[i]))))); break; case PUTF: if (debug == 1) printf("putf"); tempObj = pop(stack).u.objRef; tempObj2 = pop(stack).u.objRef; - if (SIGN_EXTEND(IMMEDIATE(program.program[i])) < 0 || SIGN_EXTEND(IMMEDIATE(program.program[i])) > GET_ELEMENT_COUNT(tempObj2)) exit(1); setField(tempObj2, SIGN_EXTEND(IMMEDIATE(program.program[i])),tempObj); break; case NEWA: @@ -271,7 +269,6 @@ void execute(struct program program) { bip.op1 = pop(stack).u.objRef; tempInt = bigToInt(); tempObj = pop(stack).u.objRef; - if (tempInt < 0 || tempInt > GET_ELEMENT_COUNT(tempObj)) exit(1); push(stack, stackSlotWithObjRef(getField(tempObj,bigToInt()))); break; case PUTFA: @@ -280,7 +277,6 @@ void execute(struct program program) { tempObj2 = pop(stack).u.objRef; bip.op1 = pop(stack).u.objRef; tempInt = bigToInt(); - if (tempInt < 0 || tempInt > GET_ELEMENT_COUNT(tempObj2)) exit(1); setField(tempObj2, tempInt,tempObj); break; case GETSZ: @@ -313,7 +309,6 @@ void execute(struct program program) { } void tests(void) { - } int main(int argc, char *argv[]) { diff --git a/njvm.o b/njvm.o index 2cee315..7e95bbc 100644 Binary files a/njvm.o and b/njvm.o differ diff --git a/record.c b/record.c index 4691353..27b0e30 100644 --- a/record.c +++ b/record.c @@ -9,20 +9,30 @@ ObjRef newRecord(int size){ ObjRef record; unsigned int objSize; objSize = sizeof(*record) + (size * sizeof(void *)); - if((record = malloc(objSize))== NULL){ + if((record = malloc(objSize)) == NULL){ perror("malloc"); } - record->size = MSB & size; + record->size = (1 << ((sizeof(int) * 8) - 1)); + record->size = record->size + size; for(int i = 0; i < size; i++) { GET_REFS_PTR(record)[i] = malloc(8); } return record; } +int getSize(ObjRef arr){ + return GET_ELEMENT_COUNT(arr); +} ObjRef getField(ObjRef arr, int point){ + if(0 > point || point > getSize(arr)){ + printf("Index %i out of bounds for length %i\n",point, getSize(arr)); + } return *(ObjRef *)GET_REFS_PTR(arr)[point]->data; } void setField(ObjRef arr, int point, ObjRef value){ + if(0 > point || point > getSize(arr)){ + printf("Index %i out of bounds for length %i\n",point, getSize(arr)); + } * (ObjRef *)GET_REFS_PTR(arr)[point]->data = value; } -#endif \ No newline at end of file +#endif