2016-07-27 1 views
0

if(isa<IfStmt>(s))if(isa<ReturnStmt>(s))が見つかりました。私は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; 
} 

は、/ else文場合内部return文を無視することはスキップすることが可能であるif文の内部でreturnステートメントが含まれています。この単純なC++コードを作成していますか?

+1

ifブロック内にないreturn文にのみマッチするclang astクエリが必要ですか? – 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

関連する問題