示例代码:
int f_i32() {
__asm {
mov eax, 1
mov edx, 1
}
}
此代码的 AST:
我在 AST 中只得到 MSASMStmt,而里面什么也没有。
我想在__asm块中提取 ASM 语句的位置。如何获得具有 clang 前端和 lib-tooling 库的那些?
示例代码:
int f_i32() {
__asm {
mov eax, 1
mov edx, 1
}
}
此代码的 AST:
我在 AST 中只得到 MSASMStmt,而里面什么也没有。
我想在__asm块中提取 ASM 语句的位置。如何获得具有 clang 前端和 lib-tooling 库的那些?
找到了答案。
想法是迭代 MSAsmStmt 返回的 ASM 令牌并获取每个令牌的位置。
size_t asmTokens = asmStmt->getNumAsmToks();
clang::Token* tokens = asmStmt->getAsmToks();
for (size_t i = 0; i < asmTokens; ++i) {
clang::Token token = tokens[i];
size_t tokloc = SourceManager.getExpansionLineNumber(token.getLocation());
}