Rename BaseRuntime to PluginRuntime.

This commit is contained in:
dvander@alliedmods.net 2015-02-23 16:40:36 -08:00
parent b8d2be9a0d
commit 2f71cb4cd7
13 changed files with 104 additions and 82 deletions

View File

@ -1,4 +1,15 @@
// vim: set ts=8 sts=2 sw=2 tw=99 et:
// vim: set sts=2 ts=8 sw=2 tw=99 et:
//
// Copyright (C) 2006-2015 AlliedModders LLC
//
// This file is part of SourcePawn. SourcePawn is free software: you can
// redistribute it and/or modify it under the terms of the GNU General Public
// License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// You should have received a copy of the GNU General Public License along with
// SourcePawn. If not, see http://www.gnu.org/licenses/.
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@ -20,7 +31,7 @@ IsPointerCellAligned(void *p)
return uintptr_t(p) % 4 == 0;
}
BaseRuntime::BaseRuntime()
PluginRuntime::PluginRuntime()
: m_Debug(&m_plugin),
m_pCtx(NULL),
m_PubFuncs(NULL),
@ -43,7 +54,7 @@ BaseRuntime::BaseRuntime()
g_Jit.RegisterRuntime(this);
}
BaseRuntime::~BaseRuntime()
PluginRuntime::~PluginRuntime()
{
// The watchdog thread takes the global JIT lock while it patches all
// runtimes. It is not enough to ensure that the unlinking of the runtime is
@ -104,7 +115,7 @@ static const NativeMapping sNativeMap[] = {
};
void
BaseRuntime::SetupFloatNativeRemapping()
PluginRuntime::SetupFloatNativeRemapping()
{
float_table_ = new floattbl_t[m_plugin.num_natives];
for (size_t i = 0; i < m_plugin.num_natives; i++) {
@ -122,7 +133,7 @@ BaseRuntime::SetupFloatNativeRemapping()
}
unsigned
BaseRuntime::GetNativeReplacement(size_t index)
PluginRuntime::GetNativeReplacement(size_t index)
{
if (!float_table_[index].found)
return OP_NOP;
@ -130,7 +141,7 @@ BaseRuntime::GetNativeReplacement(size_t index)
}
void
BaseRuntime::SetName(const char *name)
PluginRuntime::SetName(const char *name)
{
m_plugin.name = strdup(name);
}
@ -140,7 +151,7 @@ static cell_t InvalidNative(IPluginContext *pCtx, const cell_t *params)
return pCtx->ThrowNativeErrorEx(SP_ERROR_INVALID_NATIVE, "Invalid native");
}
int BaseRuntime::CreateFromMemory(sp_file_hdr_t *hdr, uint8_t *base)
int PluginRuntime::CreateFromMemory(sp_file_hdr_t *hdr, uint8_t *base)
{
char *nameptr;
uint8_t sectnum = 0;
@ -305,7 +316,7 @@ int BaseRuntime::CreateFromMemory(sp_file_hdr_t *hdr, uint8_t *base)
}
void
BaseRuntime::AddJittedFunction(CompiledFunction *fn)
PluginRuntime::AddJittedFunction(CompiledFunction *fn)
{
m_JitFunctions.append(fn);
@ -319,7 +330,7 @@ BaseRuntime::AddJittedFunction(CompiledFunction *fn)
}
CompiledFunction *
BaseRuntime::GetJittedFunctionByOffset(cell_t pcode_offset)
PluginRuntime::GetJittedFunctionByOffset(cell_t pcode_offset)
{
assert(pcode_offset % 4 == 0);
@ -330,7 +341,7 @@ BaseRuntime::GetJittedFunctionByOffset(cell_t pcode_offset)
}
int
BaseRuntime::FindNativeByName(const char *name, uint32_t *index)
PluginRuntime::FindNativeByName(const char *name, uint32_t *index)
{
for (uint32_t i=0; i<m_plugin.num_natives; i++) {
if (strcmp(m_plugin.natives[i].name, name) == 0) {
@ -344,7 +355,7 @@ BaseRuntime::FindNativeByName(const char *name, uint32_t *index)
}
int
BaseRuntime::GetNativeByIndex(uint32_t index, sp_native_t **native)
PluginRuntime::GetNativeByIndex(uint32_t index, sp_native_t **native)
{
if (index >= m_plugin.num_natives)
return SP_ERROR_INDEX;
@ -356,20 +367,20 @@ BaseRuntime::GetNativeByIndex(uint32_t index, sp_native_t **native)
}
sp_native_t *
BaseRuntime::GetNativeByIndex(uint32_t index)
PluginRuntime::GetNativeByIndex(uint32_t index)
{
assert(index < m_plugin.num_natives);
return &m_plugin.natives[index];
}
uint32_t
BaseRuntime::GetNativesNum()
PluginRuntime::GetNativesNum()
{
return m_plugin.num_natives;
}
int
BaseRuntime::FindPublicByName(const char *name, uint32_t *index)
PluginRuntime::FindPublicByName(const char *name, uint32_t *index)
{
int diff, high, low;
uint32_t mid;
@ -395,7 +406,7 @@ BaseRuntime::FindPublicByName(const char *name, uint32_t *index)
}
int
BaseRuntime::GetPublicByIndex(uint32_t index, sp_public_t **pblic)
PluginRuntime::GetPublicByIndex(uint32_t index, sp_public_t **pblic)
{
if (index >= m_plugin.num_publics)
return SP_ERROR_INDEX;
@ -407,13 +418,13 @@ BaseRuntime::GetPublicByIndex(uint32_t index, sp_public_t **pblic)
}
uint32_t
BaseRuntime::GetPublicsNum()
PluginRuntime::GetPublicsNum()
{
return m_plugin.num_publics;
}
int
BaseRuntime::GetPubvarByIndex(uint32_t index, sp_pubvar_t **pubvar)
PluginRuntime::GetPubvarByIndex(uint32_t index, sp_pubvar_t **pubvar)
{
if (index >= m_plugin.num_pubvars)
return SP_ERROR_INDEX;
@ -425,7 +436,7 @@ BaseRuntime::GetPubvarByIndex(uint32_t index, sp_pubvar_t **pubvar)
}
int
BaseRuntime::FindPubvarByName(const char *name, uint32_t *index)
PluginRuntime::FindPubvarByName(const char *name, uint32_t *index)
{
int diff, high, low;
uint32_t mid;
@ -451,7 +462,7 @@ BaseRuntime::FindPubvarByName(const char *name, uint32_t *index)
}
int
BaseRuntime::GetPubvarAddrs(uint32_t index, cell_t *local_addr, cell_t **phys_addr)
PluginRuntime::GetPubvarAddrs(uint32_t index, cell_t *local_addr, cell_t **phys_addr)
{
if (index >= m_plugin.num_pubvars)
return SP_ERROR_INDEX;
@ -463,25 +474,25 @@ BaseRuntime::GetPubvarAddrs(uint32_t index, cell_t *local_addr, cell_t **phys_ad
}
uint32_t
BaseRuntime::GetPubVarsNum()
PluginRuntime::GetPubVarsNum()
{
return m_plugin.num_pubvars;
}
IPluginContext *
BaseRuntime::GetDefaultContext()
PluginRuntime::GetDefaultContext()
{
return m_pCtx;
}
IPluginDebugInfo *
BaseRuntime::GetDebugInfo()
PluginRuntime::GetDebugInfo()
{
return &m_Debug;
}
IPluginFunction *
BaseRuntime::GetFunctionById(funcid_t func_id)
PluginRuntime::GetFunctionById(funcid_t func_id)
{
ScriptedInvoker *pFunc = NULL;
@ -500,7 +511,7 @@ BaseRuntime::GetFunctionById(funcid_t func_id)
}
ScriptedInvoker *
BaseRuntime::GetPublicFunction(size_t index)
PluginRuntime::GetPublicFunction(size_t index)
{
ScriptedInvoker *pFunc = m_PubFuncs[index];
if (!pFunc) {
@ -515,7 +526,7 @@ BaseRuntime::GetPublicFunction(size_t index)
}
IPluginFunction *
BaseRuntime::GetFunctionByName(const char *public_name)
PluginRuntime::GetFunctionByName(const char *public_name)
{
uint32_t index;
@ -525,12 +536,12 @@ BaseRuntime::GetFunctionByName(const char *public_name)
return GetPublicFunction(index);
}
bool BaseRuntime::IsDebugging()
bool PluginRuntime::IsDebugging()
{
return true;
}
void BaseRuntime::SetPauseState(bool paused)
void PluginRuntime::SetPauseState(bool paused)
{
if (paused)
{
@ -542,12 +553,12 @@ void BaseRuntime::SetPauseState(bool paused)
}
}
bool BaseRuntime::IsPaused()
bool PluginRuntime::IsPaused()
{
return ((m_plugin.run_flags & SPFLAG_PLUGIN_PAUSED) == SPFLAG_PLUGIN_PAUSED);
}
size_t BaseRuntime::GetMemUsage()
size_t PluginRuntime::GetMemUsage()
{
size_t mem = 0;
@ -559,23 +570,23 @@ size_t BaseRuntime::GetMemUsage()
return mem;
}
unsigned char *BaseRuntime::GetCodeHash()
unsigned char *PluginRuntime::GetCodeHash()
{
return m_CodeHash;
}
unsigned char *BaseRuntime::GetDataHash()
unsigned char *PluginRuntime::GetDataHash()
{
return m_DataHash;
}
BaseContext *BaseRuntime::GetBaseContext()
BaseContext *PluginRuntime::GetBaseContext()
{
return m_pCtx;
}
int
BaseRuntime::ApplyCompilationOptions(ICompilation *co)
PluginRuntime::ApplyCompilationOptions(ICompilation *co)
{
if (co == NULL)
return SP_ERROR_NONE;
@ -587,7 +598,7 @@ BaseRuntime::ApplyCompilationOptions(ICompilation *co)
}
int
BaseRuntime::CreateBlank(uint32_t heastk)
PluginRuntime::CreateBlank(uint32_t heastk)
{
memset(&m_plugin, 0, sizeof(m_plugin));

View File

@ -1,4 +1,15 @@
// vim: set ts=8 sw=2 sts=2 tw=99 et:
// vim: set sts=2 ts=8 sw=2 tw=99 et:
//
// Copyright (C) 2006-2015 AlliedModders LLC
//
// This file is part of SourcePawn. SourcePawn is free software: you can
// redistribute it and/or modify it under the terms of the GNU General Public
// License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// You should have received a copy of the GNU General Public License along with
// SourcePawn. If not, see http://www.gnu.org/licenses/.
//
#ifndef _INCLUDE_SOURCEPAWN_JIT_RUNTIME_H_
#define _INCLUDE_SOURCEPAWN_JIT_RUNTIME_H_
@ -34,13 +45,13 @@ struct floattbl_t
};
/* Jit wants fast access to this so we expose things as public */
class BaseRuntime
class PluginRuntime
: public SourcePawn::IPluginRuntime,
public ke::InlineListNode<BaseRuntime>
public ke::InlineListNode<PluginRuntime>
{
public:
BaseRuntime();
~BaseRuntime();
PluginRuntime();
~PluginRuntime();
public:
virtual int CreateBlank(uint32_t heastk);

View File

@ -37,7 +37,7 @@ SourcePawnEngine2::LoadPlugin(ICompilation *co, const char *file, int *err)
int z_result;
int error;
size_t ignore;
BaseRuntime *pRuntime;
PluginRuntime *pRuntime;
FILE *fp = fopen(file, "rb");
@ -102,7 +102,7 @@ SourcePawnEngine2::LoadPlugin(ICompilation *co, const char *file, int *err)
}
}
pRuntime = new BaseRuntime();
pRuntime = new PluginRuntime();
if ((error = pRuntime->CreateFromMemory(&hdr, base)) != SP_ERROR_NONE) {
delete pRuntime;
goto return_error;
@ -211,7 +211,7 @@ SourcePawnEngine2::CreateEmptyRuntime(const char *name, uint32_t memory)
{
int err;
BaseRuntime *rt = new BaseRuntime();
PluginRuntime *rt = new PluginRuntime();
if ((err = rt->CreateBlank(memory)) != SP_ERROR_NONE) {
delete rt;
return NULL;

View File

@ -95,7 +95,7 @@ CheckAddress(const sp_plugin_t *plugin, sp_context_t *ctx, cell_t *stk, cell_t a
}
int
PopTrackerAndSetHeap(BaseRuntime *rt)
PopTrackerAndSetHeap(PluginRuntime *rt)
{
sp_context_t *ctx = rt->GetBaseContext()->GetCtx();
tracker_t *trk = ctx->tracker;
@ -192,7 +192,7 @@ BoundNativeCallback(sp_context_t *ctx, SPVM_NATIVE_FUNC pfn, cell_t *params)
}
static inline bool
GenerateArray(BaseRuntime *rt, sp_context_t *ctx, cell_t dims, cell_t *stk, bool autozero)
GenerateArray(PluginRuntime *rt, sp_context_t *ctx, cell_t dims, cell_t *stk, bool autozero)
{
if (dims == 1) {
uint32_t size = *stk;
@ -226,7 +226,7 @@ GenerateArray(BaseRuntime *rt, sp_context_t *ctx, cell_t dims, cell_t *stk, bool
}
int
Interpret(BaseRuntime *rt, uint32_t aCodeStart, cell_t *rval)
Interpret(PluginRuntime *rt, uint32_t aCodeStart, cell_t *rval)
{
const sp_plugin_t *plugin = rt->plugin();
cell_t *code = reinterpret_cast<cell_t *>(plugin->pcode);

View File

@ -29,12 +29,12 @@ struct tracker_t
ucell_t *pCur;
};
int Interpret(BaseRuntime *rt, uint32_t aCodeStart, cell_t *rval);
int Interpret(PluginRuntime *rt, uint32_t aCodeStart, cell_t *rval);
int GenerateFullArray(BaseRuntime *rt, uint32_t argc, cell_t *argv, int autozero);
int GenerateFullArray(PluginRuntime *rt, uint32_t argc, cell_t *argv, int autozero);
cell_t NativeCallback(sp_context_t *ctx, ucell_t native_idx, cell_t *params);
cell_t BoundNativeCallback(sp_context_t *ctx, SPVM_NATIVE_FUNC pfn, cell_t *params);
int PopTrackerAndSetHeap(BaseRuntime *rt);
int PopTrackerAndSetHeap(PluginRuntime *rt);
int PushTracker(sp_context_t *ctx, size_t amount);
#endif // _include_sourcepawn_interpreter_h_

View File

@ -49,7 +49,7 @@ ScriptedInvoker::GetParentContext()
return m_pRuntime->GetDefaultContext();
}
ScriptedInvoker::ScriptedInvoker(BaseRuntime *runtime, funcid_t id, uint32_t pub_id)
ScriptedInvoker::ScriptedInvoker(PluginRuntime *runtime, funcid_t id, uint32_t pub_id)
: m_curparam(0),
m_errorstate(SP_ERROR_NONE),
m_FnId(id)

View File

@ -15,7 +15,7 @@
#include <sp_vm_api.h>
class BaseRuntime;
class PluginRuntime;
using namespace SourcePawn;
@ -40,7 +40,7 @@ class ScriptedInvoker : public IPluginFunction
friend class SourcePawnEngine;
public:
ScriptedInvoker(BaseRuntime *pRuntime, funcid_t fnid, uint32_t pub_id);
ScriptedInvoker(PluginRuntime *pRuntime, funcid_t fnid, uint32_t pub_id);
~ScriptedInvoker();
public:
@ -77,7 +77,7 @@ class ScriptedInvoker : public IPluginFunction
int SetError(int err);
private:
BaseRuntime *m_pRuntime;
PluginRuntime *m_pRuntime;
cell_t m_params[SP_MAX_EXEC_PARAMS];
ParamInfo m_info[SP_MAX_EXEC_PARAMS];
unsigned int m_curparam;

View File

@ -27,7 +27,7 @@ using namespace SourcePawn;
#define CELLBOUNDMAX (INT_MAX/sizeof(cell_t))
#define STACKMARGIN ((cell_t)(16*sizeof(cell_t)))
BaseContext::BaseContext(BaseRuntime *pRuntime)
BaseContext::BaseContext(PluginRuntime *pRuntime)
{
m_pRuntime = pRuntime;

View File

@ -25,7 +25,7 @@
class BaseContext : public IPluginContext
{
public:
BaseContext(BaseRuntime *pRuntime);
BaseContext(PluginRuntime *pRuntime);
~BaseContext();
public: //IPluginContext
@ -90,7 +90,7 @@ class BaseContext : public IPluginContext
char m_MsgCache[1024];
bool m_CustomMsg;
bool m_InExec;
BaseRuntime *m_pRuntime;
PluginRuntime *m_pRuntime;
sp_context_t m_ctx;
void *m_keys[4];
bool m_keys_set[4];

View File

@ -210,7 +210,7 @@ SourcePawnEngine::GetContextCallCount()
}
void
SourcePawnEngine::ReportError(BaseRuntime *runtime, int err, const char *errstr, cell_t rp_start)
SourcePawnEngine::ReportError(PluginRuntime *runtime, int err, const char *errstr, cell_t rp_start)
{
if (m_pDebugHook == NULL)
return;
@ -220,7 +220,7 @@ SourcePawnEngine::ReportError(BaseRuntime *runtime, int err, const char *errstr,
m_pDebugHook->OnContextExecuteError(runtime->GetDefaultContext(), &trace);
}
CContextTrace::CContextTrace(BaseRuntime *pRuntime, int err, const char *errstr, cell_t start_rp)
CContextTrace::CContextTrace(PluginRuntime *pRuntime, int err, const char *errstr, cell_t start_rp)
: m_pRuntime(pRuntime),
m_Error(err),
m_pMsg(errstr),

View File

@ -21,7 +21,7 @@ class BaseContext;
class CContextTrace : public IContextTrace
{
public:
CContextTrace(BaseRuntime *pRuntime, int err, const char *errstr, cell_t start_rp);
CContextTrace(PluginRuntime *pRuntime, int err, const char *errstr, cell_t start_rp);
public:
int GetErrorCode();
@ -33,7 +33,7 @@ class CContextTrace : public IContextTrace
const char *GetLastNative(uint32_t *index);
private:
BaseRuntime *m_pRuntime;
PluginRuntime *m_pRuntime;
sp_context_t *m_ctx;
int m_Error;
const char *m_pMsg;
@ -65,7 +65,7 @@ class SourcePawnEngine : public ISourcePawnEngine
void SetReadWriteExecute(void *ptr);
void FreePageMemory(void *ptr);
const char *GetErrorString(int err);
void ReportError(BaseRuntime *runtime, int err, const char *errstr, cell_t rp_start);
void ReportError(PluginRuntime *runtime, int err, const char *errstr, cell_t rp_start);
public: //Plugin function stuff
IDebugListener *GetDebugHook();

View File

@ -169,7 +169,7 @@ GenerateArrayIndirectionVectors(cell_t *arraybase, cell_t dims[], cell_t _dimcou
}
int
GenerateFullArray(BaseRuntime *rt, uint32_t argc, cell_t *argv, int autozero)
GenerateFullArray(PluginRuntime *rt, uint32_t argc, cell_t *argv, int autozero)
{
sp_context_t *ctx = rt->GetBaseContext()->GetCtx();
@ -272,7 +272,7 @@ GetFunctionName(const sp_plugin_t *plugin, uint32_t offs)
#endif
static int
CompileFromThunk(BaseRuntime *runtime, cell_t pcode_offs, void **addrp, char *pc)
CompileFromThunk(PluginRuntime *runtime, cell_t pcode_offs, void **addrp, char *pc)
{
// If the watchdog timer has declared a timeout, we must process it now,
// and possibly refuse to compile, since otherwise we will compile a
@ -302,7 +302,7 @@ CompileFromThunk(BaseRuntime *runtime, cell_t pcode_offs, void **addrp, char *pc
return SP_ERROR_NONE;
}
Compiler::Compiler(BaseRuntime *rt, cell_t pcode_offs)
Compiler::Compiler(PluginRuntime *rt, cell_t pcode_offs)
: rt_(rt),
plugin_(rt->plugin()),
error_(SP_ERROR_NONE),
@ -1927,7 +1927,7 @@ JITX86::ShutdownJIT()
}
CompiledFunction *
JITX86::CompileFunction(BaseRuntime *prt, cell_t pcode_offs, int *err)
JITX86::CompileFunction(PluginRuntime *prt, cell_t pcode_offs, int *err)
{
Compiler cc(prt, pcode_offs);
CompiledFunction *fun = cc.emit(err);
@ -1943,7 +1943,7 @@ JITX86::CompileFunction(BaseRuntime *prt, cell_t pcode_offs, int *err)
}
void
JITX86::SetupContextVars(BaseRuntime *runtime, BaseContext *pCtx, sp_context_t *ctx)
JITX86::SetupContextVars(PluginRuntime *runtime, BaseContext *pCtx, sp_context_t *ctx)
{
ctx->tracker = new tracker_t;
ctx->tracker->pBase = (ucell_t *)malloc(1024);
@ -1993,7 +1993,7 @@ JITX86::StartCompilation()
}
ICompilation *
JITX86::StartCompilation(BaseRuntime *runtime)
JITX86::StartCompilation(PluginRuntime *runtime)
{
return new CompData;
}
@ -2030,7 +2030,7 @@ CompData::SetOption(const char *key, const char *val)
}
int
JITX86::InvokeFunction(BaseRuntime *runtime, CompiledFunction *fn, cell_t *result)
JITX86::InvokeFunction(PluginRuntime *runtime, CompiledFunction *fn, cell_t *result)
{
sp_context_t *ctx = runtime->GetBaseContext()->GetCtx();
@ -2061,14 +2061,14 @@ JITX86::FreeCode(void *code)
}
void
JITX86::RegisterRuntime(BaseRuntime *rt)
JITX86::RegisterRuntime(PluginRuntime *rt)
{
mutex_.AssertCurrentThreadOwns();
runtimes_.append(rt);
}
void
JITX86::DeregisterRuntime(BaseRuntime *rt)
JITX86::DeregisterRuntime(PluginRuntime *rt)
{
mutex_.AssertCurrentThreadOwns();
runtimes_.remove(rt);
@ -2078,8 +2078,8 @@ void
JITX86::PatchAllJumpsForTimeout()
{
mutex_.AssertCurrentThreadOwns();
for (ke::InlineList<BaseRuntime>::iterator iter = runtimes_.begin(); iter != runtimes_.end(); iter++) {
BaseRuntime *rt = *iter;
for (ke::InlineList<PluginRuntime>::iterator iter = runtimes_.begin(); iter != runtimes_.end(); iter++) {
PluginRuntime *rt = *iter;
for (size_t i = 0; i < rt->NumJitFunctions(); i++) {
CompiledFunction *fun = rt->GetJitFunction(i);
uint8_t *base = reinterpret_cast<uint8_t *>(fun->GetEntryAddress());
@ -2097,8 +2097,8 @@ void
JITX86::UnpatchAllJumpsFromTimeout()
{
mutex_.AssertCurrentThreadOwns();
for (ke::InlineList<BaseRuntime>::iterator iter = runtimes_.begin(); iter != runtimes_.end(); iter++) {
BaseRuntime *rt = *iter;
for (ke::InlineList<PluginRuntime>::iterator iter = runtimes_.begin(); iter != runtimes_.end(); iter++) {
PluginRuntime *rt = *iter;
for (size_t i = 0; i < rt->NumJitFunctions(); i++) {
CompiledFunction *fun = rt->GetJitFunction(i);
uint8_t *base = reinterpret_cast<uint8_t *>(fun->GetEntryAddress());

View File

@ -85,7 +85,7 @@ public:
class Compiler
{
public:
Compiler(BaseRuntime *rt, cell_t pcode_offs);
Compiler(PluginRuntime *rt, cell_t pcode_offs);
~Compiler();
CompiledFunction *emit(int *errp);
@ -122,7 +122,7 @@ class Compiler
private:
AssemblerX86 masm;
BaseRuntime *rt_;
PluginRuntime *rt_;
const sp_plugin_t *plugin_;
int error_;
uint32_t pcode_start_;
@ -154,18 +154,18 @@ class JITX86
public:
bool InitializeJIT();
void ShutdownJIT();
ICompilation *StartCompilation(BaseRuntime *runtime);
ICompilation *StartCompilation(PluginRuntime *runtime);
ICompilation *StartCompilation();
void SetupContextVars(BaseRuntime *runtime, BaseContext *pCtx, sp_context_t *ctx);
void SetupContextVars(PluginRuntime *runtime, BaseContext *pCtx, sp_context_t *ctx);
void FreeContextVars(sp_context_t *ctx);
SPVM_NATIVE_FUNC CreateFakeNative(SPVM_FAKENATIVE_FUNC callback, void *pData);
void DestroyFakeNative(SPVM_NATIVE_FUNC func);
CompiledFunction *CompileFunction(BaseRuntime *runtime, cell_t pcode_offs, int *err);
CompiledFunction *CompileFunction(PluginRuntime *runtime, cell_t pcode_offs, int *err);
ICompilation *ApplyOptions(ICompilation *_IN, ICompilation *_OUT);
int InvokeFunction(BaseRuntime *runtime, CompiledFunction *fn, cell_t *result);
int InvokeFunction(PluginRuntime *runtime, CompiledFunction *fn, cell_t *result);
void RegisterRuntime(BaseRuntime *rt);
void DeregisterRuntime(BaseRuntime *rt);
void RegisterRuntime(PluginRuntime *rt);
void DeregisterRuntime(PluginRuntime *rt);
void PatchAllJumpsForTimeout();
void UnpatchAllJumpsFromTimeout();
@ -190,7 +190,7 @@ class JITX86
void *m_pJitEntry; /* Entry function */
void *m_pJitReturn; /* Universal return address */
void *m_pJitTimeout; /* Universal timeout address */
ke::InlineList<BaseRuntime> runtimes_;
ke::InlineList<PluginRuntime> runtimes_;
uintptr_t frame_id_;
uintptr_t level_;
ke::Mutex mutex_;