@@ -1046,6 +1046,8 @@ STOID Mold_Error(REBVAL *value, REB_MOLD *mold, REBFLG molded)
1046
1046
{
1047
1047
ERROR_OBJ * err ;
1048
1048
REBVAL * msg ; // Error message block
1049
+ REBCNT sym ;
1050
+ REBVAL word ;
1049
1051
1050
1052
// Protect against recursion. !!!!
1051
1053
@@ -1062,9 +1064,21 @@ STOID Mold_Error(REBVAL *value, REB_MOLD *mold, REBFLG molded)
1062
1064
return ;
1063
1065
}
1064
1066
1065
- // If it is an unprocessed BREAK, THROW, CONTINUE, RETURN:
1066
- if (VAL_ERR_NUM (value ) < RE_NOTE || !VAL_ERR_OBJECT (value )) {
1067
- VAL_ERR_OBJECT (value ) = Make_Error (VAL_ERR_NUM (value ), value , 0 , 0 ); // spoofs field
1067
+ // If it is an unprocessed THROW:
1068
+ if (VAL_ERR_NUM (value ) == RE_THROW ) {
1069
+ sym = VAL_ERR_SYM (value );
1070
+ if (!sym ) {
1071
+ VAL_ERR_OBJECT (value ) = Make_Error (RE_UNNAMED_THROW , VAL_ERR_VALUE (value ), 0 , 0 );
1072
+ }
1073
+ else {
1074
+ Set_Word (& word , sym , 0 , 0 );
1075
+ VAL_SET (& word , REB_WORD );
1076
+ VAL_ERR_OBJECT (value ) = Make_Error (VAL_ERR_NUM (value ), VAL_ERR_VALUE (value ), & word , 0 );
1077
+ }
1078
+ }
1079
+ // If it is an unprocessed BREAK, CONTINUE, RETURN:
1080
+ else if (VAL_ERR_NUM (value ) < RE_NOTE || !VAL_ERR_OBJECT (value )) {
1081
+ VAL_ERR_OBJECT (value ) = Make_Error (VAL_ERR_NUM (value ), VAL_ERR_VALUE (value ), 0 , 0 ); // spoofs field
1068
1082
}
1069
1083
err = VAL_ERR_VALUES (value );
1070
1084
0 commit comments