add division by zero error

This commit is contained in:
2026-05-27 21:26:17 +10:00
parent f0acf42ef7
commit 83efbc77ed
2 changed files with 47 additions and 35 deletions

View File

@@ -1,7 +1,3 @@
func main() -> int {
int x = 0.1
if x + 0.2 == 0.3 {
return 1
}
return 0
return 1.123 / 0
}

View File

@@ -165,15 +165,15 @@ ResultType(voidPtr, charptr) vmClock(CometVM* vm) {
}
case INST_ADDI: {
int64_t a = pop(vm);
int64_t b = pop(vm);
int64_t a = pop(vm);
push(vm, a + b);
break;
}
case INST_ADDF: {
int64_t a = pop(vm);
int64_t b = pop(vm);
int64_t a = pop(vm);
double aDouble;
memcpy(&aDouble, &a, sizeof(double));
@@ -188,15 +188,15 @@ ResultType(voidPtr, charptr) vmClock(CometVM* vm) {
break;
}
case INST_SUBI: {
int64_t a = pop(vm);
int64_t b = pop(vm);
int64_t a = pop(vm);
push(vm, a - b);
break;
}
case INST_SUBF: {
int64_t a = pop(vm);
int64_t b = pop(vm);
int64_t a = pop(vm);
double aDouble;
memcpy(&aDouble, &a, sizeof(double));
@@ -211,15 +211,15 @@ ResultType(voidPtr, charptr) vmClock(CometVM* vm) {
break;
}
case INST_MULI: {
int64_t a = pop(vm);
int64_t b = pop(vm);
int64_t a = pop(vm);
push(vm, a * b);
break;
}
case INST_MULF: {
int64_t a = pop(vm);
int64_t b = pop(vm);
int64_t a = pop(vm);
double aDouble;
memcpy(&aDouble, &a, sizeof(double));
@@ -234,9 +234,14 @@ ResultType(voidPtr, charptr) vmClock(CometVM* vm) {
break;
}
case INST_DIVI: {
int64_t a = pop(vm);
int64_t b = pop(vm);
if (b == 0) {
return Error(voidPtr, charptr, "Division by zero");
}
int64_t a = pop(vm);
double result = (double)a / (double)b;
int64_t casted;
memcpy(&casted, &result, sizeof(int64_t));
@@ -245,13 +250,21 @@ ResultType(voidPtr, charptr) vmClock(CometVM* vm) {
break;
}
case INST_DIVF: {
int64_t a = pop(vm);
int64_t b = pop(vm);
double bDouble;
memcpy(&bDouble, &b, sizeof(double));
if (bDouble == 0) {
return Error(voidPtr, charptr, "Division by zero");
}
int64_t a = pop(vm);
double aDouble;
memcpy(&aDouble, &a, sizeof(double));
double bDouble;
memcpy(&bDouble, &b, sizeof(double));
double result = aDouble / bDouble;
int64_t outputtedResult;
@@ -262,20 +275,23 @@ ResultType(voidPtr, charptr) vmClock(CometVM* vm) {
}
case INST_EQI: {
int64_t a = pop(vm);
int64_t b = pop(vm);
int64_t a = pop(vm);
push(vm, a == b);
break;
}
case INST_EQF: {
int64_t b = pop(vm);
double bDouble;
memcpy(&bDouble, &b, sizeof(double));
int64_t a = pop(vm);
double aDouble;
memcpy(&aDouble, &a, sizeof(double));
int64_t b = pop(vm);
double bDouble;
memcpy(&bDouble, &b, sizeof(double));
push(vm, aDouble == bDouble);
break;
@@ -288,14 +304,14 @@ ResultType(voidPtr, charptr) vmClock(CometVM* vm) {
break;
}
case INST_LTF: {
int64_t a = pop(vm);
double aDouble;
memcpy(&aDouble, &a, sizeof(double));
int64_t b = pop(vm);
double bDouble;
memcpy(&bDouble, &b, sizeof(double));
int64_t a = pop(vm);
double aDouble;
memcpy(&aDouble, &a, sizeof(double));
push(vm, aDouble < bDouble);
break;
}
@@ -307,14 +323,14 @@ ResultType(voidPtr, charptr) vmClock(CometVM* vm) {
break;
}
case INST_GTF: {
int64_t a = pop(vm);
double aDouble;
memcpy(&aDouble, &a, sizeof(double));
int64_t b = pop(vm);
double bDouble;
memcpy(&bDouble, &b, sizeof(double));
int64_t a = pop(vm);
double aDouble;
memcpy(&aDouble, &a, sizeof(double));
push(vm, aDouble > bDouble);
break;
}
@@ -326,14 +342,14 @@ ResultType(voidPtr, charptr) vmClock(CometVM* vm) {
break;
}
case INST_LTEF: {
int64_t a = pop(vm);
double aDouble;
memcpy(&aDouble, &a, sizeof(double));
int64_t b = pop(vm);
double bDouble;
memcpy(&bDouble, &b, sizeof(double));
int64_t a = pop(vm);
double aDouble;
memcpy(&aDouble, &a, sizeof(double));
push(vm, aDouble <= bDouble);
break;
}
@@ -345,14 +361,14 @@ ResultType(voidPtr, charptr) vmClock(CometVM* vm) {
break;
}
case INST_GTEF: {
int64_t a = pop(vm);
double aDouble;
memcpy(&aDouble, &a, sizeof(double));
int64_t b = pop(vm);
double bDouble;
memcpy(&bDouble, &b, sizeof(double));
int64_t a = pop(vm);
double aDouble;
memcpy(&aDouble, &a, sizeof(double));
push(vm, aDouble >= bDouble);
break;
}