File indexing completed on 2025-12-15 10:30:05
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifndef ROOT_TInterpreter
0014 #define ROOT_TInterpreter
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 #include "TDataType.h"
0026 #include "TDictionary.h"
0027 #include "TInterpreterValue.h"
0028 #include "TNamed.h"
0029 #include "TVirtualRWMutex.h"
0030
0031 #include <map>
0032 #include <typeinfo>
0033 #include <vector>
0034 #include <string>
0035 #include <utility>
0036
0037 class TClass;
0038 class TEnv;
0039 class TFunction;
0040 class TMethod;
0041 class TObjArray;
0042 class TEnum;
0043 class TListOfEnums;
0044 class TSeqCollection;
0045
0046 R__EXTERN TVirtualMutex *gInterpreterMutex;
0047
0048 # define R__LOCKGUARD_CLING(mutex) ::ROOT::Internal::InterpreterMutexRegistrationRAII _R__UNIQUE_(R__guard)(mutex); { }
0049
0050 namespace ROOT {
0051 namespace Internal {
0052 struct InterpreterMutexRegistrationRAII {
0053 TLockGuard fLockGuard;
0054 InterpreterMutexRegistrationRAII(TVirtualMutex* mutex);
0055 ~InterpreterMutexRegistrationRAII();
0056 };
0057 }
0058 }
0059
0060 class TInterpreter : public TNamed {
0061
0062 protected:
0063 void Execute(TMethod *method, TObjArray *params, int *error = nullptr) override = 0;
0064 virtual Bool_t SetSuspendAutoParsing(Bool_t value) = 0;
0065
0066 friend class SuspendAutoParsing;
0067
0068 public:
0069
0070 typedef class std::map<std::string, std::string> MembersMap_t;
0071
0072 enum EErrorCode {
0073 kNoError = 0,
0074 kRecoverable = 1,
0075 kDangerous = 2,
0076 kFatal = 3,
0077 kProcessing = 99
0078 };
0079
0080 enum class EReturnType { kLong, kDouble, kString, kOther, kNoReturnType };
0081
0082 struct CallFuncIFacePtr_t {
0083 enum EKind {
0084 kUninitialized,
0085 kGeneric,
0086 kCtor,
0087 kDtor
0088 };
0089
0090 typedef void (*Generic_t)(void*, int, void**, void*);
0091 typedef void (*Ctor_t)(void**, void*, unsigned long);
0092 typedef void (*Dtor_t)(void*, unsigned long, int);
0093
0094 CallFuncIFacePtr_t():
0095 fKind(kUninitialized), fGeneric(nullptr) {}
0096 CallFuncIFacePtr_t(Generic_t func):
0097 fKind(kGeneric), fGeneric(func) {}
0098 CallFuncIFacePtr_t(Ctor_t func):
0099 fKind(kCtor), fCtor(func) {}
0100 CallFuncIFacePtr_t(Dtor_t func):
0101 fKind(kDtor), fDtor(func) {}
0102
0103 EKind fKind;
0104 union {
0105 Generic_t fGeneric;
0106 Ctor_t fCtor;
0107 Dtor_t fDtor;
0108 };
0109 };
0110
0111 class SuspendAutoParsing {
0112 TInterpreter *fInterp;
0113 Bool_t fPrevious;
0114 public:
0115 SuspendAutoParsing(TInterpreter *where, Bool_t value = kTRUE) : fInterp(where), fPrevious(fInterp->SetSuspendAutoParsing(value)) {}
0116 ~SuspendAutoParsing() { fInterp->SetSuspendAutoParsing(fPrevious); }
0117 };
0118 virtual Bool_t IsAutoParsingSuspended() const = 0;
0119
0120 class SuspendAutoLoadingRAII {
0121 TInterpreter *fInterp = nullptr;
0122 bool fOldValue;
0123
0124 public:
0125 SuspendAutoLoadingRAII(TInterpreter *interp) : fInterp(interp)
0126 {
0127 fOldValue = fInterp->SetClassAutoLoading(false);
0128 }
0129 ~SuspendAutoLoadingRAII() { fInterp->SetClassAutoLoading(fOldValue); }
0130 };
0131
0132 typedef int (*AutoLoadCallBack_t)(const char*);
0133 typedef std::vector<std::pair<std::string, int> > FwdDeclArgsToKeepCollection_t;
0134
0135 TInterpreter() { }
0136 TInterpreter(const char *name, const char *title = "Generic Interpreter");
0137 virtual ~TInterpreter() { }
0138
0139 virtual void AddIncludePath(const char *path) = 0;
0140 virtual void *SetAutoLoadCallBack(void* ) { return nullptr; }
0141 virtual void *GetAutoLoadCallBack() const { return nullptr; }
0142 virtual Int_t AutoLoad(const char *classname, Bool_t knowDictNotLoaded = kFALSE) = 0;
0143 virtual Int_t AutoLoad(const std::type_info& typeinfo, Bool_t knowDictNotLoaded = kFALSE) = 0;
0144 virtual Int_t AutoParse(const char* cls) = 0;
0145 virtual void ClearFileBusy() = 0;
0146 virtual void ClearStack() = 0;
0147 virtual Bool_t Declare(const char* code) = 0;
0148 virtual void EndOfLineAction() = 0;
0149 virtual TClass *GetClass(const std::type_info& typeinfo, Bool_t load) const = 0;
0150 virtual Int_t GetExitCode() const = 0;
0151 virtual TEnv *GetMapfile() const { return nullptr; }
0152
0153
0154 virtual Int_t GetMore() const = 0;
0155 virtual TClass *GenerateTClass(const char *classname, Bool_t emulation, Bool_t silent = kFALSE) = 0;
0156 virtual TClass *GenerateTClass(ClassInfo_t *classinfo, Bool_t silent = kFALSE) = 0;
0157 virtual Int_t GenerateDictionary(const char *classes, const char *includes = nullptr, const char *options = nullptr) = 0;
0158 virtual char *GetPrompt() = 0;
0159 virtual const char *GetSharedLibs() = 0;
0160 virtual const char *GetClassSharedLibs(const char *cls, bool skipCore = true) = 0;
0161 virtual const char *GetSharedLibDeps(const char *lib, bool tryDyld = false) = 0;
0162 virtual const char *GetIncludePath() = 0;
0163 virtual const char *GetSTLIncludePath() const { return ""; }
0164 virtual TObjArray *GetRootMapFiles() const = 0;
0165 virtual void Initialize() = 0;
0166 virtual void ShutDown() = 0;
0167 virtual void InspectMembers(TMemberInspector&, const void* obj, const TClass* cl, Bool_t isTransient) = 0;
0168 virtual Bool_t IsLoaded(const char *filename) const = 0;
0169 virtual Bool_t IsLibraryLoaded(const char *libname) const = 0;
0170 virtual bool IsValid() const = 0;
0171 virtual Bool_t HasPCMForLibrary(const char *libname) const = 0;
0172 virtual Int_t Load(const char *filenam, Bool_t system = kFALSE) = 0;
0173 virtual void LoadMacro(const char *filename, EErrorCode *error = nullptr) = 0;
0174 virtual Int_t LoadLibraryMap(const char *rootmapfile = nullptr) = 0;
0175 virtual Int_t RescanLibraryMap() = 0;
0176 virtual Int_t ReloadAllSharedLibraryMaps() = 0;
0177 virtual Int_t UnloadAllSharedLibraryMaps() = 0;
0178 virtual Int_t UnloadLibraryMap(const char *library) = 0;
0179 virtual Longptr_t ProcessLine(const char *line, EErrorCode *error = nullptr) = 0;
0180 virtual Longptr_t ProcessLineSynch(const char *line, EErrorCode *error = nullptr) = 0;
0181 virtual void PrintIntro() = 0;
0182 virtual bool RegisterPrebuiltModulePath(const std::string& FullPath,
0183 const std::string& ModuleMapName = "module.modulemap") const = 0;
0184 virtual void RegisterModule(const char* ,
0185 const char** ,
0186 const char** ,
0187 const char* ,
0188 const char* ,
0189 void (* )(),
0190 const FwdDeclArgsToKeepCollection_t& fwdDeclArgsToKeep,
0191 const char** classesHeaders,
0192 Bool_t lateRegistration = false,
0193 Bool_t hasCxxModule = false) = 0;
0194 virtual void AddAvailableIndentifiers(TSeqCollection&) = 0;
0195 virtual void RegisterTClassUpdate(TClass *oldcl,DictFuncPtr_t dict) = 0;
0196 virtual void UnRegisterTClassUpdate(const TClass *oldcl) = 0;
0197 virtual Int_t SetClassSharedLibs(const char *cls, const char *libs) = 0;
0198 virtual void SetGetline(const char*(*getlineFunc)(const char* prompt),
0199 void (*histaddFunc)(const char* line)) = 0;
0200 virtual void Reset() = 0;
0201 virtual void ResetAll() = 0;
0202 virtual void ResetGlobals() = 0;
0203 virtual void ResetGlobalVar(void *obj) = 0;
0204 virtual void RewindDictionary() = 0;
0205 virtual Int_t DeleteGlobal(void *obj) = 0;
0206 virtual Int_t DeleteVariable(const char* name) = 0;
0207 virtual void SaveContext() = 0;
0208 virtual void SaveGlobalsContext() = 0;
0209 virtual void UpdateListOfGlobals() = 0;
0210 virtual void UpdateListOfGlobalFunctions() = 0;
0211 virtual void UpdateListOfTypes() = 0;
0212 virtual void SetClassInfo(TClass *cl, Bool_t reload = kFALSE, Bool_t silent = kFALSE) = 0;
0213
0214 enum ECheckClassInfo {
0215 kUnknown = 0,
0216 kKnown = 1,
0217 kWithClassDefInline = 2
0218 };
0219 virtual ECheckClassInfo CheckClassInfo(const char *name, Bool_t autoload, Bool_t isClassOrNamespaceOnly = kFALSE) = 0;
0220
0221 virtual Bool_t CheckClassTemplate(const char *name) = 0;
0222 virtual Longptr_t Calc(const char *line, EErrorCode* error = nullptr) = 0;
0223 virtual void CreateListOfBaseClasses(TClass *cl) const = 0;
0224 virtual void CreateListOfDataMembers(TClass *cl) const = 0;
0225 virtual void CreateListOfMethods(TClass *cl) const = 0;
0226 virtual void CreateListOfMethodArgs(TFunction *m) const = 0;
0227 virtual void UpdateListOfMethods(TClass *cl) const = 0;
0228 virtual TString GetMangledName(TClass *cl, const char *method, const char *params, Bool_t objectIsConst = kFALSE) = 0;
0229 virtual TString GetMangledNameWithPrototype(TClass *cl, const char *method, const char *proto, Bool_t objectIsConst = kFALSE, ROOT::EFunctionMatchMode = ROOT::kConversionMatch) = 0;
0230 virtual void GetInterpreterTypeName(const char *name, std::string &output, Bool_t full = kFALSE) = 0;
0231 virtual void *GetInterfaceMethod(TClass *cl, const char *method, const char *params, Bool_t objectIsConst = kFALSE) = 0;
0232 virtual void *GetInterfaceMethodWithPrototype(TClass *cl, const char *method, const char *proto, Bool_t objectIsConst = kFALSE, ROOT::EFunctionMatchMode = ROOT::kConversionMatch) = 0;
0233 void Execute(const char *function, const char *params, int *error = nullptr) override = 0;
0234 virtual void Execute(TObject *obj, TClass *cl, const char *method, const char *params, int *error = nullptr) = 0;
0235 virtual void Execute(TObject *obj, TClass *cl, TMethod *method, TObjArray *params, int *error = nullptr) = 0;
0236 virtual void ExecuteWithArgsAndReturn(TMethod *method, void* address, const void* args[] = nullptr, int = 0, void *ret= nullptr) const = 0;
0237 virtual Longptr_t ExecuteMacro(const char *filename, EErrorCode *error = nullptr) = 0;
0238 virtual Bool_t IsErrorMessagesEnabled() const = 0;
0239 virtual Bool_t SetErrorMessages(Bool_t enable = kTRUE) = 0;
0240 virtual Bool_t IsProcessLineLocked() const = 0;
0241 virtual void SetProcessLineLock(Bool_t lock = kTRUE) = 0;
0242 virtual const char *TypeName(const char *s) = 0;
0243 virtual std::string ToString(const char *type, void *obj) = 0;
0244
0245 virtual void SnapshotMutexState(ROOT::TVirtualRWMutex* mtx) = 0;
0246 virtual void ForgetMutexState() = 0;
0247
0248
0249
0250
0251
0252 virtual int DisplayClass(FILE * ,const char * ,int ,int ) const {return 0;}
0253 virtual int DisplayIncludePath(FILE * ) const {return 0;}
0254 virtual void *FindSym(const char * ) const {return nullptr;}
0255 virtual void GenericError(const char * ) const {}
0256 virtual Long_t GetExecByteCode() const {return 0;}
0257 virtual const char *GetTopLevelMacroName() const {return nullptr;};
0258 virtual const char *GetCurrentMacroName() const {return nullptr;};
0259 virtual int GetSecurityError() const{return 0;}
0260 virtual int LoadFile(const char * ) const {return 0;}
0261 virtual Bool_t LoadText(const char * ) const {return kFALSE;}
0262 virtual const char *MapCppName(const char*) const {return nullptr;}
0263 virtual void SetAlloclockfunc(void (*)()) const {}
0264 virtual void SetAllocunlockfunc(void (*)()) const {}
0265 virtual int SetClassAutoLoading(int) const {return 0;}
0266 int SetClassAutoloading(int a) const { return SetClassAutoLoading(a); }
0267 virtual int SetClassAutoparsing(int) {return 0;};
0268 virtual void SetErrmsgcallback(void * ) const {}
0269
0270 virtual void ReportDiagnosticsToErrorHandler(bool = true) {}
0271 virtual void SetTempLevel(int ) const {}
0272 virtual int UnloadFile(const char * ) const {return 0;}
0273
0274
0275
0276 TInterpreterValue *CreateTemporary() const {
0277 return MakeInterpreterValue().release();
0278 }
0279 virtual std::unique_ptr<TInterpreterValue> MakeInterpreterValue() const { return nullptr; }
0280 virtual void CodeComplete(const std::string&, size_t&,
0281 std::vector<std::string>&) {}
0282 virtual int Evaluate(const char*, TInterpreterValue&) {return 0;}
0283
0284
0285 virtual EReturnType MethodCallReturnType(TFunction *func) const = 0;
0286 virtual ULong64_t GetInterpreterStateMarker() const = 0;
0287 virtual bool DiagnoseIfInterpreterException(const std::exception &e) const = 0;
0288
0289 typedef TDictionary::DeclId_t DeclId_t;
0290 virtual DeclId_t GetDeclId(CallFunc_t *info) const = 0;
0291 virtual DeclId_t GetDeclId(ClassInfo_t *info) const = 0;
0292 virtual DeclId_t GetDeclId(DataMemberInfo_t *info) const = 0;
0293 virtual DeclId_t GetDeclId(FuncTempInfo_t *info) const = 0;
0294 virtual DeclId_t GetDeclId(MethodInfo_t *info) const = 0;
0295 virtual DeclId_t GetDeclId(TypedefInfo_t *info) const = 0;
0296
0297 virtual void SetDeclAttr(DeclId_t, const char* ) = 0 ;
0298
0299 virtual DeclId_t GetDataMember(ClassInfo_t *cl, const char *name) const = 0;
0300 virtual DeclId_t GetDataMemberAtAddr(const void *addr) const = 0;
0301 virtual DeclId_t GetDataMemberWithValue(const void *ptrvalue) const = 0;
0302 virtual DeclId_t GetEnum(TClass *cl, const char *name) const = 0;
0303 virtual TEnum* CreateEnum(void *VD, TClass *cl) const = 0;
0304 virtual void UpdateEnumConstants(TEnum* enumObj, TClass* cl) const = 0;
0305 virtual void LoadEnums(TListOfEnums& cl) const = 0;
0306 virtual DeclId_t GetFunction(ClassInfo_t *cl, const char *funcname) = 0;
0307 virtual DeclId_t GetFunctionWithPrototype(ClassInfo_t *cl, const char* method, const char* proto, Bool_t objectIsConst = kFALSE, ROOT::EFunctionMatchMode mode = ROOT::kConversionMatch) = 0;
0308 virtual DeclId_t GetFunctionWithValues(ClassInfo_t *cl, const char* method, const char* params, Bool_t objectIsConst = kFALSE) = 0;
0309 virtual DeclId_t GetFunctionTemplate(ClassInfo_t *cl, const char *funcname) = 0;
0310 virtual void GetFunctionOverloads(ClassInfo_t *cl, const char *funcname, std::vector<DeclId_t>& res) const = 0;
0311 virtual void LoadFunctionTemplates(TClass* cl) const = 0;
0312 virtual std::vector<std::string> GetUsingNamespaces(ClassInfo_t *cl) const = 0;
0313
0314
0315 virtual void CallFunc_Delete(CallFunc_t * ) const {}
0316 virtual void CallFunc_Exec(CallFunc_t * , void * ) const {}
0317 virtual void CallFunc_Exec(CallFunc_t * , void * , TInterpreterValue& ) const {}
0318 virtual void CallFunc_ExecWithReturn(CallFunc_t * , void * , void * ) const {}
0319 virtual void CallFunc_ExecWithArgsAndReturn(CallFunc_t * , void * , const void* [] = nullptr, int = 0, void * = nullptr) const {}
0320 virtual Longptr_t CallFunc_ExecInt(CallFunc_t * , void * ) const {return 0;}
0321 virtual Long64_t CallFunc_ExecInt64(CallFunc_t * , void * ) const {return 0;}
0322 virtual Double_t CallFunc_ExecDouble(CallFunc_t * , void * ) const {return 0;}
0323 virtual CallFunc_t *CallFunc_Factory() const {return nullptr;}
0324 virtual CallFunc_t *CallFunc_FactoryCopy(CallFunc_t * ) const {return nullptr;}
0325 virtual MethodInfo_t *CallFunc_FactoryMethod(CallFunc_t * ) const {return nullptr;}
0326 virtual void CallFunc_IgnoreExtraArgs(CallFunc_t * , bool ) const {}
0327 virtual void CallFunc_Init(CallFunc_t * ) const {}
0328 virtual Bool_t CallFunc_IsValid(CallFunc_t * ) const {return 0;}
0329 virtual CallFuncIFacePtr_t CallFunc_IFacePtr(CallFunc_t * ) const {return CallFuncIFacePtr_t();}
0330 virtual void CallFunc_ResetArg(CallFunc_t * ) const {}
0331 virtual void CallFunc_SetArgArray(CallFunc_t * , Longptr_t * , Int_t ) const {}
0332 virtual void CallFunc_SetArgs(CallFunc_t * , const char * ) const {}
0333
0334 virtual void CallFunc_SetArg(CallFunc_t * , Long_t ) const = 0;
0335 virtual void CallFunc_SetArg(CallFunc_t * , ULong_t ) const = 0;
0336 virtual void CallFunc_SetArg(CallFunc_t * , Float_t ) const = 0;
0337 virtual void CallFunc_SetArg(CallFunc_t * , Double_t ) const = 0;
0338 virtual void CallFunc_SetArg(CallFunc_t * , Long64_t ) const = 0;
0339 virtual void CallFunc_SetArg(CallFunc_t * , ULong64_t ) const = 0;
0340
0341 void CallFunc_SetArg(CallFunc_t * func, Char_t param) const { CallFunc_SetArg(func,(Longptr_t)param); }
0342 void CallFunc_SetArg(CallFunc_t * func, Short_t param) const { CallFunc_SetArg(func,(Longptr_t)param); }
0343 void CallFunc_SetArg(CallFunc_t * func, Int_t param) const { CallFunc_SetArg(func,(Longptr_t)param); }
0344
0345 void CallFunc_SetArg(CallFunc_t * func, UChar_t param) const { CallFunc_SetArg(func,(ULongptr_t)param); }
0346 void CallFunc_SetArg(CallFunc_t * func, UShort_t param) const { CallFunc_SetArg(func,(ULongptr_t)param); }
0347 void CallFunc_SetArg(CallFunc_t * func, UInt_t param) const { CallFunc_SetArg(func,(ULongptr_t)param); }
0348
0349 template <typename T>
0350 void CallFunc_SetArgRef(CallFunc_t * func, T ¶m) const { CallFunc_SetArg(func,(ULongptr_t)¶m); }
0351
0352 void CallFunc_SetArg(CallFunc_t *func, void *arg)
0353 {
0354 CallFunc_SetArg(func,(Longptr_t) arg);
0355 }
0356
0357 template <typename T>
0358 void CallFunc_SetArg(CallFunc_t *func, const T *arg)
0359 {
0360 CallFunc_SetArg(func,(Longptr_t) arg);
0361 }
0362
0363 void CallFunc_SetArgImpl(CallFunc_t * )
0364 {
0365 }
0366
0367 template <typename U>
0368 void CallFunc_SetArgImpl(CallFunc_t *func, const U& head)
0369 {
0370 CallFunc_SetArg(func, head);
0371 }
0372
0373 template <typename U, typename... T>
0374 void CallFunc_SetArgImpl(CallFunc_t *func, const U& head, const T&... tail)
0375 {
0376 CallFunc_SetArg(func, head);
0377 CallFunc_SetArgImpl(func, tail...);
0378 }
0379
0380 template <typename... T>
0381 void CallFunc_SetArguments(CallFunc_t *func, const T&... args)
0382 {
0383 R__LOCKGUARD(gInterpreterMutex);
0384
0385 CallFunc_ResetArg(func);
0386 CallFunc_SetArgImpl(func,args...);
0387 }
0388
0389 virtual void CallFunc_SetFunc(CallFunc_t * , ClassInfo_t * , const char * , const char * , bool , Longptr_t * ) const {}
0390 virtual void CallFunc_SetFunc(CallFunc_t * , ClassInfo_t * , const char * , const char * , Longptr_t * ) const {}
0391 virtual void CallFunc_SetFunc(CallFunc_t * , MethodInfo_t * ) const {}
0392 virtual void CallFunc_SetFuncProto(CallFunc_t * , ClassInfo_t * , const char * , const char * , Longptr_t * , ROOT::EFunctionMatchMode = ROOT::kConversionMatch) const {}
0393 virtual void CallFunc_SetFuncProto(CallFunc_t * , ClassInfo_t * , const char * , const char * , bool , Longptr_t * , ROOT::EFunctionMatchMode = ROOT::kConversionMatch) const {}
0394 virtual void CallFunc_SetFuncProto(CallFunc_t* func, ClassInfo_t* info, const char* method, const std::vector<TypeInfo_t*> &proto, Longptr_t* Offset, ROOT::EFunctionMatchMode mode = ROOT::kConversionMatch) const = 0;
0395 virtual void CallFunc_SetFuncProto(CallFunc_t* func, ClassInfo_t* info, const char* method, const std::vector<TypeInfo_t*> &proto, bool objectIsConst, Longptr_t* Offset, ROOT::EFunctionMatchMode mode = ROOT::kConversionMatch) const = 0;
0396
0397 virtual std::string CallFunc_GetWrapperCode(CallFunc_t *func) const = 0;
0398
0399
0400 virtual Bool_t ClassInfo_Contains(ClassInfo_t *info, DeclId_t decl) const = 0;
0401 virtual Long_t ClassInfo_ClassProperty(ClassInfo_t * ) const {return 0;}
0402 virtual void ClassInfo_Delete(ClassInfo_t * ) const {}
0403 virtual void ClassInfo_Delete(ClassInfo_t * , void * ) const {}
0404 virtual void ClassInfo_DeleteArray(ClassInfo_t * , void * , bool ) const {}
0405 virtual void ClassInfo_Destruct(ClassInfo_t * , void * ) const {}
0406 virtual ClassInfo_t *ClassInfo_Factory(Bool_t = kTRUE) const = 0;
0407 virtual ClassInfo_t *ClassInfo_Factory(ClassInfo_t * ) const = 0;
0408 virtual ClassInfo_t *ClassInfo_Factory(const char * ) const = 0;
0409 virtual ClassInfo_t *ClassInfo_Factory(DeclId_t declid) const = 0;
0410 virtual Longptr_t ClassInfo_GetBaseOffset(ClassInfo_t* ,
0411 ClassInfo_t* , void* = nullptr, bool = true) const {return 0;}
0412 virtual int ClassInfo_GetMethodNArg(ClassInfo_t * , const char * ,const char * , Bool_t = false, ROOT::EFunctionMatchMode = ROOT::kConversionMatch) const {return 0;}
0413 virtual Bool_t ClassInfo_HasDefaultConstructor(ClassInfo_t * , Bool_t = kFALSE) const {return kFALSE;}
0414 virtual Bool_t ClassInfo_HasMethod(ClassInfo_t * , const char * ) const {return kFALSE;}
0415 virtual void ClassInfo_Init(ClassInfo_t * , const char * ) const {}
0416 virtual void ClassInfo_Init(ClassInfo_t * , int ) const {}
0417 virtual Bool_t ClassInfo_IsBase(ClassInfo_t * , const char * ) const {return 0;}
0418 virtual Bool_t ClassInfo_IsEnum(const char * ) const {return 0;}
0419 virtual Bool_t ClassInfo_IsScopedEnum(ClassInfo_t * ) const {return 0;}
0420 virtual EDataType ClassInfo_GetUnderlyingType(ClassInfo_t * ) const {return kNumDataTypes;}
0421 virtual Bool_t ClassInfo_IsLoaded(ClassInfo_t * ) const {return 0;}
0422 virtual Bool_t ClassInfo_IsValid(ClassInfo_t * ) const {return 0;}
0423 virtual Bool_t ClassInfo_IsValidMethod(ClassInfo_t * , const char * ,const char * , Longptr_t * , ROOT::EFunctionMatchMode = ROOT::kConversionMatch) const {return 0;}
0424 virtual Bool_t ClassInfo_IsValidMethod(ClassInfo_t * , const char * ,const char * , Bool_t , Longptr_t * , ROOT::EFunctionMatchMode = ROOT::kConversionMatch) const {return 0;}
0425 virtual int ClassInfo_Next(ClassInfo_t * ) const {return 0;}
0426 virtual void *ClassInfo_New(ClassInfo_t * ) const {return nullptr;}
0427 virtual void *ClassInfo_New(ClassInfo_t * , int ) const {return nullptr;}
0428 virtual void *ClassInfo_New(ClassInfo_t * , int , void * ) const {return nullptr;}
0429 virtual void *ClassInfo_New(ClassInfo_t * , void * ) const {return nullptr;}
0430 virtual Long_t ClassInfo_Property(ClassInfo_t * ) const {return 0;}
0431 virtual int ClassInfo_Size(ClassInfo_t * ) const {return 0;}
0432 virtual Longptr_t ClassInfo_Tagnum(ClassInfo_t * ) const {return 0;}
0433 virtual const char *ClassInfo_FileName(ClassInfo_t * ) const {return nullptr;}
0434 virtual const char *ClassInfo_FullName(ClassInfo_t * ) const {return nullptr;}
0435 virtual const char *ClassInfo_Name(ClassInfo_t * ) const {return nullptr;}
0436 virtual const char *ClassInfo_Title(ClassInfo_t * ) const {return nullptr;}
0437 virtual const char *ClassInfo_TmpltName(ClassInfo_t * ) const {return nullptr;}
0438
0439
0440
0441 virtual void BaseClassInfo_Delete(BaseClassInfo_t * ) const {}
0442 virtual BaseClassInfo_t *BaseClassInfo_Factory(ClassInfo_t * ) const {return nullptr;}
0443 virtual BaseClassInfo_t *BaseClassInfo_Factory(ClassInfo_t* ,
0444 ClassInfo_t* ) const {return nullptr;}
0445 virtual int BaseClassInfo_Next(BaseClassInfo_t * ) const {return 0;}
0446 virtual int BaseClassInfo_Next(BaseClassInfo_t * , int ) const {return 0;}
0447 virtual Longptr_t BaseClassInfo_Offset(BaseClassInfo_t * , void* = nullptr , bool = true ) const {return 0;}
0448 virtual Long_t BaseClassInfo_Property(BaseClassInfo_t * ) const {return 0;}
0449 virtual Longptr_t BaseClassInfo_Tagnum(BaseClassInfo_t * ) const {return 0;}
0450 virtual ClassInfo_t*BaseClassInfo_ClassInfo(BaseClassInfo_t * ) const = 0;
0451 virtual const char *BaseClassInfo_FullName(BaseClassInfo_t * ) const {return nullptr;}
0452 virtual const char *BaseClassInfo_Name(BaseClassInfo_t * ) const {return nullptr;}
0453 virtual const char *BaseClassInfo_TmpltName(BaseClassInfo_t * ) const {return nullptr;}
0454
0455
0456 virtual int DataMemberInfo_ArrayDim(DataMemberInfo_t * ) const {return 0;}
0457 virtual void DataMemberInfo_Delete(DataMemberInfo_t * ) const {}
0458 virtual DataMemberInfo_t *DataMemberInfo_Factory(ClassInfo_t * , TDictionary::EMemberSelection ) const {return nullptr;}
0459 virtual DataMemberInfo_t *DataMemberInfo_Factory(DeclId_t declid, ClassInfo_t* clinfo) const = 0;
0460 virtual DataMemberInfo_t *DataMemberInfo_FactoryCopy(DataMemberInfo_t * ) const {return nullptr;}
0461 virtual Bool_t DataMemberInfo_IsValid(DataMemberInfo_t * ) const {return 0;}
0462 virtual int DataMemberInfo_MaxIndex(DataMemberInfo_t * , Int_t ) const {return 0;}
0463 virtual int DataMemberInfo_Next(DataMemberInfo_t * ) const {return 0;}
0464 virtual Longptr_t DataMemberInfo_Offset(DataMemberInfo_t * ) const {return 0;}
0465 virtual Long_t DataMemberInfo_Property(DataMemberInfo_t * ) const {return 0;}
0466 virtual Long_t DataMemberInfo_TypeProperty(DataMemberInfo_t * ) const {return 0;}
0467 virtual int DataMemberInfo_TypeSize(DataMemberInfo_t * ) const {return 0;}
0468 virtual const char *DataMemberInfo_TypeName(DataMemberInfo_t * ) const {return nullptr;}
0469 virtual const char *DataMemberInfo_TypeTrueName(DataMemberInfo_t * ) const {return nullptr;}
0470 virtual const char *DataMemberInfo_Name(DataMemberInfo_t * ) const {return nullptr;}
0471 virtual const char *DataMemberInfo_Title(DataMemberInfo_t * ) const {return nullptr;}
0472 virtual const char *DataMemberInfo_ValidArrayIndex(DataMemberInfo_t * ) const {return nullptr;}
0473
0474
0475 virtual void FuncTempInfo_Delete(FuncTempInfo_t * ) const = 0;
0476 virtual FuncTempInfo_t *FuncTempInfo_Factory(DeclId_t declid) const = 0;
0477 virtual FuncTempInfo_t *FuncTempInfo_FactoryCopy(FuncTempInfo_t * ) const = 0;
0478 virtual Bool_t FuncTempInfo_IsValid(FuncTempInfo_t * ) const = 0;
0479 virtual UInt_t FuncTempInfo_TemplateNargs(FuncTempInfo_t * ) const = 0;
0480 virtual UInt_t FuncTempInfo_TemplateMinReqArgs(FuncTempInfo_t * ) const = 0;
0481 virtual Long_t FuncTempInfo_Property(FuncTempInfo_t * ) const = 0;
0482 virtual Long_t FuncTempInfo_ExtraProperty(FuncTempInfo_t * ) const = 0;
0483 virtual void FuncTempInfo_Name(FuncTempInfo_t * , TString &name) const = 0;
0484 virtual void FuncTempInfo_Title(FuncTempInfo_t * , TString &title) const = 0;
0485
0486
0487 virtual void MethodInfo_CreateSignature(MethodInfo_t * , TString & ) const {}
0488 virtual void MethodInfo_Delete(MethodInfo_t * ) const {}
0489 virtual MethodInfo_t *MethodInfo_Factory() const {return nullptr;}
0490 virtual MethodInfo_t *MethodInfo_Factory(ClassInfo_t * ) const {return nullptr;}
0491 virtual MethodInfo_t *MethodInfo_Factory(DeclId_t declid) const = 0;
0492 virtual MethodInfo_t *MethodInfo_FactoryCopy(MethodInfo_t * ) const {return nullptr;}
0493 virtual void *MethodInfo_InterfaceMethod(MethodInfo_t * ) const {return nullptr;}
0494 virtual Bool_t MethodInfo_IsValid(MethodInfo_t * ) const {return 0;}
0495 virtual int MethodInfo_NArg(MethodInfo_t * ) const {return 0;}
0496 virtual int MethodInfo_NDefaultArg(MethodInfo_t * ) const {return 0;}
0497 virtual int MethodInfo_Next(MethodInfo_t * ) const {return 0;}
0498 virtual Long_t MethodInfo_Property(MethodInfo_t * ) const = 0;
0499 virtual Long_t MethodInfo_ExtraProperty(MethodInfo_t * ) const = 0;
0500 virtual TypeInfo_t *MethodInfo_Type(MethodInfo_t * ) const {return nullptr;}
0501 virtual EReturnType MethodInfo_MethodCallReturnType(MethodInfo_t* minfo) const = 0;
0502 virtual const char *MethodInfo_GetMangledName(MethodInfo_t * ) const {return nullptr;}
0503 virtual const char *MethodInfo_GetPrototype(MethodInfo_t * ) const {return nullptr;}
0504 virtual const char *MethodInfo_Name(MethodInfo_t * ) const {return nullptr;}
0505 virtual const char *MethodInfo_TypeName(MethodInfo_t * ) const {return nullptr;}
0506 virtual std::string MethodInfo_TypeNormalizedName(MethodInfo_t * ) const {return "";}
0507 virtual const char *MethodInfo_Title(MethodInfo_t * ) const {return nullptr;}
0508
0509
0510 virtual void MethodArgInfo_Delete(MethodArgInfo_t * ) const {}
0511 virtual MethodArgInfo_t *MethodArgInfo_Factory() const {return nullptr;}
0512 virtual MethodArgInfo_t *MethodArgInfo_Factory(MethodInfo_t * ) const {return nullptr;}
0513 virtual MethodArgInfo_t *MethodArgInfo_FactoryCopy(MethodArgInfo_t * ) const {return nullptr;}
0514 virtual Bool_t MethodArgInfo_IsValid(MethodArgInfo_t * ) const {return 0;}
0515 virtual int MethodArgInfo_Next(MethodArgInfo_t * ) const {return 0;}
0516 virtual Long_t MethodArgInfo_Property(MethodArgInfo_t * ) const {return 0;}
0517 virtual const char *MethodArgInfo_DefaultValue(MethodArgInfo_t * ) const {return nullptr;}
0518 virtual const char *MethodArgInfo_Name(MethodArgInfo_t * ) const {return nullptr;}
0519 virtual const char *MethodArgInfo_TypeName(MethodArgInfo_t * ) const {return nullptr;}
0520 virtual std::string MethodArgInfo_TypeNormalizedName(MethodArgInfo_t * ) const = 0;
0521 virtual TypeInfo_t *MethodArgInfo_TypeInfo(MethodArgInfo_t * ) const {return nullptr;}
0522
0523
0524
0525 virtual void TypeInfo_Delete(TypeInfo_t * ) const {}
0526 virtual TypeInfo_t *TypeInfo_Factory() const {return nullptr;}
0527 virtual TypeInfo_t *TypeInfo_Factory(const char* ) const {return nullptr;}
0528 virtual TypeInfo_t *TypeInfo_FactoryCopy(TypeInfo_t * ) const {return nullptr;}
0529 virtual void TypeInfo_Init(TypeInfo_t * , const char * ) const {}
0530 virtual Bool_t TypeInfo_IsValid(TypeInfo_t * ) const {return 0;}
0531 virtual const char *TypeInfo_Name(TypeInfo_t * ) const {return nullptr;}
0532 virtual Long_t TypeInfo_Property(TypeInfo_t * ) const {return 0;}
0533 virtual int TypeInfo_RefType(TypeInfo_t * ) const {return 0;}
0534 virtual int TypeInfo_Size(TypeInfo_t * ) const {return 0;}
0535 virtual const char *TypeInfo_TrueName(TypeInfo_t * ) const {return nullptr;}
0536 virtual void *TypeInfo_QualTypePtr(TypeInfo_t * ) const {return nullptr;}
0537
0538
0539
0540 virtual void TypedefInfo_Delete(TypedefInfo_t * ) const {}
0541 virtual TypedefInfo_t *TypedefInfo_Factory() const {return nullptr;}
0542 virtual TypedefInfo_t *TypedefInfo_Factory(const char *) const {return nullptr;}
0543 virtual TypedefInfo_t *TypedefInfo_FactoryCopy(TypedefInfo_t * ) const {return nullptr;}
0544 virtual void TypedefInfo_Init(TypedefInfo_t * , const char * ) const {}
0545 virtual Bool_t TypedefInfo_IsValid(TypedefInfo_t * ) const {return 0;}
0546 virtual int TypedefInfo_Next(TypedefInfo_t* ) const {return 0;}
0547 virtual Long_t TypedefInfo_Property(TypedefInfo_t * ) const {return 0;}
0548 virtual int TypedefInfo_Size(TypedefInfo_t * ) const {return 0;}
0549 virtual const char *TypedefInfo_TrueName(TypedefInfo_t * ) const {return nullptr;}
0550 virtual const char *TypedefInfo_Name(TypedefInfo_t * ) const {return nullptr;}
0551 virtual const char *TypedefInfo_Title(TypedefInfo_t * ) const {return nullptr;}
0552
0553
0554 virtual Bool_t IsSameType(const void * , const void * ) const {return 0;}
0555 virtual Bool_t IsIntegerType(const void * ) const {return 0;}
0556 virtual Bool_t IsSignedIntegerType(const void * ) const {return 0;}
0557 virtual Bool_t IsUnsignedIntegerType(const void * ) const {return 0;}
0558 virtual Bool_t IsFloatingType(const void * ) const {return 0;}
0559 virtual Bool_t IsPointerType(const void * ) const {return 0;}
0560 virtual Bool_t IsVoidPointerType(const void * ) const {return 0;}
0561
0562 static TInterpreter *Instance();
0563
0564 ClassDefOverride(TInterpreter,0)
0565 };
0566
0567
0568 typedef TInterpreter *CreateInterpreter_t(void* shlibHandle, const char* argv[]);
0569 typedef void *DestroyInterpreter_t(TInterpreter*);
0570
0571 #define gInterpreter (TInterpreter::Instance())
0572 R__EXTERN TInterpreter* gCling;
0573
0574 inline ROOT::Internal::InterpreterMutexRegistrationRAII::InterpreterMutexRegistrationRAII(TVirtualMutex* mutex):
0575 fLockGuard(mutex)
0576 {
0577 if (gCoreMutex)
0578 ::gCling->SnapshotMutexState(gCoreMutex);
0579 }
0580 inline ROOT::Internal::InterpreterMutexRegistrationRAII::~InterpreterMutexRegistrationRAII()
0581 {
0582 if (gCoreMutex)
0583 ::gCling->ForgetMutexState();
0584 }
0585
0586 #endif