This commit is contained in:
Max Brunsfeld 2017-07-03 16:18:29 -07:00
parent e7ccd9c17c
commit d322f0b6a7
3 changed files with 9 additions and 10 deletions

View file

@ -571,8 +571,7 @@ static StackPopResult parser__reduce(Parser *self, StackVersion version,
// delete the rest of the tree arrays.
while (i + 1 < pop.slices.size) {
StackSlice next_slice = pop.slices.contents[i + 1];
if (next_slice.version != slice.version)
break;
if (next_slice.version != slice.version) break;
i++;
uint32_t child_count = next_slice.trees.size;

View file

@ -303,8 +303,9 @@ inline StackPopResult stack__iter(Stack *self, StackVersion version,
if (!link.tree->extra) {
next_iterator->tree_count++;
next_iterator->depth--;
if (!link.is_pending)
if (!link.is_pending) {
next_iterator->is_pending = false;
}
}
array_push(&next_iterator->trees, link.tree);
ts_tree_retain(link.tree);
@ -561,9 +562,8 @@ void ts_stack_force_merge(Stack *self, StackVersion version1, StackVersion versi
for (uint32_t i = 0; i < head2->node->link_count; i++) {
stack_node_add_link(head1->node, head2->node->links[i]);
}
if (head2->push_count > head1->push_count) {
head1->push_count = head2->push_count;
}
if (head2->push_count > head1->push_count) head1->push_count = head2->push_count;
if (head2->depth > head1->depth) head1->depth = head2->depth;
ts_stack_remove_version(self, version2);
}

View file

@ -390,7 +390,7 @@ describe("Stack", [&]() {
StackSlice slice2 = pop.slices.contents[1];
AssertThat(slice2.version, Equals<StackVersion>(1));
AssertThat(slice2.trees, Equals(vector<Tree *>({ trees[4], trees[5], trees[6], trees[10] })))
AssertThat(slice2.trees, Equals(vector<Tree *>({ trees[4], trees[5], trees[6], trees[10] })));
AssertThat(ts_stack_version_count(stack), Equals<size_t>(2));
AssertThat(ts_stack_top_state(stack, 0), Equals(stateI));
@ -441,15 +441,15 @@ describe("Stack", [&]() {
StackSlice slice1 = pop.slices.contents[0];
AssertThat(slice1.version, Equals<StackVersion>(1));
AssertThat(slice1.trees, Equals(vector<Tree *>({ trees[3], trees[10] })))
AssertThat(slice1.trees, Equals(vector<Tree *>({ trees[3], trees[10] })));
StackSlice slice2 = pop.slices.contents[1];
AssertThat(slice2.version, Equals<StackVersion>(2));
AssertThat(slice2.trees, Equals(vector<Tree *>({ trees[6], trees[10] })))
AssertThat(slice2.trees, Equals(vector<Tree *>({ trees[6], trees[10] })));
StackSlice slice3 = pop.slices.contents[2];
AssertThat(slice3.version, Equals<StackVersion>(3));
AssertThat(slice3.trees, Equals(vector<Tree *>({ trees[9], trees[10] })))
AssertThat(slice3.trees, Equals(vector<Tree *>({ trees[9], trees[10] })));
AssertThat(ts_stack_version_count(stack), Equals<size_t>(4));
AssertThat(ts_stack_top_state(stack, 0), Equals(stateI));