Как узнать расположение операторов asm с помощью интерфейса clang - PullRequest
0 голосов
/ 06 июня 2018

Пример кода:

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

AST для этого кода:

enter image description here

Я получаю только MSASMStmt в AST и ничего отвнутри него.

Я хочу извлечь расположение операторов ASM внутри блока __ asm .Как получить их с помощью интерфейса clang и библиотеки lib-tooling?

1 Ответ

0 голосов
/ 06 июня 2018

Найден ответ.

Идея состоит в том, чтобы перебрать токены ASM, возвращаемые MSAsmStmt, и получить местоположение для каждого токена.

    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());
    }
...