forked from OSchip/llvm-project
ASTMatchers: Bound node results are always const, make selectFirst's template argument implicitly const.
This avoids adding const to every user of selectFirst and also allows it to match TypeLocs which BoundNodes doesn't use magic const removal specializations for. No functionality change. llvm-svn: 213737
This commit is contained in:
parent
842355e900
commit
7664558efc
|
@ -210,16 +210,14 @@ match(MatcherT Matcher, const ast_type_traits::DynTypedNode &Node,
|
|||
///
|
||||
/// This is useful in combanation with \c match():
|
||||
/// \code
|
||||
/// Decl *D = selectFirst<Decl>("id", match(Matcher.bind("id"),
|
||||
/// Node, Context));
|
||||
/// const Decl *D = selectFirst<Decl>("id", match(Matcher.bind("id"),
|
||||
/// Node, Context));
|
||||
/// \endcode
|
||||
template <typename NodeT>
|
||||
NodeT *
|
||||
const NodeT *
|
||||
selectFirst(StringRef BoundTo, const SmallVectorImpl<BoundNodes> &Results) {
|
||||
for (SmallVectorImpl<BoundNodes>::const_iterator I = Results.begin(),
|
||||
E = Results.end();
|
||||
I != E; ++I) {
|
||||
if (NodeT *Node = I->getNodeAs<NodeT>(BoundTo))
|
||||
for (const BoundNodes &N : Results) {
|
||||
if (const NodeT *Node = N.getNodeAs<NodeT>(BoundTo))
|
||||
return Node;
|
||||
}
|
||||
return nullptr;
|
||||
|
|
|
@ -4163,8 +4163,8 @@ public:
|
|||
|
||||
virtual bool run(const BoundNodes *Nodes, ASTContext *Context) {
|
||||
const T *Node = Nodes->getNodeAs<T>(Id);
|
||||
return selectFirst<const T>(InnerId,
|
||||
match(InnerMatcher, *Node, *Context)) !=nullptr;
|
||||
return selectFirst<T>(InnerId, match(InnerMatcher, *Node, *Context)) !=
|
||||
nullptr;
|
||||
}
|
||||
private:
|
||||
std::string Id;
|
||||
|
@ -4221,7 +4221,7 @@ public:
|
|||
// Use the original typed pointer to verify we can pass pointers to subtypes
|
||||
// to equalsNode.
|
||||
const T *TypedNode = cast<T>(Node);
|
||||
return selectFirst<const T>(
|
||||
return selectFirst<T>(
|
||||
"", match(stmt(hasParent(
|
||||
stmt(has(stmt(equalsNode(TypedNode)))).bind(""))),
|
||||
*Node, Context)) != nullptr;
|
||||
|
@ -4230,7 +4230,7 @@ public:
|
|||
// Use the original typed pointer to verify we can pass pointers to subtypes
|
||||
// to equalsNode.
|
||||
const T *TypedNode = cast<T>(Node);
|
||||
return selectFirst<const T>(
|
||||
return selectFirst<T>(
|
||||
"", match(decl(hasParent(
|
||||
decl(has(decl(equalsNode(TypedNode)))).bind(""))),
|
||||
*Node, Context)) != nullptr;
|
||||
|
|
Loading…
Reference in New Issue