mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-29 08:19:01 -04:00
Adding hasDeclaration overload for TemplateSpecializationType
TemplateSpecializationType doesn't quite have getDecl(). Need to go through TemplateName to get a TemplateDecl. Added test cases for the hasDeclaration() overload for TemplateSpecializationType. Also introduced the type matcher templateSpecializationType() used by the new hasDeclaration() test case. Updated LibASTMatchersReference. Reviewers: klimek llvm-svn: 176025
This commit is contained in:
parent
ed93645739
commit
f901b71921
@ -987,6 +987,21 @@ pointerType()
|
|||||||
</pre></td></tr>
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
|
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>></td><td class="name" onclick="toggle('templateSpecializationTypeLoc0')"><a name="templateSpecializationTypeLoc0Anchor">templateSpecializationTypeLoc</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationTypeLoc.html">TemplateSpecializationTypeLoc</a>>...</td></tr>
|
||||||
|
<tr><td colspan="4" class="doc" id="templateSpecializationTypeLoc0"><pre>Matches template specialization types.
|
||||||
|
|
||||||
|
Given
|
||||||
|
template <typename T>
|
||||||
|
class C { };
|
||||||
|
|
||||||
|
template class C<int>; A
|
||||||
|
C<char> var; B
|
||||||
|
|
||||||
|
templateSpecializationType() matches the type of the explicit
|
||||||
|
instantiation in A and the type of the variable declaration in B.
|
||||||
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>></td><td class="name" onclick="toggle('typeLoc0')"><a name="typeLoc0Anchor">typeLoc</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>>...</td></tr>
|
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>></td><td class="name" onclick="toggle('typeLoc0')"><a name="typeLoc0Anchor">typeLoc</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>>...</td></tr>
|
||||||
<tr><td colspan="4" class="doc" id="typeLoc0"><pre>Matches TypeLocs in the clang AST.
|
<tr><td colspan="4" class="doc" id="typeLoc0"><pre>Matches TypeLocs in the clang AST.
|
||||||
</pre></td></tr>
|
</pre></td></tr>
|
||||||
@ -1166,6 +1181,21 @@ pointerType()
|
|||||||
</pre></td></tr>
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
|
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>></td><td class="name" onclick="toggle('templateSpecializationType0')"><a name="templateSpecializationType0Anchor">templateSpecializationType</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>>...</td></tr>
|
||||||
|
<tr><td colspan="4" class="doc" id="templateSpecializationType0"><pre>Matches template specialization types.
|
||||||
|
|
||||||
|
Given
|
||||||
|
template <typename T>
|
||||||
|
class C { };
|
||||||
|
|
||||||
|
template class C<int>; A
|
||||||
|
C<char> var; B
|
||||||
|
|
||||||
|
templateSpecializationType() matches the type of the explicit
|
||||||
|
instantiation in A and the type of the variable declaration in B.
|
||||||
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>></td><td class="name" onclick="toggle('type0')"><a name="type0Anchor">type</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>>...</td></tr>
|
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>></td><td class="name" onclick="toggle('type0')"><a name="type0Anchor">type</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>>...</td></tr>
|
||||||
<tr><td colspan="4" class="doc" id="type0"><pre>Matches Types in the clang AST.
|
<tr><td colspan="4" class="doc" id="type0"><pre>Matches Types in the clang AST.
|
||||||
</pre></td></tr>
|
</pre></td></tr>
|
||||||
@ -2034,8 +2064,8 @@ Usable as: Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockP
|
|||||||
</pre></td></tr>
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>></td><td class="name" onclick="toggle('hasDeclaration2')"><a name="hasDeclaration2Anchor">hasDeclaration</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>> InnerMatcher</td></tr>
|
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>></td><td class="name" onclick="toggle('hasDeclaration3')"><a name="hasDeclaration3Anchor">hasDeclaration</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>> InnerMatcher</td></tr>
|
||||||
<tr><td colspan="4" class="doc" id="hasDeclaration2"><pre>Matches a type if the declaration of the type matches the given
|
<tr><td colspan="4" class="doc" id="hasDeclaration3"><pre>Matches a type if the declaration of the type matches the given
|
||||||
matcher.
|
matcher.
|
||||||
|
|
||||||
In addition to being usable as Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>, also usable as
|
In addition to being usable as Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>, also usable as
|
||||||
@ -2043,7 +2073,8 @@ Matcher<T> for any T supporting the getDecl() member function. e.g. variou
|
|||||||
subtypes of clang::Type.
|
subtypes of clang::Type.
|
||||||
|
|
||||||
Usable as: Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>>,
|
Usable as: Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>>,
|
||||||
Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>
|
Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>,
|
||||||
|
Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>>
|
||||||
</pre></td></tr>
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
@ -2189,8 +2220,8 @@ Example matches y in x(y)
|
|||||||
</pre></td></tr>
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>></td><td class="name" onclick="toggle('hasDeclaration3')"><a name="hasDeclaration3Anchor">hasDeclaration</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>> InnerMatcher</td></tr>
|
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>></td><td class="name" onclick="toggle('hasDeclaration4')"><a name="hasDeclaration4Anchor">hasDeclaration</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>> InnerMatcher</td></tr>
|
||||||
<tr><td colspan="4" class="doc" id="hasDeclaration3"><pre>Matches a type if the declaration of the type matches the given
|
<tr><td colspan="4" class="doc" id="hasDeclaration4"><pre>Matches a type if the declaration of the type matches the given
|
||||||
matcher.
|
matcher.
|
||||||
|
|
||||||
In addition to being usable as Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>, also usable as
|
In addition to being usable as Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>, also usable as
|
||||||
@ -2198,7 +2229,8 @@ Matcher<T> for any T supporting the getDecl() member function. e.g. variou
|
|||||||
subtypes of clang::Type.
|
subtypes of clang::Type.
|
||||||
|
|
||||||
Usable as: Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>>,
|
Usable as: Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>>,
|
||||||
Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>
|
Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>,
|
||||||
|
Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>>
|
||||||
</pre></td></tr>
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
@ -2586,8 +2618,8 @@ FIXME: Unit test this matcher
|
|||||||
</pre></td></tr>
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>></td><td class="name" onclick="toggle('hasDeclaration1')"><a name="hasDeclaration1Anchor">hasDeclaration</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>> InnerMatcher</td></tr>
|
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>></td><td class="name" onclick="toggle('hasDeclaration2')"><a name="hasDeclaration2Anchor">hasDeclaration</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>> InnerMatcher</td></tr>
|
||||||
<tr><td colspan="4" class="doc" id="hasDeclaration1"><pre>Matches a type if the declaration of the type matches the given
|
<tr><td colspan="4" class="doc" id="hasDeclaration2"><pre>Matches a type if the declaration of the type matches the given
|
||||||
matcher.
|
matcher.
|
||||||
|
|
||||||
In addition to being usable as Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>, also usable as
|
In addition to being usable as Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>, also usable as
|
||||||
@ -2595,7 +2627,8 @@ Matcher<T> for any T supporting the getDecl() member function. e.g. variou
|
|||||||
subtypes of clang::Type.
|
subtypes of clang::Type.
|
||||||
|
|
||||||
Usable as: Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>>,
|
Usable as: Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>>,
|
||||||
Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>
|
Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>,
|
||||||
|
Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>>
|
||||||
</pre></td></tr>
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
@ -2756,8 +2789,8 @@ Usable as: Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockP
|
|||||||
</pre></td></tr>
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>></td><td class="name" onclick="toggle('hasDeclaration4')"><a name="hasDeclaration4Anchor">hasDeclaration</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>> InnerMatcher</td></tr>
|
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>></td><td class="name" onclick="toggle('hasDeclaration5')"><a name="hasDeclaration5Anchor">hasDeclaration</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>> InnerMatcher</td></tr>
|
||||||
<tr><td colspan="4" class="doc" id="hasDeclaration4"><pre>Matches a type if the declaration of the type matches the given
|
<tr><td colspan="4" class="doc" id="hasDeclaration5"><pre>Matches a type if the declaration of the type matches the given
|
||||||
matcher.
|
matcher.
|
||||||
|
|
||||||
In addition to being usable as Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>, also usable as
|
In addition to being usable as Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>, also usable as
|
||||||
@ -2765,7 +2798,8 @@ Matcher<T> for any T supporting the getDecl() member function. e.g. variou
|
|||||||
subtypes of clang::Type.
|
subtypes of clang::Type.
|
||||||
|
|
||||||
Usable as: Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>>,
|
Usable as: Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>>,
|
||||||
Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>
|
Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>,
|
||||||
|
Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>>
|
||||||
</pre></td></tr>
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
@ -2850,13 +2884,7 @@ classTemplateSpecializationDecl(hasAnyTemplateArgument(
|
|||||||
</pre></td></tr>
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>></td><td class="name" onclick="toggle('loc0')"><a name="loc0Anchor">loc</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>> InnerMatcher</td></tr>
|
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>></td><td class="name" onclick="toggle('hasDeclaration0')"><a name="hasDeclaration0Anchor">hasDeclaration</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>> InnerMatcher</td></tr>
|
||||||
<tr><td colspan="4" class="doc" id="loc0"><pre>Matches TypeLocs for which the given inner
|
|
||||||
QualType-matcher matches.
|
|
||||||
</pre></td></tr>
|
|
||||||
|
|
||||||
|
|
||||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>></td><td class="name" onclick="toggle('hasDeclaration0')"><a name="hasDeclaration0Anchor">hasDeclaration</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>> InnerMatcher</td></tr>
|
|
||||||
<tr><td colspan="4" class="doc" id="hasDeclaration0"><pre>Matches a type if the declaration of the type matches the given
|
<tr><td colspan="4" class="doc" id="hasDeclaration0"><pre>Matches a type if the declaration of the type matches the given
|
||||||
matcher.
|
matcher.
|
||||||
|
|
||||||
@ -2865,7 +2893,28 @@ Matcher<T> for any T supporting the getDecl() member function. e.g. variou
|
|||||||
subtypes of clang::Type.
|
subtypes of clang::Type.
|
||||||
|
|
||||||
Usable as: Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>>,
|
Usable as: Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>>,
|
||||||
Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>
|
Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>,
|
||||||
|
Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>>
|
||||||
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
|
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>></td><td class="name" onclick="toggle('loc0')"><a name="loc0Anchor">loc</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>> InnerMatcher</td></tr>
|
||||||
|
<tr><td colspan="4" class="doc" id="loc0"><pre>Matches TypeLocs for which the given inner
|
||||||
|
QualType-matcher matches.
|
||||||
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
|
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>></td><td class="name" onclick="toggle('hasDeclaration1')"><a name="hasDeclaration1Anchor">hasDeclaration</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>> InnerMatcher</td></tr>
|
||||||
|
<tr><td colspan="4" class="doc" id="hasDeclaration1"><pre>Matches a type if the declaration of the type matches the given
|
||||||
|
matcher.
|
||||||
|
|
||||||
|
In addition to being usable as Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>, also usable as
|
||||||
|
Matcher<T> for any T supporting the getDecl() member function. e.g. various
|
||||||
|
subtypes of clang::Type.
|
||||||
|
|
||||||
|
Usable as: Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>>,
|
||||||
|
Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>>,
|
||||||
|
Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>>
|
||||||
</pre></td></tr>
|
</pre></td></tr>
|
||||||
|
|
||||||
|
|
||||||
|
@ -1629,7 +1629,8 @@ unless(const M &InnerMatcher) {
|
|||||||
/// subtypes of clang::Type.
|
/// subtypes of clang::Type.
|
||||||
///
|
///
|
||||||
/// Usable as: Matcher<QualType>, Matcher<CallExpr>, Matcher<CXXConstructExpr>,
|
/// Usable as: Matcher<QualType>, Matcher<CallExpr>, Matcher<CXXConstructExpr>,
|
||||||
/// Matcher<MemberExpr>, Matcher<TypedefType>
|
/// Matcher<MemberExpr>, Matcher<TypedefType>,
|
||||||
|
/// Matcher<TemplateSpecializationType>
|
||||||
inline internal::PolymorphicMatcherWithParam1< internal::HasDeclarationMatcher,
|
inline internal::PolymorphicMatcherWithParam1< internal::HasDeclarationMatcher,
|
||||||
internal::Matcher<Decl> >
|
internal::Matcher<Decl> >
|
||||||
hasDeclaration(const internal::Matcher<Decl> &InnerMatcher) {
|
hasDeclaration(const internal::Matcher<Decl> &InnerMatcher) {
|
||||||
@ -2913,6 +2914,21 @@ AST_TYPELOC_TRAVERSE_MATCHER(pointee, getPointee);
|
|||||||
/// matches "typedef int X"
|
/// matches "typedef int X"
|
||||||
AST_TYPE_MATCHER(TypedefType, typedefType);
|
AST_TYPE_MATCHER(TypedefType, typedefType);
|
||||||
|
|
||||||
|
/// \brief Matches template specialization types.
|
||||||
|
///
|
||||||
|
/// Given
|
||||||
|
/// \code
|
||||||
|
/// template <typename T>
|
||||||
|
/// class C { };
|
||||||
|
///
|
||||||
|
/// template class C<int>; // A
|
||||||
|
/// C<char> var; // B
|
||||||
|
/// \code
|
||||||
|
///
|
||||||
|
/// \c templateSpecializationType() matches the type of the explicit
|
||||||
|
/// instantiation in \c A and the type of the variable declaration in \c B.
|
||||||
|
AST_TYPE_MATCHER(TemplateSpecializationType, templateSpecializationType);
|
||||||
|
|
||||||
/// \brief Matches nested name specifiers.
|
/// \brief Matches nested name specifiers.
|
||||||
///
|
///
|
||||||
/// Given
|
/// Given
|
||||||
|
@ -411,6 +411,15 @@ private:
|
|||||||
return matchesDecl(Node->getAsCXXRecordDecl(), Finder, Builder);
|
return matchesDecl(Node->getAsCXXRecordDecl(), Finder, Builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// \brief Gets the TemplateDecl from a TemplateSpecializationType
|
||||||
|
/// and returns whether the inner matches on it.
|
||||||
|
bool matchesSpecialized(const TemplateSpecializationType &Node,
|
||||||
|
ASTMatchFinder *Finder,
|
||||||
|
BoundNodesTreeBuilder *Builder) const {
|
||||||
|
return matchesDecl(Node.getTemplateName().getAsTemplateDecl(),
|
||||||
|
Finder, Builder);
|
||||||
|
}
|
||||||
|
|
||||||
/// \brief Extracts the Decl of the callee of a CallExpr and returns whether
|
/// \brief Extracts the Decl of the callee of a CallExpr and returns whether
|
||||||
/// the inner matcher matches on it.
|
/// the inner matcher matches on it.
|
||||||
bool matchesSpecialized(const CallExpr &Node, ASTMatchFinder *Finder,
|
bool matchesSpecialized(const CallExpr &Node, ASTMatchFinder *Finder,
|
||||||
|
@ -832,6 +832,12 @@ TEST(HasDeclaration, HasDeclarationOfTypeWithDecl) {
|
|||||||
// FIXME: Add tests for other types with getDecl() (e.g. RecordType)
|
// FIXME: Add tests for other types with getDecl() (e.g. RecordType)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(HasDeclaration, HasDeclarationOfTemplateSpecializationType) {
|
||||||
|
EXPECT_TRUE(matches("template <typename T> class A {}; A<int> a;",
|
||||||
|
varDecl(hasType(templateSpecializationType(
|
||||||
|
hasDeclaration(namedDecl(hasName("A"))))))));
|
||||||
|
}
|
||||||
|
|
||||||
TEST(HasType, TakesQualTypeMatcherAndMatchesExpr) {
|
TEST(HasType, TakesQualTypeMatcherAndMatchesExpr) {
|
||||||
TypeMatcher ClassX = hasDeclaration(recordDecl(hasName("X")));
|
TypeMatcher ClassX = hasDeclaration(recordDecl(hasName("X")));
|
||||||
EXPECT_TRUE(
|
EXPECT_TRUE(
|
||||||
@ -3406,6 +3412,11 @@ TEST(TypeMatching, MatchesTypedefTypes) {
|
|||||||
hasType(typedefType()))));
|
hasType(typedefType()))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(TypeMatching, MatchesTemplateSpecializationType) {
|
||||||
|
EXPECT_TRUE(matches("template <typename T> class A{}; A<int>a;",
|
||||||
|
templateSpecializationType()));
|
||||||
|
}
|
||||||
|
|
||||||
TEST(NNS, MatchesNestedNameSpecifiers) {
|
TEST(NNS, MatchesNestedNameSpecifiers) {
|
||||||
EXPECT_TRUE(matches("namespace ns { struct A {}; } ns::A a;",
|
EXPECT_TRUE(matches("namespace ns { struct A {}; } ns::A a;",
|
||||||
nestedNameSpecifier()));
|
nestedNameSpecifier()));
|
||||||
|
Loading…
Reference in New Issue
Block a user