*/ void Init_Errors(REBVAL *errors) /* ***********************************************************************/ { REBSER *errs; REBVAL *val; // Create error objects and error type objects: *ROOT_ERROBJ = *Get_System(SYS_STANDARD, STD_ERROR); errs = Construct_Object(0, VAL_BLK(errors), 0); Set_Object(Get_System(SYS_CATALOG, CAT_ERRORS), errs); Set_Root_Series(TASK_ERR_TEMPS, Make_Block(3)); // Create objects for all error types: for (val = BLK_SKIP(errs, 1); NOT_END(val); val++) { errs = Construct_Object(0, VAL_BLK(val), 0); SET_OBJECT(val, errs); } // Catch top level errors, to provide decent output: PUSH_STATE(Top_State, Saved_State); if (SET_JUMP(Top_State)) { POP_STATE(Top_State, Saved_State); DSP++; // Room for return value Catch_Error(DS_TOP); // Stores error value here Print_Value(DS_TOP, 0, FALSE); Crash(RP_NO_CATCH); } SET_STATE(Top_State, Saved_State); }
*/ REBFLG MT_Object(REBVAL *out, REBVAL *data, REBCNT type) /* ***********************************************************************/ { if (!IS_BLOCK(data)) return FALSE; VAL_OBJ_FRAME(out) = Construct_Object(0, VAL_BLK_DATA(data), 0); VAL_SET(out, type); if (type == REB_ERROR) { Make_Error_Object(out, out); } return TRUE; }
*/ REBSER *Make_Module_Spec(REBVAL *block) /* ** Create a module spec object. Holds module name, version, ** exports, locals, and more. See system/standard/module. ** ***********************************************************************/ { REBSER *obj; REBSER *frame; // Build standard module header object: obj = VAL_OBJ_FRAME(Get_System(SYS_STANDARD, STD_SCRIPT)); if (block && IS_BLOCK(block)) frame = Construct_Object(obj, VAL_BLK_DATA(block), 0); else frame = CLONE_OBJECT(obj); return frame; }
*/ REBSER *Make_Module_Spec(REBVAL *spec) /* ** Create a module spec object. Holds module name, version, ** exports, locals, and more. See system/standard/module. ** ***********************************************************************/ { // Build standard module header object: REBSER *obj = VAL_OBJ_FRAME(Get_System(SYS_STANDARD, STD_SCRIPT)); REBSER *frame; if (spec && IS_BLOCK(spec)) frame = Construct_Object(obj, VAL_BLK_DATA(spec), FALSE); else frame = Copy_Array_Shallow(obj); return frame; }