diff --git a/sourcepawn/jit/sp_vm_engine.cpp b/sourcepawn/jit/sp_vm_engine.cpp
index 4c314b20..7dfd8679 100644
--- a/sourcepawn/jit/sp_vm_engine.cpp
+++ b/sourcepawn/jit/sp_vm_engine.cpp
@@ -1,34 +1,15 @@
-/**
- * vim: set ts=4 sw=4 tw=99 et:
- * =============================================================================
- * SourcePawn
- * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
- * =============================================================================
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, version 3.0, as published by the
- * Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program. If not, see .
- *
- * As a special exception, AlliedModders LLC gives you permission to link the
- * code of this program (as well as its derivative works) to "Half-Life 2," the
- * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
- * by the Valve Corporation. You must obey the GNU General Public License in
- * all respects for all other code used. Additionally, AlliedModders LLC grants
- * this exception to all derivative works. AlliedModders LLC defines further
- * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
- * or .
- *
- * Version: $Id$
- */
-
+// 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
#include
#include
@@ -57,298 +38,294 @@ SourcePawnEngine g_engine1;
using namespace SourcePawn;
-#define ERROR_MESSAGE_MAX 30
+#define ERROR_MESSAGE_MAX 30
static const char *g_ErrorMsgTable[] =
{
- NULL,
- "Unrecognizable file format",
- "Decompressor was not found",
- "Not enough space on the heap",
- "Invalid parameter or parameter type",
- "Invalid plugin address",
- "Object or index not found",
- "Invalid index or index not found",
- "Not enough space on the stack",
- "Debug section not found or debug not enabled",
- "Invalid instruction",
- "Invalid memory access",
- "Stack went below stack boundary",
- "Heap went below heap boundary",
- "Divide by zero",
- "Array index is out of bounds",
- "Instruction contained invalid parameter",
- "Stack memory leaked by native",
- "Heap memory leaked by native",
- "Dynamic array is too big",
- "Tracker stack is out of bounds",
- "Native is not bound",
- "Maximum number of parameters reached",
- "Native detected error",
- "Plugin not runnable",
- "Call was aborted",
- "Plugin format is too old",
- "Plugin format is too new",
- "Out of memory",
- "Integer overflow",
- "Script execution timed out"
+ NULL,
+ "Unrecognizable file format",
+ "Decompressor was not found",
+ "Not enough space on the heap",
+ "Invalid parameter or parameter type",
+ "Invalid plugin address",
+ "Object or index not found",
+ "Invalid index or index not found",
+ "Not enough space on the stack",
+ "Debug section not found or debug not enabled",
+ "Invalid instruction",
+ "Invalid memory access",
+ "Stack went below stack boundary",
+ "Heap went below heap boundary",
+ "Divide by zero",
+ "Array index is out of bounds",
+ "Instruction contained invalid parameter",
+ "Stack memory leaked by native",
+ "Heap memory leaked by native",
+ "Dynamic array is too big",
+ "Tracker stack is out of bounds",
+ "Native is not bound",
+ "Maximum number of parameters reached",
+ "Native detected error",
+ "Plugin not runnable",
+ "Call was aborted",
+ "Plugin format is too old",
+ "Plugin format is too new",
+ "Out of memory",
+ "Integer overflow",
+ "Script execution timed out"
};
-const char *SourcePawnEngine::GetErrorString(int error)
+const char *
+SourcePawnEngine::GetErrorString(int error)
{
- if (error < 1 || error > ERROR_MESSAGE_MAX)
- {
- return NULL;
- }
-
- return g_ErrorMsgTable[error];
+ if (error < 1 || error > ERROR_MESSAGE_MAX)
+ return NULL;
+ return g_ErrorMsgTable[error];
}
SourcePawnEngine::SourcePawnEngine()
{
- m_pDebugHook = NULL;
+ m_pDebugHook = NULL;
}
SourcePawnEngine::~SourcePawnEngine()
{
}
-void *SourcePawnEngine::ExecAlloc(size_t size)
+void *
+SourcePawnEngine::ExecAlloc(size_t size)
{
#if defined WIN32
- return VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
+ return VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
#elif defined __GNUC__
# if defined __APPLE__
- void *base = valloc(size);
+ void *base = valloc(size);
# else
- void *base = memalign(sysconf(_SC_PAGESIZE), size);
+ void *base = memalign(sysconf(_SC_PAGESIZE), size);
# endif
- if (mprotect(base, size, PROT_READ|PROT_WRITE|PROT_EXEC) != 0)
- {
- free(base);
- return NULL;
- }
- return base;
+ if (mprotect(base, size, PROT_READ|PROT_WRITE|PROT_EXEC) != 0) {
+ free(base);
+ return NULL;
+ }
+ return base;
#endif
}
-void *SourcePawnEngine::AllocatePageMemory(size_t size)
+void *
+SourcePawnEngine::AllocatePageMemory(size_t size)
{
- return g_Jit.AllocCode(size);
+ return g_Jit.AllocCode(size);
}
-void SourcePawnEngine::SetReadExecute(void *ptr)
+void
+SourcePawnEngine::SetReadExecute(void *ptr)
{
- /* already re */
+ /* already re */
}
-void SourcePawnEngine::SetReadWrite(void *ptr)
+void
+SourcePawnEngine::SetReadWrite(void *ptr)
{
- /* already rw */
+ /* already rw */
}
-void SourcePawnEngine::FreePageMemory(void *ptr)
+void
+SourcePawnEngine::FreePageMemory(void *ptr)
{
- g_Jit.FreeCode(ptr);
+ g_Jit.FreeCode(ptr);
}
-void SourcePawnEngine::ExecFree(void *address)
+void
+SourcePawnEngine::ExecFree(void *address)
{
#if defined WIN32
- VirtualFree(address, 0, MEM_RELEASE);
+ VirtualFree(address, 0, MEM_RELEASE);
#elif defined __GNUC__
- free(address);
+ free(address);
#endif
}
-void SourcePawnEngine::SetReadWriteExecute(void *ptr)
+void
+SourcePawnEngine::SetReadWriteExecute(void *ptr)
{
-//:TODO: g_ExeMemory.SetRWE(ptr);
- SetReadExecute(ptr);
+//:TODO: g_ExeMemory.SetRWE(ptr);
+ SetReadExecute(ptr);
}
-void *SourcePawnEngine::BaseAlloc(size_t size)
+void *
+SourcePawnEngine::BaseAlloc(size_t size)
{
- return malloc(size);
+ return malloc(size);
}
-void SourcePawnEngine::BaseFree(void *memory)
+void
+SourcePawnEngine::BaseFree(void *memory)
{
- free(memory);
+ free(memory);
}
-sp_plugin_t *SourcePawnEngine::LoadFromFilePointer(FILE *fp, int *err)
+sp_plugin_t *
+SourcePawnEngine::LoadFromFilePointer(FILE *fp, int *err)
{
- if (err != NULL)
- {
- *err = SP_ERROR_ABORTED;
- }
+ if (err != NULL)
+ *err = SP_ERROR_ABORTED;
- return NULL;
+ return NULL;
}
-sp_plugin_t *SourcePawnEngine::LoadFromMemory(void *base, sp_plugin_t *plugin, int *err)
+sp_plugin_t *
+SourcePawnEngine::LoadFromMemory(void *base, sp_plugin_t *plugin, int *err)
{
- if (err != NULL)
- {
- *err = SP_ERROR_ABORTED;
- }
+ if (err != NULL)
+ *err = SP_ERROR_ABORTED;
- return NULL;
+ return NULL;
}
-int SourcePawnEngine::FreeFromMemory(sp_plugin_t *plugin)
+int
+SourcePawnEngine::FreeFromMemory(sp_plugin_t *plugin)
{
- return SP_ERROR_ABORTED;
+ return SP_ERROR_ABORTED;
}
-IDebugListener *SourcePawnEngine::SetDebugListener(IDebugListener *pListener)
+IDebugListener *
+SourcePawnEngine::SetDebugListener(IDebugListener *pListener)
{
- IDebugListener *old = m_pDebugHook;
+ IDebugListener *old = m_pDebugHook;
- m_pDebugHook = pListener;
+ m_pDebugHook = pListener;
- return old;
+ return old;
}
-unsigned int SourcePawnEngine::GetEngineAPIVersion()
+unsigned int
+SourcePawnEngine::GetEngineAPIVersion()
{
- return SOURCEPAWN_ENGINE_API_VERSION;
+ return SOURCEPAWN_ENGINE_API_VERSION;
}
-unsigned int SourcePawnEngine::GetContextCallCount()
+unsigned int
+SourcePawnEngine::GetContextCallCount()
{
- return 0;
+ return 0;
}
-void SourcePawnEngine::ReportError(BaseRuntime *runtime, int err, const char *errstr, cell_t rp_start)
+void
+SourcePawnEngine::ReportError(BaseRuntime *runtime, int err, const char *errstr, cell_t rp_start)
{
- if (m_pDebugHook == NULL)
- {
- return;
- }
+ if (m_pDebugHook == NULL)
+ return;
- CContextTrace trace(runtime, err, errstr, rp_start);
+ CContextTrace trace(runtime, err, errstr, rp_start);
- m_pDebugHook->OnContextExecuteError(runtime->GetDefaultContext(), &trace);
+ m_pDebugHook->OnContextExecuteError(runtime->GetDefaultContext(), &trace);
}
CContextTrace::CContextTrace(BaseRuntime *pRuntime, int err, const char *errstr, cell_t start_rp)
-: m_pRuntime(pRuntime), m_Error(err), m_pMsg(errstr), m_StartRp(start_rp), m_Level(0)
+ : m_pRuntime(pRuntime),
+ m_Error(err),
+ m_pMsg(errstr),
+ m_StartRp(start_rp),
+ m_Level(0)
{
- m_ctx = pRuntime->m_pCtx->GetCtx();
- m_pDebug = m_pRuntime->GetDebugInfo();
+ m_ctx = pRuntime->m_pCtx->GetCtx();
+ m_pDebug = m_pRuntime->GetDebugInfo();
}
-bool CContextTrace::DebugInfoAvailable()
+bool
+CContextTrace::DebugInfoAvailable()
{
- return (m_pDebug != NULL);
+ return (m_pDebug != NULL);
}
-const char *CContextTrace::GetCustomErrorString()
+const char *
+CContextTrace::GetCustomErrorString()
{
- return m_pMsg;
+ return m_pMsg;
}
-int CContextTrace::GetErrorCode()
+int
+CContextTrace::GetErrorCode()
{
- return m_Error;
+ return m_Error;
}
-const char *CContextTrace::GetErrorString()
+const char *
+CContextTrace::GetErrorString()
{
- if (m_Error > ERROR_MESSAGE_MAX || m_Error < 1)
- {
- return "Invalid error code";
- }
- else
- {
- return g_ErrorMsgTable[m_Error];
- }
+ if (m_Error > ERROR_MESSAGE_MAX || m_Error < 1)
+ return "Invalid error code";
+ return g_ErrorMsgTable[m_Error];
}
-void CContextTrace::ResetTrace()
+void
+CContextTrace::ResetTrace()
{
- m_Level = 0;
+ m_Level = 0;
}
-bool CContextTrace::GetTraceInfo(CallStackInfo *trace)
+bool
+CContextTrace::GetTraceInfo(CallStackInfo *trace)
{
- cell_t cip;
+ cell_t cip;
- if (m_Level == 0)
- {
- cip = m_ctx->cip;
- }
- else if (m_ctx->rp > 0)
- {
- /* Entries go from ctx.rp - 1 to m_StartRp */
- cell_t offs, start, end;
+ if (m_Level == 0) {
+ cip = m_ctx->cip;
+ } else if (m_ctx->rp > 0) {
+ /* Entries go from ctx.rp - 1 to m_StartRp */
+ cell_t offs, start, end;
- offs = m_Level - 1;
- start = m_ctx->rp - 1;
- end = m_StartRp;
+ offs = m_Level - 1;
+ start = m_ctx->rp - 1;
+ end = m_StartRp;
- if (start - offs < end)
- {
- return false;
- }
+ if (start - offs < end)
+ {
+ return false;
+ }
- cip = m_ctx->rstk_cips[start - offs];
- }
- else
- {
- return false;
- }
+ cip = m_ctx->rstk_cips[start - offs];
+ } else {
+ return false;
+ }
- if (trace == NULL)
- {
- m_Level++;
- return true;
- }
+ if (trace == NULL) {
+ m_Level++;
+ return true;
+ }
- if (m_pDebug->LookupFile(cip, &(trace->filename)) != SP_ERROR_NONE)
- {
- trace->filename = NULL;
- }
+ if (m_pDebug->LookupFile(cip, &(trace->filename)) != SP_ERROR_NONE)
+ trace->filename = NULL;
- if (m_pDebug->LookupFunction(cip, &(trace->function)) != SP_ERROR_NONE)
- {
- trace->function = NULL;
- }
+ if (m_pDebug->LookupFunction(cip, &(trace->function)) != SP_ERROR_NONE)
+ trace->function = NULL;
- if (m_pDebug->LookupLine(cip, &(trace->line)) != SP_ERROR_NONE)
- {
- trace->line = 0;
- }
+ if (m_pDebug->LookupLine(cip, &(trace->line)) != SP_ERROR_NONE)
+ trace->line = 0;
- m_Level++;
+ m_Level++;
- return true;
+ return true;
}
-const char *CContextTrace::GetLastNative(uint32_t *index)
+const char *
+CContextTrace::GetLastNative(uint32_t *index)
{
- if (m_ctx->n_err == SP_ERROR_NONE)
- {
- return NULL;
- }
+ if (m_ctx->n_err == SP_ERROR_NONE)
+ return NULL;
- sp_native_t *native;
- if (m_pRuntime->GetNativeByIndex(m_ctx->n_idx, &native) != SP_ERROR_NONE)
- {
- return NULL;
- }
+ sp_native_t *native;
+ if (m_pRuntime->GetNativeByIndex(m_ctx->n_idx, &native) != SP_ERROR_NONE)
+ return NULL;
- if (index)
- {
- *index = m_ctx->n_idx;
- }
+ if (index)
+ *index = m_ctx->n_idx;
- return native->name;
+ return native->name;
}
-IDebugListener *SourcePawnEngine::GetDebugHook()
+IDebugListener *
+SourcePawnEngine::GetDebugHook()
{
- return m_pDebugHook;
+ return m_pDebugHook;
}
diff --git a/sourcepawn/jit/sp_vm_engine.h b/sourcepawn/jit/sp_vm_engine.h
index 486e83a6..8188413c 100644
--- a/sourcepawn/jit/sp_vm_engine.h
+++ b/sourcepawn/jit/sp_vm_engine.h
@@ -1,34 +1,15 @@
-/**
- * vim: set ts=4 :
- * =============================================================================
- * SourcePawn
- * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
- * =============================================================================
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, version 3.0, as published by the
- * Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program. If not, see .
- *
- * As a special exception, AlliedModders LLC gives you permission to link the
- * code of this program (as well as its derivative works) to "Half-Life 2," the
- * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
- * by the Valve Corporation. You must obey the GNU General Public License in
- * all respects for all other code used. Additionally, AlliedModders LLC grants
- * this exception to all derivative works. AlliedModders LLC defines further
- * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
- * or .
- *
- * Version: $Id$
- */
-
+// 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_VM_ENGINE_H_
#define _INCLUDE_SOURCEPAWN_VM_ENGINE_H_
@@ -39,55 +20,60 @@ class BaseContext;
class CContextTrace : public IContextTrace
{
-public:
- CContextTrace(BaseRuntime *pRuntime, int err, const char *errstr, cell_t start_rp);
-public:
- int GetErrorCode();
- const char *GetErrorString();
- bool DebugInfoAvailable();
- const char *GetCustomErrorString();
- bool GetTraceInfo(CallStackInfo *trace);
- void ResetTrace();
- const char *GetLastNative(uint32_t *index);
-private:
- BaseRuntime *m_pRuntime;
- sp_context_t *m_ctx;
- int m_Error;
- const char *m_pMsg;
- cell_t m_StartRp;
- cell_t m_Level;
- IPluginDebugInfo *m_pDebug;
+ public:
+ CContextTrace(BaseRuntime *pRuntime, int err, const char *errstr, cell_t start_rp);
+
+ public:
+ int GetErrorCode();
+ const char *GetErrorString();
+ bool DebugInfoAvailable();
+ const char *GetCustomErrorString();
+ bool GetTraceInfo(CallStackInfo *trace);
+ void ResetTrace();
+ const char *GetLastNative(uint32_t *index);
+
+ private:
+ BaseRuntime *m_pRuntime;
+ sp_context_t *m_ctx;
+ int m_Error;
+ const char *m_pMsg;
+ cell_t m_StartRp;
+ cell_t m_Level;
+ IPluginDebugInfo *m_pDebug;
};
class SourcePawnEngine : public ISourcePawnEngine
{
-public:
- SourcePawnEngine();
- ~SourcePawnEngine();
-public: //ISourcePawnEngine
- sp_plugin_t *LoadFromFilePointer(FILE *fp, int *err);
- sp_plugin_t *LoadFromMemory(void *base, sp_plugin_t *plugin, int *err);
- int FreeFromMemory(sp_plugin_t *plugin);
- void *BaseAlloc(size_t size);
- void BaseFree(void *memory);
- void *ExecAlloc(size_t size);
- void ExecFree(void *address);
- IDebugListener *SetDebugListener(IDebugListener *pListener);
- unsigned int GetContextCallCount();
- unsigned int GetEngineAPIVersion();
- void *AllocatePageMemory(size_t size);
- void SetReadWrite(void *ptr);
- void SetReadExecute(void *ptr);
- 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);
-public: //Plugin function stuff
- CFunction *GetFunctionFromPool(funcid_t f, IPluginContext *plugin);
- void ReleaseFunctionToPool(CFunction *func);
- IDebugListener *GetDebugHook();
-private:
- IDebugListener *m_pDebugHook;
+ public:
+ SourcePawnEngine();
+ ~SourcePawnEngine();
+
+ public: //ISourcePawnEngine
+ sp_plugin_t *LoadFromFilePointer(FILE *fp, int *err);
+ sp_plugin_t *LoadFromMemory(void *base, sp_plugin_t *plugin, int *err);
+ int FreeFromMemory(sp_plugin_t *plugin);
+ void *BaseAlloc(size_t size);
+ void BaseFree(void *memory);
+ void *ExecAlloc(size_t size);
+ void ExecFree(void *address);
+ IDebugListener *SetDebugListener(IDebugListener *pListener);
+ unsigned int GetContextCallCount();
+ unsigned int GetEngineAPIVersion();
+ void *AllocatePageMemory(size_t size);
+ void SetReadWrite(void *ptr);
+ void SetReadExecute(void *ptr);
+ 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);
+
+ public: //Plugin function stuff
+ CFunction *GetFunctionFromPool(funcid_t f, IPluginContext *plugin);
+ void ReleaseFunctionToPool(CFunction *func);
+ IDebugListener *GetDebugHook();
+
+ private:
+ IDebugListener *m_pDebugHook;
};
extern SourcePawnEngine g_engine1;