forked from OSchip/llvm-project
Make `hasTypeLoc` matcher support more node types.
Differential Revision: https://reviews.llvm.org/D101572
This commit is contained in:
parent
0ad494838b
commit
1f65f42dd3
|
@ -6137,6 +6137,34 @@ matching y.
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1BlockDecl.html">BlockDecl</a>></td><td class="name" onclick="toggle('hasTypeLoc0')"><a name="hasTypeLoc0Anchor">hasTypeLoc</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>> Inner</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasTypeLoc0"><pre>Matches if the type location of a node matches the inner matcher.
|
||||
|
||||
Examples:
|
||||
int x;
|
||||
declaratorDecl(hasTypeLoc(loc(asString("int"))))
|
||||
matches int x
|
||||
|
||||
auto x = int(3);
|
||||
cxxTemporaryObjectExpr(hasTypeLoc(loc(asString("int"))))
|
||||
matches int(3)
|
||||
|
||||
struct Foo { Foo(int, int); };
|
||||
auto x = Foo(1, 2);
|
||||
cxxFunctionalCastExpr(hasTypeLoc(loc(asString("struct Foo"))))
|
||||
matches Foo(1, 2)
|
||||
|
||||
Usable as: Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1BlockDecl.html">BlockDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXBaseSpecifier.html">CXXBaseSpecifier</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXFunctionalCastExpr.html">CXXFunctionalCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXTemporaryObjectExpr.html">CXXTemporaryObjectExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXUnresolvedConstructExpr.html">CXXUnresolvedConstructExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CompoundLiteralExpr.html">CompoundLiteralExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCPropertyDecl.html">ObjCPropertyDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgumentLoc.html">TemplateArgumentLoc</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypedefNameDecl.html">TypedefNameDecl</a>>
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>></td><td class="name" onclick="toggle('pointee0')"><a name="pointee0Anchor">pointee</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>></td></tr>
|
||||
<tr><td colspan="4" class="doc" id="pointee0"><pre>Narrows PointerType (and similar) matchers to those where the
|
||||
pointee matches a given matcher.
|
||||
|
@ -6153,6 +6181,34 @@ Usable as: Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Bloc
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXBaseSpecifier.html">CXXBaseSpecifier</a>></td><td class="name" onclick="toggle('hasTypeLoc1')"><a name="hasTypeLoc1Anchor">hasTypeLoc</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>> Inner</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasTypeLoc1"><pre>Matches if the type location of a node matches the inner matcher.
|
||||
|
||||
Examples:
|
||||
int x;
|
||||
declaratorDecl(hasTypeLoc(loc(asString("int"))))
|
||||
matches int x
|
||||
|
||||
auto x = int(3);
|
||||
cxxTemporaryObjectExpr(hasTypeLoc(loc(asString("int"))))
|
||||
matches int(3)
|
||||
|
||||
struct Foo { Foo(int, int); };
|
||||
auto x = Foo(1, 2);
|
||||
cxxFunctionalCastExpr(hasTypeLoc(loc(asString("struct Foo"))))
|
||||
matches Foo(1, 2)
|
||||
|
||||
Usable as: Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1BlockDecl.html">BlockDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXBaseSpecifier.html">CXXBaseSpecifier</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXFunctionalCastExpr.html">CXXFunctionalCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXTemporaryObjectExpr.html">CXXTemporaryObjectExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXUnresolvedConstructExpr.html">CXXUnresolvedConstructExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CompoundLiteralExpr.html">CompoundLiteralExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCPropertyDecl.html">ObjCPropertyDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgumentLoc.html">TemplateArgumentLoc</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypedefNameDecl.html">TypedefNameDecl</a>>
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXBaseSpecifier.html">CXXBaseSpecifier</a>></td><td class="name" onclick="toggle('hasType8')"><a name="hasType8Anchor">hasType</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasType8"><pre>Overloaded to match the declaration of the expression's or value
|
||||
declaration's type.
|
||||
|
@ -6353,6 +6409,34 @@ with forField matching foo_
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>></td><td class="name" onclick="toggle('hasTypeLoc2')"><a name="hasTypeLoc2Anchor">hasTypeLoc</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>> Inner</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasTypeLoc2"><pre>Matches if the type location of a node matches the inner matcher.
|
||||
|
||||
Examples:
|
||||
int x;
|
||||
declaratorDecl(hasTypeLoc(loc(asString("int"))))
|
||||
matches int x
|
||||
|
||||
auto x = int(3);
|
||||
cxxTemporaryObjectExpr(hasTypeLoc(loc(asString("int"))))
|
||||
matches int(3)
|
||||
|
||||
struct Foo { Foo(int, int); };
|
||||
auto x = Foo(1, 2);
|
||||
cxxFunctionalCastExpr(hasTypeLoc(loc(asString("struct Foo"))))
|
||||
matches Foo(1, 2)
|
||||
|
||||
Usable as: Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1BlockDecl.html">BlockDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXBaseSpecifier.html">CXXBaseSpecifier</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXFunctionalCastExpr.html">CXXFunctionalCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXTemporaryObjectExpr.html">CXXTemporaryObjectExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXUnresolvedConstructExpr.html">CXXUnresolvedConstructExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CompoundLiteralExpr.html">CompoundLiteralExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCPropertyDecl.html">ObjCPropertyDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgumentLoc.html">TemplateArgumentLoc</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypedefNameDecl.html">TypedefNameDecl</a>>
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>></td><td class="name" onclick="toggle('withInitializer0')"><a name="withInitializer0Anchor">withInitializer</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="withInitializer0"><pre>Matches the initializer expression of a constructor initializer.
|
||||
|
||||
|
@ -6433,6 +6517,34 @@ matches 'a' in
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXFunctionalCastExpr.html">CXXFunctionalCastExpr</a>></td><td class="name" onclick="toggle('hasTypeLoc3')"><a name="hasTypeLoc3Anchor">hasTypeLoc</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>> Inner</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasTypeLoc3"><pre>Matches if the type location of a node matches the inner matcher.
|
||||
|
||||
Examples:
|
||||
int x;
|
||||
declaratorDecl(hasTypeLoc(loc(asString("int"))))
|
||||
matches int x
|
||||
|
||||
auto x = int(3);
|
||||
cxxTemporaryObjectExpr(hasTypeLoc(loc(asString("int"))))
|
||||
matches int(3)
|
||||
|
||||
struct Foo { Foo(int, int); };
|
||||
auto x = Foo(1, 2);
|
||||
cxxFunctionalCastExpr(hasTypeLoc(loc(asString("struct Foo"))))
|
||||
matches Foo(1, 2)
|
||||
|
||||
Usable as: Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1BlockDecl.html">BlockDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXBaseSpecifier.html">CXXBaseSpecifier</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXFunctionalCastExpr.html">CXXFunctionalCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXTemporaryObjectExpr.html">CXXTemporaryObjectExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXUnresolvedConstructExpr.html">CXXUnresolvedConstructExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CompoundLiteralExpr.html">CompoundLiteralExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCPropertyDecl.html">ObjCPropertyDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgumentLoc.html">TemplateArgumentLoc</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypedefNameDecl.html">TypedefNameDecl</a>>
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>></td><td class="name" onclick="toggle('onImplicitObjectArgument0')"><a name="onImplicitObjectArgument0Anchor">onImplicitObjectArgument</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="onImplicitObjectArgument0"><pre>Matches on the implicit object argument of a member call expression. Unlike
|
||||
`on`, matches the argument directly without stripping away anything.
|
||||
|
@ -6602,6 +6714,34 @@ cxxNewExpr(hasPlacementArg(1, integerLiteral(equals(16))))
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>></td><td class="name" onclick="toggle('hasTypeLoc4')"><a name="hasTypeLoc4Anchor">hasTypeLoc</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>> Inner</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasTypeLoc4"><pre>Matches if the type location of a node matches the inner matcher.
|
||||
|
||||
Examples:
|
||||
int x;
|
||||
declaratorDecl(hasTypeLoc(loc(asString("int"))))
|
||||
matches int x
|
||||
|
||||
auto x = int(3);
|
||||
cxxTemporaryObjectExpr(hasTypeLoc(loc(asString("int"))))
|
||||
matches int(3)
|
||||
|
||||
struct Foo { Foo(int, int); };
|
||||
auto x = Foo(1, 2);
|
||||
cxxFunctionalCastExpr(hasTypeLoc(loc(asString("struct Foo"))))
|
||||
matches Foo(1, 2)
|
||||
|
||||
Usable as: Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1BlockDecl.html">BlockDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXBaseSpecifier.html">CXXBaseSpecifier</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXFunctionalCastExpr.html">CXXFunctionalCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXTemporaryObjectExpr.html">CXXTemporaryObjectExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXUnresolvedConstructExpr.html">CXXUnresolvedConstructExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CompoundLiteralExpr.html">CompoundLiteralExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCPropertyDecl.html">ObjCPropertyDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgumentLoc.html">TemplateArgumentLoc</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypedefNameDecl.html">TypedefNameDecl</a>>
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXOperatorCallExpr.html">CXXOperatorCallExpr</a>></td><td class="name" onclick="toggle('hasEitherOperand1')"><a name="hasEitherOperand1Anchor">hasEitherOperand</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasEitherOperand1"><pre>Matches if either the left hand side or the right hand side of a
|
||||
binary operator matches.
|
||||
|
@ -6776,6 +6916,34 @@ Example matches b (matcher = binaryOperator(hasRHS()))
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXTemporaryObjectExpr.html">CXXTemporaryObjectExpr</a>></td><td class="name" onclick="toggle('hasTypeLoc5')"><a name="hasTypeLoc5Anchor">hasTypeLoc</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>> Inner</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasTypeLoc5"><pre>Matches if the type location of a node matches the inner matcher.
|
||||
|
||||
Examples:
|
||||
int x;
|
||||
declaratorDecl(hasTypeLoc(loc(asString("int"))))
|
||||
matches int x
|
||||
|
||||
auto x = int(3);
|
||||
cxxTemporaryObjectExpr(hasTypeLoc(loc(asString("int"))))
|
||||
matches int(3)
|
||||
|
||||
struct Foo { Foo(int, int); };
|
||||
auto x = Foo(1, 2);
|
||||
cxxFunctionalCastExpr(hasTypeLoc(loc(asString("struct Foo"))))
|
||||
matches Foo(1, 2)
|
||||
|
||||
Usable as: Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1BlockDecl.html">BlockDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXBaseSpecifier.html">CXXBaseSpecifier</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXFunctionalCastExpr.html">CXXFunctionalCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXTemporaryObjectExpr.html">CXXTemporaryObjectExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXUnresolvedConstructExpr.html">CXXUnresolvedConstructExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CompoundLiteralExpr.html">CompoundLiteralExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCPropertyDecl.html">ObjCPropertyDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgumentLoc.html">TemplateArgumentLoc</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypedefNameDecl.html">TypedefNameDecl</a>>
|
||||
</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('hasAnyArgument2')"><a name="hasAnyArgument2Anchor">hasAnyArgument</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasAnyArgument2"><pre>Matches any argument of a call expression or a constructor call
|
||||
expression, or an ObjC-message-send expression.
|
||||
|
@ -6805,6 +6973,34 @@ Example matches y in x(y)
|
|||
</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('hasTypeLoc6')"><a name="hasTypeLoc6Anchor">hasTypeLoc</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>> Inner</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasTypeLoc6"><pre>Matches if the type location of a node matches the inner matcher.
|
||||
|
||||
Examples:
|
||||
int x;
|
||||
declaratorDecl(hasTypeLoc(loc(asString("int"))))
|
||||
matches int x
|
||||
|
||||
auto x = int(3);
|
||||
cxxTemporaryObjectExpr(hasTypeLoc(loc(asString("int"))))
|
||||
matches int(3)
|
||||
|
||||
struct Foo { Foo(int, int); };
|
||||
auto x = Foo(1, 2);
|
||||
cxxFunctionalCastExpr(hasTypeLoc(loc(asString("struct Foo"))))
|
||||
matches Foo(1, 2)
|
||||
|
||||
Usable as: Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1BlockDecl.html">BlockDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXBaseSpecifier.html">CXXBaseSpecifier</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXFunctionalCastExpr.html">CXXFunctionalCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXTemporaryObjectExpr.html">CXXTemporaryObjectExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXUnresolvedConstructExpr.html">CXXUnresolvedConstructExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CompoundLiteralExpr.html">CompoundLiteralExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCPropertyDecl.html">ObjCPropertyDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgumentLoc.html">TemplateArgumentLoc</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypedefNameDecl.html">TypedefNameDecl</a>>
|
||||
</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('callee1')"><a name="callee1Anchor">callee</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="callee1"><pre>Matches if the call expression's callee's declaration matches the
|
||||
given matcher.
|
||||
|
@ -7024,6 +7220,34 @@ functionDecl(hasTemplateArgument(0, refersToType(asString("int"))))
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>></td><td class="name" onclick="toggle('hasTypeLoc7')"><a name="hasTypeLoc7Anchor">hasTypeLoc</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>> Inner</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasTypeLoc7"><pre>Matches if the type location of a node matches the inner matcher.
|
||||
|
||||
Examples:
|
||||
int x;
|
||||
declaratorDecl(hasTypeLoc(loc(asString("int"))))
|
||||
matches int x
|
||||
|
||||
auto x = int(3);
|
||||
cxxTemporaryObjectExpr(hasTypeLoc(loc(asString("int"))))
|
||||
matches int(3)
|
||||
|
||||
struct Foo { Foo(int, int); };
|
||||
auto x = Foo(1, 2);
|
||||
cxxFunctionalCastExpr(hasTypeLoc(loc(asString("struct Foo"))))
|
||||
matches Foo(1, 2)
|
||||
|
||||
Usable as: Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1BlockDecl.html">BlockDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXBaseSpecifier.html">CXXBaseSpecifier</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXFunctionalCastExpr.html">CXXFunctionalCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXTemporaryObjectExpr.html">CXXTemporaryObjectExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXUnresolvedConstructExpr.html">CXXUnresolvedConstructExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CompoundLiteralExpr.html">CompoundLiteralExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCPropertyDecl.html">ObjCPropertyDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgumentLoc.html">TemplateArgumentLoc</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypedefNameDecl.html">TypedefNameDecl</a>>
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ComplexType.html">ComplexType</a>></td><td class="name" onclick="toggle('hasElementType1')"><a name="hasElementType1Anchor">hasElementType</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>></td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasElementType1"><pre>Matches arrays and C99 complex types that have a specific element
|
||||
type.
|
||||
|
@ -7039,6 +7263,34 @@ Usable as: Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Arra
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CompoundLiteralExpr.html">CompoundLiteralExpr</a>></td><td class="name" onclick="toggle('hasTypeLoc8')"><a name="hasTypeLoc8Anchor">hasTypeLoc</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>> Inner</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasTypeLoc8"><pre>Matches if the type location of a node matches the inner matcher.
|
||||
|
||||
Examples:
|
||||
int x;
|
||||
declaratorDecl(hasTypeLoc(loc(asString("int"))))
|
||||
matches int x
|
||||
|
||||
auto x = int(3);
|
||||
cxxTemporaryObjectExpr(hasTypeLoc(loc(asString("int"))))
|
||||
matches int(3)
|
||||
|
||||
struct Foo { Foo(int, int); };
|
||||
auto x = Foo(1, 2);
|
||||
cxxFunctionalCastExpr(hasTypeLoc(loc(asString("struct Foo"))))
|
||||
matches Foo(1, 2)
|
||||
|
||||
Usable as: Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1BlockDecl.html">BlockDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXBaseSpecifier.html">CXXBaseSpecifier</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXFunctionalCastExpr.html">CXXFunctionalCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXTemporaryObjectExpr.html">CXXTemporaryObjectExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXUnresolvedConstructExpr.html">CXXUnresolvedConstructExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CompoundLiteralExpr.html">CompoundLiteralExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCPropertyDecl.html">ObjCPropertyDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgumentLoc.html">TemplateArgumentLoc</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypedefNameDecl.html">TypedefNameDecl</a>>
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CompoundStmt.html">CompoundStmt</a>></td><td class="name" onclick="toggle('hasAnySubstatement0')"><a name="hasAnySubstatement0Anchor">hasAnySubstatement</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasAnySubstatement0"><pre>Matches compound statements where at least one substatement matches
|
||||
a given matcher. Also matches StmtExprs that have CompoundStmt as children.
|
||||
|
@ -7148,14 +7400,31 @@ declStmt(hasSingleDecl(anything()))
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>></td><td class="name" onclick="toggle('hasTypeLoc0')"><a name="hasTypeLoc0Anchor">hasTypeLoc</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>> Inner</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasTypeLoc0"><pre>Matches if the type location of the declarator decl's type matches
|
||||
the inner matcher.
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>></td><td class="name" onclick="toggle('hasTypeLoc9')"><a name="hasTypeLoc9Anchor">hasTypeLoc</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>> Inner</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasTypeLoc9"><pre>Matches if the type location of a node matches the inner matcher.
|
||||
|
||||
Given
|
||||
Examples:
|
||||
int x;
|
||||
declaratorDecl(hasTypeLoc(loc(asString("int"))))
|
||||
matches int x
|
||||
|
||||
auto x = int(3);
|
||||
cxxTemporaryObjectExpr(hasTypeLoc(loc(asString("int"))))
|
||||
matches int(3)
|
||||
|
||||
struct Foo { Foo(int, int); };
|
||||
auto x = Foo(1, 2);
|
||||
cxxFunctionalCastExpr(hasTypeLoc(loc(asString("struct Foo"))))
|
||||
matches Foo(1, 2)
|
||||
|
||||
Usable as: Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1BlockDecl.html">BlockDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXBaseSpecifier.html">CXXBaseSpecifier</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXFunctionalCastExpr.html">CXXFunctionalCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXTemporaryObjectExpr.html">CXXTemporaryObjectExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXUnresolvedConstructExpr.html">CXXUnresolvedConstructExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CompoundLiteralExpr.html">CompoundLiteralExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCPropertyDecl.html">ObjCPropertyDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgumentLoc.html">TemplateArgumentLoc</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypedefNameDecl.html">TypedefNameDecl</a>>
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
|
@ -7312,6 +7581,34 @@ actual casts "explicit" casts.)
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>></td><td class="name" onclick="toggle('hasTypeLoc10')"><a name="hasTypeLoc10Anchor">hasTypeLoc</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>> Inner</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasTypeLoc10"><pre>Matches if the type location of a node matches the inner matcher.
|
||||
|
||||
Examples:
|
||||
int x;
|
||||
declaratorDecl(hasTypeLoc(loc(asString("int"))))
|
||||
matches int x
|
||||
|
||||
auto x = int(3);
|
||||
cxxTemporaryObjectExpr(hasTypeLoc(loc(asString("int"))))
|
||||
matches int(3)
|
||||
|
||||
struct Foo { Foo(int, int); };
|
||||
auto x = Foo(1, 2);
|
||||
cxxFunctionalCastExpr(hasTypeLoc(loc(asString("struct Foo"))))
|
||||
matches Foo(1, 2)
|
||||
|
||||
Usable as: Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1BlockDecl.html">BlockDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXBaseSpecifier.html">CXXBaseSpecifier</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXFunctionalCastExpr.html">CXXFunctionalCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXTemporaryObjectExpr.html">CXXTemporaryObjectExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXUnresolvedConstructExpr.html">CXXUnresolvedConstructExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CompoundLiteralExpr.html">CompoundLiteralExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCPropertyDecl.html">ObjCPropertyDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgumentLoc.html">TemplateArgumentLoc</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypedefNameDecl.html">TypedefNameDecl</a>>
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>></td><td class="name" onclick="toggle('hasType5')"><a name="hasType5Anchor">hasType</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasType5"><pre>Overloaded to match the declaration of the expression's or value
|
||||
declaration's type.
|
||||
|
@ -8250,6 +8547,34 @@ matching y.
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCPropertyDecl.html">ObjCPropertyDecl</a>></td><td class="name" onclick="toggle('hasTypeLoc11')"><a name="hasTypeLoc11Anchor">hasTypeLoc</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>> Inner</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasTypeLoc11"><pre>Matches if the type location of a node matches the inner matcher.
|
||||
|
||||
Examples:
|
||||
int x;
|
||||
declaratorDecl(hasTypeLoc(loc(asString("int"))))
|
||||
matches int x
|
||||
|
||||
auto x = int(3);
|
||||
cxxTemporaryObjectExpr(hasTypeLoc(loc(asString("int"))))
|
||||
matches int(3)
|
||||
|
||||
struct Foo { Foo(int, int); };
|
||||
auto x = Foo(1, 2);
|
||||
cxxFunctionalCastExpr(hasTypeLoc(loc(asString("struct Foo"))))
|
||||
matches Foo(1, 2)
|
||||
|
||||
Usable as: Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1BlockDecl.html">BlockDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXBaseSpecifier.html">CXXBaseSpecifier</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXFunctionalCastExpr.html">CXXFunctionalCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXTemporaryObjectExpr.html">CXXTemporaryObjectExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXUnresolvedConstructExpr.html">CXXUnresolvedConstructExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CompoundLiteralExpr.html">CompoundLiteralExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCPropertyDecl.html">ObjCPropertyDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgumentLoc.html">TemplateArgumentLoc</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypedefNameDecl.html">TypedefNameDecl</a>>
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1OpaqueValueExpr.html">OpaqueValueExpr</a>></td><td class="name" onclick="toggle('hasSourceExpression1')"><a name="hasSourceExpression1Anchor">hasSourceExpression</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasSourceExpression1"><pre>Matches if the cast's source expression
|
||||
or opaque value's source expression matches the given matcher.
|
||||
|
@ -8601,6 +8926,34 @@ Usable as: Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Addr
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgumentLoc.html">TemplateArgumentLoc</a>></td><td class="name" onclick="toggle('hasTypeLoc12')"><a name="hasTypeLoc12Anchor">hasTypeLoc</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>> Inner</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasTypeLoc12"><pre>Matches if the type location of a node matches the inner matcher.
|
||||
|
||||
Examples:
|
||||
int x;
|
||||
declaratorDecl(hasTypeLoc(loc(asString("int"))))
|
||||
matches int x
|
||||
|
||||
auto x = int(3);
|
||||
cxxTemporaryObjectExpr(hasTypeLoc(loc(asString("int"))))
|
||||
matches int(3)
|
||||
|
||||
struct Foo { Foo(int, int); };
|
||||
auto x = Foo(1, 2);
|
||||
cxxFunctionalCastExpr(hasTypeLoc(loc(asString("struct Foo"))))
|
||||
matches Foo(1, 2)
|
||||
|
||||
Usable as: Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1BlockDecl.html">BlockDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXBaseSpecifier.html">CXXBaseSpecifier</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXFunctionalCastExpr.html">CXXFunctionalCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXTemporaryObjectExpr.html">CXXTemporaryObjectExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXUnresolvedConstructExpr.html">CXXUnresolvedConstructExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CompoundLiteralExpr.html">CompoundLiteralExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCPropertyDecl.html">ObjCPropertyDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgumentLoc.html">TemplateArgumentLoc</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypedefNameDecl.html">TypedefNameDecl</a>>
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>></td><td class="name" onclick="toggle('isExpr0')"><a name="isExpr0Anchor">isExpr</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="isExpr0"><pre>Matches a sugar TemplateArgument that refers to a certain expression.
|
||||
|
||||
|
@ -8784,6 +9137,34 @@ QualType-matcher matches.
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypedefNameDecl.html">TypedefNameDecl</a>></td><td class="name" onclick="toggle('hasTypeLoc13')"><a name="hasTypeLoc13Anchor">hasTypeLoc</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>> Inner</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasTypeLoc13"><pre>Matches if the type location of a node matches the inner matcher.
|
||||
|
||||
Examples:
|
||||
int x;
|
||||
declaratorDecl(hasTypeLoc(loc(asString("int"))))
|
||||
matches int x
|
||||
|
||||
auto x = int(3);
|
||||
cxxTemporaryObjectExpr(hasTypeLoc(loc(asString("int"))))
|
||||
matches int(3)
|
||||
|
||||
struct Foo { Foo(int, int); };
|
||||
auto x = Foo(1, 2);
|
||||
cxxFunctionalCastExpr(hasTypeLoc(loc(asString("struct Foo"))))
|
||||
matches Foo(1, 2)
|
||||
|
||||
Usable as: Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1BlockDecl.html">BlockDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXBaseSpecifier.html">CXXBaseSpecifier</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXFunctionalCastExpr.html">CXXFunctionalCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXTemporaryObjectExpr.html">CXXTemporaryObjectExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CXXUnresolvedConstructExpr.html">CXXUnresolvedConstructExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1CompoundLiteralExpr.html">CompoundLiteralExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ObjCPropertyDecl.html">ObjCPropertyDecl</a>>, Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgumentLoc.html">TemplateArgumentLoc</a>>,
|
||||
Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypedefNameDecl.html">TypedefNameDecl</a>>
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypedefNameDecl.html">TypedefNameDecl</a>></td><td class="name" onclick="toggle('hasType2')"><a name="hasType2Anchor">hasType</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasType2"><pre>Matches if the expression's or declaration's type matches a type
|
||||
matcher.
|
||||
|
|
|
@ -3896,20 +3896,51 @@ AST_POLYMORPHIC_MATCHER_P_OVERLOAD(
|
|||
return false;
|
||||
}
|
||||
|
||||
/// Matches if the type location of the declarator decl's type matches
|
||||
/// the inner matcher.
|
||||
/// Matches if the type location of a node matches the inner matcher.
|
||||
///
|
||||
/// Given
|
||||
/// Examples:
|
||||
/// \code
|
||||
/// int x;
|
||||
/// \endcode
|
||||
/// declaratorDecl(hasTypeLoc(loc(asString("int"))))
|
||||
/// matches int x
|
||||
AST_MATCHER_P(DeclaratorDecl, hasTypeLoc, internal::Matcher<TypeLoc>, Inner) {
|
||||
if (!Node.getTypeSourceInfo())
|
||||
///
|
||||
/// \code
|
||||
/// auto x = int(3);
|
||||
/// \code
|
||||
/// cxxTemporaryObjectExpr(hasTypeLoc(loc(asString("int"))))
|
||||
/// matches int(3)
|
||||
///
|
||||
/// \code
|
||||
/// struct Foo { Foo(int, int); };
|
||||
/// auto x = Foo(1, 2);
|
||||
/// \code
|
||||
/// cxxFunctionalCastExpr(hasTypeLoc(loc(asString("struct Foo"))))
|
||||
/// matches Foo(1, 2)
|
||||
///
|
||||
/// Usable as: Matcher<BlockDecl>, Matcher<CXXBaseSpecifier>,
|
||||
/// Matcher<CXXCtorInitializer>, Matcher<CXXFunctionalCastExpr>,
|
||||
/// Matcher<CXXNewExpr>, Matcher<CXXTemporaryObjectExpr>,
|
||||
/// Matcher<CXXUnresolvedConstructExpr>,
|
||||
/// Matcher<ClassTemplateSpecializationDecl>, Matcher<CompoundLiteralExpr>,
|
||||
/// Matcher<DeclaratorDecl>, Matcher<ExplicitCastExpr>,
|
||||
/// Matcher<ObjCPropertyDecl>, Matcher<TemplateArgumentLoc>,
|
||||
/// Matcher<TypedefNameDecl>
|
||||
AST_POLYMORPHIC_MATCHER_P(
|
||||
hasTypeLoc,
|
||||
AST_POLYMORPHIC_SUPPORTED_TYPES(
|
||||
BlockDecl, CXXBaseSpecifier, CXXCtorInitializer, CXXFunctionalCastExpr,
|
||||
CXXNewExpr, CXXTemporaryObjectExpr, CXXUnresolvedConstructExpr,
|
||||
ClassTemplateSpecializationDecl, CompoundLiteralExpr, DeclaratorDecl,
|
||||
ExplicitCastExpr, ObjCPropertyDecl, TemplateArgumentLoc,
|
||||
TypedefNameDecl),
|
||||
internal::Matcher<TypeLoc>, Inner) {
|
||||
TypeSourceInfo *source = internal::GetTypeSourceInfo(Node);
|
||||
if (source == nullptr) {
|
||||
// This happens for example for implicit destructors.
|
||||
return false;
|
||||
return Inner.matches(Node.getTypeSourceInfo()->getTypeLoc(), Finder, Builder);
|
||||
}
|
||||
return Inner.matches(source->getTypeLoc(), Finder, Builder);
|
||||
}
|
||||
|
||||
/// Matches if the matched type is represented by the given string.
|
||||
|
|
|
@ -166,6 +166,35 @@ inline QualType getUnderlyingType(const CXXBaseSpecifier &Node) {
|
|||
return Node.getType();
|
||||
}
|
||||
|
||||
/// Unifies obtaining a `TypeSourceInfo` from different node types.
|
||||
template <typename T,
|
||||
std::enable_if_t<TypeListContainsSuperOf<
|
||||
TypeList<CXXBaseSpecifier, CXXCtorInitializer,
|
||||
CXXTemporaryObjectExpr, CXXUnresolvedConstructExpr,
|
||||
CompoundLiteralExpr, DeclaratorDecl, ObjCPropertyDecl,
|
||||
TemplateArgumentLoc, TypedefNameDecl>,
|
||||
T>::value> * = nullptr>
|
||||
inline TypeSourceInfo *GetTypeSourceInfo(const T &Node) {
|
||||
return Node.getTypeSourceInfo();
|
||||
}
|
||||
template <typename T,
|
||||
std::enable_if_t<TypeListContainsSuperOf<
|
||||
TypeList<CXXFunctionalCastExpr, ExplicitCastExpr>, T>::value> * =
|
||||
nullptr>
|
||||
inline TypeSourceInfo *GetTypeSourceInfo(const T &Node) {
|
||||
return Node.getTypeInfoAsWritten();
|
||||
}
|
||||
inline TypeSourceInfo *GetTypeSourceInfo(const BlockDecl &Node) {
|
||||
return Node.getSignatureAsWritten();
|
||||
}
|
||||
inline TypeSourceInfo *GetTypeSourceInfo(const CXXNewExpr &Node) {
|
||||
return Node.getAllocatedTypeSourceInfo();
|
||||
}
|
||||
inline TypeSourceInfo *
|
||||
GetTypeSourceInfo(const ClassTemplateSpecializationDecl &Node) {
|
||||
return Node.getTypeAsWritten();
|
||||
}
|
||||
|
||||
/// Unifies obtaining the FunctionProtoType pointer from both
|
||||
/// FunctionProtoType and FunctionDecl nodes..
|
||||
inline const FunctionProtoType *
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include "clang/ASTMatchers/ASTMatchFinder.h"
|
||||
#include "clang/ASTMatchers/ASTMatchers.h"
|
||||
#include "clang/Tooling/Tooling.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/ADT/Triple.h"
|
||||
#include "llvm/Support/Host.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
@ -375,15 +376,104 @@ TEST(HasType, MatchesTypedefNameDecl) {
|
|||
typedefNameDecl(hasType(asString("foo")), hasName("bar"))));
|
||||
}
|
||||
|
||||
TEST(HasTypeLoc, MatchesDeclaratorDecls) {
|
||||
TEST(HasTypeLoc, MatchesBlockDecl) {
|
||||
EXPECT_TRUE(matchesConditionally(
|
||||
"auto x = ^int (int a, int b) { return a + b; };",
|
||||
blockDecl(hasTypeLoc(loc(asString("int (int, int)")))), true,
|
||||
{"-fblocks"}));
|
||||
}
|
||||
|
||||
TEST(HasTypeLoc, MatchesCXXBaseSpecifierAndCtorInitializer) {
|
||||
llvm::StringRef code = R"cpp(
|
||||
class Foo {};
|
||||
class Bar : public Foo {
|
||||
Bar() : Foo() {}
|
||||
};
|
||||
)cpp";
|
||||
|
||||
EXPECT_TRUE(matches(
|
||||
code, cxxRecordDecl(hasAnyBase(hasTypeLoc(loc(asString("class Foo")))))));
|
||||
EXPECT_TRUE(matches(
|
||||
code, cxxCtorInitializer(hasTypeLoc(loc(asString("class Foo"))))));
|
||||
}
|
||||
|
||||
TEST(HasTypeLoc, MatchesCXXFunctionalCastExpr) {
|
||||
EXPECT_TRUE(matches("auto x = int(3);",
|
||||
cxxFunctionalCastExpr(hasTypeLoc(loc(asString("int"))))));
|
||||
}
|
||||
|
||||
TEST(HasTypeLoc, MatchesCXXNewExpr) {
|
||||
EXPECT_TRUE(matches("auto* x = new int(3);",
|
||||
cxxNewExpr(hasTypeLoc(loc(asString("int"))))));
|
||||
EXPECT_TRUE(matches("class Foo{}; auto* x = new Foo();",
|
||||
cxxNewExpr(hasTypeLoc(loc(asString("class Foo"))))));
|
||||
}
|
||||
|
||||
TEST(HasTypeLoc, MatchesCXXTemporaryObjectExpr) {
|
||||
EXPECT_TRUE(
|
||||
matches("struct Foo { Foo(int, int); }; auto x = Foo(1, 2);",
|
||||
cxxTemporaryObjectExpr(hasTypeLoc(loc(asString("struct Foo"))))));
|
||||
}
|
||||
|
||||
TEST(HasTypeLoc, MatchesCXXUnresolvedConstructExpr) {
|
||||
EXPECT_TRUE(
|
||||
matches("template <typename T> T make() { return T(); }",
|
||||
cxxUnresolvedConstructExpr(hasTypeLoc(loc(asString("T"))))));
|
||||
}
|
||||
|
||||
TEST(HasTypeLoc, MatchesClassTemplateSpecializationDecl) {
|
||||
EXPECT_TRUE(matches(
|
||||
"template <typename T> class Foo; template <> class Foo<int> {};",
|
||||
classTemplateSpecializationDecl(hasTypeLoc(loc(asString("Foo<int>"))))));
|
||||
}
|
||||
|
||||
TEST(HasTypeLoc, MatchesCompoundLiteralExpr) {
|
||||
EXPECT_TRUE(
|
||||
matches("int* x = (int [2]) { 0, 1 };",
|
||||
compoundLiteralExpr(hasTypeLoc(loc(asString("int [2]"))))));
|
||||
}
|
||||
|
||||
TEST(HasTypeLoc, MatchesDeclaratorDecl) {
|
||||
EXPECT_TRUE(matches("int x;",
|
||||
varDecl(hasName("x"), hasTypeLoc(loc(asString("int"))))));
|
||||
EXPECT_TRUE(matches("int x(3);",
|
||||
varDecl(hasName("x"), hasTypeLoc(loc(asString("int"))))));
|
||||
EXPECT_TRUE(
|
||||
matches("struct Foo { Foo(int, int); }; Foo x(1, 2);",
|
||||
varDecl(hasName("x"), hasTypeLoc(loc(asString("struct Foo"))))));
|
||||
|
||||
// Make sure we don't crash on implicit constructors.
|
||||
EXPECT_TRUE(notMatches("class X {}; X x;",
|
||||
declaratorDecl(hasTypeLoc(loc(asString("int"))))));
|
||||
}
|
||||
|
||||
TEST(HasTypeLoc, MatchesExplicitCastExpr) {
|
||||
EXPECT_TRUE(matches("auto x = (int) 3;",
|
||||
explicitCastExpr(hasTypeLoc(loc(asString("int"))))));
|
||||
EXPECT_TRUE(matches("auto x = static_cast<int>(3);",
|
||||
explicitCastExpr(hasTypeLoc(loc(asString("int"))))));
|
||||
}
|
||||
|
||||
TEST(HasTypeLoc, MatchesObjCPropertyDecl) {
|
||||
EXPECT_TRUE(matchesObjC(R"objc(
|
||||
@interface Foo
|
||||
@property int enabled;
|
||||
@end
|
||||
)objc",
|
||||
objcPropertyDecl(hasTypeLoc(loc(asString("int"))))));
|
||||
}
|
||||
|
||||
TEST(HasTypeLoc, MatchesTemplateArgumentLoc) {
|
||||
EXPECT_TRUE(matches("template <typename T> class Foo {}; Foo<int> x;",
|
||||
templateArgumentLoc(hasTypeLoc(loc(asString("int"))))));
|
||||
}
|
||||
|
||||
TEST(HasTypeLoc, MatchesTypedefNameDecl) {
|
||||
EXPECT_TRUE(matches("typedef int X;",
|
||||
typedefNameDecl(hasTypeLoc(loc(asString("int"))))));
|
||||
EXPECT_TRUE(matches("using X = int;",
|
||||
typedefNameDecl(hasTypeLoc(loc(asString("int"))))));
|
||||
}
|
||||
|
||||
TEST(Callee, MatchesDeclarations) {
|
||||
StatementMatcher CallMethodX = callExpr(callee(cxxMethodDecl(hasName("x"))));
|
||||
|
|
Loading…
Reference in New Issue