ajohnson-uoregon updated this revision to Diff 418346. ajohnson-uoregon added a comment.
Fixing name of matcher and formatting, still need tests Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D120956/new/ https://reviews.llvm.org/D120956 Files: clang/docs/LibASTMatchersReference.html clang/include/clang/ASTMatchers/ASTMatchers.h clang/lib/ASTMatchers/Dynamic/Registry.cpp
Index: clang/lib/ASTMatchers/Dynamic/Registry.cpp =================================================================== --- clang/lib/ASTMatchers/Dynamic/Registry.cpp +++ clang/lib/ASTMatchers/Dynamic/Registry.cpp @@ -135,6 +135,7 @@ REGISTER_MATCHER(anyOf); REGISTER_MATCHER(anything); REGISTER_MATCHER(argumentCountIs); + REGISTER_MATCHER(argumentCountAsWrittenIs); REGISTER_MATCHER(arraySubscriptExpr); REGISTER_MATCHER(arrayType); REGISTER_MATCHER(asString); Index: clang/include/clang/ASTMatchers/ASTMatchers.h =================================================================== --- clang/include/clang/ASTMatchers/ASTMatchers.h +++ clang/include/clang/ASTMatchers/ASTMatchers.h @@ -4420,6 +4420,29 @@ return NumArgs == N; } +/// Checks that a call expression or a constructor call expression has +/// a specific number of arguments (EXCLUDING absent default arguments). +/// +/// Example: callExpr(argumentCountAsWrittenIs(2)) matches f(0, 0) but not f(0) +/// \code +/// void f(int x, int y = 0); +/// f(0, 0); +/// f(0); +/// \endcode +AST_POLYMORPHIC_MATCHER_P(argumentCountAsWrittenIs, + AST_POLYMORPHIC_SUPPORTED_TYPES( + CallExpr, CXXConstructExpr, + CXXUnresolvedConstructExpr, ObjCMessageExpr), + unsigned, N) { + unsigned NumArgs = Node.getNumArgs(); + while (NumArgs) { + if (!isa<CXXDefaultArgExpr>(Node.getArg(NumArgs - 1))) + break; + --NumArgs; + } + return NumArgs == N; +} + /// Matches the n'th argument of a call expression or a constructor /// call expression. /// Index: clang/docs/LibASTMatchersReference.html =================================================================== --- clang/docs/LibASTMatchersReference.html +++ clang/docs/LibASTMatchersReference.html @@ -3053,6 +3053,17 @@ </pre></td></tr> +<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>></td><td class="name" onclick="toggle('argumentCountAsWrittenIs1')"><a name="argumentCountAsWrittenIs1Anchor">argumentCountAsWrittenIs</a></td><td>unsigned N</td></tr> +<tr><td colspan="4" class="doc" id="argumentCountAsWrittenIs1"><pre>Checks that a call expression or a constructor call expression has +a specific number of arguments (EXCLUDING absent default arguments). + +Example: callExpr(argumentCountAsWrittenIs(2)) matches f(0, 0) but not f(0) + void f(int x, int y = 0); + f(0, 0); + f(0); +</pre></td></tr> + + <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>></td><td class="name" onclick="toggle('argumentCountIs1')"><a name="argumentCountIs1Anchor">argumentCountIs</a></td><td>unsigned N</td></tr> <tr><td colspan="4" class="doc" id="argumentCountIs1"><pre>Checks that a call expression or a constructor call expression has a specific number of arguments (including absent default arguments). @@ -3710,6 +3721,17 @@ </pre></td></tr> +<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXUnresolvedConstructExpr.html">CXXUnresolvedConstructExpr</a>></td><td class="name" onclick="toggle('argumentCountAsWrittenIs2')"><a name="argumentCountAsWrittenIs2Anchor">argumentCountAsWrittenIs</a></td><td>unsigned N</td></tr> +<tr><td colspan="4" class="doc" id="argumentCountAsWrittenIs2"><pre>Checks that a call expression or a constructor call expression has +a specific number of arguments (EXCLUDING absent default arguments). + +Example: callExpr(argumentCountAsWrittenIs(2)) matches f(0, 0) but not f(0) + void f(int x, int y = 0); + f(0, 0); + f(0); +</pre></td></tr> + + <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXUnresolvedConstructExpr.html">CXXUnresolvedConstructExpr</a>></td><td class="name" onclick="toggle('argumentCountIs2')"><a name="argumentCountIs2Anchor">argumentCountIs</a></td><td>unsigned N</td></tr> <tr><td colspan="4" class="doc" id="argumentCountIs2"><pre>Checks that a call expression or a constructor call expression has a specific number of arguments (including absent default arguments). @@ -3720,6 +3742,17 @@ </pre></td></tr> +<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>></td><td class="name" onclick="toggle('argumentCountAsWrittenIs0')"><a name="argumentCountAsWrittenIs0Anchor">argumentCountAsWrittenIs</a></td><td>unsigned N</td></tr> +<tr><td colspan="4" class="doc" id="argumentCountAsWrittenIs0"><pre>Checks that a call expression or a constructor call expression has +a specific number of arguments (EXCLUDING absent default arguments). + +Example: callExpr(argumentCountAsWrittenIs(2)) matches f(0, 0) but not f(0) + void f(int x, int y = 0); + f(0, 0); + f(0); +</pre></td></tr> + + <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>></td><td class="name" onclick="toggle('argumentCountIs0')"><a name="argumentCountIs0Anchor">argumentCountIs</a></td><td>unsigned N</td></tr> <tr><td colspan="4" class="doc" id="argumentCountIs0"><pre>Checks that a call expression or a constructor call expression has a specific number of arguments (including absent default arguments). @@ -4831,6 +4864,17 @@ </pre></td></tr> +<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCMessageExpr.html">ObjCMessageExpr</a>></td><td class="name" onclick="toggle('argumentCountAsWrittenIs3')"><a name="argumentCountAsWrittenIs3Anchor">argumentCountAsWrittenIs</a></td><td>unsigned N</td></tr> +<tr><td colspan="4" class="doc" id="argumentCountAsWrittenIs3"><pre>Checks that a call expression or a constructor call expression has +a specific number of arguments (EXCLUDING absent default arguments). + +Example: callExpr(argumentCountAsWrittenIs(2)) matches f(0, 0) but not f(0) + void f(int x, int y = 0); + f(0, 0); + f(0); +</pre></td></tr> + + <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCMessageExpr.html">ObjCMessageExpr</a>></td><td class="name" onclick="toggle('argumentCountIs3')"><a name="argumentCountIs3Anchor">argumentCountIs</a></td><td>unsigned N</td></tr> <tr><td colspan="4" class="doc" id="argumentCountIs3"><pre>Checks that a call expression or a constructor call expression has a specific number of arguments (including absent default arguments).
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits