Skip to content

Commit dd89ca6

Browse files
authored
fix(query): store generic predicate pattern index (#388)
1 parent 872f46a commit dd89ca6

File tree

3 files changed

+4
-1
lines changed

3 files changed

+4
-1
lines changed

tree_sitter/binding/query.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,7 @@ PyObject *query_new(PyTypeObject *cls, PyObject *args, PyObject *Py_UNUSED(kwarg
437437
PyObject_New(QueryPredicateGeneric, state->query_predicate_generic_type);
438438
predicate->predicate = PyUnicode_FromStringAndSize(predicate_name, length);
439439
predicate->arguments = PyList_New(predicate_len - 1);
440+
predicate->pattern_index = i;
440441
for (uint32_t k = 1; k < predicate_len; ++k) {
441442
PyObject *item;
442443
if ((predicate_step + k)->type == TSQueryPredicateStepTypeCapture) {

tree_sitter/binding/query_predicates.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,8 @@ bool query_satisfies_predicates(Query *query, TSQueryMatch match, Tree *tree, Py
161161
}
162162
QueryPredicateGeneric *predicate = (QueryPredicateGeneric *)item;
163163
PyObject *result = PyObject_CallFunction(callable, "OOIO", predicate->predicate,
164-
predicate->arguments, i, captures);
164+
predicate->arguments,
165+
predicate->pattern_index, captures);
165166
if (result == NULL) {
166167
is_satisfied = false;
167168
break;

tree_sitter/binding/types.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ typedef struct {
7676
PyObject_HEAD
7777
PyObject *predicate;
7878
PyObject *arguments;
79+
uint32_t pattern_index;
7980
} QueryPredicateGeneric;
8081

8182
typedef struct {

0 commit comments

Comments
 (0)