Add optional custom error message to assert

This commit is contained in:
Inversion 2021-02-16 15:53:07 -08:00 committed by cpunch
parent 35466f691f
commit fec26ac380
1 changed files with 10 additions and 5 deletions

View File

@ -24,18 +24,23 @@ int cosmoB_print(CState *state, int nargs, CValue *args) {
}
int cosmoB_assert(CState *state, int nargs, CValue *args) {
if (nargs != 1) {
cosmoV_error(state, "assert() expected 1 argument, got %d!", nargs);
if (nargs < 1 || nargs > 2) {
cosmoV_error(state, "assert() expected 1 or 2 arguments, got %d!", nargs);
return 0; // nothing pushed onto the stack to return
}
if (!IS_BOOLEAN(args[0])) {
cosmoV_typeError(state, "assert()", "<boolean>", "%s", cosmoV_typeStr(args[0]));
if (!IS_BOOLEAN(args[0]) || (nargs == 2 && !IS_STRING(args[1]))) {
cosmoV_typeError(state, "assert()", "<boolean>, <string>", "%s, %s", cosmoV_typeStr(args[0]), cosmoV_typeStr(args[1]));
return 0;
}
if (!cosmoV_readBoolean(args[0])) { // expression passed was false, error!
cosmoV_error(state, "assert() failed!");
if (nargs == 2) {
cosmoV_error(state, "%s", cosmoV_readCString(args[1]));
}
else { // optional custom error message
cosmoV_error(state, "%s", "assert() failed!");
}
} // else do nothing :)
return 0;