[cfe-dev] ASTMatchers: isVirtual and isOverride
Pedro Delgado Perez
pedro.delgadoperez at mail.uca.es
Fri Apr 19 03:18:18 PDT 2013
Hi again,
Well, I've just understood that not all the methods in a class have a matcher related. For instance, I'm trying to match the default constructor declaration of a class:
class Foo {
public:
Foo(){}
Foo(int a){... ...}
}
And in CXXConstructorDecl we have isDefaultConstructor(), but I can't find an AST_MATCHER to do this. So, I suppose I would have to implement a new AST_MATCHER like this:
AST_MATCHER(CXXConstructorDecl, isDefaultConstructor){
return Node.isDefaultConstructor();
}
Wouldn't it? But, this happens often, so... would you recommend me use AST_MATCHERS? Or it would be better to do something like it is explained in http://clang.llvm.org/docs/RAVFrontendAction.html [ http://clang.llvm.org/docs/RAVFrontendAction.html ] ? This way, I can directly use the methods in the classes. For instance:
bool VisitCXXConstructorDecl(CXXConstructorDecl *Declaration) { if (Declaration->isDefaultConstructor()) {
I have to visit a lot of kind of nodes with different features, not only this.
Please, I need a path to get down to work.
Thanks in advance,
Pedro.
El dia 19 abr 2013 01:58, Gábor Kozár <kozargabor at gmail.com> escribió:
>
>
>
> Hi,
>
>
> What version are you using? The matchers isOverride() and isVirtual() I know for certain were not in version 3.2, and can only be found on SVN (in this file: http://llvm.org/svn/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h [ http://llvm.org/svn/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h ]).
>
> Nonetheless, you can implement them all very easily manually, or just indeed copy their implementation from the link above. Also, instead of isDefaultConstructor(), you could use argumentCountIs(0).
>
> Gabor
>
>
>
>
> 2013/4/18 Pedro Delgado Perez <pedro.delgadoperez at mail.uca.es [ mailto:pedro.delgadoperez at mail.uca.es ]>
>
>
> Hi,
>
> I'm newbie using ASTMatchers and I'm trying to learn little by little how to use them.
>
> I was basing on the matcher recordDecl(hasName("Foo"), isDerivedFrom("Bar")) shown in http://clang.llvm.org/docs/LibASTMatchers.html [ http://clang.llvm.org/docs/LibASTMatchers.html ] trying to include new features. For instance, I tried to look for classes which have at least one virtual method:
>
> recordDecl(hasName("Foo"), isDerivedFrom("Bar"), hasMethod(isVirtual()))
>
> Or I tried to match protected overriden methods:
>
> methodDecl(allOf(isProtected(), isOverride());
>
> But neither of them worked as it couldn't find "isOverride" and "isVirtual" identifiers. I was trying a lot of combinations, but I can't understand this well.
>
> Finally, I tried to look for the the default constructor of a certain class:
>
> constructorDecl(hasName("Foo"), isDefaultConstructor())
>
> but this is wrong. What I'm doing bad? Please, any information you give me will be fine to me to understand how to use matchers.
>
> Thanks in advance,
>
> Pedro.
>
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
>
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev [ http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev ]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20130419/7c3b6017/attachment.html>
More information about the cfe-dev
mailing list