[cfe-users] AST matcher behavior question

Rémi Cohen-Scali via cfe-users cfe-users at lists.llvm.org
Tue Oct 10 23:48:06 PDT 2017


I checked in the AST Matcher Ref doc I generated from my build tree, then
either there is a doc problem, or I don't understand how to use findAll
(however Matcher<T> Matcher actually mean any matcher, then any place).

Thanks

PS.: Perhaps I'll create a doc bug for it ...??

*-=-=-=-=-*
Rémi COHEN-SCALI* - Direction Technique *Jayacode <http://jayacode.fr/>
+33 665 964 182 <http://tel+33%20665%20964%20182> | Skype: remi.cohen-scali
<https://www.linkedin.com/in/remicohenscali/>
<https://twitter.com/CohenScaliRemi>  <https://beta.doodle.com/rcohenscali>

2017-10-11 8:26 GMT+02:00 Rémi Cohen-Scali <remi at jayacode.fr>:

> ​Ok got it! I found my error.
>
> However the findAll matcher is not recognized then is it possible to use
> it, Is there some restrictions (that are not in AST Matchers ref) ?
>
> For the little story, the correct matcher for getting all results is
> something as:
>
> ​binaryOperator(hasAncestor(functionDecl(hasName("f"))),
> hasOperatorName("=")).bind("binop")
>
> With it I got all binary ops, actually what the matcher is looking for :)
>
> Thanks
>
>
> *-=-=-=-=-*
> Rémi COHEN-SCALI* - Direction Technique *Jayacode <http://jayacode.fr/>
> +33 665 964 182 <http://tel+33%20665%20964%20182> | Skype:
> remi.cohen-scali
> <https://www.linkedin.com/in/remicohenscali/>
> <https://twitter.com/CohenScaliRemi>
> <https://beta.doodle.com/rcohenscali>
>
> 2017-10-10 22:41 GMT+02:00 Rémi Cohen-Scali <remi at jayacode.fr>:
>
>> Hi
>>
>> I encounter a weird behavior on AST matchers and I'd like to ear what U
>> think of it.
>> Let get a test file
>>
>> void f()
>> {
>>    int a, b, c, d;
>>    a = 1;
>>   b = 2;
>>   c = 3;
>>   d = 4;
>> }
>>
>> Then query the decl matcher:
>> functionDecl(hasName("f"),hasBody(hasDescendant(binaryOperat
>> or(hasOperatorName("=")).bind("binop"))))
>>
>> I got only the first assignmen
>> ​t (was expecting to get all of them).​
>>>>>>>>>>
>> I tried to add the findAll matcher but got an error.
>>
>> functionDecl(hasName("f"),hasBody(hasDescendant(findAll(bina
>> ryOperator(hasOperatorName("=")).bind("binop")))))
>>
>> Here is the clang-query output:
>>
>> clang-query> match functionDecl(hasName("f"),hasB
>> ody(hasDescendant(binaryOperator(hasOperatorName("=")).bind("binop"))))
>>
>> Match #1:
>>
>> /tmp/test.c:5:3: note: "binop" binds here
>>   a = 1;
>>   ^~~~~
>> /tmp/test.c:1:1: note: "root" binds here
>> void f()
>> ^~~~~~~~
>> 1 match.
>> clang-query> match functionDecl(hasName("f"),hasB
>> ody(hasDescendant(findAll(binaryOperator(hasOperatorName("="
>> )).bind("binop")))))
>> 1:2: Error parsing argument 2 for matcher functionDecl.
>> 1:28: Error parsing argument 1 for matcher hasBody.
>> 1:36: Error parsing argument 1 for matcher hasDescendant.
>> 1:50: Matcher not found: findAll
>> clang-query>
>>
>> ​Thanks for any help​
>>
>> ​Rémi
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-users/attachments/20171011/2eb760d2/attachment.html>


More information about the cfe-users mailing list