递归ASMVisitor和查找函数调用站点

时间:2018-06-29 15:56:44

标签: c++ clang llvm abstract-syntax-tree

是否可以在var superhero = { id: 0, firstname: 'Duck', lastname: 'Darkwing' }; for (property in superhero) { let propertyName = property.toString(); // Store initial value in '_var' before overwriting it with get/set this['_' + propertyName] = superhero[property]; Object.defineProperty(superhero, propertyName, { set: function(value) { this['_' + propertyName] = value; }, get: function() { return this['_' + propertyName]; } }); } console.log('--- Initial Value of test ---'); console.log(superhero); console.log('-----------------------------'); superhero.firstname = 'Kal'; superhero.lastname = 'El'; console.log (superhero.firstname + ' ' + superhero.lastname);内的FunctionDecl内找到VisitFunctionDecl的呼叫站点?

1 个答案:

答案 0 :(得分:0)

使用RecursiveASTVisitor来查找被呼叫者为您正在寻找的CallExpr的{​​{1}}。 Clang实际上有一个特殊的界面,用于称为matcher interface的事物类型,您可以使用命令行工具“ clang-query”进行试验:

FunctionDecl

您在此工具中编写的匹配表达式(具有制表符完成功能!)是有效的C ++,使用clang AST匹配器库。迭代表达式并确信它可以工作后,只需将其复制并粘贴到您的项目中即可。