Как найти методы установки и получения с помощью сопоставителей Clang AST? [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как найти методы установки и получения с помощью сопоставителей Clang AST? [закрыто]

Сообщение Anonymous »

Я хочу найти методы установки и получения в базе кода, используя выражение
сопоставителя AST Clang
. Например, в этом коде есть один метод получения и один метод установки для
отчета:

Код: Выделить всё

struct S {
int m_x;

int getX()                 // getter
{
return m_x;
}

void setX(int x)           // setter
{
m_x = x;
}
};
Для обоих типов методов я хочу проверить, содержит ли тело один
оператор. Тело метода получения должно представлять собой оператор return с возвращаемым
значением члена класса. Тело установщика должно представлять собой оператор назначения
, который присваивает переданный параметр члену класса. (Это
возможно, не достаточно толерантный набор критериев на практике, но меня
удовлетворит это в первом приближении.)
Я обнаружил, что Я могу использовать средство сопоставления cxxMethodDecl, чтобы найти все методы,
но неясно, как копаться в телах или проверять различные
свойства. Ни один из примеров в документации (ссылка выше) не делает этого; самым близким кажется пример:

Код: Выделить всё

cxxConstructorDecl(
isCopyConstructor()
).bind("prepend_explicit")
но, похоже, это зависит от существования примитивного сопоставителя

Код: Выделить всё

isCopyConstructor
для классификации тела метода (или, возможно, просто его
сигнатуры? в документации не сказано, что на самом деле делает любой из них),
и нет isSetter или подобного.< /p>
Как написать выражение соответствия, чтобы найти все методы установки и получения
в единице перевода?

Подробнее здесь: https://stackoverflow.com/questions/791 ... t-matchers
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»