зеркало из 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
|
#define LLVM_CLANG_AST_TYPELOC_H
|
||||||
|
|
||||||
#include "clang/AST/Type.h"
|
#include "clang/AST/Type.h"
|
||||||
#include "clang/AST/TypeVisitor.h"
|
|
||||||
|
|
||||||
namespace clang {
|
namespace clang {
|
||||||
class ParmVarDecl;
|
class ParmVarDecl;
|
||||||
|
@ -534,41 +533,6 @@ public:
|
||||||
static bool classof(const ArrayLoc *TL) { return true; }
|
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
|
#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;
|
using namespace clang;
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
#include "clang/AST/DeclVisitor.h"
|
#include "clang/AST/DeclVisitor.h"
|
||||||
#include "clang/AST/DeclGroup.h"
|
#include "clang/AST/DeclGroup.h"
|
||||||
#include "clang/AST/Expr.h"
|
#include "clang/AST/Expr.h"
|
||||||
#include "clang/AST/TypeLoc.h"
|
#include "clang/AST/TypeLocVisitor.h"
|
||||||
using namespace clang;
|
using namespace clang;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#include "clang/Frontend/PCHWriter.h"
|
#include "clang/Frontend/PCHWriter.h"
|
||||||
#include "clang/AST/DeclVisitor.h"
|
#include "clang/AST/DeclVisitor.h"
|
||||||
#include "clang/AST/Expr.h"
|
#include "clang/AST/Expr.h"
|
||||||
#include "clang/AST/TypeLoc.h"
|
#include "clang/AST/TypeLocVisitor.h"
|
||||||
#include "llvm/Bitcode/BitstreamWriter.h"
|
#include "llvm/Bitcode/BitstreamWriter.h"
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
#include "clang/AST/DeclVisitor.h"
|
#include "clang/AST/DeclVisitor.h"
|
||||||
#include "clang/AST/StmtVisitor.h"
|
#include "clang/AST/StmtVisitor.h"
|
||||||
#include "clang/AST/TypeLoc.h"
|
#include "clang/AST/TypeLocVisitor.h"
|
||||||
|
|
||||||
namespace clang {
|
namespace clang {
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
#include "clang/Index/Utils.h"
|
#include "clang/Index/Utils.h"
|
||||||
#include "clang/Index/ASTLocation.h"
|
#include "clang/Index/ASTLocation.h"
|
||||||
#include "clang/AST/TypeLoc.h"
|
#include "clang/AST/TypeLocVisitor.h"
|
||||||
#include "clang/AST/DeclVisitor.h"
|
#include "clang/AST/DeclVisitor.h"
|
||||||
#include "clang/AST/StmtVisitor.h"
|
#include "clang/AST/StmtVisitor.h"
|
||||||
#include "clang/Lex/Lexer.h"
|
#include "clang/Lex/Lexer.h"
|
||||||
|
|
Загрузка…
Ссылка в новой задаче