Jacek Caban : jscript: Throw type error from call and apply functions.

Alexandre Julliard julliard at winehq.org
Thu Sep 24 10:55:08 CDT 2009


Module: wine
Branch: master
Commit: 7f2d50f3445e30453d26fc5a7c21d9fb32f4cf2b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7f2d50f3445e30453d26fc5a7c21d9fb32f4cf2b

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Sep 24 00:45:42 2009 +0200

jscript: Throw type error from call and apply functions.

---

 dlls/jscript/function.c   |   13 ++++---------
 dlls/jscript/tests/api.js |    8 ++++++++
 2 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/dlls/jscript/function.c b/dlls/jscript/function.c
index 88bf9c3..cbdc08b 100644
--- a/dlls/jscript/function.c
+++ b/dlls/jscript/function.c
@@ -416,13 +416,10 @@ static HRESULT Function_apply(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DI
 
     TRACE("\n");
 
-    if(!(function = function_from_vdisp(jsthis))) {
-        FIXME("dispex is not a function\n");
-        return E_FAIL;
-    }
+    if(!(function = function_this(jsthis)))
+        return throw_type_error(ctx, ei, IDS_NOT_FUNC, NULL);
 
     argc = arg_cnt(dp);
-
     if(argc) {
         hres = to_object(ctx, get_arg(dp,0), &this_obj);
         if(FAILED(hres))
@@ -471,10 +468,8 @@ static HRESULT Function_call(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DIS
 
     TRACE("\n");
 
-    if(!(function = function_from_vdisp(jsthis))) {
-        FIXME("dispex is not a function\n");
-        return E_FAIL;
-    }
+    if(!(function = function_this(jsthis)))
+        return throw_type_error(ctx, ei, IDS_NOT_FUNC, NULL);
 
     argc = arg_cnt(dp);
     if(argc) {
diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js
index 5b215f5..2e4b0aa 100644
--- a/dlls/jscript/tests/api.js
+++ b/dlls/jscript/tests/api.js
@@ -1688,6 +1688,14 @@ function testArrayThis(func) {
 
 testArrayThis("toString");
 
+function testFunctionThis(func) {
+    testThisExcept(Function.prototype[func], -2146823286);
+}
+
+testFunctionThis("toString");
+testFunctionThis("call");
+testFunctionThis("apply");
+
 function testArrayHostThis(func) {
     exception_test(function() { Array.prototype[func].call(testObj); }, "TypeError", -2146823274);
 }




More information about the wine-cvs mailing list