1 // @(#)root/meta:$Id$ 2 // Author: Fons Rademakers 01/03/96 3 4 /************************************************************************* 5 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. * 6 * All rights reserved. * 7 * * 8 * For the licensing terms see $ROOTSYS/LICENSE. * 9 * For the list of contributors see $ROOTSYS/README/CREDITS. * 10 *************************************************************************/ 11 12 13 #ifndef ROOT_TInterpreter 14 #define ROOT_TInterpreter 15 16 ////////////////////////////////////////////////////////////////////////// 17 // // 18 // TInterpreter // 19 // // 20 // This class defines an abstract interface to a generic command line // 21 // interpreter. // 22 // // 23 ////////////////////////////////////////////////////////////////////////// 24 25 #ifndef ROOT_TDictionary 26 #include "TDictionary.h" 27 #endif 28 29 class TClass; 30 class TEnv; 31 class TFunction; 32 class TMethod; 33 class TObjArray; 34 class TVirtualMutex; 35 extern "C" { struct G__value; } 36 37 R__EXTERN TVirtualMutex *gCINTMutex; 38 39 class TInterpreter : public TNamed { 40 41 protected: 42 virtual void Execute(TMethod *method, TObjArray *params, int *error = 0) = 0; 43 44 public: 45 enum EErrorCode { 46 kNoError = 0, 47 kRecoverable = 1, 48 kDangerous = 2, 49 kFatal = 3, 50 kProcessing = 99 51 }; 52 53 TInterpreter() { } // for Dictionary 54 TInterpreter(const char *name, const char *title = "Generic Interpreter"); 55 virtual ~TInterpreter() { } 56 57 virtual void AddIncludePath(const char *path) = 0; 58 virtual Int_t AutoLoad(const char *classname) = 0; 59 virtual void ClearFileBusy() = 0; 60 virtual void ClearStack() = 0; // Delete existing temporary values 61 virtual void EnableAutoLoading() = 0; 62 virtual void EndOfLineAction() = 0; 63 virtual Int_t GetExitCode() const = 0; 64 virtual TEnv *GetMapfile() const { return 0; } 65 virtual Int_t GetMore() const = 0; 66 virtual Int_t GenerateDictionary(const char *classes, const char *includes = 0, const char *options = 0) = 0; 67 virtual char *GetPrompt() = 0; 68 virtual const char *GetSharedLibs() = 0; 69 virtual const char *GetClassSharedLibs(const char *cls) = 0; 70 virtual const char *GetSharedLibDeps(const char *lib) = 0; 71 virtual const char *GetIncludePath() = 0; 72 virtual const char *GetSTLIncludePath() const { return ""; } 73 virtual TObjArray *GetRootMapFiles() const = 0; 74 virtual Int_t InitializeDictionaries() = 0; 75 virtual Bool_t IsLoaded(const char *filename) const = 0; 76 virtual Int_t Load(const char *filenam, Bool_t system = kFALSE) = 0; 77 virtual void LoadMacro(const char *filename, EErrorCode *error = 0) = 0; 78 virtual Int_t LoadLibraryMap(const char *rootmapfile = 0) = 0; 79 virtual Int_t RescanLibraryMap() = 0; 80 virtual Int_t ReloadAllSharedLibraryMaps() = 0; 81 virtual Int_t UnloadAllSharedLibraryMaps() = 0; 82 virtual Int_t UnloadLibraryMap(const char *library) = 0; 83 virtual Long_t ProcessLine(const char *line, EErrorCode *error = 0) = 0; 84 virtual Long_t ProcessLineSynch(const char *line, EErrorCode *error = 0) = 0; 85 virtual void PrintIntro() = 0; 86 virtual Int_t SetClassSharedLibs(const char *cls, const char *libs) = 0; 87 virtual void SetGetline(const char*(*getlineFunc)(const char* prompt), 88 void (*histaddFunc)(const char* line)) = 0; 89 virtual void Reset() = 0; 90 virtual void ResetAll() = 0; 91 virtual void ResetGlobals() = 0; 92 virtual void ResetGlobalVar(void *obj) = 0; 93 virtual void RewindDictionary() = 0; 94 virtual Int_t DeleteGlobal(void *obj) = 0; 95 virtual Int_t DeleteVariable(const char* name) = 0; 96 virtual void SaveContext() = 0; 97 virtual void SaveGlobalsContext() = 0; 98 virtual void UpdateListOfGlobals() = 0; 99 virtual void UpdateListOfGlobalFunctions() = 0; 100 virtual void UpdateListOfTypes() = 0; 101 virtual void SetClassInfo(TClass *cl, Bool_t reload = kFALSE) = 0; 102 virtual Bool_t CheckClassInfo(const char *name, Bool_t autoload = kTRUE) = 0; 103 virtual Long_t Calc(const char *line, EErrorCode* error = 0) = 0; 104 virtual void CreateListOfBaseClasses(TClass *cl) = 0; 105 virtual void CreateListOfDataMembers(TClass *cl) = 0; 106 virtual void CreateListOfMethods(TClass *cl) = 0; 107 virtual void CreateListOfMethodArgs(TFunction *m) = 0; 108 virtual void UpdateListOfMethods(TClass *cl) = 0; 109 virtual TString GetMangledName(TClass *cl, const char *method, const char *params) = 0; 110 virtual TString GetMangledNameWithPrototype(TClass *cl, const char *method, const char *proto) = 0; 111 virtual const char *GetInterpreterTypeName(const char *name,Bool_t full = kFALSE) = 0; 112 virtual void *GetInterfaceMethod(TClass *cl, const char *method, const char *params) = 0; 113 virtual void *GetInterfaceMethodWithPrototype(TClass *cl, const char *method, const char *proto) = 0; 114 virtual void Execute(const char *function, const char *params, int *error = 0) = 0; 115 virtual void Execute(TObject *obj, TClass *cl, const char *method, const char *params, int *error = 0) = 0; 116 virtual void Execute(TObject *obj, TClass *cl, TMethod *method, TObjArray *params, int *error = 0) = 0; 117 virtual Long_t ExecuteMacro(const char *filename, EErrorCode *error = 0) = 0; 118 virtual Bool_t IsErrorMessagesEnabled() const = 0; 119 virtual Bool_t SetErrorMessages(Bool_t enable = kTRUE) = 0; 120 virtual Bool_t IsProcessLineLocked() const = 0; 121 virtual void SetProcessLineLock(Bool_t lock = kTRUE) = 0; 122 virtual const char *TypeName(const char *s) = 0; 123 124 // All the functions below must be virtual with a dummy implementation 125 // These functions are redefined in TCint. 126 //The dummy implementation avoids an implementation in TGWin32InterpreterProxy 127 128 // Misc 129 virtual int DisplayClass(FILE * /* fout */,char * /* name */,int /* base */,int /* start */) const {return 0;} 130 virtual int DisplayIncludePath(FILE * /* fout */) const {return 0;} 131 virtual void *FindSym(const char * /* entry */) const {return 0;} 132 virtual void GenericError(const char * /* error */) const {;} 133 virtual Long_t GetExecByteCode() const {return 0;} 134 virtual Long_t Getgvp() const {return 0;} 135 virtual const char *Getp2f2funcname(void * /* receiver */) const {return 0;} 136 virtual const char *GetTopLevelMacroName() const {return 0;}; 137 virtual const char *GetCurrentMacroName() const {return 0;}; 138 virtual int GetSecurityError() const{return 0;} 139 virtual int LoadFile(const char * /* path */) const {return 0;} 140 virtual void LoadText(const char * /* text */) const {;} 141 virtual const char *MapCppName(const char*) const {return 0;} 142 virtual void SetAlloclockfunc(void (*)()) const {;} 143 virtual void SetAllocunlockfunc(void (*)()) const {;} 144 virtual int SetClassAutoloading(int) const {return 0;} 145 virtual void SetErrmsgcallback(void * /* p */) const {;} 146 virtual void Setgvp(Long_t) const {;} 147 virtual void SetRTLD_NOW() const {;} 148 virtual void SetRTLD_LAZY() const {;} 149 virtual void SetTempLevel(int /* val */) const {;} 150 virtual int UnloadFile(const char * /* path */) const {return 0;} 151 152 153 // G__CallFunc interface 154 virtual void CallFunc_Delete(void * /* func */) const {;} 155 virtual void CallFunc_Exec(CallFunc_t * /* func */, void * /* address */) const {;} 156 virtual Long_t CallFunc_ExecInt(CallFunc_t * /* func */, void * /* address */) const {return 0;} 157 virtual Long64_t CallFunc_ExecInt64(CallFunc_t * /* func */, void * /* address */) const {return 0;} 158 virtual Double_t CallFunc_ExecDouble(CallFunc_t * /* func */, void * /* address */) const {return 0;} 159 virtual CallFunc_t *CallFunc_Factory() const {return 0;} 160 virtual CallFunc_t *CallFunc_FactoryCopy(CallFunc_t * /* func */) const {return 0;} 161 virtual MethodInfo_t *CallFunc_FactoryMethod(CallFunc_t * /* func */) const {return 0;} 162 virtual void CallFunc_Init(CallFunc_t * /* func */) const {;} 163 virtual Bool_t CallFunc_IsValid(CallFunc_t * /* func */) const {return 0;} 164 virtual void CallFunc_ResetArg(CallFunc_t * /* func */) const {;} 165 virtual void CallFunc_SetArg(CallFunc_t * /*func */, Long_t /* param */) const {;} 166 virtual void CallFunc_SetArg(CallFunc_t * /* func */, Double_t /* param */) const {;} 167 virtual void CallFunc_SetArg(CallFunc_t * /* func */, Long64_t /* param */) const {;} 168 virtual void CallFunc_SetArg(CallFunc_t * /* func */, ULong64_t /* param */) const {;} 169 virtual void CallFunc_SetArgArray(CallFunc_t * /* func */, Long_t * /* paramArr */, Int_t /* nparam */) const {;} 170 virtual void CallFunc_SetArgs(CallFunc_t * /* func */, const char * /* param */) const {;} 171 virtual void CallFunc_SetFunc(CallFunc_t * /* func */, ClassInfo_t * /* info */, const char * /* method */, const char * /* params */, Long_t * /* Offset */) const {;} 172 virtual void CallFunc_SetFunc(CallFunc_t * /* func */, MethodInfo_t * /* info */) const {;} 173 virtual void CallFunc_SetFuncProto(CallFunc_t * /* func */, ClassInfo_t * /* info */, const char * /* method */, const char * /* proto */, Long_t * /* Offset */) const {;} 174 175 176 // G__ClassInfo interface 177 virtual Long_t ClassInfo_ClassProperty(ClassInfo_t * /* info */) const {return 0;} 178 virtual void ClassInfo_Delete(ClassInfo_t * /* info */) const {;} 179 virtual void ClassInfo_Delete(ClassInfo_t * /* info */, void * /* arena */) const {;} 180 virtual void ClassInfo_DeleteArray(ClassInfo_t * /* info */, void * /* arena */, bool /* dtorOnly */) const {;} 181 virtual void ClassInfo_Destruct(ClassInfo_t * /* info */, void * /* arena */) const {;} 182 virtual ClassInfo_t *ClassInfo_Factory() const {return 0;} 183 virtual ClassInfo_t *ClassInfo_Factory(G__value * /* value */) const {return 0;} 184 virtual ClassInfo_t *ClassInfo_Factory(ClassInfo_t * /* cl */) const {return 0;} 185 virtual ClassInfo_t *ClassInfo_Factory(const char * /* name */) const {return 0;} 186 virtual int ClassInfo_GetMethodNArg(ClassInfo_t * /* info */, const char * /* method */,const char * /* proto */) const {return 0;} 187 virtual Bool_t ClassInfo_HasDefaultConstructor(ClassInfo_t * /* info */) const {return 0;} 188 virtual Bool_t ClassInfo_HasMethod(ClassInfo_t * /* info */, const char * /* name */) const {return 0;} 189 virtual void ClassInfo_Init(ClassInfo_t * /* info */, const char * /* funcname */) const {;} 190 virtual void ClassInfo_Init(ClassInfo_t * /* info */, int /* tagnum */) const {;} 191 virtual Bool_t ClassInfo_IsBase(ClassInfo_t * /* info */, const char * /* name */) const {return 0;} 192 virtual Bool_t ClassInfo_IsEnum(const char * /* name */) const {return 0;} 193 virtual Bool_t ClassInfo_IsLoaded(ClassInfo_t * /* info */) const {return 0;} 194 virtual Bool_t ClassInfo_IsValid(ClassInfo_t * /* info */) const {return 0;} 195 virtual Bool_t ClassInfo_IsValidMethod(ClassInfo_t * /* info */, const char * /* method */,const char * /* proto */, Long_t * /* offset */) const {return 0;} 196 virtual int ClassInfo_Next(ClassInfo_t * /* info */) const {return 0;} 197 virtual void *ClassInfo_New(ClassInfo_t * /* info */) const {return 0;} 198 virtual void *ClassInfo_New(ClassInfo_t * /* info */, int /* n */) const {return 0;} 199 virtual void *ClassInfo_New(ClassInfo_t * /* info */, int /* n */, void * /* arena */) const {return 0;} 200 virtual void *ClassInfo_New(ClassInfo_t * /* info */, void * /* arena */) const {return 0;} 201 virtual Long_t ClassInfo_Property(ClassInfo_t * /* info */) const {return 0;} 202 virtual int ClassInfo_RootFlag(ClassInfo_t * /* info */) const {return 0;} 203 virtual int ClassInfo_Size(ClassInfo_t * /* info */) const {return 0;} 204 virtual Long_t ClassInfo_Tagnum(ClassInfo_t * /* info */) const {return 0;} 205 virtual const char *ClassInfo_FileName(ClassInfo_t * /* info */) const {return 0;} 206 virtual const char *ClassInfo_FullName(ClassInfo_t * /* info */) const {return 0;} 207 virtual const char *ClassInfo_Name(ClassInfo_t * /* info */) const {return 0;} 208 virtual const char *ClassInfo_Title(ClassInfo_t * /* info */) const {return 0;} 209 virtual const char *ClassInfo_TmpltName(ClassInfo_t * /* info */) const {return 0;} 210 211 212 // G__BaseClassInfo interface 213 virtual void BaseClassInfo_Delete(BaseClassInfo_t * /* bcinfo */) const {;} 214 virtual BaseClassInfo_t *BaseClassInfo_Factory(ClassInfo_t * /* info */) const {return 0;} 215 virtual int BaseClassInfo_Next(BaseClassInfo_t * /* bcinfo */) const {return 0;} 216 virtual int BaseClassInfo_Next(BaseClassInfo_t * /* bcinfo */, int /* onlyDirect */) const {return 0;} 217 virtual Long_t BaseClassInfo_Offset(BaseClassInfo_t * /* bcinfo */) const {return 0;} 218 virtual Long_t BaseClassInfo_Property(BaseClassInfo_t * /* bcinfo */) const {return 0;} 219 virtual Long_t BaseClassInfo_Tagnum(BaseClassInfo_t * /* bcinfo */) const {return 0;} 220 virtual const char *BaseClassInfo_FullName(BaseClassInfo_t * /* bcinfo */) const {return 0;} 221 virtual const char *BaseClassInfo_Name(BaseClassInfo_t * /* bcinfo */) const {return 0;} 222 virtual const char *BaseClassInfo_TmpltName(BaseClassInfo_t * /* bcinfo */) const {return 0;} 223 224 // G__DataMemberInfo interface 225 virtual int DataMemberInfo_ArrayDim(DataMemberInfo_t * /* dminfo */) const {return 0;} 226 virtual void DataMemberInfo_Delete(DataMemberInfo_t * /* dminfo */) const {;} 227 virtual DataMemberInfo_t *DataMemberInfo_Factory(ClassInfo_t * /* clinfo */ = 0) const {return 0;} 228 virtual DataMemberInfo_t *DataMemberInfo_FactoryCopy(DataMemberInfo_t * /* dminfo */) const {return 0;} 229 virtual Bool_t DataMemberInfo_IsValid(DataMemberInfo_t * /* dminfo */) const {return 0;} 230 virtual int DataMemberInfo_MaxIndex(DataMemberInfo_t * /* dminfo */, Int_t /* dim */) const {return 0;} 231 virtual int DataMemberInfo_Next(DataMemberInfo_t * /* dminfo */) const {return 0;} 232 virtual Long_t DataMemberInfo_Offset(DataMemberInfo_t * /* dminfo */) const {return 0;} 233 virtual Long_t DataMemberInfo_Property(DataMemberInfo_t * /* dminfo */) const {return 0;} 234 virtual Long_t DataMemberInfo_TypeProperty(DataMemberInfo_t * /* dminfo */) const {return 0;} 235 virtual int DataMemberInfo_TypeSize(DataMemberInfo_t * /* dminfo */) const {return 0;} 236 virtual const char *DataMemberInfo_TypeName(DataMemberInfo_t * /* dminfo */) const {return 0;} 237 virtual const char *DataMemberInfo_TypeTrueName(DataMemberInfo_t * /* dminfo */) const {return 0;} 238 virtual const char *DataMemberInfo_Name(DataMemberInfo_t * /* dminfo */) const {return 0;} 239 virtual const char *DataMemberInfo_Title(DataMemberInfo_t * /* dminfo */) const {return 0;} 240 virtual const char *DataMemberInfo_ValidArrayIndex(DataMemberInfo_t * /* dminfo */) const {return 0;} 241 242 // G__MethodInfo interface 243 virtual void MethodInfo_CreateSignature(MethodInfo_t * /* minfo */, TString & /* signature */) const {;} 244 virtual void MethodInfo_Delete(MethodInfo_t * /* minfo */) const {;} 245 virtual MethodInfo_t *MethodInfo_Factory() const {return 0;} 246 virtual MethodInfo_t *MethodInfo_Factory(ClassInfo_t * /*clinfo*/) const {return 0;} 247 virtual MethodInfo_t *MethodInfo_FactoryCopy(MethodInfo_t * /* minfo */) const {return 0;} 248 virtual MethodInfo_t *MethodInfo_InterfaceMethod(MethodInfo_t * /* minfo */) const {return 0;} 249 virtual Bool_t MethodInfo_IsValid(MethodInfo_t * /* minfo */) const {return 0;} 250 virtual int MethodInfo_NArg(MethodInfo_t * /* minfo */) const {return 0;} 251 virtual int MethodInfo_NDefaultArg(MethodInfo_t * /* minfo */) const {return 0;} 252 virtual int MethodInfo_Next(MethodInfo_t * /* minfo */) const {return 0;} 253 virtual Long_t MethodInfo_Property(MethodInfo_t * /* minfo */) const {return 0;} 254 virtual TypeInfo_t *MethodInfo_Type(MethodInfo_t * /* minfo */) const {return 0;} 255 virtual const char *MethodInfo_GetMangledName(MethodInfo_t * /* minfo */) const {return 0;} 256 virtual const char *MethodInfo_GetPrototype(MethodInfo_t * /* minfo */) const {return 0;} 257 virtual const char *MethodInfo_Name(MethodInfo_t * /* minfo */) const {return 0;} 258 virtual const char *MethodInfo_TypeName(MethodInfo_t * /* minfo */) const {return 0;} 259 virtual std::string MethodInfo_TypeNormalizedName(MethodInfo_t * /* minfo */) const {return "";} 260 virtual const char *MethodInfo_Title(MethodInfo_t * /* minfo */) const {return 0;} 261 262 // G__MethodArgInfo interface 263 virtual void MethodArgInfo_Delete(MethodArgInfo_t * /* marginfo */) const {;} 264 virtual MethodArgInfo_t *MethodArgInfo_Factory() const {return 0;} 265 virtual MethodArgInfo_t *MethodArgInfo_Factory(MethodInfo_t * /*minfo*/) const {return 0;} 266 virtual MethodArgInfo_t *MethodArgInfo_FactoryCopy(MethodArgInfo_t * /* marginfo */) const {return 0;} 267 virtual Bool_t MethodArgInfo_IsValid(MethodArgInfo_t * /* marginfo */) const {return 0;} 268 virtual int MethodArgInfo_Next(MethodArgInfo_t * /* marginfo */) const {return 0;} 269 virtual Long_t MethodArgInfo_Property(MethodArgInfo_t * /* marginfo */) const {return 0;} 270 virtual const char *MethodArgInfo_DefaultValue(MethodArgInfo_t * /* marginfo */) const {return 0;} 271 virtual const char *MethodArgInfo_Name(MethodArgInfo_t * /* marginfo */) const {return 0;} 272 virtual const char *MethodArgInfo_TypeName(MethodArgInfo_t * /* marginfo */) const {return 0;} 273 virtual std::string MethodArgInfo_TypeNormalizedName(MethodArgInfo_t * /* marginfo */) const {return 0;} 274 275 // G__TypeInfo interface 276 virtual void TypeInfo_Delete(TypeInfo_t * /* tinfo */) const {;} 277 virtual TypeInfo_t *TypeInfo_Factory() const {return 0;} 278 virtual TypeInfo_t *TypeInfo_Factory(G__value * /* value */) const {return 0;} 279 virtual TypeInfo_t *TypeInfo_FactoryCopy(TypeInfo_t * /* tinfo */) const {return 0;} 280 virtual void TypeInfo_Init(TypeInfo_t * /* tinfo */, const char * /* funcname */) const {;} 281 virtual Bool_t TypeInfo_IsValid(TypeInfo_t * /* tinfo */) const {return 0;} 282 virtual const char *TypeInfo_Name(TypeInfo_t * /* info */) const {return 0;} 283 virtual Long_t TypeInfo_Property(TypeInfo_t * /* tinfo */) const {return 0;} 284 virtual int TypeInfo_RefType(TypeInfo_t * /* tinfo */) const {return 0;} 285 virtual int TypeInfo_Size(TypeInfo_t * /* tinfo */) const {return 0;} 286 virtual const char *TypeInfo_TrueName(TypeInfo_t * /* tinfo */) const {return 0;} 287 288 289 // G__TypedefInfo interface 290 virtual void TypedefInfo_Delete(TypedefInfo_t * /* tinfo */) const {;} 291 virtual TypedefInfo_t *TypedefInfo_Factory() const {return 0;} 292 virtual TypedefInfo_t *TypedefInfo_FactoryCopy(TypedefInfo_t * /* tinfo */) const {return 0;} 293 virtual void TypedefInfo_Init(TypedefInfo_t * /* tinfo */, const char * /* funcname */) const {;} 294 virtual Bool_t TypedefInfo_IsValid(TypedefInfo_t * /* tinfo */) const {return 0;} 295 virtual int TypedefInfo_Next(TypedefInfo_t * /* tinfo */) const {return 0;} 296 virtual Long_t TypedefInfo_Property(TypedefInfo_t * /* tinfo */) const {return 0;} 297 virtual int TypedefInfo_Size(TypedefInfo_t * /* tinfo */) const {return 0;} 298 virtual const char *TypedefInfo_TrueName(TypedefInfo_t * /* tinfo */) const {return 0;} 299 virtual const char *TypedefInfo_Name(TypedefInfo_t * /* tinfo */) const {return 0;} 300 virtual const char *TypedefInfo_Title(TypedefInfo_t * /* tinfo */) const {return 0;} 301 302 static TInterpreter *&Instance(); 303 304 ClassDef(TInterpreter,0) //ABC defining interface to generic interpreter 305 }; 306 307 #ifndef __CINT__ 308 #define gInterpreter (TInterpreter::Instance()) 309 R__EXTERN TInterpreter* (*gPtr2Interpreter)(); 310 R__EXTERN TInterpreter* gCint; 311 #endif 312 313 #endif 314