diff --git a/core/systems/ForwardSys.cpp b/core/systems/ForwardSys.cpp index 2103b1d6..404e2fef 100644 --- a/core/systems/ForwardSys.cpp +++ b/core/systems/ForwardSys.cpp @@ -297,7 +297,7 @@ int CForward::Execute(cell_t *result, IForwardFilter *filter) { func->PushStringEx((char *)param->byref.orig_addr, param->byref.cells, param->byref.sz_flags, param->byref.flags); } else if (type == Param_Float || type == Param_Cell) { - func->PushCellByRef(¶m->val, 0); + func->PushCellByRef(¶m->val); } else { func->PushArray(param->byref.orig_addr, param->byref.cells, NULL, param->byref.flags); assert(type == Param_Array || type == Param_FloatByRef || type == Param_CellByRef); @@ -434,7 +434,7 @@ int CForward::PushFloat(float number) return SP_ERROR_NONE; } -int CForward::PushCellByRef(cell_t *cell, int flags) +int CForward::PushCellByRef(cell_t *cell) { if (m_curparam < m_numparams) { @@ -452,13 +452,13 @@ int CForward::PushCellByRef(cell_t *cell, int flags) m_params[m_curparam].pushedas = Param_CellByRef; } - _Int_PushArray(cell, 1, flags); + _Int_PushArray(cell, 1, SM_PARAM_COPYBACK); m_curparam++; return SP_ERROR_NONE; } -int CForward::PushFloatByRef(float *num, int flags) +int CForward::PushFloatByRef(float *num) { if (m_curparam < m_numparams) { @@ -476,7 +476,7 @@ int CForward::PushFloatByRef(float *num, int flags) m_params[m_curparam].pushedas = Param_FloatByRef; } - _Int_PushArray((cell_t *)num, 1, flags); + _Int_PushArray((cell_t *)num, 1, SM_PARAM_COPYBACK); m_curparam++; return SP_ERROR_NONE; diff --git a/core/systems/ForwardSys.h b/core/systems/ForwardSys.h index e0ce371b..287b5eff 100644 --- a/core/systems/ForwardSys.h +++ b/core/systems/ForwardSys.h @@ -47,9 +47,9 @@ class CForward : public IChangeableForward { public: //ICallable virtual int PushCell(cell_t cell); - virtual int PushCellByRef(cell_t *cell, int flags); + virtual int PushCellByRef(cell_t *cell); virtual int PushFloat(float number); - virtual int PushFloatByRef(float *number, int flags); + virtual int PushFloatByRef(float *number); virtual int PushArray(cell_t *inarray, unsigned int cells, cell_t **phys_addr, int flags); virtual int PushString(const char *string); virtual int PushStringEx(char *buffer, size_t length, int sz_flags, int cp_flags); diff --git a/core/vm/sp_vm_basecontext.cpp b/core/vm/sp_vm_basecontext.cpp index d6c4393e..eb6a52b7 100644 --- a/core/vm/sp_vm_basecontext.cpp +++ b/core/vm/sp_vm_basecontext.cpp @@ -212,11 +212,11 @@ void BaseContext::SetErrorMessage(const char *msg, va_list ap) vsnprintf(m_MsgCache, sizeof(m_MsgCache), msg, ap); } -void BaseContext::ThrowNativeErrorEx(int error, const char *msg, ...) +cell_t BaseContext::ThrowNativeErrorEx(int error, const char *msg, ...) { if (!m_InExec) { - return; + return 0; } ctx->n_err = error; @@ -228,6 +228,8 @@ void BaseContext::ThrowNativeErrorEx(int error, const char *msg, ...) SetErrorMessage(msg, ap); va_end(ap); } + + return 0; } cell_t BaseContext::ThrowNativeError(const char *msg, ...) diff --git a/core/vm/sp_vm_basecontext.h b/core/vm/sp_vm_basecontext.h index 68651e3f..43d6d511 100644 --- a/core/vm/sp_vm_basecontext.h +++ b/core/vm/sp_vm_basecontext.h @@ -61,7 +61,7 @@ namespace SourcePawn virtual int BindNative(const sp_nativeinfo_t *native); virtual int BindNativeToAny(SPVM_NATIVE_FUNC native); virtual int Execute(uint32_t code_addr, cell_t *result); - virtual void ThrowNativeErrorEx(int error, const char *msg, ...); + virtual cell_t ThrowNativeErrorEx(int error, const char *msg, ...); virtual cell_t ThrowNativeError(const char *msg, ...); virtual IPluginFunction *GetFunctionByName(const char *public_name); virtual IPluginFunction *GetFunctionById(funcid_t func_id); diff --git a/core/vm/sp_vm_function.cpp b/core/vm/sp_vm_function.cpp index c7f3b5a6..49f6a483 100644 --- a/core/vm/sp_vm_function.cpp +++ b/core/vm/sp_vm_function.cpp @@ -79,14 +79,14 @@ int CFunction::PushCell(cell_t cell) return SP_ERROR_NONE; } -int CFunction::PushCellByRef(cell_t *cell, int flags) +int CFunction::PushCellByRef(cell_t *cell) { if (m_curparam >= SP_MAX_EXEC_PARAMS) { return SetError(SP_ERROR_PARAMS_MAX); } - return PushArray(cell, 1, NULL, flags); + return PushArray(cell, 1, NULL, SM_PARAM_COPYBACK); } int CFunction::PushFloat(float number) @@ -96,9 +96,9 @@ int CFunction::PushFloat(float number) return PushCell(val); } -int CFunction::PushFloatByRef(float *number, int flags) +int CFunction::PushFloatByRef(float *number) { - return PushCellByRef((cell_t *)number, flags); + return PushCellByRef((cell_t *)number); } int CFunction::PushArray(cell_t *inarray, unsigned int cells, cell_t **phys_addr, int copyback) diff --git a/core/vm/sp_vm_function.h b/core/vm/sp_vm_function.h index 4b13f66d..da8713be 100644 --- a/core/vm/sp_vm_function.h +++ b/core/vm/sp_vm_function.h @@ -35,9 +35,9 @@ public: CFunction(uint32_t code_addr, IPluginContext *pContext); public: virtual int PushCell(cell_t cell); - virtual int PushCellByRef(cell_t *cell, int flags); + virtual int PushCellByRef(cell_t *cell); virtual int PushFloat(float number); - virtual int PushFloatByRef(float *number, int flags); + virtual int PushFloatByRef(float *number); virtual int PushArray(cell_t *inarray, unsigned int cells, cell_t **phys_addr, int copyback); virtual int PushString(const char *string); virtual int PushStringEx(char *buffer, size_t length, int sz_flags, int cp_flags); diff --git a/public/sourcepawn/sp_vm_api.h b/public/sourcepawn/sp_vm_api.h index cfdb5958..67111d94 100644 --- a/public/sourcepawn/sp_vm_api.h +++ b/public/sourcepawn/sp_vm_api.h @@ -70,7 +70,7 @@ namespace SourcePawn * @param flags Copy-back flags. * @return Error code, if any. */ - virtual int PushCellByRef(cell_t *cell, int flags) =0; + virtual int PushCellByRef(cell_t *cell) =0; /** * @brief Pushes a float onto the current call. @@ -91,7 +91,7 @@ namespace SourcePawn & @param flags Copy-back flags. * @return Error code, if any. */ - virtual int PushFloatByRef(float *number, int flags) =0; + virtual int PushFloatByRef(float *number) =0; /** * @brief Pushes an array of cells onto the current call. @@ -505,8 +505,9 @@ namespace SourcePawn * @param error The error number to set. * @param msg Custom error message format. NULL to use default. * @param ... Message format arguments, if any. + * @return 0 for convenience. */ - virtual void ThrowNativeErrorEx(int error, const char *msg, ...) =0; + virtual cell_t ThrowNativeErrorEx(int error, const char *msg, ...) =0; /** * @brief Throws a generic native error and halts any current execution.