diff --git a/lib/src/parser.c b/lib/src/parser.c index 56326feb..85452f8d 100644 --- a/lib/src/parser.c +++ b/lib/src/parser.c @@ -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; } diff --git a/lib/src/subtree.c b/lib/src/subtree.c index 00af7507..6ca00792 100644 --- a/lib/src/subtree.c +++ b/lib/src/subtree.c @@ -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 diff --git a/lib/src/subtree.h b/lib/src/subtree.h index 039494b5..b0423afb 100644 --- a/lib/src/subtree.h +++ b/lib/src/subtree.h @@ -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;