2014-10-01 1 views
2

Я пытаюсь найти, как использовать Сличитель с лязгом-запросом с использованием CXXMemberCallExprлязг-запрос и CXXMemberCallExpr согласовань

Я пробовал различные тематические перестановки и не можем заставить его работать. Похоже, что первый символ имеет нижнюю обсадку по сравнению с дампом, поэтому, например, FunctionDecl становится functionDecl в clang-query

Было бы неплохо, если имена совпадений -ast-дампов совпадали с именами имен clang-query - но угадайте, t

например.

clang-query> match CXXMemberCallExpr() 
1:2: Matcher not found: CXXMemberCallExpr 
clang-query> match cxxmemberCallExpr() 
1:2: Matcher not found: cxxmemberCallExpr 
clang-query> match CxxMemberCallExpr() 
1:2: Matcher not found: CxxMemberCallExpr 
clang-query> match CXXmemberCallExpr() 
1:2: Matcher not found: CXXmemberCallExpr 
clang-query> match cxxMemberCallExpr() 
1:2: Matcher not found: cxxMemberCallExpr 

Если люди хотят, чтобы помочь больше я хотел создать Сличитель для Virtual :: Foo(), так что все вызовы к виртуальной функции базового класса.

Это код, который я пытался использовать

class Virtual 
{ 
    public: 
     virtual void foo() 
     { 
     } 
}; 

class Real : public Virtual 
{ 
    public: 
     virtual void foo() 
     { 
     } 
}; 

void bar() 
{ 
    Virtual *v=new Real(); 
    Real *r=new Real(); 
    Virtual *v2=new Virtual(); 

    v->foo(); 
    r->foo(); 
    v2->foo(); 

    delete v; 
    delete r; 
    delete v2; 
} 

И команду для звона для полного AST (слишком долго, чтобы вставить) лязг -Xclang-самосвал-АСТ virt.cc

ответ

7

I еще не использовали clang-query, но в настоящее время я смотрю, как использовать его для моего собственного проекта.

Глядя на ASTMatcher reference Я думаю, что функция, которую вы хотите использовать, - memberCallExpr(). CXXMemberCallExpr - это тип, и я не думаю, что он используется в запросах.

0

Clang переехал - мой первоначальный способ попытаться назвать это неверно match cxxMemberCallExpr()

Смежные вопросы