================ @@ -0,0 +1,268 @@ +//===--- DynamicRecursiveASTVisitor.h - Virtual AST Visitor -----*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file defines the DynamicRecursiveASTVisitor interface, which acts +// identically to RecursiveASTVisitor, except that it uses virtual dispatch +// instead of CRTP, which greatly improves compile times and binary size. +// +// However, it also comes with limitations in that some of the more seldom +// utilised features of RecursiveASTVisitor are not supported. +// +// Prefer to use this over RecursiveASTVisitor whenever possible. +// +//===----------------------------------------------------------------------===// +#ifndef LLVM_CLANG_AST_DYNAMIC_RECURSIVE_AST_VISITOR_H +#define LLVM_CLANG_AST_DYNAMIC_RECURSIVE_AST_VISITOR_H + +#include "clang/AST/Attr.h" +#include "clang/AST/ExprConcepts.h" +#include "clang/AST/TypeLoc.h" + +namespace clang { +class ASTContext; + +/// Recursive AST visitor that supports extension via dynamic dispatch. +/// +/// This only supports some of the more common visitation operations; in +/// particular, it does not support overriding WalkUpFromX or post-order +/// traversal. +/// +/// Instead of functions (e.g. shouldVisitImplicitCode()), this class +/// uses member variables (e.g. ShouldVisitImplicitCode) to control +/// visitation behaviour. +/// +/// RAV features that are NOT supported: +/// +/// - Visiting attributes, ---------------- Sirraide wrote:
> What is the behavior when visiting an attribute? Ah, no, ‘not supported’ is supposed to mean that *overriding* them is not supported—I should probably make that a bit clearer in the comment. You can still use a DRAV to visit attributes just fine—you just can’t override what happens when one is visited (i.e. the default RAV implementation is called). https://github.com/llvm/llvm-project/pull/110040 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits