Skip to content

Commit 672d491

Browse files
committed
Fix errors in management of external scanner's most recent state
1 parent dc6598e commit 672d491

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

src/runtime/parser.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ static void parser__restore_external_scanner(Parser *self, StackVersion version)
193193
const TSExternalTokenState *state = ts_stack_external_token_state(self->stack, version);
194194
if (self->lexer.last_external_token_state != state) {
195195
LOG("restore_external_scanner");
196+
self->lexer.last_external_token_state = state;
196197
if (state) {
197198
self->language->external_scanner.deserialize(
198199
self->external_scanner_payload,
@@ -293,6 +294,7 @@ static Tree *parser__lex(Parser *self, StackVersion version) {
293294
if (found_external_token) {
294295
result->has_external_tokens = true;
295296
result->has_external_token_state = true;
297+
memset(result->external_token_state, 0, sizeof(TSExternalTokenState));
296298
self->language->external_scanner.serialize(self->external_scanner_payload, result->external_token_state);
297299
self->lexer.last_external_token_state = &result->external_token_state;
298300
}
@@ -360,8 +362,7 @@ static Tree *parser__get_lookahead(Parser *self, StackVersion version,
360362
continue;
361363
}
362364

363-
if (reusable_node->tree->first_leaf.lex_mode.external_lex_state != 0 &&
364-
!ts_external_token_state_eq(
365+
if (!ts_external_token_state_eq(
365366
reusable_node->preceding_external_token_state,
366367
ts_stack_external_token_state(self->stack, version))) {
367368
LOG("cant_reuse_external_tokens tree:%s, size:%u",

0 commit comments

Comments
 (0)