*/ void Collect_Object(REBSER *prior) /* ** Collect words from a prior object. ** ***********************************************************************/ { REBVAL *words = FRM_WORDS(prior); REBINT *binds = WORDS_HEAD(Bind_Table); REBINT n; // this is necessary for COPY_VALUES below // to not overwrite memory BUF_WORDS does not own RESIZE_SERIES(BUF_WORDS, SERIES_TAIL(prior)); COPY_VALUES(words, BLK_HEAD(BUF_WORDS), SERIES_TAIL(prior)); SERIES_TAIL(BUF_WORDS) = SERIES_TAIL(prior); for (n = 1, words++; NOT_END(words); words++) // skips first = SELF binds[VAL_WORD_CANON(words)] = n++; }
*/ void Collect_Object(REBSER *prior) /* ** Collect words from a prior object. ** ***********************************************************************/ { REBVAL *words = FRM_WORDS(prior); REBINT *binds = WORDS_HEAD(Bind_Table); REBINT n; // this is necessary for memcpy below to not overwrite memory // BUF_WORDS does not own RESIZE_SERIES(BUF_WORDS, SERIES_TAIL(prior)); // Word values can be copied just as bits (these are EXT_WORD_TYPED) memcpy(BLK_HEAD(BUF_WORDS), words, SERIES_TAIL(prior) * sizeof(REBVAL)); SERIES_TAIL(BUF_WORDS) = SERIES_TAIL(prior); for (n = 1, words++; NOT_END(words); words++) // skips first = SELF binds[VAL_WORD_CANON(words)] = n++; }