Какую функцию (и) clang я могу использовать, чтобы найти такие объявления, которые имеют '&', например, 'int * m = & b'? - PullRequest
0 голосов
/ 27 мая 2019

Я хочу найти объявления, в которых есть '&'; например, int *m = &b, затем сделайте что-нибудь с переводом для таких объявлений.

Теперь я использую ASTMatcher varDecl(), чтобы найти все VarDecl , и использую declVar->getType().getTypePtr().getAs<clang::PointerType>(), чтобы получить уменьшение указателя.

Какие функции я могу использовать, чтобы найти следующие 'm = &b' объявления?

Matcher.addMatcher(varDecl(unless(parmVarDecl())).bind("varDecl"), &VarD);
virtual void run(const MatchFinder::MatchResult &Result) {
    ASTContext *Context = Result.Context;
    SourceManager &sourceManager_ = Context->getSourceManager();
    const VarDecl *declVar = Result.Nodes.getNodeAs<VarDecl>("varDecl");
    const clang::Type *type = declVar -> getType().getTypePtr();
    const clang::PointerType *pointer_type = type -> getAs 
    <clang::PointerType>();
    if(pointer_type != NULL){
        // what functions can I use to find m=&b
    }
}

1 Ответ

0 голосов
/ 02 июня 2019

& - унарный оператор внутри инициализации объявления переменной. Это делает следующее совпадение:

varDecl(unless(parmVarDecl()), hasInitializer(unaryOperator(hasOperatorName("&"))))

ПРИМЕЧАНИЕ : вы можете использовать полезный маленький инструмент командой clang : запрос clang . Это поможет вам проверить ваши совпадения в интерактивном режиме.

Счастливого взлома с помощью лязга!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...