2015-10-19 4 views
0

Можно ли использовать строку привязки на одно выражение в другом как следующий код:Пишущие лязгом АСТ Matchers

expr(declRefExpr().bind("id"), hasDesendent(declRefExpr(has("id"))); 

В основном использовать привязку строковый идентификатор одного узла, чтобы найти другой узел.

ответ

0

Да, это возможно с помощью equalsBoundNode

Использование:

expr(declRefExpr().bind("id"), hasDesendent(declRefExpr(equalsBoundNode("id"))); 
2

Лучший способ сравнить 2 узла - связать в разных id string с, а затем сравнить их в методе обратного вызова.

Это объясняется в этом tutorial.

В приведенной выше ссылке вы можете найти следующий код:

const VarDecl *IncVar = Result.Nodes.getNodeAs<VarDecl>("incVarName"); 
const VarDecl *CondVar = Result.Nodes.getNodeAs<VarDecl>("condVarName"); 
if (!areSameVariable(IncVar, CondVar)) 
    return; 

Этот код имеет целью сравнить узлы, которые связываются в переменных incVarName и condVarName в функции обратного вызова.

Смежные вопросы