Simplify logic for terminating tree balancing
This commit is contained in:
parent
299a146b66
commit
134c455b80
1 changed files with 4 additions and 6 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue