TInterpreter.h

Go to the documentation of this file.
00001 // @(#)root/meta:$Id: TInterpreter.h 34701 2010-08-02 20:10:24Z pcanal $
00002 // Author: Fons Rademakers   01/03/96
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00010  *************************************************************************/
00011 
00012 
00013 #ifndef ROOT_TInterpreter
00014 #define ROOT_TInterpreter
00015 
00016 //////////////////////////////////////////////////////////////////////////
00017 //                                                                      //
00018 // TInterpreter                                                         //
00019 //                                                                      //
00020 // This class defines an abstract interface to a generic command line   //
00021 // interpreter.                                                         //
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() { }   // for Dictionary
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; // Delete existing temporary values
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    // All the functions below must be virtual with a dummy implementation
00122    // These functions are redefined in TCint.
00123    //The dummy implementation avoids an implementation in TGWin32InterpreterProxy
00124 
00125    // Misc
00126    virtual int    DisplayClass(FILE * /* fout */,char * /* name */,int /* base */,int /* start */) const {return 0;}
00127    virtual int    DisplayIncludePath(FILE * /* fout */) const {return 0;}
00128    virtual void  *FindSym(const char * /* entry */) const {return 0;}
00129    virtual void   GenericError(const char * /* error */) const {;}
00130    virtual Long_t GetExecByteCode() const {return 0;}
00131    virtual Long_t Getgvp() const {return 0;}
00132    virtual const char *Getp2f2funcname(void * /* receiver */) 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 * /* path */) const {return 0;}
00137    virtual void   LoadText(const char * /* text */) 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 * /* p */) 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 /* val */) const {;}
00147    virtual int    UnloadFile(const char * /* path */) const {return 0;}
00148    
00149    
00150    // G__CallFunc interface
00151    virtual void   CallFunc_Delete(void * /* func */) const {;}
00152    virtual void   CallFunc_Exec(CallFunc_t * /* func */, void * /* address */) const {;}
00153    virtual Long_t    CallFunc_ExecInt(CallFunc_t * /* func */, void * /* address */) const {return 0;}
00154    virtual Long_t    CallFunc_ExecInt64(CallFunc_t * /* func */, void * /* address */) const {return 0;}
00155    virtual Double_t  CallFunc_ExecDouble(CallFunc_t * /* func */, void * /* address */) const {return 0;}
00156    virtual CallFunc_t   *CallFunc_Factory() const {return 0;}
00157    virtual CallFunc_t   *CallFunc_FactoryCopy(CallFunc_t * /* func */) const {return 0;}
00158    virtual MethodInfo_t *CallFunc_FactoryMethod(CallFunc_t * /* func */) const {return 0;}
00159    virtual void   CallFunc_Init(CallFunc_t * /* func */) const {;}
00160    virtual bool   CallFunc_IsValid(CallFunc_t * /* func */) const {return 0;}
00161    virtual void   CallFunc_ResetArg(CallFunc_t * /* func */) const {;}
00162    virtual void   CallFunc_SetArg(CallFunc_t * /*func */, Long_t /* param */) const {;}
00163    virtual void   CallFunc_SetArg(CallFunc_t * /* func */, Double_t /* param */) const {;}
00164    virtual void   CallFunc_SetArg(CallFunc_t * /* func */, Long64_t /* param */) const {;}
00165    virtual void   CallFunc_SetArg(CallFunc_t * /* func */, ULong64_t /* param */) const {;}
00166    virtual void   CallFunc_SetArgArray(CallFunc_t * /* func */, Long_t * /* paramArr */, Int_t /* nparam */) const {;}
00167    virtual void   CallFunc_SetArgs(CallFunc_t * /* func */, const char * /* param */) const {;}
00168    virtual void   CallFunc_SetFunc(CallFunc_t * /* func */, ClassInfo_t * /* info */, const char * /* method */, const char * /* params */, Long_t * /* Offset */) const {;}
00169    virtual void   CallFunc_SetFunc(CallFunc_t * /* func */, MethodInfo_t * /* info */) const {;}
00170    virtual void   CallFunc_SetFuncProto(CallFunc_t * /* func */, ClassInfo_t * /* info */, const char * /* method */, const char * /* proto */, Long_t * /* Offset */) const {;}
00171 
00172                
00173    // G__ClassInfo interface            
00174    virtual Long_t ClassInfo_ClassProperty(ClassInfo_t * /* info */) const {return 0;}
00175    virtual void   ClassInfo_Delete(ClassInfo_t * /* info */) const {;}
00176    virtual void   ClassInfo_Delete(ClassInfo_t * /* info */, void * /* arena */) const {;}
00177    virtual void   ClassInfo_DeleteArray(ClassInfo_t * /* info */, void * /* arena */, bool /* dtorOnly */) const {;}
00178    virtual void   ClassInfo_Destruct(ClassInfo_t * /* info */, void * /* arena */) const {;}
00179    virtual ClassInfo_t  *ClassInfo_Factory() const {return 0;}
00180    virtual ClassInfo_t  *ClassInfo_Factory(G__value * /* value */) const {return 0;}
00181    virtual ClassInfo_t  *ClassInfo_Factory(ClassInfo_t * /* cl */) const {return 0;}
00182    virtual ClassInfo_t  *ClassInfo_Factory(const char * /* name */) const {return 0;}
00183    virtual int    ClassInfo_GetMethodNArg(ClassInfo_t * /* info */, const char * /* method */,const char * /* proto */) const {return 0;}
00184    virtual bool   ClassInfo_HasDefaultConstructor(ClassInfo_t * /* info */) const {return 0;}             
00185    virtual bool   ClassInfo_HasMethod(ClassInfo_t * /* info */, const char * /* name */) const {return 0;}             
00186    virtual void   ClassInfo_Init(ClassInfo_t * /* info */, const char * /* funcname */) const {;}
00187    virtual void   ClassInfo_Init(ClassInfo_t * /* info */, int /* tagnum */) const {;}
00188    virtual bool   ClassInfo_IsBase(ClassInfo_t * /* info */, const char * /* name */) const {return 0;}
00189    virtual bool   ClassInfo_IsEnum(const char * /* name */) const {return 0;}
00190    virtual bool   ClassInfo_IsLoaded(ClassInfo_t * /* info */) const {return 0;}             
00191    virtual bool   ClassInfo_IsValid(ClassInfo_t * /* info */) const {return 0;}             
00192    virtual bool   ClassInfo_IsValidMethod(ClassInfo_t * /* info */, const char * /* method */,const char * /* proto */, Long_t * /* offset */) const {return 0;}             
00193    virtual int    ClassInfo_Next(ClassInfo_t * /* info */) const {return 0;}
00194    virtual void  *ClassInfo_New(ClassInfo_t * /* info */) const {return 0;}
00195    virtual void  *ClassInfo_New(ClassInfo_t * /* info */, int /* n */) const {return 0;}
00196    virtual void  *ClassInfo_New(ClassInfo_t * /* info */, int /* n */, void * /* arena */) const {return 0;}
00197    virtual void  *ClassInfo_New(ClassInfo_t * /* info */, void * /* arena */) const {return 0;}
00198    virtual Long_t ClassInfo_Property(ClassInfo_t * /* info */) const {return 0;}
00199    virtual int    ClassInfo_RootFlag(ClassInfo_t * /* info */) const {return 0;}
00200    virtual int    ClassInfo_Size(ClassInfo_t * /* info */) const {return 0;}
00201    virtual Long_t ClassInfo_Tagnum(ClassInfo_t * /* info */) const {return 0;}
00202    virtual const char *ClassInfo_FileName(ClassInfo_t * /* info */) const {return 0;}
00203    virtual const char *ClassInfo_FullName(ClassInfo_t * /* info */) const {return 0;}
00204    virtual const char *ClassInfo_Name(ClassInfo_t * /* info */) const {return 0;}
00205    virtual const char *ClassInfo_Title(ClassInfo_t * /* info */) const {return 0;}
00206    virtual const char *ClassInfo_TmpltName(ClassInfo_t * /* info */) const {return 0;}
00207    
00208                   
00209    // G__BaseClassInfo interface            
00210    virtual void   BaseClassInfo_Delete(BaseClassInfo_t * /* bcinfo */) const {;}
00211    virtual BaseClassInfo_t  *BaseClassInfo_Factory(ClassInfo_t * /* info */) const {return 0;}
00212    virtual int    BaseClassInfo_Next(BaseClassInfo_t * /* bcinfo */) const {return 0;}
00213    virtual int    BaseClassInfo_Next(BaseClassInfo_t * /* bcinfo */, int  /* onlyDirect */) const {return 0;}
00214    virtual Long_t BaseClassInfo_Offset(BaseClassInfo_t * /* bcinfo */) const {return 0;}
00215    virtual Long_t BaseClassInfo_Property(BaseClassInfo_t * /* bcinfo */) const {return 0;}
00216    virtual Long_t BaseClassInfo_Tagnum(BaseClassInfo_t * /* bcinfo */) const {return 0;}
00217    virtual const char *BaseClassInfo_FullName(BaseClassInfo_t * /* bcinfo */) const {return 0;}
00218    virtual const char *BaseClassInfo_Name(BaseClassInfo_t * /* bcinfo */) const {return 0;}
00219    virtual const char *BaseClassInfo_TmpltName(BaseClassInfo_t * /* bcinfo */) const {return 0;}
00220                
00221    // G__DataMemberInfo interface            
00222    virtual int    DataMemberInfo_ArrayDim(DataMemberInfo_t * /* dminfo */) const {return 0;}
00223    virtual void   DataMemberInfo_Delete(DataMemberInfo_t * /* dminfo */) const {;}
00224    virtual DataMemberInfo_t  *DataMemberInfo_Factory(ClassInfo_t * /* clinfo */ = 0) const {return 0;}
00225    virtual DataMemberInfo_t  *DataMemberInfo_FactoryCopy(DataMemberInfo_t * /* dminfo */) const {return 0;}
00226    virtual bool   DataMemberInfo_IsValid(DataMemberInfo_t * /* dminfo */) const {return 0;}
00227    virtual int    DataMemberInfo_MaxIndex(DataMemberInfo_t * /* dminfo */, Int_t  /* dim */) const {return 0;}
00228    virtual int    DataMemberInfo_Next(DataMemberInfo_t * /* dminfo */) const {return 0;}
00229    virtual Long_t DataMemberInfo_Offset(DataMemberInfo_t * /* dminfo */) const {return 0;}
00230    virtual Long_t DataMemberInfo_Property(DataMemberInfo_t * /* dminfo */) const {return 0;}
00231    virtual Long_t DataMemberInfo_TypeProperty(DataMemberInfo_t * /* dminfo */) const {return 0;}
00232    virtual int    DataMemberInfo_TypeSize(DataMemberInfo_t * /* dminfo */) const {return 0;}
00233    virtual const char *DataMemberInfo_TypeName(DataMemberInfo_t * /* dminfo */) const {return 0;}
00234    virtual const char *DataMemberInfo_TypeTrueName(DataMemberInfo_t * /* dminfo */) const {return 0;}
00235    virtual const char *DataMemberInfo_Name(DataMemberInfo_t * /* dminfo */) const {return 0;}
00236    virtual const char *DataMemberInfo_Title(DataMemberInfo_t * /* dminfo */) const {return 0;}
00237    virtual const char *DataMemberInfo_ValidArrayIndex(DataMemberInfo_t * /* dminfo */) const {return 0;}
00238                
00239    // G__MethodInfo interface            
00240    virtual void   MethodInfo_CreateSignature(MethodInfo_t * /* minfo */, TString & /* signature */) const {;}
00241    virtual void   MethodInfo_Delete(MethodInfo_t * /* minfo */) const {;}
00242    virtual MethodInfo_t  *MethodInfo_Factory() const {return 0;}
00243    virtual MethodInfo_t  *MethodInfo_FactoryCopy(MethodInfo_t * /* minfo */) const {return 0;}
00244    virtual MethodInfo_t  *MethodInfo_InterfaceMethod(MethodInfo_t * /* minfo */) const {return 0;}
00245    virtual bool   MethodInfo_IsValid(MethodInfo_t * /* minfo */) const {return 0;}
00246    virtual int    MethodInfo_NArg(MethodInfo_t * /* minfo */) const {return 0;}
00247    virtual int    MethodInfo_NDefaultArg(MethodInfo_t * /* minfo */) const {return 0;}
00248    virtual int    MethodInfo_Next(MethodInfo_t * /* minfo */) const {return 0;}
00249    virtual Long_t MethodInfo_Property(MethodInfo_t * /* minfo */) const {return 0;}
00250    virtual TypeInfo_t  *MethodInfo_Type(MethodInfo_t * /* minfo */) const {return 0;}
00251    virtual const char *MethodInfo_GetMangledName(MethodInfo_t * /* minfo */) const {return 0;}
00252    virtual const char *MethodInfo_GetPrototype(MethodInfo_t * /* minfo */) const {return 0;}
00253    virtual const char *MethodInfo_Name(MethodInfo_t * /* minfo */) const {return 0;}
00254    virtual const char *MethodInfo_TypeName(MethodInfo_t * /* minfo */) const {return 0;}
00255    virtual const char *MethodInfo_Title(MethodInfo_t * /* minfo */) const {return 0;}
00256                
00257    // G__MethodArgInfo interface            
00258    virtual void   MethodArgInfo_Delete(MethodArgInfo_t * /* marginfo */) const {;}
00259    virtual MethodArgInfo_t  *MethodArgInfo_Factory() const {return 0;}
00260    virtual MethodArgInfo_t  *MethodArgInfo_FactoryCopy(MethodArgInfo_t * /* marginfo */) const {return 0;}
00261    virtual bool   MethodArgInfo_IsValid(MethodArgInfo_t * /* marginfo */) const {return 0;}
00262    virtual int    MethodArgInfo_Next(MethodArgInfo_t * /* marginfo */) const {return 0;}
00263    virtual Long_t MethodArgInfo_Property(MethodArgInfo_t * /* marginfo */) const {return 0;}
00264    virtual const char *MethodArgInfo_DefaultValue(MethodArgInfo_t * /* marginfo */) const {return 0;}
00265    virtual const char *MethodArgInfo_Name(MethodArgInfo_t * /* marginfo */) const {return 0;}
00266    virtual const char *MethodArgInfo_TypeName(MethodArgInfo_t * /* marginfo */) const {return 0;}
00267 
00268                   
00269    // G__TypeInfo interface            
00270    virtual void    TypeInfo_Delete(TypeInfo_t * /* tinfo */) const {;}
00271    virtual TypeInfo_t *TypeInfo_Factory() const {return 0;}
00272    virtual TypeInfo_t *TypeInfo_Factory(G__value * /* value */) const {return 0;}
00273    virtual TypeInfo_t *TypeInfo_FactoryCopy(TypeInfo_t * /* tinfo */) const {return 0;}
00274    virtual void   TypeInfo_Init(TypeInfo_t * /* tinfo */, const char * /* funcname */) const {;}
00275    virtual bool   TypeInfo_IsValid(TypeInfo_t * /* tinfo */) const {return 0;}
00276    virtual const char *TypeInfo_Name(TypeInfo_t * /* info */) const {return 0;}
00277    virtual Long_t TypeInfo_Property(TypeInfo_t * /* tinfo */) const {return 0;}
00278    virtual int    TypeInfo_RefType(TypeInfo_t * /* tinfo */) const {return 0;}
00279    virtual int    TypeInfo_Size(TypeInfo_t * /* tinfo */) const {return 0;}
00280    virtual const char *TypeInfo_TrueName(TypeInfo_t * /* tinfo */) const {return 0;}
00281    
00282                   
00283    // G__TypedefInfo interface            
00284    virtual void   TypedefInfo_Delete(TypedefInfo_t * /* tinfo */) const {;}
00285    virtual TypedefInfo_t  *TypedefInfo_Factory() const {return 0;}
00286    virtual TypedefInfo_t  *TypedefInfo_FactoryCopy(TypedefInfo_t * /* tinfo */) const {return 0;}
00287    virtual void   TypedefInfo_Init(TypedefInfo_t * /* tinfo */, const char * /* funcname */) const {;}
00288    virtual bool   TypedefInfo_IsValid(TypedefInfo_t * /* tinfo */) const {return 0;}
00289    virtual Long_t TypedefInfo_Property(TypedefInfo_t * /* tinfo */) const {return 0;}
00290    virtual int    TypedefInfo_Size(TypedefInfo_t * /* tinfo */) const {return 0;}
00291    virtual const char *TypedefInfo_TrueName(TypedefInfo_t * /* tinfo */) const {return 0;}
00292    virtual const char *TypedefInfo_Name(TypedefInfo_t * /* tinfo */) const {return 0;}
00293    virtual const char *TypedefInfo_Title(TypedefInfo_t * /* tinfo */) const {return 0;}
00294 
00295    static TInterpreter  *&Instance();
00296 
00297    ClassDef(TInterpreter,0)  //ABC defining interface to generic interpreter
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

Generated on Tue Jul 5 14:11:40 2011 for ROOT_528-00b_version by  doxygen 1.5.1