[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