Merge pull request #279 from alliedmodders/mv-basecontext

Rename BaseContext to PluginContext.
This commit is contained in:
David Anderson 2015-02-24 14:56:32 -08:00
commit 8c35d79576
10 changed files with 74 additions and 78 deletions

View File

@ -32,11 +32,11 @@ library.sources += [
'api.cpp', 'api.cpp',
'code-allocator.cpp', 'code-allocator.cpp',
'code-stubs.cpp', 'code-stubs.cpp',
'plugin-context.cpp',
'plugin-runtime.cpp', 'plugin-runtime.cpp',
'compiled-function.cpp', 'compiled-function.cpp',
'debug-trace.cpp', 'debug-trace.cpp',
'environment.cpp', 'environment.cpp',
'sp_vm_basecontext.cpp',
'scripted-invoker.cpp', 'scripted-invoker.cpp',
'opcodes.cpp', 'opcodes.cpp',
'interpreter.cpp', 'interpreter.cpp',

View File

@ -11,7 +11,7 @@
// SourcePawn. If not, see http://www.gnu.org/licenses/. // SourcePawn. If not, see http://www.gnu.org/licenses/.
// //
#include "debug-trace.h" #include "debug-trace.h"
#include "sp_vm_basecontext.h" #include "plugin-context.h"
#include "environment.h" #include "environment.h"
using namespace ke; using namespace ke;

View File

@ -20,7 +20,7 @@
#include <sp_vm_types.h> #include <sp_vm_types.h>
#include <sp_vm_api.h> #include <sp_vm_api.h>
#include "plugin-runtime.h" #include "plugin-runtime.h"
#include "sp_vm_basecontext.h" #include "plugin-context.h"
struct tracker_t struct tracker_t
{ {

View File

@ -25,7 +25,7 @@ typedef struct sp_plugin_debug_s
bool unpacked; /**< Whether debug structures are unpacked */ bool unpacked; /**< Whether debug structures are unpacked */
} sp_plugin_debug_t; } sp_plugin_debug_t;
class BaseContext; class PluginContext;
/** /**
* Breaks into a debugger * Breaks into a debugger
@ -34,7 +34,7 @@ class BaseContext;
* [1] - frm * [1] - frm
* [2] - cip * [2] - cip
*/ */
typedef int (*SPVM_DEBUGBREAK)(BaseContext *, uint32_t, uint32_t); typedef int (*SPVM_DEBUGBREAK)(PluginContext *, uint32_t, uint32_t);
/** /**
* @brief The rebased memory format of a plugin. This differs from the on-disk structure * @brief The rebased memory format of a plugin. This differs from the on-disk structure
@ -69,7 +69,7 @@ namespace SourcePawn
} }
struct tracker_t; struct tracker_t;
class BaseContext; class PluginContext;
typedef struct sp_context_s typedef struct sp_context_s
{ {
@ -83,7 +83,7 @@ typedef struct sp_context_s
uint32_t n_idx; /**< Current native index being executed */ uint32_t n_idx; /**< Current native index being executed */
tracker_t *tracker; tracker_t *tracker;
sp_plugin_t *plugin; sp_plugin_t *plugin;
BaseContext *basecx; PluginContext *basecx;
void * vm[8]; /**< VM-specific pointers */ void * vm[8]; /**< VM-specific pointers */
cell_t rp; /**< Return stack pointer */ cell_t rp; /**< Return stack pointer */
cell_t rstk_cips[SP_MAX_RETURN_STACK]; cell_t rstk_cips[SP_MAX_RETURN_STACK];

View File

@ -14,8 +14,8 @@
#include <stdarg.h> #include <stdarg.h>
#include <assert.h> #include <assert.h>
#include <limits.h> #include <limits.h>
#include "sp_vm_api.h" #include <sp_vm_api.h>
#include "sp_vm_basecontext.h" #include "plugin-context.h"
#include "watchdog_timer.h" #include "watchdog_timer.h"
#include "x86/jit_x86.h" #include "x86/jit_x86.h"
#include "interpreter.h" #include "interpreter.h"
@ -26,7 +26,7 @@ using namespace SourcePawn;
#define CELLBOUNDMAX (INT_MAX/sizeof(cell_t)) #define CELLBOUNDMAX (INT_MAX/sizeof(cell_t))
#define STACKMARGIN ((cell_t)(16*sizeof(cell_t))) #define STACKMARGIN ((cell_t)(16*sizeof(cell_t)))
BaseContext::BaseContext(PluginRuntime *pRuntime) PluginContext::PluginContext(PluginRuntime *pRuntime)
{ {
m_pRuntime = pRuntime; m_pRuntime = pRuntime;
@ -66,56 +66,56 @@ BaseContext::BaseContext(PluginRuntime *pRuntime)
m_ctx.plugin = const_cast<sp_plugin_t *>(pRuntime->plugin()); m_ctx.plugin = const_cast<sp_plugin_t *>(pRuntime->plugin());
} }
BaseContext::~BaseContext() PluginContext::~PluginContext()
{ {
free(m_ctx.tracker->pBase); free(m_ctx.tracker->pBase);
delete m_ctx.tracker; delete m_ctx.tracker;
} }
IVirtualMachine * IVirtualMachine *
BaseContext::GetVirtualMachine() PluginContext::GetVirtualMachine()
{ {
return NULL; return NULL;
} }
sp_context_t * sp_context_t *
BaseContext::GetContext() PluginContext::GetContext()
{ {
return reinterpret_cast<sp_context_t *>((IPluginContext * )this); return reinterpret_cast<sp_context_t *>((IPluginContext * )this);
} }
sp_context_t * sp_context_t *
BaseContext::GetCtx() PluginContext::GetCtx()
{ {
return &m_ctx; return &m_ctx;
} }
bool bool
BaseContext::IsDebugging() PluginContext::IsDebugging()
{ {
return true; return true;
} }
int int
BaseContext::SetDebugBreak(void *newpfn, void *oldpfn) PluginContext::SetDebugBreak(void *newpfn, void *oldpfn)
{ {
return SP_ERROR_ABORTED; return SP_ERROR_ABORTED;
} }
IPluginDebugInfo * IPluginDebugInfo *
BaseContext::GetDebugInfo() PluginContext::GetDebugInfo()
{ {
return NULL; return NULL;
} }
int int
BaseContext::Execute(uint32_t code_addr, cell_t *result) PluginContext::Execute(uint32_t code_addr, cell_t *result)
{ {
return SP_ERROR_ABORTED; return SP_ERROR_ABORTED;
} }
void void
BaseContext::SetErrorMessage(const char *msg, va_list ap) PluginContext::SetErrorMessage(const char *msg, va_list ap)
{ {
m_CustomMsg = true; m_CustomMsg = true;
@ -123,7 +123,7 @@ BaseContext::SetErrorMessage(const char *msg, va_list ap)
} }
void void
BaseContext::_SetErrorMessage(const char *msg, ...) PluginContext::_SetErrorMessage(const char *msg, ...)
{ {
va_list ap; va_list ap;
va_start(ap, msg); va_start(ap, msg);
@ -132,7 +132,7 @@ BaseContext::_SetErrorMessage(const char *msg, ...)
} }
cell_t cell_t
BaseContext::ThrowNativeErrorEx(int error, const char *msg, ...) PluginContext::ThrowNativeErrorEx(int error, const char *msg, ...)
{ {
if (!m_InExec) if (!m_InExec)
return 0; return 0;
@ -150,7 +150,7 @@ BaseContext::ThrowNativeErrorEx(int error, const char *msg, ...)
} }
cell_t cell_t
BaseContext::ThrowNativeError(const char *msg, ...) PluginContext::ThrowNativeError(const char *msg, ...)
{ {
if (!m_InExec) if (!m_InExec)
return 0; return 0;
@ -168,7 +168,7 @@ BaseContext::ThrowNativeError(const char *msg, ...)
} }
int int
BaseContext::HeapAlloc(unsigned int cells, cell_t *local_addr, cell_t **phys_addr) PluginContext::HeapAlloc(unsigned int cells, cell_t *local_addr, cell_t **phys_addr)
{ {
cell_t *addr; cell_t *addr;
ucell_t realmem; ucell_t realmem;
@ -207,7 +207,7 @@ BaseContext::HeapAlloc(unsigned int cells, cell_t *local_addr, cell_t **phys_add
} }
int int
BaseContext::HeapPop(cell_t local_addr) PluginContext::HeapPop(cell_t local_addr)
{ {
cell_t cellcount; cell_t cellcount;
cell_t *addr; cell_t *addr;
@ -230,7 +230,7 @@ BaseContext::HeapPop(cell_t local_addr)
int int
BaseContext::HeapRelease(cell_t local_addr) PluginContext::HeapRelease(cell_t local_addr)
{ {
if (local_addr < (cell_t)m_pRuntime->plugin()->data_size) if (local_addr < (cell_t)m_pRuntime->plugin()->data_size)
return SP_ERROR_INVALID_ADDRESS; return SP_ERROR_INVALID_ADDRESS;
@ -241,91 +241,91 @@ BaseContext::HeapRelease(cell_t local_addr)
} }
int int
BaseContext::FindNativeByName(const char *name, uint32_t *index) PluginContext::FindNativeByName(const char *name, uint32_t *index)
{ {
return m_pRuntime->FindNativeByName(name, index); return m_pRuntime->FindNativeByName(name, index);
} }
int int
BaseContext::GetNativeByIndex(uint32_t index, sp_native_t **native) PluginContext::GetNativeByIndex(uint32_t index, sp_native_t **native)
{ {
return m_pRuntime->GetNativeByIndex(index, native); return m_pRuntime->GetNativeByIndex(index, native);
} }
uint32_t uint32_t
BaseContext::GetNativesNum() PluginContext::GetNativesNum()
{ {
return m_pRuntime->GetNativesNum(); return m_pRuntime->GetNativesNum();
} }
int int
BaseContext::FindPublicByName(const char *name, uint32_t *index) PluginContext::FindPublicByName(const char *name, uint32_t *index)
{ {
return m_pRuntime->FindPublicByName(name, index); return m_pRuntime->FindPublicByName(name, index);
} }
int int
BaseContext::GetPublicByIndex(uint32_t index, sp_public_t **pblic) PluginContext::GetPublicByIndex(uint32_t index, sp_public_t **pblic)
{ {
return m_pRuntime->GetPublicByIndex(index, pblic); return m_pRuntime->GetPublicByIndex(index, pblic);
} }
uint32_t uint32_t
BaseContext::GetPublicsNum() PluginContext::GetPublicsNum()
{ {
return m_pRuntime->GetPublicsNum(); return m_pRuntime->GetPublicsNum();
} }
int int
BaseContext::GetPubvarByIndex(uint32_t index, sp_pubvar_t **pubvar) PluginContext::GetPubvarByIndex(uint32_t index, sp_pubvar_t **pubvar)
{ {
return m_pRuntime->GetPubvarByIndex(index, pubvar); return m_pRuntime->GetPubvarByIndex(index, pubvar);
} }
int int
BaseContext::FindPubvarByName(const char *name, uint32_t *index) PluginContext::FindPubvarByName(const char *name, uint32_t *index)
{ {
return m_pRuntime->FindPubvarByName(name, index); return m_pRuntime->FindPubvarByName(name, index);
} }
int int
BaseContext::GetPubvarAddrs(uint32_t index, cell_t *local_addr, cell_t **phys_addr) PluginContext::GetPubvarAddrs(uint32_t index, cell_t *local_addr, cell_t **phys_addr)
{ {
return m_pRuntime->GetPubvarAddrs(index, local_addr, phys_addr); return m_pRuntime->GetPubvarAddrs(index, local_addr, phys_addr);
} }
uint32_t uint32_t
BaseContext::GetPubVarsNum() PluginContext::GetPubVarsNum()
{ {
return m_pRuntime->GetPubVarsNum(); return m_pRuntime->GetPubVarsNum();
} }
int int
BaseContext::BindNatives(const sp_nativeinfo_t *natives, unsigned int num, int overwrite) PluginContext::BindNatives(const sp_nativeinfo_t *natives, unsigned int num, int overwrite)
{ {
return SP_ERROR_ABORTED; return SP_ERROR_ABORTED;
} }
int int
BaseContext::BindNative(const sp_nativeinfo_t *native) PluginContext::BindNative(const sp_nativeinfo_t *native)
{ {
return SP_ERROR_ABORTED; return SP_ERROR_ABORTED;
} }
int int
BaseContext::BindNativeToIndex(uint32_t index, SPVM_NATIVE_FUNC func) PluginContext::BindNativeToIndex(uint32_t index, SPVM_NATIVE_FUNC func)
{ {
return SP_ERROR_ABORTED; return SP_ERROR_ABORTED;
} }
int int
BaseContext::BindNativeToAny(SPVM_NATIVE_FUNC native) PluginContext::BindNativeToAny(SPVM_NATIVE_FUNC native)
{ {
return SP_ERROR_ABORTED; return SP_ERROR_ABORTED;
} }
int int
BaseContext::LocalToPhysAddr(cell_t local_addr, cell_t **phys_addr) PluginContext::LocalToPhysAddr(cell_t local_addr, cell_t **phys_addr)
{ {
if (((local_addr >= m_ctx.hp) && (local_addr < m_ctx.sp)) || if (((local_addr >= m_ctx.hp) && (local_addr < m_ctx.sp)) ||
(local_addr < 0) || ((ucell_t)local_addr >= m_pRuntime->plugin()->mem_size)) (local_addr < 0) || ((ucell_t)local_addr >= m_pRuntime->plugin()->mem_size))
@ -340,25 +340,25 @@ BaseContext::LocalToPhysAddr(cell_t local_addr, cell_t **phys_addr)
} }
int int
BaseContext::PushCell(cell_t value) PluginContext::PushCell(cell_t value)
{ {
return SP_ERROR_ABORTED; return SP_ERROR_ABORTED;
} }
int int
BaseContext::PushCellsFromArray(cell_t array[], unsigned int numcells) PluginContext::PushCellsFromArray(cell_t array[], unsigned int numcells)
{ {
return SP_ERROR_ABORTED; return SP_ERROR_ABORTED;
} }
int int
BaseContext::PushCellArray(cell_t *local_addr, cell_t **phys_addr, cell_t array[], unsigned int numcells) PluginContext::PushCellArray(cell_t *local_addr, cell_t **phys_addr, cell_t array[], unsigned int numcells)
{ {
return SP_ERROR_ABORTED; return SP_ERROR_ABORTED;
} }
int int
BaseContext::LocalToString(cell_t local_addr, char **addr) PluginContext::LocalToString(cell_t local_addr, char **addr)
{ {
if (((local_addr >= m_ctx.hp) && (local_addr < m_ctx.sp)) || if (((local_addr >= m_ctx.hp) && (local_addr < m_ctx.sp)) ||
(local_addr < 0) || ((ucell_t)local_addr >= m_pRuntime->plugin()->mem_size)) (local_addr < 0) || ((ucell_t)local_addr >= m_pRuntime->plugin()->mem_size))
@ -371,13 +371,13 @@ BaseContext::LocalToString(cell_t local_addr, char **addr)
} }
int int
BaseContext::PushString(cell_t *local_addr, char **phys_addr, const char *string) PluginContext::PushString(cell_t *local_addr, char **phys_addr, const char *string)
{ {
return SP_ERROR_ABORTED; return SP_ERROR_ABORTED;
} }
int int
BaseContext::StringToLocal(cell_t local_addr, size_t bytes, const char *source) PluginContext::StringToLocal(cell_t local_addr, size_t bytes, const char *source)
{ {
char *dest; char *dest;
size_t len; size_t len;
@ -439,7 +439,7 @@ __CheckValidChar(char *c)
} }
int int
BaseContext::StringToLocalUTF8(cell_t local_addr, size_t maxbytes, const char *source, size_t *wrtnbytes) PluginContext::StringToLocalUTF8(cell_t local_addr, size_t maxbytes, const char *source, size_t *wrtnbytes)
{ {
char *dest; char *dest;
size_t len; size_t len;
@ -475,19 +475,19 @@ BaseContext::StringToLocalUTF8(cell_t local_addr, size_t maxbytes, const char *s
} }
IPluginFunction * IPluginFunction *
BaseContext::GetFunctionById(funcid_t func_id) PluginContext::GetFunctionById(funcid_t func_id)
{ {
return m_pRuntime->GetFunctionById(func_id); return m_pRuntime->GetFunctionById(func_id);
} }
IPluginFunction * IPluginFunction *
BaseContext::GetFunctionByName(const char *public_name) PluginContext::GetFunctionByName(const char *public_name)
{ {
return m_pRuntime->GetFunctionByName(public_name); return m_pRuntime->GetFunctionByName(public_name);
} }
int int
BaseContext::LocalToStringNULL(cell_t local_addr, char **addr) PluginContext::LocalToStringNULL(cell_t local_addr, char **addr)
{ {
int err; int err;
if ((err = LocalToString(local_addr, addr)) != SP_ERROR_NONE) if ((err = LocalToString(local_addr, addr)) != SP_ERROR_NONE)
@ -500,7 +500,7 @@ BaseContext::LocalToStringNULL(cell_t local_addr, char **addr)
} }
SourceMod::IdentityToken_t * SourceMod::IdentityToken_t *
BaseContext::GetIdentity() PluginContext::GetIdentity()
{ {
SourceMod::IdentityToken_t *tok; SourceMod::IdentityToken_t *tok;
@ -510,7 +510,7 @@ BaseContext::GetIdentity()
} }
cell_t * cell_t *
BaseContext::GetNullRef(SP_NULL_TYPE type) PluginContext::GetNullRef(SP_NULL_TYPE type)
{ {
if (type == SP_NULL_VECTOR) if (type == SP_NULL_VECTOR)
return m_pNullVec; return m_pNullVec;
@ -519,13 +519,13 @@ BaseContext::GetNullRef(SP_NULL_TYPE type)
} }
bool bool
BaseContext::IsInExec() PluginContext::IsInExec()
{ {
return m_InExec; return m_InExec;
} }
int int
BaseContext::Execute2(IPluginFunction *function, const cell_t *params, unsigned int num_params, cell_t *result) PluginContext::Execute2(IPluginFunction *function, const cell_t *params, unsigned int num_params, cell_t *result)
{ {
int ir; int ir;
int serial; int serial;
@ -656,7 +656,7 @@ BaseContext::Execute2(IPluginFunction *function, const cell_t *params, unsigned
} }
IPluginRuntime * IPluginRuntime *
BaseContext::GetRuntime() PluginContext::GetRuntime()
{ {
return m_pRuntime; return m_pRuntime;
} }
@ -778,19 +778,19 @@ DebugInfo::LookupLine(ucell_t addr, uint32_t *line)
#undef USHR #undef USHR
int int
BaseContext::GetLastNativeError() PluginContext::GetLastNativeError()
{ {
return m_ctx.n_err; return m_ctx.n_err;
} }
cell_t * cell_t *
BaseContext::GetLocalParams() PluginContext::GetLocalParams()
{ {
return (cell_t *)(m_pRuntime->plugin()->memory + m_ctx.frm + (2 * sizeof(cell_t))); return (cell_t *)(m_pRuntime->plugin()->memory + m_ctx.frm + (2 * sizeof(cell_t)));
} }
void void
BaseContext::SetKey(int k, void *value) PluginContext::SetKey(int k, void *value)
{ {
if (k < 1 || k > 4) if (k < 1 || k > 4)
return; return;
@ -800,7 +800,7 @@ BaseContext::SetKey(int k, void *value)
} }
bool bool
BaseContext::GetKey(int k, void **value) PluginContext::GetKey(int k, void **value)
{ {
if (k < 1 || k > 4 || m_keys_set[k - 1] == false) if (k < 1 || k > 4 || m_keys_set[k - 1] == false)
return false; return false;
@ -810,7 +810,7 @@ BaseContext::GetKey(int k, void **value)
} }
void void
BaseContext::ClearLastNativeError() PluginContext::ClearLastNativeError()
{ {
m_ctx.n_err = SP_ERROR_NONE; m_ctx.n_err = SP_ERROR_NONE;
} }

View File

@ -18,15 +18,11 @@
#include "plugin-runtime.h" #include "plugin-runtime.h"
#include "jit_shared.h" #include "jit_shared.h"
/** class PluginContext : public IPluginContext
* :TODO: Make functions allocate as a lump instead of individual allocations!
*/
class BaseContext : public IPluginContext
{ {
public: public:
BaseContext(PluginRuntime *pRuntime); PluginContext(PluginRuntime *pRuntime);
~BaseContext(); ~PluginContext();
public: //IPluginContext public: //IPluginContext
IVirtualMachine *GetVirtualMachine(); IVirtualMachine *GetVirtualMachine();

View File

@ -16,7 +16,7 @@
#include <assert.h> #include <assert.h>
#include "plugin-runtime.h" #include "plugin-runtime.h"
#include "x86/jit_x86.h" #include "x86/jit_x86.h"
#include "sp_vm_basecontext.h" #include "plugin-context.h"
#include "environment.h" #include "environment.h"
#include "md5/md5.h" #include "md5/md5.h"
@ -300,7 +300,7 @@ int PluginRuntime::CreateFromMemory(sp_file_hdr_t *hdr, uint8_t *base)
md5_data.finalize(); md5_data.finalize();
md5_data.raw_digest(m_DataHash); md5_data.raw_digest(m_DataHash);
m_pCtx = new BaseContext(this); m_pCtx = new PluginContext(this);
SetupFloatNativeRemapping(); SetupFloatNativeRemapping();
function_map_size_ = m_plugin.pcode_size / sizeof(cell_t) + 1; function_map_size_ = m_plugin.pcode_size / sizeof(cell_t) + 1;
@ -559,7 +559,7 @@ size_t PluginRuntime::GetMemUsage()
mem += sizeof(this); mem += sizeof(this);
mem += sizeof(sp_plugin_t); mem += sizeof(sp_plugin_t);
mem += sizeof(BaseContext); mem += sizeof(PluginContext);
mem += m_plugin.base_size; mem += m_plugin.base_size;
return mem; return mem;
@ -575,7 +575,7 @@ unsigned char *PluginRuntime::GetDataHash()
return m_DataHash; return m_DataHash;
} }
BaseContext *PluginRuntime::GetBaseContext() PluginContext *PluginRuntime::GetBaseContext()
{ {
return m_pCtx; return m_pCtx;
} }
@ -598,7 +598,7 @@ PluginRuntime::CreateBlank(uint32_t heastk)
m_plugin.mem_size = heastk; m_plugin.mem_size = heastk;
m_plugin.memory = new uint8_t[heastk]; m_plugin.memory = new uint8_t[heastk];
m_pCtx = new BaseContext(this); m_pCtx = new PluginContext(this);
return SP_ERROR_NONE; return SP_ERROR_NONE;
} }

View File

@ -20,7 +20,7 @@
#include "compiled-function.h" #include "compiled-function.h"
#include "scripted-invoker.h" #include "scripted-invoker.h"
class BaseContext; class PluginContext;
class DebugInfo : public IPluginDebugInfo class DebugInfo : public IPluginDebugInfo
{ {
@ -84,7 +84,7 @@ class PluginRuntime
unsigned GetNativeReplacement(size_t index); unsigned GetNativeReplacement(size_t index);
ScriptedInvoker *GetPublicFunction(size_t index); ScriptedInvoker *GetPublicFunction(size_t index);
BaseContext *GetBaseContext(); PluginContext *GetBaseContext();
const sp_plugin_t *plugin() const { const sp_plugin_t *plugin() const {
return &m_plugin; return &m_plugin;
} }
@ -111,7 +111,7 @@ class PluginRuntime
public: public:
DebugInfo m_Debug; DebugInfo m_Debug;
BaseContext *m_pCtx; PluginContext *m_pCtx;
ScriptedInvoker **m_PubFuncs; ScriptedInvoker **m_PubFuncs;
CompiledFunction **m_PubJitFuncs; CompiledFunction **m_PubJitFuncs;

View File

@ -33,8 +33,8 @@
#include <stdlib.h> #include <stdlib.h>
#include <assert.h> #include <assert.h>
#include "jit_x86.h" #include "jit_x86.h"
#include "../plugin-runtime.h" #include "plugin-runtime.h"
#include "../sp_vm_basecontext.h" #include "plugin-context.h"
#include "watchdog_timer.h" #include "watchdog_timer.h"
#include "interpreter.h" #include "interpreter.h"
#include "environment.h" #include "environment.h"

View File

@ -23,7 +23,7 @@
#include <am-vector.h> #include <am-vector.h>
#include "jit_shared.h" #include "jit_shared.h"
#include "plugin-runtime.h" #include "plugin-runtime.h"
#include "sp_vm_basecontext.h" #include "plugin-context.h"
#include "compiled-function.h" #include "compiled-function.h"
#include "opcodes.h" #include "opcodes.h"