Skip to content

Commit b5f461a

Browse files
authored
Merge pull request tree-sitter#2802 from tree-sitter/another-subtree-compare-fix
Fix another bug in subtree_compare
2 parents 24e62e5 + 09b522e commit b5f461a

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

lib/src/subtree.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -623,15 +623,19 @@ int ts_subtree_compare(Subtree left, Subtree right, SubtreePool *pool) {
623623
array_push(&pool->tree_stack, ts_subtree_to_mut_unsafe(left));
624624
array_push(&pool->tree_stack, ts_subtree_to_mut_unsafe(right));
625625

626-
int result = 0;
627-
while (result == 0 && pool->tree_stack.size > 0) {
626+
while (pool->tree_stack.size > 0) {
628627
right = ts_subtree_from_mut(array_pop(&pool->tree_stack));
629628
left = ts_subtree_from_mut(array_pop(&pool->tree_stack));
630629

630+
int result = 0;
631631
if (ts_subtree_symbol(left) < ts_subtree_symbol(right)) result = -1;
632632
if (ts_subtree_symbol(right) < ts_subtree_symbol(left)) result = 1;
633633
if (ts_subtree_child_count(left) < ts_subtree_child_count(right)) result = -1;
634634
if (ts_subtree_child_count(right) < ts_subtree_child_count(left)) result = 1;
635+
if (result != 0) {
636+
array_clear(&pool->tree_stack);
637+
return result;
638+
}
635639

636640
for (uint32_t i = ts_subtree_child_count(left); i > 0; i--) {
637641
Subtree left_child = ts_subtree_children(left)[i - 1];
@@ -641,8 +645,7 @@ int ts_subtree_compare(Subtree left, Subtree right, SubtreePool *pool) {
641645
}
642646
}
643647

644-
array_clear(&pool->tree_stack);
645-
return result;
648+
return 0;
646649
}
647650

648651
static inline void ts_subtree_set_has_changes(MutableSubtree *self) {

0 commit comments

Comments
 (0)