Fix logic for inserting leading & trailing extras into root node on acceptance
This commit is contained in:
parent
9972709e43
commit
6fd3edceae
2 changed files with 27 additions and 20 deletions
|
|
@ -788,29 +788,32 @@ static bool ts_parser__accept(TSParser *self, StackVersion version) {
|
|||
StackSlice slice = pop.slices.contents[i];
|
||||
TreeArray trees = slice.trees;
|
||||
|
||||
for (size_t j = trees.size - 1; j + 1 > 0; j--) {
|
||||
if (!trees.contents[j]->extra) {
|
||||
TSTree *root = trees.contents[j];
|
||||
|
||||
CHECK(array_splice(&trees, j, 1, root->child_count, root->children));
|
||||
ts_tree_set_children(root, trees.size, trees.contents);
|
||||
if (!trees.size)
|
||||
array_delete(&trees);
|
||||
|
||||
for (size_t k = j - 1; k + 1 > 0; k--)
|
||||
if (!root->children[k]->extra)
|
||||
root->error_size += root->children[j]->size.chars;
|
||||
|
||||
if (ts_parser__select_tree(self, self->finished_tree, root)) {
|
||||
ts_tree_release(self->finished_tree);
|
||||
self->finished_tree = root;
|
||||
} else {
|
||||
ts_tree_release(root);
|
||||
TSTree *root = NULL;
|
||||
if (trees.size == 1) {
|
||||
root = trees.contents[0];
|
||||
array_delete(&trees);
|
||||
} else {
|
||||
for (size_t j = trees.size - 1; j + 1 > 0; j--) {
|
||||
TSTree *child = trees.contents[j];
|
||||
if (!child->extra) {
|
||||
root = ts_tree_make_copy(child);
|
||||
root->child_count = 0;
|
||||
for (size_t k = 0; k < child->child_count; k++)
|
||||
ts_tree_retain(child->children[k]);
|
||||
CHECK(array_splice(&trees, j, 1, child->child_count, child->children));
|
||||
ts_tree_set_children(root, trees.size, trees.contents);
|
||||
ts_tree_release(child);
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ts_parser__select_tree(self, self->finished_tree, root)) {
|
||||
ts_tree_release(self->finished_tree);
|
||||
self->finished_tree = root;
|
||||
} else {
|
||||
ts_tree_release(root);
|
||||
}
|
||||
}
|
||||
|
||||
ts_stack_remove_version(self->stack, pop.slices.contents[0].version);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue