Как в clang-запросе сопоставить ссылочную переменную по квалификаторам ее объекта?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как в clang-запросе сопоставить ссылочную переменную по квалификаторам ее объекта?

Сообщение Anonymous »

Например, как сопоставить ссылку с const здесь:

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

// references_match.cpp
int main() {
const int   a = 5;
int         b = 5;
const auto& b_ref1 = b;  //  set output dump
clang-query> match varDecl( )

Match #1:
Binding for "root":
VarDecl 0x5bd04b2fa390  col:14 a 'const int' cinit
`-IntegerLiteral 0x5bd04b2fa3f8  'int' 5

...
Match #3:

Binding for "root":
VarDecl 0x5bd04b2fa5c0  col:14 b_ref1 'const int &' cinit
`-ImplicitCastExpr 0x5bd04b2fa820  'const int' lvalue 
`-DeclRefExpr 0x5bd04b2fa628  'int' lvalue Var 0x5bd04b2fa4a0 'b' 'int'

...

clang-query> match varDecl( hasType(isConstQualified()) )

Match #1:

Binding for "root":
VarDecl 0x5bd04b2fa390  col:14 a 'const int' cinit
`-IntegerLiteral 0x5bd04b2fa3f8  'int' 5

1 match.
Т.е. Дамп varDecl() получает эту строку 'const int &' с константой указанного типа: b_ref1 'const int &' cinit. Но я думаю, что b_ref1 не передает isConstQualified(), потому что const квалифицирует объект, а не ссылку. Какой сопоставитель тогда будет соответствовать объекту ссылки? Можно ли это сделать на самом узле varDecl() или потомки должны сопоставляться, например ImplicitCastExpr?

Подробнее здесь: https://stackoverflow.com/questions/793 ... -its-objec
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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