generatedSubtreeCompare function
Exact symbol/child-count/pre-order comparison used by
ts_subtree_compare. Source coordinates and other metadata deliberately
do not participate.
Implementation
int generatedSubtreeCompare(
GeneratedTreeSitterNode left,
GeneratedTreeSitterNode right,
) {
final pending = <(GeneratedTreeSitterNode, GeneratedTreeSitterNode)>[
(left, right),
];
while (pending.isNotEmpty) {
final pair = pending.removeLast();
final symbolOrder = pair.$1.structuralSymbol.compareTo(
pair.$2.structuralSymbol,
);
if (symbolOrder != 0) return symbolOrder;
final childCountOrder = pair.$1.children.length.compareTo(
pair.$2.children.length,
);
if (childCountOrder != 0) return childCountOrder;
for (var index = pair.$1.children.length - 1; index >= 0; index--) {
pending.add((pair.$1.children[index], pair.$2.children[index]));
}
}
return 0;
}