Update trees' metadata bits when setting symbol back to word token

This commit is contained in:
Max Brunsfeld 2019-01-29 15:30:13 -08:00
parent f6d014f3f4
commit 213ccfd3a4
3 changed files with 20 additions and 10 deletions

View file

@ -1363,7 +1363,7 @@ static void ts_parser__advance(TSParser *self, StackVersion version, bool allow_
);
MutableSubtree mutable_lookahead = ts_subtree_make_mut(&self->tree_pool, lookahead);
ts_subtree_set_symbol(&mutable_lookahead, self->language->keyword_capture_token);
ts_subtree_set_symbol(&mutable_lookahead, self->language->keyword_capture_token, self->language);
lookahead = ts_subtree_from_mut(mutable_lookahead);
continue;
}

View file

@ -225,6 +225,24 @@ Subtree ts_subtree_new_leaf(
}
}
void ts_subtree_set_symbol(
MutableSubtree *self,
TSSymbol symbol,
const TSLanguage *language
) {
TSSymbolMetadata metadata = ts_language_symbol_metadata(language, symbol);
if (self->data.is_inline) {
assert(symbol < UINT8_MAX);
self->data.symbol = symbol;
self->data.named = metadata.named;
self->data.visible = metadata.visible;
} else {
self->ptr->symbol = symbol;
self->ptr->named = metadata.named;
self->ptr->visible = metadata.visible;
}
}
Subtree ts_subtree_new_error(
SubtreePool *pool, int32_t lookahead_char, Length padding, Length size,
uint32_t bytes_scanned, TSStateId parse_state, const TSLanguage *language

View file

@ -132,6 +132,7 @@ void ts_subtree_retain(Subtree);
void ts_subtree_release(SubtreePool *, Subtree);
bool ts_subtree_eq(Subtree, Subtree);
int ts_subtree_compare(Subtree, Subtree);
void ts_subtree_set_symbol(MutableSubtree *, TSSymbol, const TSLanguage *);
void ts_subtree_set_children(MutableSubtree, Subtree *, uint32_t, const TSLanguage *);
void ts_subtree_balance(Subtree, SubtreePool *, const TSLanguage *);
Subtree ts_subtree_edit(Subtree, const TSInputEdit *edit, SubtreePool *);
@ -154,15 +155,6 @@ static inline uint32_t ts_subtree_lookahead_bytes(Subtree self) { return SUBTREE
#undef SUBTREE_GET
static inline void ts_subtree_set_symbol(MutableSubtree *self, TSSymbol symbol) {
if (self->data.is_inline) {
assert(symbol < UINT8_MAX);
self->data.symbol = symbol;
} else {
self->ptr->symbol = symbol;
}
}
static inline void ts_subtree_set_extra(MutableSubtree *self) {
if (self->data.is_inline) {
self->data.extra = true;