*/ void Init_Mold(REBCNT size) /* ***********************************************************************/ { REBYTE *cp; REBYTE c; REBYTE *dc; Set_Root_Series(TASK_MOLD_LOOP, Make_Block(size/10), "mold loop"); Set_Root_Series(TASK_BUF_MOLD, Make_Unicode(size), "mold buffer"); // Create quoted char escape table: Char_Escapes = cp = Make_Mem(MAX_ESC_CHAR+1); // cleared for (c = '@'; c <= '_'; c++) *cp++ = c; Char_Escapes[TAB] = '-'; Char_Escapes[LF] = '/'; Char_Escapes['"'] = '"'; Char_Escapes['^'] = '^'; URL_Escapes = cp = Make_Mem(MAX_URL_CHAR+1); // cleared //for (c = 0; c <= MAX_URL_CHAR; c++) if (IS_LEX_DELIMIT(c)) cp[c] = ESC_URL; for (c = 0; c <= ' '; c++) cp[c] = ESC_URL | ESC_FILE; dc = ";%\"()[]{}<>"; for (c = LEN_BYTES(dc); c > 0; c--) URL_Escapes[*dc++] = ESC_URL | ESC_FILE; }
*/ void Init_Mold(REBCNT size) /* ***********************************************************************/ { REBYTE *cp; REBYTE c; const REBYTE *dc; Set_Root_Series(TASK_MOLD_LOOP, Make_Block(size/10), "mold loop"); Set_Root_Series(TASK_BUF_MOLD, Make_Unicode(size), "mold buffer"); // Create quoted char escape table: Char_Escapes = cp = ALLOC_ARRAY_ZEROFILL(REBYTE, MAX_ESC_CHAR + 1); for (c = '@'; c <= '_'; c++) *cp++ = c; Char_Escapes[cast(REBYTE, TAB)] = '-'; Char_Escapes[cast(REBYTE, LF)] = '/'; Char_Escapes[cast(REBYTE, '"')] = '"'; Char_Escapes[cast(REBYTE, '^')] = '^'; URL_Escapes = cp = ALLOC_ARRAY_ZEROFILL(REBYTE, MAX_URL_CHAR + 1); //for (c = 0; c <= MAX_URL_CHAR; c++) if (IS_LEX_DELIMIT(c)) cp[c] = ESC_URL; for (c = 0; c <= ' '; c++) cp[c] = ESC_URL | ESC_FILE; dc = cb_cast(";%\"()[]{}<>"); for (c = LEN_BYTES(dc); c > 0; c--) URL_Escapes[*dc++] = ESC_URL | ESC_FILE; }
*/ void Init_Frame(void) /* ***********************************************************************/ { // Temporary block used while scanning for frame words: Set_Root_Series(TASK_BUF_WORDS, Make_Block(100), "word cache"); // just holds words, no GC }
*/ 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); }
// // Init_Typesets: C // // Create typeset variables that are defined above. // For example: NUMBER is both integer and decimal. // Add the new variables to the system context. // void Init_Typesets(void) { REBVAL *value; REBINT n; Set_Root_Series(ROOT_TYPESETS, ARR_SERIES(Make_Array(40))); for (n = 0; Typesets[n].sym != SYM_0; n++) { value = Alloc_Tail_Array(VAL_ARRAY(ROOT_TYPESETS)); // Note: the symbol in the typeset is not the symbol of a word holding // the typesets, rather an extra data field used when the typeset is // in a context key slot to identify that field's name // Val_Init_Typeset(value, Typesets[n].bits, SYM_0); *Append_Context(Lib_Context, NULL, Typesets[n].sym) = *value; } }
*/ void Init_Stacks(REBCNT size) /* ***********************************************************************/ { // We always keep one call stack chunk frame around for the first // call frame push. The first frame allocated out of it is // saved as CS_Root. struct Reb_Chunk *chunk = ALLOC(struct Reb_Chunk); #if !defined(NDEBUG) memset(chunk, 0xBD, sizeof(struct Reb_Chunk)); #endif chunk->next = NULL; CS_Root = cast(struct Reb_Call*, &chunk->payload); CS_Top = NULL; CS_Running = NULL; DS_Series = Make_Block(size); Set_Root_Series(TASK_STACK, DS_Series, "data stack"); // uses special GC }
*/ void Init_Typesets(void) /* ** Create typeset variables that are defined above. ** For example: NUMBER is both integer and decimal. ** Add the new variables to the system context. ** ***********************************************************************/ { REBVAL *value; REBINT n; Set_Root_Series(ROOT_TYPESETS, Make_Block(40), "typeset presets"); for (n = 0; Typesets[n]; n += 2) { value = Alloc_Tail_Blk(VAL_SERIES(ROOT_TYPESETS)); VAL_SET(value, REB_TYPESET); VAL_TYPESET(value) = Typesets[n+1]; if (Typesets[n] > 1) *Append_Frame(Lib_Context, 0, (REBCNT)(Typesets[n])) = *value; } }