Module: wine Branch: master Commit: b0e57e0cb51497a3f867c533e6dee7f5d9fa5962 URL: https://gitlab.winehq.org/wine/wine/-/commit/b0e57e0cb51497a3f867c533e6dee7f...
Author: Jacek Caban jacek@codeweavers.com Date: Sun Jul 7 19:21:59 2024 +0200
jscript: Factor out handle_dispatch_exception.
Based on patch by Gabriel Ivăncescu.
---
dlls/jscript/dispex.c | 15 ++------------- dlls/jscript/error.c | 15 +++++++++++++++ dlls/jscript/jscript.h | 1 + 3 files changed, 18 insertions(+), 13 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c index 81fdc3d4799..e45e22f3a44 100644 --- a/dlls/jscript/dispex.c +++ b/dlls/jscript/dispex.c @@ -2496,19 +2496,8 @@ static HRESULT disp_invoke(script_ctx_t *ctx, IDispatch *disp, DISPID id, WORD f hres = IDispatch_Invoke(disp, id, &IID_NULL, ctx->lcid, flags, params, r, &ei, &err); }
- if(hres == DISP_E_EXCEPTION) { - TRACE("DISP_E_EXCEPTION: %08lx %s %s\n", ei.scode, debugstr_w(ei.bstrSource), debugstr_w(ei.bstrDescription)); - reset_ei(ctx->ei); - ctx->ei->error = (SUCCEEDED(ei.scode) || ei.scode == DISP_E_EXCEPTION) ? E_FAIL : ei.scode; - if(ei.bstrSource) - ctx->ei->source = jsstr_alloc_len(ei.bstrSource, SysStringLen(ei.bstrSource)); - if(ei.bstrDescription) - ctx->ei->message = jsstr_alloc_len(ei.bstrDescription, SysStringLen(ei.bstrDescription)); - SysFreeString(ei.bstrSource); - SysFreeString(ei.bstrDescription); - SysFreeString(ei.bstrHelpFile); - } - + if(hres == DISP_E_EXCEPTION) + handle_dispatch_exception(ctx, &ei); return hres; }
diff --git a/dlls/jscript/error.c b/dlls/jscript/error.c index e1f04aef38c..a3388ee9a27 100644 --- a/dlls/jscript/error.c +++ b/dlls/jscript/error.c @@ -402,6 +402,21 @@ HRESULT throw_error(script_ctx_t *ctx, HRESULT error, const WCHAR *str) return DISP_E_EXCEPTION; }
+void handle_dispatch_exception(script_ctx_t *ctx, EXCEPINFO *ei) +{ + TRACE("%08lx %s %s\n", ei->scode, debugstr_w(ei->bstrSource), debugstr_w(ei->bstrDescription)); + + reset_ei(ctx->ei); + ctx->ei->error = (SUCCEEDED(ei->scode) || ei->scode == DISP_E_EXCEPTION) ? E_FAIL : ei->scode; + if(ei->bstrSource) + ctx->ei->source = jsstr_alloc_len(ei->bstrSource, SysStringLen(ei->bstrSource)); + if(ei->bstrDescription) + ctx->ei->message = jsstr_alloc_len(ei->bstrDescription, SysStringLen(ei->bstrDescription)); + SysFreeString(ei->bstrSource); + SysFreeString(ei->bstrDescription); + SysFreeString(ei->bstrHelpFile); +} + void set_error_location(jsexcept_t *ei, bytecode_t *code, unsigned loc, unsigned source_id, jsstr_t *line) { if(is_jscript_error(ei->error)) { diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h index 5adf2a2590a..e091e7acd90 100644 --- a/dlls/jscript/jscript.h +++ b/dlls/jscript/jscript.h @@ -312,6 +312,7 @@ struct _function_code_t *Function_get_code(jsdisp_t*);
HRESULT throw_error(script_ctx_t*,HRESULT,const WCHAR*); jsdisp_t *create_builtin_error(script_ctx_t *ctx); +void handle_dispatch_exception(script_ctx_t *ctx, EXCEPINFO *ei);
HRESULT create_object(script_ctx_t*,jsdisp_t*,jsdisp_t**); HRESULT create_math(script_ctx_t*,jsdisp_t**);