jscript: Allow 'this' to be host object in builtin functions.
diff --git a/dlls/jscript/error.c b/dlls/jscript/error.c
index 5932611..91bc95a 100644
--- a/dlls/jscript/error.c
+++ b/dlls/jscript/error.c
@@ -39,10 +39,15 @@
static const WCHAR numberW[] = {'n','u','m','b','e','r',0};
static const WCHAR toStringW[] = {'t','o','S','t','r','i','n','g',0};
-static HRESULT Error_number(script_ctx_t *ctx, DispatchEx *dispex, WORD flags,
+static inline ErrorInstance *error_from_vdisp(vdisp_t *vdisp)
+{
+ return (ErrorInstance*)vdisp->u.jsdisp;
+}
+
+static HRESULT Error_number(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
- ErrorInstance *This = (ErrorInstance*)dispex;
+ ErrorInstance *This = error_from_vdisp(jsthis);
TRACE("\n");
@@ -57,10 +62,10 @@
}
}
-static HRESULT Error_description(script_ctx_t *ctx, DispatchEx *dispex, WORD flags,
+static HRESULT Error_description(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
- ErrorInstance *This = (ErrorInstance*)dispex;
+ ErrorInstance *This = error_from_vdisp(jsthis);
TRACE("\n");
@@ -76,10 +81,10 @@
}
/* ECMA-262 3rd Edition 15.11.4.3 */
-static HRESULT Error_message(script_ctx_t *ctx, DispatchEx *dispex, WORD flags,
+static HRESULT Error_message(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
- ErrorInstance *This = (ErrorInstance*)dispex;
+ ErrorInstance *This = error_from_vdisp(jsthis);
TRACE("\n");
@@ -95,7 +100,7 @@
}
/* ECMA-262 3rd Edition 15.11.4.4 */
-static HRESULT Error_toString(script_ctx_t *ctx, DispatchEx *dispex, WORD flags,
+static HRESULT Error_toString(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
static const WCHAR str[] = {'[','o','b','j','e','c','t',' ','E','r','r','o','r',']',0};
@@ -112,7 +117,7 @@
return S_OK;
}
-static HRESULT Error_value(script_ctx_t *ctx, DispatchEx *dispex, WORD flags,
+static HRESULT Error_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
TRACE("\n");
@@ -278,56 +283,56 @@
}
}
-static HRESULT ErrorConstr_value(script_ctx_t *ctx, DispatchEx *dispex, WORD flags,
+static HRESULT ErrorConstr_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
TRACE("\n");
return error_constr(ctx, flags, dp, retv, ei, ctx->error_constr);
}
-static HRESULT EvalErrorConstr_value(script_ctx_t *ctx, DispatchEx *dispex, WORD flags,
+static HRESULT EvalErrorConstr_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
TRACE("\n");
return error_constr(ctx, flags, dp, retv, ei, ctx->eval_error_constr);
}
-static HRESULT RangeErrorConstr_value(script_ctx_t *ctx, DispatchEx *dispex, WORD flags,
+static HRESULT RangeErrorConstr_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
TRACE("\n");
return error_constr(ctx, flags, dp, retv, ei, ctx->range_error_constr);
}
-static HRESULT ReferenceErrorConstr_value(script_ctx_t *ctx, DispatchEx *dispex, WORD flags,
+static HRESULT ReferenceErrorConstr_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
TRACE("\n");
return error_constr(ctx, flags, dp, retv, ei, ctx->reference_error_constr);
}
-static HRESULT RegExpErrorConstr_value(script_ctx_t *ctx, DispatchEx *dispex, WORD flags,
+static HRESULT RegExpErrorConstr_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
TRACE("\n");
return error_constr(ctx, flags, dp, retv, ei, ctx->regexp_error_constr);
}
-static HRESULT SyntaxErrorConstr_value(script_ctx_t *ctx, DispatchEx *dispex, WORD flags,
+static HRESULT SyntaxErrorConstr_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
TRACE("\n");
return error_constr(ctx, flags, dp, retv, ei, ctx->syntax_error_constr);
}
-static HRESULT TypeErrorConstr_value(script_ctx_t *ctx, DispatchEx *dispex, WORD flags,
+static HRESULT TypeErrorConstr_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
TRACE("\n");
return error_constr(ctx, flags, dp, retv, ei, ctx->type_error_constr);
}
-static HRESULT URIErrorConstr_value(script_ctx_t *ctx, DispatchEx *dispex, WORD flags,
+static HRESULT URIErrorConstr_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
TRACE("\n");