clang  6.0.0svn
TypeLocVisitor.h
Go to the documentation of this file.
1 //===--- TypeLocVisitor.h - Visitor for TypeLoc subclasses ------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines the TypeLocVisitor interface.
11 //
12 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_CLANG_AST_TYPELOCVISITOR_H
14 #define LLVM_CLANG_AST_TYPELOCVISITOR_H
15 
16 #include "clang/AST/TypeLoc.h"
17 #include "clang/AST/TypeVisitor.h"
18 #include "llvm/Support/ErrorHandling.h"
19 
20 namespace clang {
21 
22 #define DISPATCH(CLASSNAME) \
23  return static_cast<ImplClass*>(this)-> \
24  Visit##CLASSNAME(TyLoc.castAs<CLASSNAME>())
25 
26 template<typename ImplClass, typename RetTy=void>
28 public:
29  RetTy Visit(TypeLoc TyLoc) {
30  switch (TyLoc.getTypeLocClass()) {
31 #define ABSTRACT_TYPELOC(CLASS, PARENT)
32 #define TYPELOC(CLASS, PARENT) \
33  case TypeLoc::CLASS: DISPATCH(CLASS##TypeLoc);
34 #include "clang/AST/TypeLocNodes.def"
35  }
36  llvm_unreachable("unexpected type loc class!");
37  }
38 
39  RetTy Visit(UnqualTypeLoc TyLoc) {
40  switch (TyLoc.getTypeLocClass()) {
41 #define ABSTRACT_TYPELOC(CLASS, PARENT)
42 #define TYPELOC(CLASS, PARENT) \
43  case TypeLoc::CLASS: DISPATCH(CLASS##TypeLoc);
44 #include "clang/AST/TypeLocNodes.def"
45  }
46  llvm_unreachable("unexpected type loc class!");
47  }
48 
49 #define TYPELOC(CLASS, PARENT) \
50  RetTy Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc) { \
51  DISPATCH(PARENT); \
52  }
53 #include "clang/AST/TypeLocNodes.def"
54 
55  RetTy VisitTypeLoc(TypeLoc TyLoc) { return RetTy(); }
56 };
57 
58 #undef DISPATCH
59 
60 } // end namespace clang
61 
62 #endif // LLVM_CLANG_AST_TYPELOCVISITOR_H
RetTy Visit(TypeLoc TyLoc)
TypeLocClass getTypeLocClass() const
Definition: TypeLoc.h:238
Base wrapper for a particular "section" of type source info.
Definition: TypeLoc.h:40
Wrapper of type source information for a type with no direct qualifiers.
Definition: TypeLoc.h:229
Defines the clang::TypeLoc interface and its subclasses.
Dataflow Directional Tag Classes.
TypeLocClass getTypeLocClass() const
Definition: TypeLoc.h:97
RetTy Visit(UnqualTypeLoc TyLoc)
RetTy VisitTypeLoc(TypeLoc TyLoc)