2016-07-27 19 views
0

Ich habe eine if(isa<IfStmt>(s)) und if(isa<ReturnStmt>(s)) erstellt, die etwas, wenn gefunden, druckt. Ich habe dieses einfache C++ Codes erstellt, die im Inneren eine return-Anweisung enthält if-AnweisungÜberspringen von Anweisungen in einem 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; 
} 

Ist es möglich, die return-Anweisung innerhalb eines wenn else-Anweisung zu überspringen/ignorieren?

+1

Sie meinen, Sie wollen eine Clang-Ast-Abfrage, die nur Return-Anweisungen, die nicht innerhalb sind, wenn Blöcke? – Dutow

+0

@dutow ja genau. Bitte entschuldigen Sie mein Englisch, da ich schlecht darin bin. – HiWorld

Antwort

2

clang-query test.cpp --

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

Um solche Probleme zu lösen, die AST matcher's reference und Klappern der -ast-dumpparameter sind deine Freunde. Und auch clang-query selbst, da es meistens die gleiche DSL wie clang C++ API akzeptiert.

+0

Das funktioniert. Vielen Dank – HiWorld