diff options
Diffstat (limited to 'contrib/llvm/tools/clang/include/clang/AST/TypeLocVisitor.h')
-rw-r--r-- | contrib/llvm/tools/clang/include/clang/AST/TypeLocVisitor.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/contrib/llvm/tools/clang/include/clang/AST/TypeLocVisitor.h b/contrib/llvm/tools/clang/include/clang/AST/TypeLocVisitor.h new file mode 100644 index 0000000..50fc439 --- /dev/null +++ b/contrib/llvm/tools/clang/include/clang/AST/TypeLocVisitor.h @@ -0,0 +1,62 @@ +//===--- TypeLocVisitor.h - Visitor for TypeLoc subclasses ------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines the TypeLocVisitor interface. +// +//===----------------------------------------------------------------------===// +#ifndef LLVM_CLANG_AST_TYPELOCVISITOR_H +#define LLVM_CLANG_AST_TYPELOCVISITOR_H + +#include "clang/AST/TypeLoc.h" +#include "clang/AST/TypeVisitor.h" +#include "llvm/Support/ErrorHandling.h" + +namespace clang { + +#define DISPATCH(CLASSNAME) \ + return static_cast<ImplClass*>(this)-> \ + Visit##CLASSNAME(cast<CLASSNAME>(TyLoc)) + +template<typename ImplClass, typename RetTy=void> +class TypeLocVisitor { +public: + RetTy Visit(TypeLoc TyLoc) { + switch (TyLoc.getTypeLocClass()) { +#define ABSTRACT_TYPELOC(CLASS, PARENT) +#define TYPELOC(CLASS, PARENT) \ + case TypeLoc::CLASS: DISPATCH(CLASS##TypeLoc); +#include "clang/AST/TypeLocNodes.def" + } + llvm_unreachable("unexpected type loc class!"); + } + + RetTy Visit(UnqualTypeLoc TyLoc) { + switch (TyLoc.getTypeLocClass()) { +#define ABSTRACT_TYPELOC(CLASS, PARENT) +#define TYPELOC(CLASS, PARENT) \ + case TypeLoc::CLASS: DISPATCH(CLASS##TypeLoc); +#include "clang/AST/TypeLocNodes.def" + } + llvm_unreachable("unexpected type loc class!"); + } + +#define TYPELOC(CLASS, PARENT) \ + RetTy Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \ + DISPATCH(PARENT); \ + } +#include "clang/AST/TypeLocNodes.def" + + RetTy VisitTypeLoc(TypeLoc TyLoc) { return RetTy(); } +}; + +#undef DISPATCH + +} // end namespace clang + +#endif // LLVM_CLANG_AST_TYPELOCVISITOR_H |