Author: steveire Date: Sun Dec 2 09:30:34 2018 New Revision: 348100 URL: http://llvm.org/viewvc/llvm-project?rev=348100&view=rev Log: Extend the CommentVisitor with parameter types
Summary: This has precedent in the StmtVisitor. This change will make it possible to clean up the comment handling in ASTDumper. Reviewers: aaron.ballman Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D55069 Modified: cfe/trunk/include/clang/AST/CommentVisitor.h Modified: cfe/trunk/include/clang/AST/CommentVisitor.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/CommentVisitor.h?rev=348100&r1=348099&r2=348100&view=diff ============================================================================== --- cfe/trunk/include/clang/AST/CommentVisitor.h (original) +++ cfe/trunk/include/clang/AST/CommentVisitor.h Sun Dec 2 09:30:34 2018 @@ -19,14 +19,16 @@ namespace comments { template <typename T> struct make_ptr { using type = T *; }; template <typename T> struct make_const_ptr { using type = const T *; }; -template<template <typename> class Ptr, typename ImplClass, typename RetTy=void> +template <template <typename> class Ptr, typename ImplClass, + typename RetTy = void, class... ParamTys> class CommentVisitorBase { public: #define PTR(CLASS) typename Ptr<CLASS>::type -#define DISPATCH(NAME, CLASS) \ - return static_cast<ImplClass*>(this)->visit ## NAME(static_cast<PTR(CLASS)>(C)) +#define DISPATCH(NAME, CLASS) \ + return static_cast<ImplClass *>(this)->visit##NAME( \ + static_cast<PTR(CLASS)>(C), std::forward<ParamTys>(P)...) - RetTy visit(PTR(Comment) C) { + RetTy visit(PTR(Comment) C, ParamTys... P) { if (!C) return RetTy(); @@ -44,25 +46,26 @@ public: // If the derived class does not implement a certain Visit* method, fall back // on Visit* method for the superclass. #define ABSTRACT_COMMENT(COMMENT) COMMENT -#define COMMENT(CLASS, PARENT) \ - RetTy visit ## CLASS(PTR(CLASS) C) { DISPATCH(PARENT, PARENT); } +#define COMMENT(CLASS, PARENT) \ + RetTy visit##CLASS(PTR(CLASS) C, ParamTys... P) { DISPATCH(PARENT, PARENT); } #include "clang/AST/CommentNodes.inc" #undef ABSTRACT_COMMENT #undef COMMENT - RetTy visitComment(PTR(Comment) C) { return RetTy(); } + RetTy visitComment(PTR(Comment) C, ParamTys... P) { return RetTy(); } #undef PTR #undef DISPATCH }; -template<typename ImplClass, typename RetTy=void> -class CommentVisitor : - public CommentVisitorBase<make_ptr, ImplClass, RetTy> {}; - -template<typename ImplClass, typename RetTy=void> -class ConstCommentVisitor : - public CommentVisitorBase<make_const_ptr, ImplClass, RetTy> {}; +template <typename ImplClass, typename RetTy = void, class... ParamTys> +class CommentVisitor + : public CommentVisitorBase<make_ptr, ImplClass, RetTy, ParamTys...> {}; + +template <typename ImplClass, typename RetTy = void, class... ParamTys> +class ConstCommentVisitor + : public CommentVisitorBase<make_const_ptr, ImplClass, RetTy, ParamTys...> { +}; } // namespace comments } // namespace clang _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits