зеркало из https://github.com/microsoft/clang-1.git
Pull TypeLocVisitor into its own header file.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83112 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
b11688485a
Коммит
0c411806d5
|
@ -15,7 +15,6 @@
|
|||
#define LLVM_CLANG_AST_TYPELOC_H
|
||||
|
||||
#include "clang/AST/Type.h"
|
||||
#include "clang/AST/TypeVisitor.h"
|
||||
|
||||
namespace clang {
|
||||
class ParmVarDecl;
|
||||
|
@ -534,41 +533,6 @@ public:
|
|||
static bool classof(const ArrayLoc *TL) { return true; }
|
||||
};
|
||||
|
||||
#define DISPATCH(CLASS) \
|
||||
return static_cast<ImplClass*>(this)->Visit ## CLASS(cast<CLASS>(TyLoc))
|
||||
|
||||
template<typename ImplClass, typename RetTy=void>
|
||||
class TypeLocVisitor {
|
||||
class TypeDispatch : public TypeVisitor<TypeDispatch, RetTy> {
|
||||
ImplClass *Impl;
|
||||
TypeLoc TyLoc;
|
||||
|
||||
public:
|
||||
TypeDispatch(ImplClass *impl, TypeLoc &tyLoc) : Impl(impl), TyLoc(tyLoc) { }
|
||||
#define ABSTRACT_TYPELOC(CLASS)
|
||||
#define TYPELOC(CLASS, PARENT, TYPE) \
|
||||
RetTy Visit##TYPE(TYPE *) { \
|
||||
return Impl->Visit##CLASS(reinterpret_cast<CLASS&>(TyLoc)); \
|
||||
}
|
||||
#include "clang/AST/TypeLocNodes.def"
|
||||
};
|
||||
|
||||
public:
|
||||
RetTy Visit(TypeLoc TyLoc) {
|
||||
TypeDispatch TD(static_cast<ImplClass*>(this), TyLoc);
|
||||
return TD.Visit(TyLoc.getSourceType().getTypePtr());
|
||||
}
|
||||
|
||||
#define TYPELOC(CLASS, PARENT, TYPE) RetTy Visit##CLASS(CLASS TyLoc) { \
|
||||
DISPATCH(PARENT); \
|
||||
}
|
||||
#include "clang/AST/TypeLocNodes.def"
|
||||
|
||||
RetTy VisitTypeLoc(TypeLoc TyLoc) { return RetTy(); }
|
||||
};
|
||||
|
||||
#undef DISPATCH
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
//===--- 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"
|
||||
|
||||
namespace clang {
|
||||
|
||||
#define DISPATCH(CLASS) \
|
||||
return static_cast<ImplClass*>(this)->Visit ## CLASS(cast<CLASS>(TyLoc))
|
||||
|
||||
template<typename ImplClass, typename RetTy=void>
|
||||
class TypeLocVisitor {
|
||||
class TypeDispatch : public TypeVisitor<TypeDispatch, RetTy> {
|
||||
ImplClass *Impl;
|
||||
TypeLoc TyLoc;
|
||||
|
||||
public:
|
||||
TypeDispatch(ImplClass *impl, TypeLoc &tyLoc) : Impl(impl), TyLoc(tyLoc) { }
|
||||
#define ABSTRACT_TYPELOC(CLASS)
|
||||
#define TYPELOC(CLASS, PARENT, TYPE) \
|
||||
RetTy Visit##TYPE(TYPE *) { \
|
||||
return Impl->Visit##CLASS(reinterpret_cast<CLASS&>(TyLoc)); \
|
||||
}
|
||||
#include "clang/AST/TypeLocNodes.def"
|
||||
};
|
||||
|
||||
public:
|
||||
RetTy Visit(TypeLoc TyLoc) {
|
||||
TypeDispatch TD(static_cast<ImplClass*>(this), TyLoc);
|
||||
return TD.Visit(TyLoc.getSourceType().getTypePtr());
|
||||
}
|
||||
|
||||
#define TYPELOC(CLASS, PARENT, TYPE) RetTy Visit##CLASS(CLASS 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
|
|
@ -11,7 +11,7 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "clang/AST/TypeLoc.h"
|
||||
#include "clang/AST/TypeLocVisitor.h"
|
||||
using namespace clang;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
#include "clang/AST/DeclVisitor.h"
|
||||
#include "clang/AST/DeclGroup.h"
|
||||
#include "clang/AST/Expr.h"
|
||||
#include "clang/AST/TypeLoc.h"
|
||||
#include "clang/AST/TypeLocVisitor.h"
|
||||
using namespace clang;
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#include "clang/Frontend/PCHWriter.h"
|
||||
#include "clang/AST/DeclVisitor.h"
|
||||
#include "clang/AST/Expr.h"
|
||||
#include "clang/AST/TypeLoc.h"
|
||||
#include "clang/AST/TypeLocVisitor.h"
|
||||
#include "llvm/Bitcode/BitstreamWriter.h"
|
||||
#include <cstdio>
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
#include "clang/AST/DeclVisitor.h"
|
||||
#include "clang/AST/StmtVisitor.h"
|
||||
#include "clang/AST/TypeLoc.h"
|
||||
#include "clang/AST/TypeLocVisitor.h"
|
||||
|
||||
namespace clang {
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
#include "clang/Index/Utils.h"
|
||||
#include "clang/Index/ASTLocation.h"
|
||||
#include "clang/AST/TypeLoc.h"
|
||||
#include "clang/AST/TypeLocVisitor.h"
|
||||
#include "clang/AST/DeclVisitor.h"
|
||||
#include "clang/AST/StmtVisitor.h"
|
||||
#include "clang/Lex/Lexer.h"
|
||||
|
|
Загрузка…
Ссылка в новой задаче