00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef ROOT_TInterpreter
00014 #define ROOT_TInterpreter
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef ROOT_TDictionary
00026 #include "TDictionary.h"
00027 #endif
00028
00029 class TClass;
00030 class TEnv;
00031 class TFunction;
00032 class TMethod;
00033 class TObjArray;
00034 class TVirtualMutex;
00035 extern "C" { struct G__value; }
00036
00037 R__EXTERN TVirtualMutex *gCINTMutex;
00038
00039 class TInterpreter : public TNamed {
00040
00041 protected:
00042 virtual void Execute(TMethod *method, TObjArray *params, int *error = 0) = 0;
00043
00044 public:
00045 enum EErrorCode {
00046 kNoError = 0,
00047 kRecoverable = 1,
00048 kDangerous = 2,
00049 kFatal = 3,
00050 kProcessing = 99
00051 };
00052
00053 TInterpreter() { }
00054 TInterpreter(const char *name, const char *title = "Generic Interpreter");
00055 virtual ~TInterpreter() { }
00056
00057 virtual void AddIncludePath(const char *path) = 0;
00058 virtual Int_t AutoLoad(const char *classname) = 0;
00059 virtual void ClearFileBusy() = 0;
00060 virtual void ClearStack() = 0;
00061 virtual void EnableAutoLoading() = 0;
00062 virtual void EndOfLineAction() = 0;
00063 virtual Int_t GetExitCode() const = 0;
00064 virtual TEnv *GetMapfile() const { return 0; }
00065 virtual Int_t GetMore() const = 0;
00066 virtual Int_t GenerateDictionary(const char *classes, const char *includes = 0, const char *options = 0) = 0;
00067 virtual char *GetPrompt() = 0;
00068 virtual const char *GetSharedLibs() = 0;
00069 virtual const char *GetClassSharedLibs(const char *cls) = 0;
00070 virtual const char *GetSharedLibDeps(const char *lib) = 0;
00071 virtual const char *GetIncludePath() = 0;
00072 virtual const char *GetSTLIncludePath() const { return ""; }
00073 virtual TObjArray *GetRootMapFiles() const = 0;
00074 virtual Int_t InitializeDictionaries() = 0;
00075 virtual Bool_t IsLoaded(const char *filename) const = 0;
00076 virtual Int_t Load(const char *filenam, Bool_t system = kFALSE) = 0;
00077 virtual void LoadMacro(const char *filename, EErrorCode *error = 0) = 0;
00078 virtual Int_t LoadLibraryMap(const char *rootmapfile = 0) = 0;
00079 virtual Int_t RescanLibraryMap() = 0;
00080 virtual Int_t ReloadAllSharedLibraryMaps() = 0;
00081 virtual Int_t UnloadAllSharedLibraryMaps() = 0;
00082 virtual Int_t UnloadLibraryMap(const char *library) = 0;
00083 virtual Long_t ProcessLine(const char *line, EErrorCode *error = 0) = 0;
00084 virtual Long_t ProcessLineSynch(const char *line, EErrorCode *error = 0) = 0;
00085 virtual void PrintIntro() = 0;
00086 virtual void SetGetline(char*(*getlineFunc)(const char* prompt),
00087 void (*histaddFunc)(char* line)) = 0;
00088 virtual void Reset() = 0;
00089 virtual void ResetAll() = 0;
00090 virtual void ResetGlobals() = 0;
00091 virtual void RewindDictionary() = 0;
00092 virtual Int_t DeleteGlobal(void *obj) = 0;
00093 virtual void SaveContext() = 0;
00094 virtual void SaveGlobalsContext() = 0;
00095 virtual void UpdateListOfGlobals() = 0;
00096 virtual void UpdateListOfGlobalFunctions() = 0;
00097 virtual void UpdateListOfTypes() = 0;
00098 virtual void SetClassInfo(TClass *cl, Bool_t reload = kFALSE) = 0;
00099 virtual Bool_t CheckClassInfo(const char *name, Bool_t autoload = kTRUE) = 0;
00100 virtual Long_t Calc(const char *line, EErrorCode* error = 0) = 0;
00101 virtual void CreateListOfBaseClasses(TClass *cl) = 0;
00102 virtual void CreateListOfDataMembers(TClass *cl) = 0;
00103 virtual void CreateListOfMethods(TClass *cl) = 0;
00104 virtual void CreateListOfMethodArgs(TFunction *m) = 0;
00105 virtual void UpdateListOfMethods(TClass *cl) = 0;
00106 virtual TString GetMangledName(TClass *cl, const char *method, const char *params) = 0;
00107 virtual TString GetMangledNameWithPrototype(TClass *cl, const char *method, const char *proto) = 0;
00108 virtual const char *GetInterpreterTypeName(const char *name,Bool_t full = kFALSE) = 0;
00109 virtual void *GetInterfaceMethod(TClass *cl, const char *method, const char *params) = 0;
00110 virtual void *GetInterfaceMethodWithPrototype(TClass *cl, const char *method, const char *proto) = 0;
00111 virtual void Execute(const char *function, const char *params, int *error = 0) = 0;
00112 virtual void Execute(TObject *obj, TClass *cl, const char *method, const char *params, int *error = 0) = 0;
00113 virtual void Execute(TObject *obj, TClass *cl, TMethod *method, TObjArray *params, int *error = 0) = 0;
00114 virtual Long_t ExecuteMacro(const char *filename, EErrorCode *error = 0) = 0;
00115 virtual Bool_t IsErrorMessagesEnabled() const = 0;
00116 virtual Bool_t SetErrorMessages(Bool_t enable = kTRUE) = 0;
00117 virtual Bool_t IsProcessLineLocked() const = 0;
00118 virtual void SetProcessLineLock(Bool_t lock = kTRUE) = 0;
00119 virtual const char *TypeName(const char *s) = 0;
00120
00121
00122
00123
00124
00125
00126 virtual int DisplayClass(FILE * ,char * ,int ,int ) const {return 0;}
00127 virtual int DisplayIncludePath(FILE * ) const {return 0;}
00128 virtual void *FindSym(const char * ) const {return 0;}
00129 virtual void GenericError(const char * ) const {;}
00130 virtual Long_t GetExecByteCode() const {return 0;}
00131 virtual Long_t Getgvp() const {return 0;}
00132 virtual const char *Getp2f2funcname(void * ) const {return 0;}
00133 virtual const char *GetTopLevelMacroName() const {return 0;};
00134 virtual const char *GetCurrentMacroName() const {return 0;};
00135 virtual int GetSecurityError() const{return 0;}
00136 virtual int LoadFile(const char * ) const {return 0;}
00137 virtual void LoadText(const char * ) const {;}
00138 virtual const char *MapCppName(const char*) const {return 0;}
00139 virtual void SetAlloclockfunc(void (*)()) const {;}
00140 virtual void SetAllocunlockfunc(void (*)()) const {;}
00141 virtual int SetClassAutoloading(int) const {return 0;}
00142 virtual void SetErrmsgcallback(void * ) const {;}
00143 virtual void Setgvp(Long_t) const {;}
00144 virtual void SetRTLD_NOW() const {;}
00145 virtual void SetRTLD_LAZY() const {;}
00146 virtual void SetTempLevel(int ) const {;}
00147 virtual int UnloadFile(const char * ) const {return 0;}
00148
00149
00150
00151 virtual void CallFunc_Delete(void * ) const {;}
00152 virtual void CallFunc_Exec(CallFunc_t * , void * ) const {;}
00153 virtual Long_t CallFunc_ExecInt(CallFunc_t * , void * ) const {return 0;}
00154 virtual Long_t CallFunc_ExecInt64(CallFunc_t * , void * ) const {return 0;}
00155 virtual Double_t CallFunc_ExecDouble(CallFunc_t * , void * ) const {return 0;}
00156 virtual CallFunc_t *CallFunc_Factory() const {return 0;}
00157 virtual CallFunc_t *CallFunc_FactoryCopy(CallFunc_t * ) const {return 0;}
00158 virtual MethodInfo_t *CallFunc_FactoryMethod(CallFunc_t * ) const {return 0;}
00159 virtual void CallFunc_Init(CallFunc_t * ) const {;}
00160 virtual bool CallFunc_IsValid(CallFunc_t * ) const {return 0;}
00161 virtual void CallFunc_ResetArg(CallFunc_t * ) const {;}
00162 virtual void CallFunc_SetArg(CallFunc_t * , Long_t ) const {;}
00163 virtual void CallFunc_SetArg(CallFunc_t * , Double_t ) const {;}
00164 virtual void CallFunc_SetArg(CallFunc_t * , Long64_t ) const {;}
00165 virtual void CallFunc_SetArg(CallFunc_t * , ULong64_t ) const {;}
00166 virtual void CallFunc_SetArgArray(CallFunc_t * , Long_t * , Int_t ) const {;}
00167 virtual void CallFunc_SetArgs(CallFunc_t * , const char * ) const {;}
00168 virtual void CallFunc_SetFunc(CallFunc_t * , ClassInfo_t * , const char * , const char * , Long_t * ) const {;}
00169 virtual void CallFunc_SetFunc(CallFunc_t * , MethodInfo_t * ) const {;}
00170 virtual void CallFunc_SetFuncProto(CallFunc_t * , ClassInfo_t * , const char * , const char * , Long_t * ) const {;}
00171
00172
00173
00174 virtual Long_t ClassInfo_ClassProperty(ClassInfo_t * ) const {return 0;}
00175 virtual void ClassInfo_Delete(ClassInfo_t * ) const {;}
00176 virtual void ClassInfo_Delete(ClassInfo_t * , void * ) const {;}
00177 virtual void ClassInfo_DeleteArray(ClassInfo_t * , void * , bool ) const {;}
00178 virtual void ClassInfo_Destruct(ClassInfo_t * , void * ) const {;}
00179 virtual ClassInfo_t *ClassInfo_Factory() const {return 0;}
00180 virtual ClassInfo_t *ClassInfo_Factory(G__value * ) const {return 0;}
00181 virtual ClassInfo_t *ClassInfo_Factory(ClassInfo_t * ) const {return 0;}
00182 virtual ClassInfo_t *ClassInfo_Factory(const char * ) const {return 0;}
00183 virtual int ClassInfo_GetMethodNArg(ClassInfo_t * , const char * ,const char * ) const {return 0;}
00184 virtual bool ClassInfo_HasDefaultConstructor(ClassInfo_t * ) const {return 0;}
00185 virtual bool ClassInfo_HasMethod(ClassInfo_t * , const char * ) const {return 0;}
00186 virtual void ClassInfo_Init(ClassInfo_t * , const char * ) const {;}
00187 virtual void ClassInfo_Init(ClassInfo_t * , int ) const {;}
00188 virtual bool ClassInfo_IsBase(ClassInfo_t * , const char * ) const {return 0;}
00189 virtual bool ClassInfo_IsEnum(const char * ) const {return 0;}
00190 virtual bool ClassInfo_IsLoaded(ClassInfo_t * ) const {return 0;}
00191 virtual bool ClassInfo_IsValid(ClassInfo_t * ) const {return 0;}
00192 virtual bool ClassInfo_IsValidMethod(ClassInfo_t * , const char * ,const char * , Long_t * ) const {return 0;}
00193 virtual int ClassInfo_Next(ClassInfo_t * ) const {return 0;}
00194 virtual void *ClassInfo_New(ClassInfo_t * ) const {return 0;}
00195 virtual void *ClassInfo_New(ClassInfo_t * , int ) const {return 0;}
00196 virtual void *ClassInfo_New(ClassInfo_t * , int , void * ) const {return 0;}
00197 virtual void *ClassInfo_New(ClassInfo_t * , void * ) const {return 0;}
00198 virtual Long_t ClassInfo_Property(ClassInfo_t * ) const {return 0;}
00199 virtual int ClassInfo_RootFlag(ClassInfo_t * ) const {return 0;}
00200 virtual int ClassInfo_Size(ClassInfo_t * ) const {return 0;}
00201 virtual Long_t ClassInfo_Tagnum(ClassInfo_t * ) const {return 0;}
00202 virtual const char *ClassInfo_FileName(ClassInfo_t * ) const {return 0;}
00203 virtual const char *ClassInfo_FullName(ClassInfo_t * ) const {return 0;}
00204 virtual const char *ClassInfo_Name(ClassInfo_t * ) const {return 0;}
00205 virtual const char *ClassInfo_Title(ClassInfo_t * ) const {return 0;}
00206 virtual const char *ClassInfo_TmpltName(ClassInfo_t * ) const {return 0;}
00207
00208
00209
00210 virtual void BaseClassInfo_Delete(BaseClassInfo_t * ) const {;}
00211 virtual BaseClassInfo_t *BaseClassInfo_Factory(ClassInfo_t * ) const {return 0;}
00212 virtual int BaseClassInfo_Next(BaseClassInfo_t * ) const {return 0;}
00213 virtual int BaseClassInfo_Next(BaseClassInfo_t * , int ) const {return 0;}
00214 virtual Long_t BaseClassInfo_Offset(BaseClassInfo_t * ) const {return 0;}
00215 virtual Long_t BaseClassInfo_Property(BaseClassInfo_t * ) const {return 0;}
00216 virtual Long_t BaseClassInfo_Tagnum(BaseClassInfo_t * ) const {return 0;}
00217 virtual const char *BaseClassInfo_FullName(BaseClassInfo_t * ) const {return 0;}
00218 virtual const char *BaseClassInfo_Name(BaseClassInfo_t * ) const {return 0;}
00219 virtual const char *BaseClassInfo_TmpltName(BaseClassInfo_t * ) const {return 0;}
00220
00221
00222 virtual int DataMemberInfo_ArrayDim(DataMemberInfo_t * ) const {return 0;}
00223 virtual void DataMemberInfo_Delete(DataMemberInfo_t * ) const {;}
00224 virtual DataMemberInfo_t *DataMemberInfo_Factory(ClassInfo_t * = 0) const {return 0;}
00225 virtual DataMemberInfo_t *DataMemberInfo_FactoryCopy(DataMemberInfo_t * ) const {return 0;}
00226 virtual bool DataMemberInfo_IsValid(DataMemberInfo_t * ) const {return 0;}
00227 virtual int DataMemberInfo_MaxIndex(DataMemberInfo_t * , Int_t ) const {return 0;}
00228 virtual int DataMemberInfo_Next(DataMemberInfo_t * ) const {return 0;}
00229 virtual Long_t DataMemberInfo_Offset(DataMemberInfo_t * ) const {return 0;}
00230 virtual Long_t DataMemberInfo_Property(DataMemberInfo_t * ) const {return 0;}
00231 virtual Long_t DataMemberInfo_TypeProperty(DataMemberInfo_t * ) const {return 0;}
00232 virtual int DataMemberInfo_TypeSize(DataMemberInfo_t * ) const {return 0;}
00233 virtual const char *DataMemberInfo_TypeName(DataMemberInfo_t * ) const {return 0;}
00234 virtual const char *DataMemberInfo_TypeTrueName(DataMemberInfo_t * ) const {return 0;}
00235 virtual const char *DataMemberInfo_Name(DataMemberInfo_t * ) const {return 0;}
00236 virtual const char *DataMemberInfo_Title(DataMemberInfo_t * ) const {return 0;}
00237 virtual const char *DataMemberInfo_ValidArrayIndex(DataMemberInfo_t * ) const {return 0;}
00238
00239
00240 virtual void MethodInfo_CreateSignature(MethodInfo_t * , TString & ) const {;}
00241 virtual void MethodInfo_Delete(MethodInfo_t * ) const {;}
00242 virtual MethodInfo_t *MethodInfo_Factory() const {return 0;}
00243 virtual MethodInfo_t *MethodInfo_FactoryCopy(MethodInfo_t * ) const {return 0;}
00244 virtual MethodInfo_t *MethodInfo_InterfaceMethod(MethodInfo_t * ) const {return 0;}
00245 virtual bool MethodInfo_IsValid(MethodInfo_t * ) const {return 0;}
00246 virtual int MethodInfo_NArg(MethodInfo_t * ) const {return 0;}
00247 virtual int MethodInfo_NDefaultArg(MethodInfo_t * ) const {return 0;}
00248 virtual int MethodInfo_Next(MethodInfo_t * ) const {return 0;}
00249 virtual Long_t MethodInfo_Property(MethodInfo_t * ) const {return 0;}
00250 virtual TypeInfo_t *MethodInfo_Type(MethodInfo_t * ) const {return 0;}
00251 virtual const char *MethodInfo_GetMangledName(MethodInfo_t * ) const {return 0;}
00252 virtual const char *MethodInfo_GetPrototype(MethodInfo_t * ) const {return 0;}
00253 virtual const char *MethodInfo_Name(MethodInfo_t * ) const {return 0;}
00254 virtual const char *MethodInfo_TypeName(MethodInfo_t * ) const {return 0;}
00255 virtual const char *MethodInfo_Title(MethodInfo_t * ) const {return 0;}
00256
00257
00258 virtual void MethodArgInfo_Delete(MethodArgInfo_t * ) const {;}
00259 virtual MethodArgInfo_t *MethodArgInfo_Factory() const {return 0;}
00260 virtual MethodArgInfo_t *MethodArgInfo_FactoryCopy(MethodArgInfo_t * ) const {return 0;}
00261 virtual bool MethodArgInfo_IsValid(MethodArgInfo_t * ) const {return 0;}
00262 virtual int MethodArgInfo_Next(MethodArgInfo_t * ) const {return 0;}
00263 virtual Long_t MethodArgInfo_Property(MethodArgInfo_t * ) const {return 0;}
00264 virtual const char *MethodArgInfo_DefaultValue(MethodArgInfo_t * ) const {return 0;}
00265 virtual const char *MethodArgInfo_Name(MethodArgInfo_t * ) const {return 0;}
00266 virtual const char *MethodArgInfo_TypeName(MethodArgInfo_t * ) const {return 0;}
00267
00268
00269
00270 virtual void TypeInfo_Delete(TypeInfo_t * ) const {;}
00271 virtual TypeInfo_t *TypeInfo_Factory() const {return 0;}
00272 virtual TypeInfo_t *TypeInfo_Factory(G__value * ) const {return 0;}
00273 virtual TypeInfo_t *TypeInfo_FactoryCopy(TypeInfo_t * ) const {return 0;}
00274 virtual void TypeInfo_Init(TypeInfo_t * , const char * ) const {;}
00275 virtual bool TypeInfo_IsValid(TypeInfo_t * ) const {return 0;}
00276 virtual const char *TypeInfo_Name(TypeInfo_t * ) const {return 0;}
00277 virtual Long_t TypeInfo_Property(TypeInfo_t * ) const {return 0;}
00278 virtual int TypeInfo_RefType(TypeInfo_t * ) const {return 0;}
00279 virtual int TypeInfo_Size(TypeInfo_t * ) const {return 0;}
00280 virtual const char *TypeInfo_TrueName(TypeInfo_t * ) const {return 0;}
00281
00282
00283
00284 virtual void TypedefInfo_Delete(TypedefInfo_t * ) const {;}
00285 virtual TypedefInfo_t *TypedefInfo_Factory() const {return 0;}
00286 virtual TypedefInfo_t *TypedefInfo_FactoryCopy(TypedefInfo_t * ) const {return 0;}
00287 virtual void TypedefInfo_Init(TypedefInfo_t * , const char * ) const {;}
00288 virtual bool TypedefInfo_IsValid(TypedefInfo_t * ) const {return 0;}
00289 virtual Long_t TypedefInfo_Property(TypedefInfo_t * ) const {return 0;}
00290 virtual int TypedefInfo_Size(TypedefInfo_t * ) const {return 0;}
00291 virtual const char *TypedefInfo_TrueName(TypedefInfo_t * ) const {return 0;}
00292 virtual const char *TypedefInfo_Name(TypedefInfo_t * ) const {return 0;}
00293 virtual const char *TypedefInfo_Title(TypedefInfo_t * ) const {return 0;}
00294
00295 static TInterpreter *&Instance();
00296
00297 ClassDef(TInterpreter,0)
00298 };
00299
00300 #ifndef __CINT__
00301 #define gInterpreter (TInterpreter::Instance())
00302 R__EXTERN TInterpreter* (*gPtr2Interpreter)();
00303 R__EXTERN TInterpreter* gCint;
00304 #endif
00305
00306 #endif