如何使用 Clang 的 C++ API 从 filename/line/column 三元组获取 SourceLocation
How can I get a SourceLocation from a filename/line/column triplet using Clang's C++ API
libclang
C API 具有以下功能:
CXSourceLocation clang_getLocation(
CXTranslationUnit tu,
CXFile file,
unsigned line,
unsigned column
)
我找不到 C++ 的等价物 API。有许多 getLocation
函数,但 none 接受这组参数。
我最终会尝试在给定的源位置获取 DeclRef
,如果它存在的话。
为 file:line:column 三元组找到 SourceLocation
可以通过 SourceManager
有点笨拙地完成,如下所示:
SourceManager& srcmgr = astctx.getSourceManager();
FileManager& filemgr = srcmgr.getFileManager();
const FileEntry* file_entry_ptr = filemgr.getFile(filename);
SourceLocation loc = srcmgr.translateFileLineCol(file_entry_ptr, line, column);
虽然那时我仍然不知道如何找到 Stmt
。
libclang
C API 具有以下功能:
CXSourceLocation clang_getLocation(
CXTranslationUnit tu,
CXFile file,
unsigned line,
unsigned column
)
我找不到 C++ 的等价物 API。有许多 getLocation
函数,但 none 接受这组参数。
我最终会尝试在给定的源位置获取 DeclRef
,如果它存在的话。
为 file:line:column 三元组找到 SourceLocation
可以通过 SourceManager
有点笨拙地完成,如下所示:
SourceManager& srcmgr = astctx.getSourceManager();
FileManager& filemgr = srcmgr.getFileManager();
const FileEntry* file_entry_ptr = filemgr.getFile(filename);
SourceLocation loc = srcmgr.translateFileLineCol(file_entry_ptr, line, column);
虽然那时我仍然不知道如何找到 Stmt
。