Skip to content

Commit

Permalink
FIX: better error messages for not caught throws
Browse files Browse the repository at this point in the history
  • Loading branch information
Oldes committed Jun 20, 2023
1 parent 6e00115 commit 7e25856
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 4 deletions.
3 changes: 2 additions & 1 deletion src/boot/errors.reb
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ Throw: [
type: "throw error"
break: {no loop to break}
return: {return or exit not in function}
throw: [{no catch for throw:} :arg1]
unnamed-throw: [{no catch for unnamed throw with value:} :arg1]
throw: [{no catch for throw:} :arg2 "with value:" :arg1]
continue: {no loop to continue}
halt: [{halted by user or script}]
quit: [{user script quit}]
Expand Down
20 changes: 17 additions & 3 deletions src/core/s-mold.c
Original file line number Diff line number Diff line change
Expand Up @@ -1046,6 +1046,8 @@ STOID Mold_Error(REBVAL *value, REB_MOLD *mold, REBFLG molded)
{
ERROR_OBJ *err;
REBVAL *msg; // Error message block
REBCNT sym;
REBVAL word;

// Protect against recursion. !!!!

Expand All @@ -1062,9 +1064,21 @@ STOID Mold_Error(REBVAL *value, REB_MOLD *mold, REBFLG molded)
return;
}

// If it is an unprocessed BREAK, THROW, CONTINUE, RETURN:
if (VAL_ERR_NUM(value) < RE_NOTE || !VAL_ERR_OBJECT(value)) {
VAL_ERR_OBJECT(value) = Make_Error(VAL_ERR_NUM(value), value, 0, 0); // spoofs field
// If it is an unprocessed THROW:
if (VAL_ERR_NUM(value) == RE_THROW) {
sym = VAL_ERR_SYM(value);
if (!sym) {
VAL_ERR_OBJECT(value) = Make_Error(RE_UNNAMED_THROW, VAL_ERR_VALUE(value), 0, 0);
}
else {
Set_Word(&word, sym, 0, 0);
VAL_SET(&word, REB_WORD);
VAL_ERR_OBJECT(value) = Make_Error(VAL_ERR_NUM(value), VAL_ERR_VALUE(value), &word, 0);
}
}
// If it is an unprocessed BREAK, CONTINUE, RETURN:
else if (VAL_ERR_NUM(value) < RE_NOTE || !VAL_ERR_OBJECT(value)) {
VAL_ERR_OBJECT(value) = Make_Error(VAL_ERR_NUM(value), VAL_ERR_VALUE(value), 0, 0); // spoofs field
}
err = VAL_ERR_VALUES(value);

Expand Down

0 comments on commit 7e25856

Please sign in to comment.