*/ REBFLG MT_Datatype(REBVAL *out, REBVAL *data, REBCNT type) /* ***********************************************************************/ { if (!IS_WORD(data)) return FALSE; type = VAL_WORD_CANON(data); if (type > REB_MAX) return FALSE; VAL_SET(out, REB_DATATYPE); VAL_DATATYPE(out) = type-1; VAL_TYPE_SPEC(out) = 0; return TRUE; }
// // MAKE_Datatype: C // void MAKE_Datatype(REBVAL *out, enum Reb_Kind kind, const REBVAL *arg) { if (!IS_WORD(arg)) fail (Error_Bad_Make(kind, arg)); REBSYM sym = VAL_WORD_SYM(arg); if (sym == SYM_0 || sym > SYM_FROM_KIND(REB_MAX)) fail (Error_Bad_Make(kind, arg)); VAL_RESET_HEADER(out, REB_DATATYPE); VAL_TYPE_KIND(out) = KIND_FROM_SYM(sym); VAL_TYPE_SPEC(out) = 0; }