[PATCH] D80603: add isAtPosition narrowing matcher for parmVarDecl
Vy Nguyen via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed May 27 11:56:37 PDT 2020
oontvoo added a comment.
In D80603#2057014 <https://reviews.llvm.org/D80603#2057014>, @aaron.ballman wrote:
> Does the `hasParameter()` matcher not already do this?
Yes, it does. But we'd like it to be able to match on the parmVarDecl().
================
Comment at: clang/include/clang/ASTMatchers/ASTMatchers.h:7018
+AST_MATCHER_P(clang::ParmVarDecl, isAtPosition, unsigned, N) {
+ return parmVarDecl(hasAncestor(functionDecl(
+ hasParameter(N, parmVarDecl().bind("this_decl")))),
----------------
ymandel wrote:
> I think that `hasAncestor` will keep going up the chain of ancestors if it fails the match on the first surrounding `functionDecl`. That could make this matcher very expensive. Why hasParent (or, whatever combination of `hasParent` and other matchers needed to precisely describe the immediately surrounding `functionDecl`)?
> Why [not] hasParent ?
The direct parent of the param is a TypeLoc, so I thought `hasAncestor()` was more convenient. But I've changed it to two nested `hasParent()` now.
================
Comment at: clang/include/clang/ASTMatchers/ASTMatchers.h:7022
+ .matches(Node, Finder, Builder);
+}
+
----------------
gribozavr2 wrote:
> Could you move it closer to other parameter-related matchers, maybe near the definition of `forEachArgumentWithParam`?
Moved it to after hasAncestor.
(Can't move to near forEachArgumentWithParam because that's before hasAncestor and hasParent, which are needed by this)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D80603/new/
https://reviews.llvm.org/D80603
More information about the cfe-commits
mailing list