Changed truthiness

This commit is contained in:
2022-08-20 22:43:44 +01:00
parent 18ecece348
commit 80ccd119ff
4 changed files with 15 additions and 18 deletions

View File

@@ -137,7 +137,7 @@ static bool execAssert(Interpreter* interpreter) {
return false;
}
if (!IS_TRUTHY(lhs)) {
if (IS_NULL(lhs) || !IS_TRUTHY(lhs)) {
(*interpreter->assertOutput)(AS_STRING(rhs));
return false;
}
@@ -396,6 +396,11 @@ static bool execValCast(Interpreter* interpreter) {
Literal result = TO_NULL_LITERAL;
if (IS_NULL(value)) {
printf("Can't cast a null value\n");
return false;
}
//cast the rhs to the type represented by lhs
switch(AS_TYPE(type).typeOf) {
case LITERAL_BOOLEAN:
@@ -599,6 +604,11 @@ static bool execFalseJump(Interpreter* interpreter) {
return false;
}
if (IS_NULL(lit)) {
printf("Null detected in comparison\n");
return false;
}
if (!IS_TRUTHY(lit)) {
interpreter->count = target + interpreter->codeStart;
}

View File

@@ -323,6 +323,7 @@ void freeLiteral(Literal literal) {
bool _isTruthy(Literal x) {
if (IS_NULL(x)) {
fprintf(stderr, "Null is neither true nor false");
return false;
}
@@ -330,16 +331,6 @@ bool _isTruthy(Literal x) {
return AS_BOOLEAN(x);
}
if (IS_INTEGER(x)) {
return AS_INTEGER(x) != 0;
}
if (IS_FLOAT(x)) {
return AS_FLOAT(x) != 0;
}
//TODO: empty string as falsy?
return true;
}