[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