Я пытаюсь найти, как использовать совпадения с Clang-запрос с использованием CXXMemberCallExpr
Я пробовал разные варианты перестановок и не могу заставить его работать. Похоже, что первый символ находится в нижнем регистре по сравнению с дампом, поэтому, например, FunctionDecl становится functionDecl в clang-запросе
Было бы хорошо, если бы имена -ast-dump matcher соответствовали именам clang-запроса — но думаю, что они этого не делают
например.
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;
}
И команда для clang для полного AST (слишком долго, чтобы вставить) clang -Xclang -ast-dump virt.cc
Я еще не использовал clang-query, но в настоящее время я ищу, как использовать его для моего собственного проекта.
Глядя на ASTMatcher ссылка Я думаю, что функция, которую вы хотите использовать memberCallExpr()
, CXXMemberCallExpr
это тип, и я не думаю, что он используется в запросах.
Clang пошел дальше — мой оригинальный способ попытаться назвать это не правильно, это match cxxMemberCallExpr()