mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 19:06:05 +00:00
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 llvm-svn: 348100
This commit is contained in:
parent
98cd41f928
commit
c767e40f47
@ -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... ParamTys>
|
||||
class CommentVisitor
|
||||
: public CommentVisitorBase<make_ptr, ImplClass, RetTy, ParamTys...> {};
|
||||
|
||||
template<typename ImplClass, typename RetTy=void>
|
||||
class ConstCommentVisitor :
|
||||
public CommentVisitorBase<make_const_ptr, ImplClass, RetTy> {};
|
||||
template <typename ImplClass, typename RetTy = void, class... ParamTys>
|
||||
class ConstCommentVisitor
|
||||
: public CommentVisitorBase<make_const_ptr, ImplClass, RetTy, ParamTys...> {
|
||||
};
|
||||
|
||||
} // namespace comments
|
||||
} // namespace clang
|
||||
|
Loading…
x
Reference in New Issue
Block a user