问题标签 [clang-ast-matchers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Clang AST 匹配器:如何找到对使用右值调用的完美转发函数的调用?
给定一个函数模板,例如:
如何找到对传递右值的函数的调用:
你明白了。
我在想类似的事情:
过滤掉T
被推断为引用类型的情况(表示传递了一个左值),但我不知道如何将Matcher<FunctionDecl>
预期的 by连接functionDecl
到Matcher<TemplateSpecializationType>
返回的 from hasTemplateArgument
。
我正在使用 Clang 3.8,以防万一(在线文档似乎是 5.0.0,并且http://releases.llvm.org/3.8.0/tools/clang/docs/LibASTMatchersReference.html给出了 404 )。
clang - Clang AST Matcher 的“AND”和“OR”
是否可以or
在函数声明中使用?喜欢:
或者我们必须使用addMatcher
添加更多匹配器来获得相同的结果?
clang - 如何使用 AST Matcher 在 Clang AST 中找到 BlockDecl 节点?
我需要在块中找到自我引用(目标 C)。我正在为此使用 Clang AST Matchers。
查找我创建的所有自我引用的匹配器如下:
现在我只需要将此匹配器应用于块。但我找不到该怎么做。有没有人有任何想法?
c++ - Clang - 检测头文件何时完成
我是clang的新手,我正在尝试在所有其他包含完成后添加一个#include<> 。
如果这是一个愚蠢的问题,我深表歉意。但我无法找到执行此操作的 AST Matcher。我指的是:
clang-ast-matchers - lang ast dump 中的 line/col 是什么意思
我对 clang ast-dump outout 感到困惑, line 和 col 是什么意思?谢谢
-CompoundStmt 0xa87f018 <line:34:1, line:44:1>
|-DeclStmt 0xa87e808 <line:35:1, col:11>
|
-VarDecl 0xa853fb8 col:9 使用了“类动物”调用初始化 | -CXXConstructExpr 0xa87e7d8 <col:9> 'class Anmimal' 'void (void) throw()'
|-BinaryOperator 0xa87e8a0 <line:36:1, col:10> 'int' lvalue '='
| |-MemberExpr 0xa87e848 <col:1, col:4> 'int' lvalue .age 0xa8533b0
| |
-DeclRefExpr 0xa87e820 '类动物' 左值 Var 0xa853fb8 'an' '类动物' | -IntegerLiteral 0xa87e880 <col:10> 'int' 100
|-CXXMemberCallExpr 0xa87e9f0 <line:38:1, col:12> 'int'
|
-MemberExpr 0xa87e9b8 '' .getSize 0xa853c48 | -DeclRefExpr 0xa87e990 <col:1> 'class Anmimal' lvalue Var 0xa853fb8 'an' 'class Anmimal'
|-DeclStmt 0xa87edb0 <line:40:1, col:8>
|
-VarDecl 0xa87ea28 col:5 使用 cat 'struct Cat' callinit | -CXXConstructExpr 0xa87ed80 <col:5> 'struct Cat' 'void (void) throw()'
|-BinaryOperator 0xa87ee48 <line:41:1, col:15> 'int' lvalue '='
| |-MemberExpr 0xa87edf0 <col:1, col:5> 'int' lvalue .age_cat 0xa853b38
| |
-DeclRefExpr 0xa87edc8 'struct Cat' 左值 Var 0xa87ea28 'cat' 'struct Cat' | -IntegerLiteral 0xa87ee28 <col:15> 'int' 10
|-BinaryOperator 0xa87efb8 <line:42:1, col:16> 'int' lvalue '='
| |-MemberExpr 0xa87ef60 <col:1, col:5> 'int' lvalue .size_cat 0xa853b98
| |
-DeclRefExpr 0xa87ef38 'struct Cat' 左值 Var 0xa87ea28 'cat' 'struct Cat' | -IntegerLiteral 0xa87ef98 <col:16> 'int' 20
-ReturnStmt 0xa87f000 `-IntegerLiteral 0xa87efe0 'int' 0
clang-ast-matchers - 如何从 typedefDecl 获取底层 cxxRecordDecl
我有一段代码:
我可以通过 clang-check 获得以下 AST:
| |-CXRecordDecl 0x3dfde48 col:16 隐式结构 S1 | |-FieldDecl 0x3dfdef8 col:9 'int' | -FieldDecl 0x3dfdf58 <line:4:5, col:9> col:9 b 'int'
|-TypedefDecl 0x3dfe010 <line:1:1, line:5:3> col:3 S 'struct S1':'struct S1'
|
-ElaboratedType 0x3dfdfc0 'struct S1' 糖 | -RecordType 0x3dfddc0 'struct S1'
|
-CXRecord 0x3dfdd28 'S1'
-TypedefDecl 0x3dfe0f0 <line:1:1, line:5:7> col:7 PS 'struct S1 *'
-PointerType 0x3dfe0a0 'struct S1 *'
-ElaboratedType 0x3dfdfc0 'struct S1' sugar
-RecordType 0x3dfddc0 'struct S1' `-CXRecord 0x3dfdd28 'S1'
如果我使用 typedefDecl(),我可以匹配 S 和 PS,但是我怎样才能得到底层的 cxxRecordDecl() 呢?
c++ - 在一个clang插件中,如何查看编译翻译单元是否出错?
如果为我的插件将要运行的 AST 编译代码时出错,我希望我的 clang 插件实际上不做任何事情。
但是,我无法弄清楚哪个对象包含编译期间生成的错误列表。
是否有一个布尔查询是否有错误或一个列表 API 用于获取 TU 编译期间生成的所有错误(或所有诊断)?
谢谢你。
c++ - clang AST 匹配 ostream <<
我正在尝试为涉及流媒体的某些场景编写一个整洁的检查。考虑这个简单的函数:
如果我跑去clang-query
测试一些匹配器:
operator<<
这符合我在这个程序中的所有 3 种用途。伟大的。但是,如果我尝试为第一个参数的外观添加过滤器:
而已。它与整个表达式不匹配os << 4 << i
。为什么不?该表达式确实有 type std::ostream
。如果我直接转储 AST,我会看到:
外部和内部CXXOperatorCallExpr
都说他们的表达式是 a class std::basic_ostream<char> lvalue
。正确匹配这个论点的正确方法是什么?
clang - 致命错误:使用 clang-llvm ASTMatcher 时找不到“stddef.h”文件
我不熟悉使用 ASTMatcher 并遵循教程中的代码 - https://github.com/peter-can-talk/cppnow-2017。在这里,可以使用以下命令运行工具 clang-variables:
如果我使用另一个源文件而不是 test.cpp 文件,则会收到以下错误:
我了解我的源文件有这些需要包含的头文件。我尝试将它们包含在 Makefile 中,如下所示,但错误仍然存在:
编译时没有错误。所以我想知道,是否可以将包含文件作为 ASTMatcher 的参数提及?请在下面找到代码:
我很感激任何帮助。
clang - 错误:找不到匹配器:等于
我正在尝试使用 clang ASTMatcher 来查找是否具有 RHS 为整数值 0 或 0.0f 的条件的语句。为此,我能够编写如下查询:
当我使用上述查询时,我收到如下错误:
但是,当我参考http://clang.llvm.org/docs/LibASTMatchersReference.html上的在线指南时,它说 Matcher equals 可用:
我在 Ubuntu 16.04LTS 上使用 llvm-4.0 和 clang 3.8。
我将不胜感激任何帮助。