clang-query и CXXMemberCallExpr matcher

Я пытаюсь найти, как использовать совпадения с 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

2

Решение

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

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

7

Другие решения

Clang пошел дальше — мой оригинальный способ попытаться назвать это не правильно, это match cxxMemberCallExpr()

0

По вопросам рекламы [email protected]