当一个Clang AST节点有多个父节点时?

当一个Clang AST节点有多个父节点时?,clang,libtooling,Clang,Libtooling,类clang::ASTContext有一个方法: DynTypedNodeList getParents(const NodeT &Node) 它返回给定AST节点的父节点列表 通常作为树的AST将是树结构,但出于某些原因(可能是性能原因),Clang允许节点具有多个父节点 在什么条件下(C++源代码模式),GETPARTENS()将返回多个父级?原始答案(不正确) AST是一棵树,每个节点只有一个父节点getParents不仅返回父级,还返回父级的父级,依此类推。因此,事实上,函数应

类clang::ASTContext有一个方法:

DynTypedNodeList getParents(const NodeT &Node)
它返回给定AST节点的父节点列表

通常作为树的AST将是树结构,但出于某些原因(可能是性能原因),Clang允许节点具有多个父节点

在什么条件下(C++源代码模式),GETPARTENS()将返回多个父级?

原始答案(不正确) AST是一棵树,每个节点只有一个父节点<但是,code>getParents不仅返回父级,还返回父级的父级,依此类推。因此,事实上,函数应该更好地命名为
get祖先

最新答案 原来的答案确实不正确,
getParents
为绝大多数AST节点只返回一个节点。以下是来自
clangtidy
的评论,涵盖了以下主题:

Stmt有多个父代的情况很少见,但确实发生在我们感兴趣的AST部分。具体地说,initListXPR节点导致ASTContext::getParent()为其子树中的某些节点返回多个父节点,因为RecursiveASTVisitor访问initListXPR的语法和语义形式,并且这两种形式之间的父子关系不同


也许还有其他节点,但我找不到相关信息。

很好,现在你可以得到27美元,我可以得到1个否决票加2个选择票,现在我又回到了一个从未否决过的状态。现有答案只提供了1个示例,需要更多关于更多示例的答案。