jscript: Allow this_obj to be host object in call_function.
authorJacek Caban <jacek@codeweavers.com>
Wed, 23 Sep 2009 14:19:29 +0000 (16:19 +0200)
committerAlexandre Julliard <julliard@winehq.org>
Wed, 23 Sep 2009 15:08:14 +0000 (17:08 +0200)
dlls/jscript/function.c
dlls/jscript/tests/run.c

index e68222bf863ee145f8c1b48d7c1d81080a666c8b..74c4e47018a75cf0d6200b69bdc69ae257aae42c 100644 (file)
@@ -281,21 +281,15 @@ static HRESULT call_function(script_ctx_t *ctx, FunctionInstance *function, IDis
     HRESULT hres;
 
     if(function->value_proc) {
-        DispatchEx *jsthis = NULL;
         vdisp_t vthis;
 
-        if(this_obj) {
-            jsthis = iface_to_jsdisp((IUnknown*)this_obj);
-            if(!jsthis)
-                FIXME("this_obj is not DispatchEx\n");
-        }
+        if(this_obj)
+            set_disp(&vthis, this_obj);
+        else
+            set_jsdisp(&vthis, ctx->script_disp);
 
-        set_jsdisp(&vthis, jsthis ? jsthis : ctx->script_disp);
         hres = function->value_proc(ctx, &vthis, DISPATCH_METHOD, args, retv, ei, caller);
         vdisp_release(&vthis);
-
-        if(jsthis)
-            jsdisp_release(jsthis);
     }else {
         hres = invoke_source(ctx, function, this_obj ? this_obj : (IDispatch*)_IDispatchEx_(ctx->script_disp),
                 args, retv, ei, caller);
index 786624cc7383625725f1214e23abd68ddb315701..1cfee4f26b0dff171d1038c27589bc2231d3776d 100644 (file)
@@ -912,6 +912,10 @@ static void run_tests(void)
     parse_script_a("ok(String(testObj) === '1', 'wrong testObj value');");
     CHECK_CALLED(testobj_value);
 
+    SET_EXPECT(testobj_value);
+    parse_script_a("ok(String.prototype.concat.call(testObj, ' OK') === '1 OK', 'wrong concat result');");
+    CHECK_CALLED(testobj_value);
+
     run_from_res("lang.js");
     run_from_res("api.js");
     run_from_res("regexp.js");