Fix chained predicates on ancestor axis #119
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The XPath expression with chained predicates on the ancestor axis was not working correctly. For example:
This expression should find all elements with @itemprop="author" whose first @itemscope ancestor has @itemtype="Comment". However, it was returning 0 results instead of the expected elements.
Root cause:
ancestorQuery.table(deduplication table) was persisting across Evaluate() calls, preventing ancestors from being found for subsequent input contexts.filterQuery.positmap(position map) was not being reset during Evaluate(), causing position tracking to be incorrect when the same predicate query was reused for multiple input nodes.Fix:
ancestorQuery.tableto nil in Evaluate() to ensure clean state for each evaluationfilterQuery.positmapto nil in Evaluate() to ensure clean state for each evaluationThese changes ensure that when a predicate query is evaluated multiple times (once for each candidate node), the internal state is properly reset, allowing the query to work correctly for each evaluation.
💁 Unit test by Mislav
🤖 Implementation by Claude Code