ziqingluo-90 added a comment.

In D138329#3938351 <https://reviews.llvm.org/D138329#3938351>, @xazax.hun wrote:

> Is the problem `forEachDescendant` matching statements inside blocks and 
> lambdas? I wonder if this behavior would surprise people, so I think it would 
> be better to:
>
> - Potentially add a template bool parameter to `forEachDescendant` 
> controlling this behavior.
> - Review existing uses because I am not entirely sure if the current behavior 
> is the right default.

Let me try to describe the problem in more detail.   The goal is to recursively 
visit every descendant of a node `n` but skip all nested callable declarations 
in `n`.  With `forEachDescendant`, one needs to explicitly test and skip, using 
`forCallable`,  if a descendant does not belong to the same "callable" as `n`.  
`forCallable` looks for ancestors of a node through the AST so it requires the 
AST to be complete.  But in our case, the AST is under construction.   Given a 
node, we want the visitor only strictly look at descendants of the node.

For the questions,  I think blocks and lambdas are the only cases we will have 
in analyzing "C/C++" + "blocks" programs.   Our plan is to generalize this 
matcher to be an optional mode of `forEachDescendant` once it becomes stable.  
So this implementation also skips other declarations.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138329/new/

https://reviews.llvm.org/D138329

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to