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");