2016-07-27 98 views
0

我創建了一個if(isa<IfStmt>(s))if(isa<ReturnStmt>(s)),它會打印出一些內容。我創建了包含內部的if語句在IfStatements中跳過語句

#include <stdlib.h> 
int main(int argc, char** argv) { 
    int a = atoi(argv[1]); 
    if(a == 0) 
    return 1; 
    else 
    return 10; 
    return 0; 
} 

是否有可能跳過/忽略return語句內如果else語句 return語句這種簡單的C++代碼?

+1

你的意思是你想要一個clang ast查詢,它只匹配那些不在if塊之內的返回語句嗎? – Dutow

+0

@dutow是的。請原諒我的英語,因爲我不好。 – HiWorld

回答

2

clang-query test.cpp --

match returnStmt(unless(hasAncestor(ifStmt())) 

爲了解決這樣的問題,AST matcher's reference和鏗鏘的-ast-dumpparameter是你的朋友。同樣也是clang-query本身,因爲它接受的大部分是與clang的C++ API相同的DSL。

+0

這工作。謝謝 – HiWorld