【问题标题】:Clang libtooling: determine macro expansion locationClang libtooling:确定宏扩展位置
【发布时间】:2015-09-20 19:38:27
【问题描述】:

我有一个标题header.h,其中包含一个宏定义,该宏定义扩展为一个类定义和一个源文件test.cpp,其中包括header.h 并使用此宏。然后我使用RecursiveASTVisitor 访问所有CXXRecordDecl 的。

当我访问作为宏扩展的 CXXRecordDecl(在 test.cpp 中)并查询它的 SourceLocationdump() 时,位置指向 header.h - 宏定义的位置。

对于这个 CXXRecordDecl,我需要得到的是宏扩展的 SourceLocation - 在我的情况下,它应该是 test.cpp

提前致谢。

【问题讨论】:

    标签: clang llvm libtooling


    【解决方案1】:

    找到解决方案。

    需要的方法是SourceManager的getFileLoc(SourceLocation loc),如果loc“是宏位置”,则“返回扩展位置”。

    我的代码用于获取普通类定义和定义为宏扩展的源位置:

    bool VisitCXXRecordDecl(CXXRecordDecl* record)
    {
        SourceLocation loc = record->getLocStart();
        SourceLocation locExp = m_sourceManager.getFileLoc(loc);
        // if record is a macro expansion in test.cpp, locExp points to test.cpp
        // if record is not a macro expansion, locExp correctly points to matching source file
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多