R:/sourcemod/trunk/sourcepawn/include/sp_vm_api.h

00001 #ifndef _INCLUDE_SOURCEPAWN_VM_API_H_
00002 #define _INCLUDE_SOURCEPAWN_VM_API_H_
00003 
00004 #include <stdio.h>
00005 #include "sp_vm_types.h"
00006 
00007 #define SOURCEPAWN_VM_API_VERSION               1
00008 
00009 #if defined SOURCEMOD_BUILD
00010 namespace SourceMod
00011 {
00012         struct IdentityToken_t;
00013 };
00014 #endif
00015 
00016 namespace SourcePawn
00017 {
00018         class IVirtualMachine;
00019 
00023         class IPluginDebugInfo
00024         {
00025         public:
00032                 virtual int LookupFile(ucell_t addr, const char **filename) =0;
00033 
00040                 virtual int LookupFunction(ucell_t addr, const char **name) =0;
00041 
00048                 virtual int LookupLine(ucell_t addr, uint32_t *line) =0;
00049         };
00050 
00054         class IPluginContext
00055         {
00056         public:
00057                 virtual ~IPluginContext() { };
00058         public:
00064                 virtual IVirtualMachine *GetVirtualMachine() =0;
00065 
00071                 virtual sp_context_t *GetContext() =0;
00072 
00078                 virtual bool IsDebugging() =0;
00079 
00087                 virtual int SetDebugBreak(SPVM_DEBUGBREAK newpfn, SPVM_DEBUGBREAK *oldpfn) =0;
00088 
00094                 virtual IPluginDebugInfo *GetDebugInfo() =0;
00095 
00104                 virtual int HeapAlloc(unsigned int cells, cell_t *local_addr, cell_t **phys_addr) =0;
00105 
00114                 virtual int HeapPop(cell_t local_addr) =0;
00115 
00127                 virtual int HeapRelease(cell_t local_addr) =0;
00128 
00135                 virtual int FindNativeByName(const char *name, uint32_t *index) =0;
00136 
00143                 virtual int GetNativeByIndex(uint32_t index, sp_native_t **native) =0;
00144 
00150                 virtual uint32_t GetNativesNum() =0;
00151 
00158                 virtual int FindPublicByName(const char *name, uint32_t *index) =0;
00159 
00166                 virtual int GetPublicByIndex(uint32_t index, sp_public_t **publicptr) =0;
00167 
00173                 virtual uint32_t GetPublicsNum() =0;
00174 
00181                 virtual int GetPubvarByIndex(uint32_t index, sp_pubvar_t **pubvar) =0;
00182 
00189                 virtual int FindPubvarByName(const char *name, uint32_t *index) =0;
00190 
00198                 virtual int GetPubvarAddrs(uint32_t index, cell_t *local_addr, cell_t **phys_addr) =0;
00199 
00205                 virtual uint32_t GetPubVarsNum() =0;
00206 
00213                 virtual int LocalToPhysAddr(cell_t local_addr, cell_t **phys_addr) =0;
00214 
00221                 virtual int LocalToString(cell_t local_addr, char **addr) =0;
00222 
00230                 virtual int StringToLocal(cell_t local_addr, size_t bytes, const char *source) =0;
00231 
00242                 virtual int StringToLocalUTF8(cell_t local_addr, 
00243                                                                           size_t maxbytes, 
00244                                                                           const char *source, 
00245                                                                           size_t *wrtnbytes) =0;
00246 
00252                 virtual int PushCell(cell_t value) =0;
00253 
00265                 virtual int PushCellArray(cell_t *local_addr, cell_t **phys_addr, cell_t array[], unsigned int numcells) =0;
00266 
00276                 virtual int PushString(cell_t *local_addr, char **phys_addr, const char *string) =0;
00277 
00286                 virtual int PushCellsFromArray(cell_t array[], unsigned int numcells) =0;
00287 
00297                 virtual int BindNatives(sp_nativeinfo_t *natives, unsigned int num, int overwrite) =0;
00298 
00306                 virtual int BindNative(sp_nativeinfo_t *native) =0;
00307 
00313                 virtual int BindNativeToAny(SPVM_NATIVE_FUNC native) =0;
00314 
00322                 virtual int Execute(uint32_t funcid, cell_t *result) =0;
00323 
00324 
00332                 virtual void ThrowNativeErrorEx(int error, const char *msg, ...) =0;
00333 
00341                 virtual cell_t ThrowNativeError(const char *msg, ...) =0;
00342 
00343 #if defined SOURCEMOD_BUILD
00344 
00350                 virtual SourceMod::IdentityToken_t *GetIdentity() =0;
00351 #endif
00352         };
00353 
00354 
00358         struct CallStackInfo
00359         {
00360                 const char *filename;           /* NULL if not found */
00361                 unsigned int line;                      /* 0 if not found */
00362                 const char *function;           /* NULL if not found */
00363         };
00364 
00368         class IContextTrace
00369         {
00370         public:
00376                 virtual int GetErrorCode() =0;
00377 
00383                 virtual const char *GetErrorString() =0;
00384 
00390                 virtual bool DebugInfoAvailable() =0;
00391 
00397                 virtual const char *GetCustomErrorString() =0;
00398 
00407                 virtual bool GetTraceInfo(CallStackInfo *trace) =0;
00408 
00412                 virtual void ResetTrace() =0;
00413 
00421                 virtual const char *GetLastNative(uint32_t *index) =0;
00422         };
00423 
00424 
00428         class IDebugListener
00429         {
00430         public:
00431                 virtual void OnContextExecuteError(IPluginContext *ctx, IContextTrace *error) =0;
00432         };
00433 
00434 
00438         class ISourcePawnEngine
00439         {
00440         public:
00449                 virtual sp_plugin_t *LoadFromFilePointer(FILE *fp, int *err) =0;
00450         
00460                 virtual sp_plugin_t *LoadFromMemory(void *base, sp_plugin_t *plugin, int *err) =0;
00461 
00467                 virtual int FreeFromMemory(sp_plugin_t *plugin) =0;
00468 
00475                 virtual void *BaseAlloc(size_t size) =0;
00476 
00482                 virtual void BaseFree(void *memory) =0;
00483 
00490                 virtual void *ExecAlloc(size_t size) =0;
00491 
00497                 virtual void ExecFree(void *address) =0;
00498 
00508                 virtual IDebugListener *SetDebugListener(IDebugListener *listener) =0;
00509                 
00515                 virtual unsigned int GetContextCallCount() =0;
00516         };
00517 
00518 
00522         class ICompilation
00523         {
00524         public:
00525                 virtual ~ICompilation() { };
00526         };
00527 
00528 
00532         class IVirtualMachine
00533         {
00534         public:
00538                 virtual unsigned int GetAPIVersion() =0;
00539 
00543                 virtual const char *GetVMName() =0;
00544 
00551                 virtual ICompilation *StartCompilation(sp_plugin_t *plugin) =0;
00552 
00561                 virtual bool SetCompilationOption(ICompilation *co, const char *key, const char *val) =0;
00562 
00571                 virtual sp_context_t *CompileToContext(ICompilation *co, int *err) =0;
00572 
00578                 virtual void AbortCompilation(ICompilation *co) =0;
00579 
00585                 virtual void FreeContext(sp_context_t *ctx) =0;
00586 
00595                 virtual int ContextExecute(sp_context_t *ctx, uint32_t code_addr, cell_t *result) =0;
00596 
00605                 virtual bool FunctionLookup(const sp_context_t *ctx, uint32_t code_addr, unsigned int *result) =0;
00606 
00613                 virtual unsigned int FunctionCount(const sp_context_t *ctx) =0;
00614 
00620                 virtual const char *GetVersionString() =0;
00621 
00627                 virtual const char *GetCPUOptimizations() =0;
00628         };
00629 };
00630 
00631 #endif //_INCLUDE_SOURCEPAWN_VM_API_H_

Generated on Thu Jan 4 13:34:37 2007 for SourcePawn JIT by  doxygen 1.5.1-p1