forked from OSchip/llvm-project
Fix docs generation for the AST matchers:
1. Move internal functions into ASTMatchersInternal. 2. Adapt dump_ast_matchers.py to the new VariadicOperatorMatcherFunc signature. 3. Update the actual docs with the updated tool / code. llvm-svn: 202017
This commit is contained in:
parent
4c32d16c76
commit
4f8f890ade
|
@ -250,7 +250,7 @@ Example matches f
|
|||
<tr><td colspan="4" class="doc" id="methodDecl0"><pre>Matches method declarations.
|
||||
|
||||
Example matches y
|
||||
class X { void y() };
|
||||
class X { void y(); };
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
|
@ -1311,7 +1311,7 @@ Usable as: Any Matcher
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<*></td><td class="name" onclick="toggle('unless0')"><a name="unless0Anchor">unless</a></td><td>Matcher<*> InnerMatcher</td></tr>
|
||||
<tr><td>Matcher<*></td><td class="name" onclick="toggle('unless0')"><a name="unless0Anchor">unless</a></td><td>Matcher<*></td></tr>
|
||||
<tr><td colspan="4" class="doc" id="unless0"><pre>Matches if the provided matcher does not match.
|
||||
|
||||
Example matches Y (matcher = recordDecl(unless(hasName("X"))))
|
||||
|
@ -1352,6 +1352,11 @@ Example matches f(0, 0) (matcher = callExpr(argumentCountIs(2)))
|
|||
</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('isListInitialization0')"><a name="isListInitialization0Anchor">isListInitialization</a></td><td></td></tr>
|
||||
<tr><td colspan="4" class="doc" id="isListInitialization0"><pre>Matches a constructor call expression which uses list initialization.
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructorDecl.html">CXXConstructorDecl</a>></td><td class="name" onclick="toggle('isImplicit0')"><a name="isImplicit0Anchor">isImplicit</a></td><td></td></tr>
|
||||
<tr><td colspan="4" class="doc" id="isImplicit0"><pre>Matches a constructor declaration that has been implicitly added
|
||||
by the compiler (eg. implicit defaultcopy constructors).
|
||||
|
@ -1422,6 +1427,18 @@ Given
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>></td><td class="name" onclick="toggle('isPure0')"><a name="isPure0Anchor">isPure</a></td><td></td></tr>
|
||||
<tr><td colspan="4" class="doc" id="isPure0"><pre>Matches if the given method declaration is pure.
|
||||
|
||||
Given
|
||||
class A {
|
||||
public:
|
||||
virtual void x() = 0;
|
||||
};
|
||||
matches A::x
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>></td><td class="name" onclick="toggle('isVirtual0')"><a name="isVirtual0Anchor">isVirtual</a></td><td></td></tr>
|
||||
<tr><td colspan="4" class="doc" id="isVirtual0"><pre>Matches if the given method declaration is virtual.
|
||||
|
||||
|
@ -2313,8 +2330,6 @@ The associated declaration is:
|
|||
|
||||
Also usable as Matcher<T> for any T supporting the getDecl() member
|
||||
function. e.g. various subtypes of clang::Type and various expressions.
|
||||
FIXME: Add all node types for which this is matcher is usable due to
|
||||
getDecl().
|
||||
|
||||
Usable as: 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_1DeclRefExpr.html">DeclRefExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>>,
|
||||
|
@ -2378,6 +2393,16 @@ with withInitializer matching (1)
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXForRangeStmt.html">CXXForRangeStmt</a>></td><td class="name" onclick="toggle('hasLoopVariable0')"><a name="hasLoopVariable0Anchor">hasLoopVariable</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasLoopVariable0"><pre>Matches the initialization statement of a for loop.
|
||||
|
||||
Example:
|
||||
forStmt(hasLoopVariable(anything()))
|
||||
matches 'int x' in
|
||||
for (int x : a) { }
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>></td><td class="name" onclick="toggle('on0')"><a name="on0Anchor">on</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="on0"><pre>Matches on the implicit object argument of a member call expression.
|
||||
|
||||
|
@ -2506,8 +2531,6 @@ The associated declaration is:
|
|||
|
||||
Also usable as Matcher<T> for any T supporting the getDecl() member
|
||||
function. e.g. various subtypes of clang::Type and various expressions.
|
||||
FIXME: Add all node types for which this is matcher is usable due to
|
||||
getDecl().
|
||||
|
||||
Usable as: 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_1DeclRefExpr.html">DeclRefExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>>,
|
||||
|
@ -2647,8 +2670,6 @@ The associated declaration is:
|
|||
|
||||
Also usable as Matcher<T> for any T supporting the getDecl() member
|
||||
function. e.g. various subtypes of clang::Type and various expressions.
|
||||
FIXME: Add all node types for which this is matcher is usable due to
|
||||
getDecl().
|
||||
|
||||
Usable as: 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_1DeclRefExpr.html">DeclRefExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>>,
|
||||
|
@ -2813,8 +2834,6 @@ The associated declaration is:
|
|||
|
||||
Also usable as Matcher<T> for any T supporting the getDecl() member
|
||||
function. e.g. various subtypes of clang::Type and various expressions.
|
||||
FIXME: Add all node types for which this is matcher is usable due to
|
||||
getDecl().
|
||||
|
||||
Usable as: 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_1DeclRefExpr.html">DeclRefExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>>,
|
||||
|
@ -3034,8 +3053,6 @@ The associated declaration is:
|
|||
|
||||
Also usable as Matcher<T> for any T supporting the getDecl() member
|
||||
function. e.g. various subtypes of clang::Type and various expressions.
|
||||
FIXME: Add all node types for which this is matcher is usable due to
|
||||
getDecl().
|
||||
|
||||
Usable as: 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_1DeclRefExpr.html">DeclRefExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>>,
|
||||
|
@ -3058,8 +3075,6 @@ The associated declaration is:
|
|||
|
||||
Also usable as Matcher<T> for any T supporting the getDecl() member
|
||||
function. e.g. various subtypes of clang::Type and various expressions.
|
||||
FIXME: Add all node types for which this is matcher is usable due to
|
||||
getDecl().
|
||||
|
||||
Usable as: 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_1DeclRefExpr.html">DeclRefExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>>,
|
||||
|
@ -3082,8 +3097,6 @@ The associated declaration is:
|
|||
|
||||
Also usable as Matcher<T> for any T supporting the getDecl() member
|
||||
function. e.g. various subtypes of clang::Type and various expressions.
|
||||
FIXME: Add all node types for which this is matcher is usable due to
|
||||
getDecl().
|
||||
|
||||
Usable as: 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_1DeclRefExpr.html">DeclRefExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>>,
|
||||
|
@ -3290,8 +3303,6 @@ The associated declaration is:
|
|||
|
||||
Also usable as Matcher<T> for any T supporting the getDecl() member
|
||||
function. e.g. various subtypes of clang::Type and various expressions.
|
||||
FIXME: Add all node types for which this is matcher is usable due to
|
||||
getDecl().
|
||||
|
||||
Usable as: 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_1DeclRefExpr.html">DeclRefExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>>,
|
||||
|
@ -3324,8 +3335,6 @@ The associated declaration is:
|
|||
|
||||
Also usable as Matcher<T> for any T supporting the getDecl() member
|
||||
function. e.g. various subtypes of clang::Type and various expressions.
|
||||
FIXME: Add all node types for which this is matcher is usable due to
|
||||
getDecl().
|
||||
|
||||
Usable as: 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_1DeclRefExpr.html">DeclRefExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>>,
|
||||
|
@ -3405,8 +3414,6 @@ The associated declaration is:
|
|||
|
||||
Also usable as Matcher<T> for any T supporting the getDecl() member
|
||||
function. e.g. various subtypes of clang::Type and various expressions.
|
||||
FIXME: Add all node types for which this is matcher is usable due to
|
||||
getDecl().
|
||||
|
||||
Usable as: 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_1DeclRefExpr.html">DeclRefExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>>,
|
||||
|
@ -3417,8 +3424,23 @@ Usable as: Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CallEx
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://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="http://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.
|
||||
|
||||
Given
|
||||
template<typename T> struct A {};
|
||||
struct B { B* next; };
|
||||
A<&B::next> a;
|
||||
templateSpecializationType(hasAnyTemplateArgument(
|
||||
isExpr(hasDescendant(declRefExpr(to(fieldDecl(hasName("next"))))))))
|
||||
matches the specialization A<&B::next> with fieldDecl(...) matching
|
||||
B::next
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>></td><td class="name" onclick="toggle('refersToDeclaration0')"><a name="refersToDeclaration0Anchor">refersToDeclaration</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="refersToDeclaration0"><pre>Matches a TemplateArgument that refers to a certain declaration.
|
||||
<tr><td colspan="4" class="doc" id="refersToDeclaration0"><pre>Matches a canonical TemplateArgument that refers to a certain
|
||||
declaration.
|
||||
|
||||
Given
|
||||
template<typename T> struct A {};
|
||||
|
@ -3444,6 +3466,20 @@ classTemplateSpecializationDecl(hasAnyTemplateArgument(
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>></td><td class="name" onclick="toggle('hasAnyTemplateArgument1')"><a name="hasAnyTemplateArgument1Anchor">hasAnyTemplateArgument</a></td><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasAnyTemplateArgument1"><pre>Matches classTemplateSpecializations that have at least one
|
||||
TemplateArgument matching the given InnerMatcher.
|
||||
|
||||
Given
|
||||
template<typename T> class A {};
|
||||
template<> class A<double> {};
|
||||
A<int> a;
|
||||
classTemplateSpecializationDecl(hasAnyTemplateArgument(
|
||||
refersToType(asString("int"))))
|
||||
matches the specialization A<int>
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</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="hasDeclaration3"><pre>Matches a node if the declaration associated with that node
|
||||
matches the given matcher.
|
||||
|
@ -3456,8 +3492,6 @@ The associated declaration is:
|
|||
|
||||
Also usable as Matcher<T> for any T supporting the getDecl() member
|
||||
function. e.g. various subtypes of clang::Type and various expressions.
|
||||
FIXME: Add all node types for which this is matcher is usable due to
|
||||
getDecl().
|
||||
|
||||
Usable as: 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_1DeclRefExpr.html">DeclRefExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>>,
|
||||
|
@ -3468,6 +3502,20 @@ Usable as: Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1CallEx
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>></td><td class="name" onclick="toggle('hasTemplateArgument1')"><a name="hasTemplateArgument1Anchor">hasTemplateArgument</a></td><td>unsigned N, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>> InnerMatcher</td></tr>
|
||||
<tr><td colspan="4" class="doc" id="hasTemplateArgument1"><pre>Matches classTemplateSpecializations where the n'th TemplateArgument
|
||||
matches the given InnerMatcher.
|
||||
|
||||
Given
|
||||
template<typename T, typename U> class A {};
|
||||
A<bool, int> b;
|
||||
A<int, bool> c;
|
||||
classTemplateSpecializationDecl(hasTemplateArgument(
|
||||
1, refersToType(asString("int"))))
|
||||
matches the specialization A<bool, int>
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</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="hasDeclaration2"><pre>Matches a node if the declaration associated with that node
|
||||
matches the given matcher.
|
||||
|
@ -3480,8 +3528,6 @@ The associated declaration is:
|
|||
|
||||
Also usable as Matcher<T> for any T supporting the getDecl() member
|
||||
function. e.g. various subtypes of clang::Type and various expressions.
|
||||
FIXME: Add all node types for which this is matcher is usable due to
|
||||
getDecl().
|
||||
|
||||
Usable as: 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_1DeclRefExpr.html">DeclRefExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>>,
|
||||
|
@ -3525,8 +3571,6 @@ The associated declaration is:
|
|||
|
||||
Also usable as Matcher<T> for any T supporting the getDecl() member
|
||||
function. e.g. various subtypes of clang::Type and various expressions.
|
||||
FIXME: Add all node types for which this is matcher is usable due to
|
||||
getDecl().
|
||||
|
||||
Usable as: 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_1DeclRefExpr.html">DeclRefExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>>,
|
||||
|
@ -3567,8 +3611,6 @@ The associated declaration is:
|
|||
|
||||
Also usable as Matcher<T> for any T supporting the getDecl() member
|
||||
function. e.g. various subtypes of clang::Type and various expressions.
|
||||
FIXME: Add all node types for which this is matcher is usable due to
|
||||
getDecl().
|
||||
|
||||
Usable as: 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_1DeclRefExpr.html">DeclRefExpr</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>>, Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>>,
|
||||
|
|
|
@ -242,12 +242,17 @@ def act_on_decl(declaration, comment, allowed_types):
|
|||
|
||||
# Parse Variadic operator matchers.
|
||||
m = re.match(
|
||||
r"""^.*VariadicOperatorMatcherFunc\s*([a-zA-Z]*)\s*=\s*{.*};$""",
|
||||
r"""^.*VariadicOperatorMatcherFunc\s*<\s*([^,]+),\s*([^\s>]+)\s*>\s*
|
||||
([a-zA-Z]*)\s*=\s*{.*};$""",
|
||||
declaration, flags=re.X)
|
||||
if m:
|
||||
name = m.groups()[0]
|
||||
add_matcher('*', name, 'Matcher<*>, ..., Matcher<*>', comment)
|
||||
return
|
||||
min_args, max_args, name = m.groups()[:3]
|
||||
if max_args == '1':
|
||||
add_matcher('*', name, 'Matcher<*>', comment)
|
||||
return
|
||||
elif max_args == 'UINT_MAX':
|
||||
add_matcher('*', name, 'Matcher<*>, ..., Matcher<*>', comment)
|
||||
return
|
||||
|
||||
|
||||
# Parse free standing matcher functions, like:
|
||||
|
|
|
@ -311,18 +311,6 @@ AST_MATCHER(Decl, isPrivate) {
|
|||
return Node.getAccess() == AS_private;
|
||||
}
|
||||
|
||||
// FIXME: unify ClassTemplateSpecializationDecl and TemplateSpecializationType's
|
||||
// APIs for accessing the template argument list.
|
||||
inline llvm::ArrayRef<TemplateArgument>
|
||||
getTemplateSpecializationArgs(const ClassTemplateSpecializationDecl &D) {
|
||||
return D.getTemplateArgs().asArray();
|
||||
}
|
||||
|
||||
inline llvm::ArrayRef<TemplateArgument>
|
||||
getTemplateSpecializationArgs(const TemplateSpecializationType &T) {
|
||||
return llvm::ArrayRef<TemplateArgument>(T.getArgs(), T.getNumArgs());
|
||||
}
|
||||
|
||||
/// \brief Matches classTemplateSpecializations that have at least one
|
||||
/// TemplateArgument matching the given InnerMatcher.
|
||||
///
|
||||
|
@ -340,7 +328,8 @@ AST_POLYMORPHIC_MATCHER_P(
|
|||
AST_POLYMORPHIC_SUPPORTED_TYPES_2(ClassTemplateSpecializationDecl,
|
||||
TemplateSpecializationType),
|
||||
internal::Matcher<TemplateArgument>, InnerMatcher) {
|
||||
llvm::ArrayRef<TemplateArgument> List = getTemplateSpecializationArgs(Node);
|
||||
llvm::ArrayRef<TemplateArgument> List =
|
||||
internal::getTemplateSpecializationArgs(Node);
|
||||
return matchesFirstInRange(InnerMatcher, List.begin(), List.end(), Finder,
|
||||
Builder);
|
||||
}
|
||||
|
@ -439,7 +428,8 @@ AST_POLYMORPHIC_MATCHER_P2(
|
|||
AST_POLYMORPHIC_SUPPORTED_TYPES_2(ClassTemplateSpecializationDecl,
|
||||
TemplateSpecializationType),
|
||||
unsigned, N, internal::Matcher<TemplateArgument>, InnerMatcher) {
|
||||
llvm::ArrayRef<TemplateArgument> List = getTemplateSpecializationArgs(Node);
|
||||
llvm::ArrayRef<TemplateArgument> List =
|
||||
internal::getTemplateSpecializationArgs(Node);
|
||||
if (List.size() <= N)
|
||||
return false;
|
||||
return InnerMatcher.matches(List[N], Finder, Builder);
|
||||
|
@ -2320,16 +2310,6 @@ AST_POLYMORPHIC_MATCHER_P(
|
|||
InnerMatcher.matches(*Condition, Finder, Builder));
|
||||
}
|
||||
|
||||
namespace internal {
|
||||
struct NotEqualsBoundNodePredicate {
|
||||
bool operator()(const internal::BoundNodesMap &Nodes) const {
|
||||
return Nodes.getNode(ID) != Node;
|
||||
}
|
||||
std::string ID;
|
||||
ast_type_traits::DynTypedNode Node;
|
||||
};
|
||||
} // namespace internal
|
||||
|
||||
/// \brief Matches if a node equals a previously bound node.
|
||||
///
|
||||
/// Matches a node if it equals the node previously bound to \p ID.
|
||||
|
|
|
@ -1579,6 +1579,26 @@ TypeTraversePolymorphicMatcher<
|
|||
return Self(InnerMatchers);
|
||||
}
|
||||
|
||||
// FIXME: unify ClassTemplateSpecializationDecl and TemplateSpecializationType's
|
||||
// APIs for accessing the template argument list.
|
||||
inline llvm::ArrayRef<TemplateArgument>
|
||||
getTemplateSpecializationArgs(const ClassTemplateSpecializationDecl &D) {
|
||||
return D.getTemplateArgs().asArray();
|
||||
}
|
||||
|
||||
inline llvm::ArrayRef<TemplateArgument>
|
||||
getTemplateSpecializationArgs(const TemplateSpecializationType &T) {
|
||||
return llvm::ArrayRef<TemplateArgument>(T.getArgs(), T.getNumArgs());
|
||||
}
|
||||
|
||||
struct NotEqualsBoundNodePredicate {
|
||||
bool operator()(const internal::BoundNodesMap &Nodes) const {
|
||||
return Nodes.getNode(ID) != Node;
|
||||
}
|
||||
std::string ID;
|
||||
ast_type_traits::DynTypedNode Node;
|
||||
};
|
||||
|
||||
} // end namespace internal
|
||||
} // end namespace ast_matchers
|
||||
} // end namespace clang
|
||||
|
|
Loading…
Reference in New Issue