如何在clang的帮助下从语句对象中获取完整的源代码作为字符串?

时间:2015-12-18 13:14:10

标签: clang llvm-clang llvm-c++-api

我正在寻找一种从语句对象中获取正确源代码的方法。我的目标是添加像" _assign(& var,__ LINE __);"每次赋值给变量之后。所以我想用类似

的方法
x = 42;  

x = 42; _assign(&x, __ LINE __); 

我已经找到了一种将语句作为字符串...

的有用方法
                    Stmt* s = aStatement;
                    SourceRange sr = s->getSourceRange();
                    string result = Lexer::getSourceText(CharSourceRange::getCharRange(sr), TheRewriter.getSourceMgr(), LangOptions(), 0);  

......但结果并不像预期的那样。 如果我输出如上所述的所有BinaryOperator语句,我会得到一些不完整的linke ...

SOURCE                        -> CLANG RESULT

*len_p = len;                 -> *len_p =
this->is_empty = tm_true;     -> this->is_empty =
i = start_index / 8;          -> i = start_index /
a_p = &(this->table_p[i]);    -> a_p = &(this->table_p[i]

也许我正在使用错误的功能...... 我已经尝试在SourceLocation对象的帮助下获得正确的源位置,但最终会得到不可维护的代码。

所以有人知道获得完整声明的方法吗?

请帮帮我。 :)

0 个答案:

没有答案