Skip to content

Commit 409b5d6

Browse files
committed
fix(scanner): keep size of indents consistent
1 parent bffb65a commit 409b5d6

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

src/scanner.c

+7-4
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ bool tree_sitter_python_external_scanner_scan(void *payload, TSLexer *lexer, con
211211
lexer->mark_end(lexer);
212212

213213
bool found_end_of_line = false;
214-
uint32_t indent_length = 0;
214+
uint16_t indent_length = 0;
215215
int32_t first_comment_indent_length = -1;
216216
for (;;) {
217217
if (lexer->lookahead == '\n') {
@@ -380,7 +380,9 @@ unsigned tree_sitter_python_external_scanner_serialize(void *payload, char *buff
380380

381381
uint32_t iter = 1;
382382
for (; iter < scanner->indents.size && size < TREE_SITTER_SERIALIZATION_BUFFER_SIZE; ++iter) {
383-
buffer[size++] = (char)*array_get(&scanner->indents, iter);
383+
uint16_t indent_value = *array_get(&scanner->indents, iter);
384+
buffer[size++] = (char)(indent_value & 0xFF);
385+
buffer[size++] = (char)((indent_value >> 8) & 0xFF);
384386
}
385387

386388
return size;
@@ -406,8 +408,9 @@ void tree_sitter_python_external_scanner_deserialize(void *payload, const char *
406408
size += delimiter_count;
407409
}
408410

409-
for (; size < length; size++) {
410-
array_push(&scanner->indents, (unsigned char)buffer[size]);
411+
for (; size + 1 < length; size += 2) {
412+
uint16_t indent_value = (unsigned char)buffer[size] | ((unsigned char)buffer[size + 1] << 8);
413+
array_push(&scanner->indents, indent_value);
411414
}
412415
}
413416
}

0 commit comments

Comments
 (0)