我已经成功地建立sample code基本源到源变换铿锵
现在我的我有一个要求,如果我有一个像下面的示例代码:
int inc(int& p)
{
p++;
printf("In inc [%d]\n", p);
return p;
}
int main()
{
int i = 0;
int y,z;
if(y == 0)
print(inc(i) , inc(i));
else
{
print(inc(i) , inc(i));
}
printf("y = [%d] z = [%d]\n", y , z);
return 0;
}
代码应转换为
int inc(int& p)
{
p++;
printf("%s %d", __FILE__, __LINE__);
printf("In inc [%d]\n", p);
printf("%s %d", __FILE__, __LINE__);
return p;
}
int main()
{
int i = 0;
printf("%s %d", __FILE__, __LINE__);
int y,z;
printf("%s %d", __FILE__, __LINE__);
if(y == 0)
print(inc(i) , inc(i));
else
{
print(inc(i) , inc(i));
printf("%s %d", __FILE__, __LINE__);
}
printf("y = [%d] z = [%d]\n", y , z);
printf("%s %d", __FILE__, __LINE__);
return 0;
}
我试着用下面的代码更改:
bool VisitStmt(Stmt *s) {
// Only care about If statements.
if (isa<CompoundStmt>(s)) {
CompoundStmt *Statement = cast<CompoundStmt>(s);
TheRewriter.InsertText(Statement->getLocStart(),
"printf(\"%s %d\", __FILE__, __LINE__);\n",
true, true);
}
但产量当属:
// Begin function inc returning int
int inc(int& p)
printf("%s %d", __FILE__, __LINE__);
{
p++;
printf("In inc [%d]\n", p);
return p;
}
// End function inc
// Begin function main returning int
int main()
printf("%s %d", __FILE__, __LINE__);
{
int i = 0;
int y,z;
if(y == 0)
print(inc(i) , inc(i));
else
{
print(inc(i) , inc(i));
}
printf("y = [%d] z = [%d]\n", y , z);
return 0;
}
// End function main
请让我知道我可以达到这个目标?
我也得到这样的输出:
test.cpp:4:26: error: use of undeclared identifier 'p'
printf("In inc [%d]\n", p);
^
test.cpp:5:9: error: use of undeclared identifier 'p'
return p;
如何停止代码渲染一样吗?只是复合块中的语句应该添加额外的语句。
它看起来并不像你VisitStmt函数返回一个明智的布尔值,我怀疑来访依赖于这样的布尔结果来决定是否应该陷入子树。只是一个猜测。 –