12 #ifndef ROOT_TClingClassInfo
13 #define ROOT_TClingClassInfo
35 #include "llvm/ADT/DenseMap.h"
43 class FunctionTemplateDecl;
48 namespace TMetaUtils {
49 class TNormalizedCtxt;
53 extern "C" typedef ptrdiff_t (*OffsetPtrFunc_t)(
void*, bool);
55 class TClingClassInfo final :
public TClingDeclInfo {
59 cling::Interpreter *fInterp;
64 clang::DeclContext::decl_iterator fIter;
65 const clang::Type *fType;
66 std::vector<clang::DeclContext::decl_iterator> fIterStack;
68 std::string fDeclFileName;
69 llvm::DenseMap<const clang::Decl*, std::pair<ptrdiff_t, OffsetPtrFunc_t> > fOffsetCache;
71 explicit TClingClassInfo() =
delete;
72 TClingClassInfo &operator=(
const TClingClassInfo &) =
delete;
75 enum EInheritanceMode {
82 explicit TClingClassInfo(cling::Interpreter *, Bool_t all = kTRUE);
83 explicit TClingClassInfo(cling::Interpreter *,
const char *);
84 explicit TClingClassInfo(cling::Interpreter *,
const clang::Type &);
85 explicit TClingClassInfo(cling::Interpreter *,
const clang::Decl *);
86 void AddBaseOffsetFunction(
const clang::Decl* decl, OffsetPtrFunc_t func) { fOffsetCache[decl] = std::make_pair(0L, func); }
87 void AddBaseOffsetValue(
const clang::Decl* decl, ptrdiff_t offset);
88 long ClassProperty()
const;
89 void Delete(
void *arena,
const ROOT::TMetaUtils::TNormalizedCtxt &normCtxt)
const;
90 void DeleteArray(
void *arena,
bool dtorOnly,
const ROOT::TMetaUtils::TNormalizedCtxt &normCtxt)
const;
91 void Destruct(
void *arena,
const ROOT::TMetaUtils::TNormalizedCtxt &normCtxt)
const;
92 const clang::ValueDecl *GetDataMember(
const char *name)
const;
93 void SetDecl(
const clang::Decl* D) {
98 TDictionary::DeclId_t GetDeclId()
const {
101 return (
const clang::Decl*)(fDecl->getCanonicalDecl());
103 const clang::FunctionTemplateDecl *GetFunctionTemplate(
const char *fname)
const;
104 TClingMethodInfo GetMethod(
const char *fname)
const;
105 TClingMethodInfo GetMethod(
const char *fname,
const char *proto,
106 long *poffset, ROOT::EFunctionMatchMode mode = ROOT::kConversionMatch,
107 EInheritanceMode imode = kWithInheritance)
const;
108 TClingMethodInfo GetMethodWithArgs(
const char *fname,
const char *arglist,
109 long *poffset, ROOT::EFunctionMatchMode mode = ROOT::kConversionMatch,
110 EInheritanceMode imode = kWithInheritance)
const;
111 TClingMethodInfo GetMethod(
const char *fname,
const char *proto,
bool objectIsConst,
112 long *poffset, ROOT::EFunctionMatchMode mode = ROOT::kConversionMatch,
113 EInheritanceMode imode = kWithInheritance)
const;
114 TClingMethodInfo GetMethodWithArgs(
const char *fname,
const char *arglist,
bool objectIsConst,
115 long *poffset, ROOT::EFunctionMatchMode mode = ROOT::kConversionMatch,
116 EInheritanceMode imode = kWithInheritance)
const;
117 TClingMethodInfo GetMethod(
const char *fname,
const llvm::SmallVectorImpl<clang::QualType> &proto,
118 long *poffset, ROOT::EFunctionMatchMode mode = ROOT::kConversionMatch,
119 EInheritanceMode imode = kWithInheritance)
const;
120 TClingMethodInfo GetMethod(
const char *fname,
const llvm::SmallVectorImpl<clang::QualType> &proto,
bool objectIsConst,
121 long *poffset, ROOT::EFunctionMatchMode mode = ROOT::kConversionMatch,
122 EInheritanceMode imode = kWithInheritance)
const;
123 int GetMethodNArg(
const char *method,
const char *proto, Bool_t objectIsConst, ROOT::EFunctionMatchMode mode = ROOT::kConversionMatch)
const;
124 long GetOffset(
const clang::CXXMethodDecl* md)
const;
125 ptrdiff_t GetBaseOffset(TClingClassInfo* toBase,
void* address,
bool isDerivedObject);
126 const clang::Type *GetType()
const {
return fType; }
127 std::vector<std::string> GetUsingNamespaces();
128 bool HasDefaultConstructor()
const;
129 bool HasMethod(
const char *name)
const;
130 void Init(
const char *name);
131 void Init(
const clang::Decl*);
132 void Init(
int tagnum);
133 void Init(
const clang::Type &);
134 bool IsBase(
const char *name)
const;
135 static bool IsEnum(cling::Interpreter *interp,
const char *name);
136 bool IsScopedEnum()
const;
137 EDataType GetUnderlyingType()
const;
138 bool IsLoaded()
const;
139 bool IsValidMethod(
const char *method,
const char *proto, Bool_t objectIsConst,
long *offset, ROOT::EFunctionMatchMode mode = ROOT::kConversionMatch)
const;
142 void *New(
const ROOT::TMetaUtils::TNormalizedCtxt &normCtxt)
const;
143 void *New(
int n,
const ROOT::TMetaUtils::TNormalizedCtxt &normCtxt)
const;
144 void *New(
int n,
void *arena,
const ROOT::TMetaUtils::TNormalizedCtxt &normCtxt)
const;
145 void *New(
void *arena,
const ROOT::TMetaUtils::TNormalizedCtxt &normCtxt)
const;
146 long Property()
const;
147 int RootFlag()
const;
150 const char *FileName();
151 void FullName(std::string &output,
const ROOT::TMetaUtils::TNormalizedCtxt &normCtxt)
const;
153 const char *TmpltName()
const;
157 #endif // ROOT_TClingClassInfo