diff --git a/sourcepawn/jit/engine2.cpp b/sourcepawn/jit/engine2.cpp index 53a6d72e..41c5a7b2 100644 --- a/sourcepawn/jit/engine2.cpp +++ b/sourcepawn/jit/engine2.cpp @@ -1,4 +1,15 @@ -// vim: set ts=4 sw=4 tw=99 noet: +// vim: set sts=2 ts=8 sw=2 tw=99 noet: +// +// 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 @@ -14,202 +25,208 @@ using namespace SourcePawn; SourcePawnEngine2::SourcePawnEngine2() { - profiler_ = NULL; - jit_enabled_ = true; + profiler_ = NULL; + jit_enabled_ = true; } -IPluginRuntime *SourcePawnEngine2::LoadPlugin(ICompilation *co, const char *file, int *err) +IPluginRuntime * +SourcePawnEngine2::LoadPlugin(ICompilation *co, const char *file, int *err) { - sp_file_hdr_t hdr; - uint8_t *base; - int z_result; - int error; - size_t ignore; - BaseRuntime *pRuntime; + sp_file_hdr_t hdr; + uint8_t *base; + int z_result; + int error; + size_t ignore; + BaseRuntime *pRuntime; - FILE *fp = fopen(file, "rb"); + FILE *fp = fopen(file, "rb"); - if (!fp) - { - error = SP_ERROR_NOT_FOUND; - goto return_error; - } + if (!fp) { + error = SP_ERROR_NOT_FOUND; + goto return_error; + } - /* Rewind for safety */ - ignore = fread(&hdr, sizeof(sp_file_hdr_t), 1, fp); + /* Rewind for safety */ + ignore = fread(&hdr, sizeof(sp_file_hdr_t), 1, fp); - if (hdr.magic != SmxConsts::FILE_MAGIC) - { - error = SP_ERROR_FILE_FORMAT; - goto return_error; - } + if (hdr.magic != SmxConsts::FILE_MAGIC) { + error = SP_ERROR_FILE_FORMAT; + goto return_error; + } - switch (hdr.compression) - { - case SmxConsts::FILE_COMPRESSION_GZ: - { - uint32_t uncompsize = hdr.imagesize - hdr.dataoffs; - uint32_t compsize = hdr.disksize - hdr.dataoffs; - uint32_t sectsize = hdr.dataoffs - sizeof(sp_file_hdr_t); - uLongf destlen = uncompsize; + switch (hdr.compression) + { + case SmxConsts::FILE_COMPRESSION_GZ: + { + uint32_t uncompsize = hdr.imagesize - hdr.dataoffs; + uint32_t compsize = hdr.disksize - hdr.dataoffs; + uint32_t sectsize = hdr.dataoffs - sizeof(sp_file_hdr_t); + uLongf destlen = uncompsize; - char *tempbuf = (char *)malloc(compsize); - void *uncompdata = malloc(uncompsize); - void *sectheader = malloc(sectsize); + char *tempbuf = (char *)malloc(compsize); + void *uncompdata = malloc(uncompsize); + void *sectheader = malloc(sectsize); - ignore = fread(sectheader, sectsize, 1, fp); - ignore = fread(tempbuf, compsize, 1, fp); + ignore = fread(sectheader, sectsize, 1, fp); + ignore = fread(tempbuf, compsize, 1, fp); - z_result = uncompress((Bytef *)uncompdata, &destlen, (Bytef *)tempbuf, compsize); - free(tempbuf); - if (z_result != Z_OK) - { - free(sectheader); - free(uncompdata); - error = SP_ERROR_DECOMPRESSOR; - goto return_error; - } + z_result = uncompress((Bytef *)uncompdata, &destlen, (Bytef *)tempbuf, compsize); + free(tempbuf); + if (z_result != Z_OK) + { + free(sectheader); + free(uncompdata); + error = SP_ERROR_DECOMPRESSOR; + goto return_error; + } - base = (uint8_t *)malloc(hdr.imagesize); - memcpy(base, &hdr, sizeof(sp_file_hdr_t)); - memcpy(base + sizeof(sp_file_hdr_t), sectheader, sectsize); - free(sectheader); - memcpy(base + hdr.dataoffs, uncompdata, uncompsize); - free(uncompdata); - break; - } - case SmxConsts::FILE_COMPRESSION_NONE: - { - base = (uint8_t *)malloc(hdr.imagesize); - rewind(fp); - ignore = fread(base, hdr.imagesize, 1, fp); - break; - } - default: - { - error = SP_ERROR_DECOMPRESSOR; - goto return_error; - } - } + base = (uint8_t *)malloc(hdr.imagesize); + memcpy(base, &hdr, sizeof(sp_file_hdr_t)); + memcpy(base + sizeof(sp_file_hdr_t), sectheader, sectsize); + free(sectheader); + memcpy(base + hdr.dataoffs, uncompdata, uncompsize); + free(uncompdata); + break; + } + case SmxConsts::FILE_COMPRESSION_NONE: + { + base = (uint8_t *)malloc(hdr.imagesize); + rewind(fp); + ignore = fread(base, hdr.imagesize, 1, fp); + break; + } + default: + { + error = SP_ERROR_DECOMPRESSOR; + goto return_error; + } + } - pRuntime = new BaseRuntime(); - if ((error = pRuntime->CreateFromMemory(&hdr, base)) != SP_ERROR_NONE) - { - delete pRuntime; - goto return_error; - } + pRuntime = new BaseRuntime(); + if ((error = pRuntime->CreateFromMemory(&hdr, base)) != SP_ERROR_NONE) { + delete pRuntime; + goto return_error; + } - size_t len; - - len = strlen(file); - for (size_t i = len - 1; i < len; i--) - { - if (file[i] == '/' - #if defined WIN32 - || file[i] == '\\' - #endif - ) - { - pRuntime->SetName(&file[i+1]); - break; - } - } + size_t len; + + len = strlen(file); + for (size_t i = len - 1; i < len; i--) + { + if (file[i] == '/' + #if defined WIN32 + || file[i] == '\\' + #endif + ) + { + pRuntime->SetName(&file[i+1]); + break; + } + } - (void)ignore; + (void)ignore; - if (!pRuntime->plugin()->name) - { - pRuntime->SetName(file); - } + if (!pRuntime->plugin()->name) + pRuntime->SetName(file); - pRuntime->ApplyCompilationOptions(co); + pRuntime->ApplyCompilationOptions(co); - fclose(fp); + fclose(fp); - return pRuntime; + return pRuntime; return_error: - *err = error; - if (fp != NULL) - { - fclose(fp); - } + *err = error; + if (fp != NULL) + { + fclose(fp); + } - return NULL; + return NULL; } -SPVM_NATIVE_FUNC SourcePawnEngine2::CreateFakeNative(SPVM_FAKENATIVE_FUNC callback, void *pData) +SPVM_NATIVE_FUNC +SourcePawnEngine2::CreateFakeNative(SPVM_FAKENATIVE_FUNC callback, void *pData) { - return g_Jit.CreateFakeNative(callback, pData); + return g_Jit.CreateFakeNative(callback, pData); } -void SourcePawnEngine2::DestroyFakeNative(SPVM_NATIVE_FUNC func) +void +SourcePawnEngine2::DestroyFakeNative(SPVM_NATIVE_FUNC func) { - g_Jit.DestroyFakeNative(func); + g_Jit.DestroyFakeNative(func); } -const char *SourcePawnEngine2::GetEngineName() +const char * +SourcePawnEngine2::GetEngineName() { - return "SourcePawn 1.7, jit-x86"; + return "SourcePawn 1.7, jit-x86"; } -const char *SourcePawnEngine2::GetVersionString() +const char * +SourcePawnEngine2::GetVersionString() { - return SOURCEMOD_VERSION; + return SOURCEMOD_VERSION; } -IDebugListener *SourcePawnEngine2::SetDebugListener(IDebugListener *listener) +IDebugListener * +SourcePawnEngine2::SetDebugListener(IDebugListener *listener) { - return g_engine1.SetDebugListener(listener); + return g_engine1.SetDebugListener(listener); } -unsigned int SourcePawnEngine2::GetAPIVersion() +unsigned int +SourcePawnEngine2::GetAPIVersion() { - return SOURCEPAWN_ENGINE2_API_VERSION; + return SOURCEPAWN_ENGINE2_API_VERSION; } -ICompilation *SourcePawnEngine2::StartCompilation() +ICompilation * +SourcePawnEngine2::StartCompilation() { - return g_Jit.StartCompilation(); + return g_Jit.StartCompilation(); } -const char *SourcePawnEngine2::GetErrorString(int err) +const char * +SourcePawnEngine2::GetErrorString(int err) { - return g_engine1.GetErrorString(err); + return g_engine1.GetErrorString(err); } -bool SourcePawnEngine2::Initialize() +bool +SourcePawnEngine2::Initialize() { - return g_Jit.InitializeJIT(); + return g_Jit.InitializeJIT(); } -void SourcePawnEngine2::Shutdown() +void +SourcePawnEngine2::Shutdown() { - g_WatchdogTimer.Shutdown(); - g_Jit.ShutdownJIT(); + g_WatchdogTimer.Shutdown(); + g_Jit.ShutdownJIT(); } -IPluginRuntime *SourcePawnEngine2::CreateEmptyRuntime(const char *name, uint32_t memory) +IPluginRuntime * +SourcePawnEngine2::CreateEmptyRuntime(const char *name, uint32_t memory) { - int err; - BaseRuntime *rt; + int err; - rt = new BaseRuntime(); - if ((err = rt->CreateBlank(memory)) != SP_ERROR_NONE) - { - delete rt; - return NULL; - } + BaseRuntime *rt = new BaseRuntime(); + if ((err = rt->CreateBlank(memory)) != SP_ERROR_NONE) { + delete rt; + return NULL; + } - rt->SetName(name != NULL ? name : ""); + rt->SetName(name != NULL ? name : ""); - rt->ApplyCompilationOptions(NULL); - - return rt; + rt->ApplyCompilationOptions(NULL); + + return rt; } -bool SourcePawnEngine2::InstallWatchdogTimer(size_t timeout_ms) +bool +SourcePawnEngine2::InstallWatchdogTimer(size_t timeout_ms) { - return g_WatchdogTimer.Initialize(timeout_ms); + return g_WatchdogTimer.Initialize(timeout_ms); } diff --git a/sourcepawn/jit/engine2.h b/sourcepawn/jit/engine2.h index 249c24f6..d75c63bb 100644 --- a/sourcepawn/jit/engine2.h +++ b/sourcepawn/jit/engine2.h @@ -1,86 +1,100 @@ -// vim: set ts=4 sw=4 tw=99 noet: +// vim: set sts=2 ts=8 sw=2 tw=99 noet: +// +// 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_ENGINE_2_H_ #define _INCLUDE_SOURCEPAWN_ENGINE_2_H_ #include -namespace SourcePawn +namespace SourcePawn { + +/** + * @brief Outlines the interface a Virtual Machine (JIT) must expose + */ +class SourcePawnEngine2 : public ISourcePawnEngine2 { - /** - * @brief Outlines the interface a Virtual Machine (JIT) must expose - */ - class SourcePawnEngine2 : public ISourcePawnEngine2 - { - public: - SourcePawnEngine2(); - public: - unsigned int GetAPIVersion(); - const char *GetEngineName(); - const char *GetVersionString(); - IPluginRuntime *LoadPlugin(ICompilation *co, const char *file, int *err); - SPVM_NATIVE_FUNC CreateFakeNative(SPVM_FAKENATIVE_FUNC callback, void *pData); - void DestroyFakeNative(SPVM_NATIVE_FUNC func); - IDebugListener *SetDebugListener(IDebugListener *listener); - ICompilation *StartCompilation(); - const char *GetErrorString(int err); - bool Initialize(); - void Shutdown(); - IPluginRuntime *CreateEmptyRuntime(const char *name, uint32_t memory); - bool InstallWatchdogTimer(size_t timeout_ms); + public: + SourcePawnEngine2(); - bool SetJitEnabled(bool enabled) { - jit_enabled_ = enabled; - return true; - } + public: + unsigned int GetAPIVersion(); + const char *GetEngineName(); + const char *GetVersionString(); + IPluginRuntime *LoadPlugin(ICompilation *co, const char *file, int *err); + SPVM_NATIVE_FUNC CreateFakeNative(SPVM_FAKENATIVE_FUNC callback, void *pData); + void DestroyFakeNative(SPVM_NATIVE_FUNC func); + IDebugListener *SetDebugListener(IDebugListener *listener); + ICompilation *StartCompilation(); + const char *GetErrorString(int err); + bool Initialize(); + void Shutdown(); + IPluginRuntime *CreateEmptyRuntime(const char *name, uint32_t memory); + bool InstallWatchdogTimer(size_t timeout_ms); - bool IsJitEnabled() { - return jit_enabled_; - } + bool SetJitEnabled(bool enabled) { + jit_enabled_ = enabled; + return true; + } - void SetProfiler(IProfiler *profiler) { - // Deprecated. - } + bool IsJitEnabled() { + return jit_enabled_; + } - void EnableProfiling() { - profiling_enabled_ = !!profiler_; - } - void DisableProfiling() { - profiling_enabled_ = false; - } - bool IsProfilingEnabled() { - return profiling_enabled_; - } - void SetProfilingTool(IProfilingTool *tool) { - profiler_ = tool; - } + void SetProfiler(IProfiler *profiler) { + // Deprecated. + } - public: - IProfilingTool *GetProfiler() { - return profiler_; - } - private: - IProfilingTool *profiler_; - bool jit_enabled_; - bool profiling_enabled_; - }; -} + void EnableProfiling() { + profiling_enabled_ = !!profiler_; + } + void DisableProfiling() { + profiling_enabled_ = false; + } + bool IsProfilingEnabled() { + return profiling_enabled_; + } + void SetProfilingTool(IProfilingTool *tool) { + profiler_ = tool; + } + + public: + IProfilingTool *GetProfiler() { + return profiler_; + } + + private: + IProfilingTool *profiler_; + bool jit_enabled_; + bool profiling_enabled_; +}; + +} // namespace SourcePawn extern SourcePawn::SourcePawnEngine2 g_engine2; class EnterProfileScope { -public: - EnterProfileScope(const char *group, const char *name) - { - if (g_engine2.IsProfilingEnabled()) - g_engine2.GetProfiler()->EnterScope(group, name); - } + public: + EnterProfileScope(const char *group, const char *name) + { + if (g_engine2.IsProfilingEnabled()) + g_engine2.GetProfiler()->EnterScope(group, name); + } - ~EnterProfileScope() - { - if (g_engine2.IsProfilingEnabled()) - g_engine2.GetProfiler()->LeaveScope(); - } + ~EnterProfileScope() + { + if (g_engine2.IsProfilingEnabled()) + g_engine2.GetProfiler()->LeaveScope(); + } }; #endif //_INCLUDE_SOURCEPAWN_ENGINE_2_H_