12 #ifndef ROOT_TClingDataMemberInfo
13 #define ROOT_TClingDataMemberInfo
33 #include "cling/Interpreter/Interpreter.h"
35 #include "clang/AST/ASTContext.h"
36 #include "clang/AST/Decl.h"
37 #include "clang/Frontend/CompilerInstance.h"
48 namespace TMetaUtils {
49 class TNormalizedCtxt;
53 class TClingClassInfo;
55 class TClingDataMemberInfo final :
public TClingDeclInfo {
59 cling::Interpreter *fInterp;
60 TClingClassInfo *fClassInfo;
62 clang::DeclContext::decl_iterator fIter;
63 std::vector<clang::DeclContext::decl_iterator> fIterStack;
66 llvm::SmallVector<clang::DeclContext *, 2> fContexts;
68 unsigned int fContextIdx;
69 mutable std::string fIoType;
70 mutable std::string fIoName;
76 inline void CheckForIoTypeAndName ()
const;
80 ~TClingDataMemberInfo() {
delete fClassInfo; }
82 explicit TClingDataMemberInfo(cling::Interpreter *interp)
83 : TClingDeclInfo(nullptr), fInterp(interp), fClassInfo(0), fFirstTime(true), fContextIdx(0U)
85 fClassInfo =
new TClingClassInfo(fInterp);
86 fIter = fInterp->getCI()->getASTContext().getTranslationUnitDecl()->decls_begin();
91 TClingDataMemberInfo(cling::Interpreter *, TClingClassInfo *);
95 TClingDataMemberInfo(cling::Interpreter *,
const clang::ValueDecl *, TClingClassInfo *);
97 TClingDataMemberInfo(
const TClingDataMemberInfo &rhs):
98 TClingDeclInfo(rhs), fContextIdx(0)
100 fInterp = rhs.fInterp;
101 fClassInfo =
new TClingClassInfo(*rhs.fClassInfo);
102 fFirstTime = rhs.fFirstTime;
104 fIterStack = rhs.fIterStack;
105 fContexts = rhs.fContexts;
106 fContextIdx = rhs.fContextIdx;
109 TClingDataMemberInfo &operator=(
const TClingDataMemberInfo &rhs)
112 fInterp = rhs.fInterp;
114 fClassInfo =
new TClingClassInfo(*rhs.fClassInfo);
115 fFirstTime = rhs.fFirstTime;
117 fIterStack = rhs.fIterStack;
118 fContexts = rhs.fContexts;
119 fContextIdx = rhs.fContextIdx;
124 typedef TDictionary::DeclId_t DeclId_t;
126 int ArrayDim()
const;
127 TClingClassInfo *GetClassInfo()
const {
return fClassInfo; }
128 const clang::Decl *GetDecl()
const override {
129 if (
const clang::Decl* SingleDecl = TClingDeclInfo::GetDecl())
133 DeclId_t GetDeclId()
const;
134 int MaxIndex(
int dim)
const;
136 bool Next() {
return InternalNext(); }
138 long Property()
const;
139 long TypeProperty()
const;
140 int TypeSize()
const;
141 const char *TypeName()
const;
142 const char *TypeTrueName(
const ROOT::TMetaUtils::TNormalizedCtxt &normCtxt)
const;
143 const char *Name()
override;
145 llvm::StringRef ValidArrayIndex()
const;
149 #endif // ROOT_TClingDataMemberInfo