Simplify logic for terminating tree balancing

This commit is contained in:
Max Brunsfeld 2018-02-12 11:52:06 -08:00
parent 299a146b66
commit 134c455b80

View file

@ -206,15 +206,13 @@ Tree *ts_tree_make_copy(TreePool *pool, Tree *self) {
static void ts_tree__compress(Tree *self, unsigned count, const TSLanguage *language) {
Tree *tree = self;
for (unsigned i = 0; i < count; i++) {
if (tree->child_count != 2) break;
Tree *child = tree->children[0];
if (child->symbol != tree->symbol || child->child_count != 2) break;
if (tree->ref_count > 1) break;
if (child->ref_count > 1) break;
if (child->symbol != tree->symbol) break;
Tree *grandchild = child->children[0];
if (grandchild->symbol != tree->symbol || grandchild->child_count != 2) break;
if (grandchild->ref_count > 1) break;
if (grandchild->symbol != tree->symbol) break;
if (grandchild->children[0]->symbol != tree->symbol) break;
if (child->ref_count > 1 || grandchild->ref_count > 1) break;
tree->children[0] = grandchild;
grandchild->context.parent = tree;