Используйте RecursiveASTVisitor
, чтобы найти CallExpr
, чей абонент - FunctionDecl
, который вы ищете. Clang на самом деле имеет специальный интерфейс для типа вещи, называемый matcher interface , с которым вы можете поэкспериментировать, используя инструмент командной строки "clang-query":
$ clang-query-7 ast.cpp --
clang-query> m callExpr(callee(functionDecl(hasName("somefunc"))))
Match #1:
/home/nicholas/ast.cpp:4:3: note: "root" binds here
somefunc(1 + somefunc(0));
^~~~~~~~~~~~~~~~~~~~~~~~~
Match #2:
/home/nicholas/ast.cpp:4:16: note: "root" binds here
somefunc(1 + somefunc(0));
^~~~~~~~~~~
2 matches.
Выражение соответствия, которое вы пишете в этом инструменте (который содержит завершение табуляции!), Является допустимым C ++ с использованием библиотеки совпадений AST clang. После того, как вы итерировали выражение и убедились, что оно работает, просто скопируйте и вставьте его в свой проект.