2

示例代码:

int f_i32() {
  __asm {
    mov eax, 1
    mov edx, 1
  }
}

此代码的 AST:

在此处输入图像描述

我在 AST 中只得到 MSASMStmt,而里面什么也没有。

我想在__asm块中提取 ASM 语句的位置。如何获得具有 clang 前端和 lib-tooling 库的那些?

4

1 回答 1

1

找到了答案。

想法是迭代 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());
    }
于 2018-06-06T10:24:35.020 回答