Skip to content

Commit d0ad0de

Browse files
committed
Merge branch 'master' into vodka
2 parents 61dd5f6 + 7cd775b commit d0ad0de

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

jsquery_extract.c

+27
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,31 @@ queryHasPositive(ExtractedNode *node)
604604
}
605605
}
606606

607+
static bool
608+
needRecheckRecursive(ExtractedNode *node, bool not)
609+
{
610+
int i;
611+
switch(node->type)
612+
{
613+
case eAnd:
614+
case eOr:
615+
if (node->type == eAnd && !not && node->indirect)
616+
return true;
617+
if (node->type == eOr && not && node->indirect)
618+
return true;
619+
for (i = 0; i < node->args.count; i++)
620+
{
621+
if (needRecheckRecursive(node->args.items[i], not))
622+
return true;
623+
}
624+
return false;
625+
case eNot:
626+
return !needRecheckRecursive(node->args.items[0], !not);
627+
case eScalar:
628+
return false;
629+
}
630+
}
631+
607632
ExtractedNode *
608633
extractJsQuery(JsQuery *jq, MakeEntryHandler handler, Pointer extra)
609634
{
@@ -618,6 +643,8 @@ extractJsQuery(JsQuery *jq, MakeEntryHandler handler, Pointer extra)
618643
}
619644
if (root && !queryHasPositive(root))
620645
root = NULL;
646+
if (root)
647+
root->indirect = needRecheckRecursive(root, false);
621648
return root;
622649
}
623650

0 commit comments

Comments
 (0)