Clang AST : 外部链接规范问题

Clang AST : extern LinkageSpec issue

本文关键字:问题 范问题 AST 外部 链接 Clang      更新时间:2023-10-16

我目前正在使用 clang 的 python 绑定编写一个静态C++代码分析器,由于某种原因,我找不到 AST 中是否extern某些东西,即使有一个似乎是专有的 CursorKind (CXCursor_LinkageSpec)

我的意思是,在解析像extern int foo;这样的代码时,我只会在 AST 中找到我的变量foo,而没有关于其链接规范的单一线索。

我错过了什么?
问候

类 VarDecl 有一个成员函数:bool hasExternalStorage () const它告诉您变量是否为 extern。

我正在使用 clang 的 C++ lib。希望它能帮助你的python工作。

有点死灵答案,但如果你进入 clang\lib\Sema\SemaCodeComplete.cpp(如果你按照 llvm 的安装说明,在 \llvm\tools\ 中)并添加以下行:

case Decl::LinkageSpec:  return CXCursor_LinkageSpec;

要进入开关:

CXCursorKind clang::getCursorKindForDecl(const Decl *D)

它应该解决 clang 的 Python 绑定器返回UNEXPOSED_DECL而不是正确的LINKAGE_SPEC的问题。 此更改是在修订版 183352(2013-06-05) 中进行的。

我的版本示例:

CXCursorKind clang::getCursorKindForDecl(const Decl *D) {
if (!D)
    return CXCursor_UnexposedDecl;
switch (D->getKind()) {
    case Decl::Enum:               return CXCursor_EnumDecl; 
    case Decl::LinkageSpec:  return CXCursor_LinkageSpec;
   // ......