Piotr Caban : jscript: Throw TypeErrors when _value functions are used as a function.

Alexandre Julliard julliard at winehq.org
Wed Jul 22 09:35:14 CDT 2009


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

Author: Piotr Caban <piotr.caban at gmail.com>
Date:   Wed Jul 22 13:02:30 2009 +0200

jscript: Throw TypeErrors when _value functions are used as a function.

---

 dlls/jscript/array.c      |    2 ++
 dlls/jscript/bool.c       |   14 ++++++++++++--
 dlls/jscript/date.c       |   13 +++++++++++--
 dlls/jscript/error.c      |   13 +++++++++++--
 dlls/jscript/number.c     |    2 ++
 dlls/jscript/object.c     |    2 ++
 dlls/jscript/regexp.c     |   13 +++++++++++--
 dlls/jscript/string.c     |    2 ++
 dlls/jscript/tests/api.js |    2 ++
 9 files changed, 55 insertions(+), 8 deletions(-)

diff --git a/dlls/jscript/array.c b/dlls/jscript/array.c
index 0af6df1..b2bd5b2 100644
--- a/dlls/jscript/array.c
+++ b/dlls/jscript/array.c
@@ -770,6 +770,8 @@ static HRESULT Array_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS
     TRACE("\n");
 
     switch(flags) {
+    case INVOKE_FUNC:
+        return throw_type_error(dispex->ctx, ei, IDS_NOT_FUNC, NULL);
     case INVOKE_PROPERTYGET:
         return array_join(dispex, lcid, ((ArrayInstance*)dispex)->length, default_separatorW, retv, ei, sp);
     default:
diff --git a/dlls/jscript/bool.c b/dlls/jscript/bool.c
index 2b5152a..bfacebf 100644
--- a/dlls/jscript/bool.c
+++ b/dlls/jscript/bool.c
@@ -116,8 +116,18 @@ static HRESULT Bool_isPrototypeOf(DispatchEx *dispex, LCID lcid, WORD flags, DIS
 static HRESULT Bool_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
         VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    TRACE("\n");
+
+    switch(flags) {
+    case INVOKE_FUNC:
+        return throw_type_error(dispex->ctx, ei, IDS_NOT_FUNC, NULL);
+    default:
+        FIXME("unimplemented flags %x\n", flags);
+        return E_NOTIMPL;
+    }
+
+    return S_OK;
+
 }
 
 static const builtin_prop_t Bool_props[] = {
diff --git a/dlls/jscript/date.c b/dlls/jscript/date.c
index b33be0b..5085f21 100644
--- a/dlls/jscript/date.c
+++ b/dlls/jscript/date.c
@@ -2040,8 +2040,17 @@ static HRESULT Date_getYear(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAM
 static HRESULT Date_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
         VARIANT *retv, jsexcept_t *ei, IServiceProvider *caller)
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    TRACE("\n");
+
+    switch(flags) {
+    case INVOKE_FUNC:
+        return throw_type_error(dispex->ctx, ei, IDS_NOT_FUNC, NULL);
+    default:
+        FIXME("unimplemented flags %x\n", flags);
+        return E_NOTIMPL;
+    }
+
+    return S_OK;
 }
 
 static const builtin_prop_t Date_props[] = {
diff --git a/dlls/jscript/error.c b/dlls/jscript/error.c
index 49bdb07..fb37fba 100644
--- a/dlls/jscript/error.c
+++ b/dlls/jscript/error.c
@@ -141,8 +141,17 @@ static HRESULT Error_isPrototypeOf(DispatchEx *dispex, LCID lcid, WORD flags,
 static HRESULT Error_value(DispatchEx *dispex, LCID lcid, WORD flags,
         DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    TRACE("\n");
+
+    switch(flags) {
+    case INVOKE_FUNC:
+        return throw_type_error(dispex->ctx, ei, IDS_NOT_FUNC, NULL);
+    default:
+        FIXME("unimplemented flags %x\n", flags);
+        return E_NOTIMPL;
+    }
+
+    return S_OK;
 }
 
 static void Error_destructor(DispatchEx *dispex)
diff --git a/dlls/jscript/number.c b/dlls/jscript/number.c
index 28049a9..0aeeab6 100644
--- a/dlls/jscript/number.c
+++ b/dlls/jscript/number.c
@@ -241,6 +241,8 @@ static HRESULT Number_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAM
     NumberInstance *number = (NumberInstance*)dispex;
 
     switch(flags) {
+    case INVOKE_FUNC:
+        return throw_type_error(dispex->ctx, ei, IDS_NOT_FUNC, NULL);
     case DISPATCH_PROPERTYGET:
         *retv = number->num;
         break;
diff --git a/dlls/jscript/object.c b/dlls/jscript/object.c
index 8e0aad6..737230a 100644
--- a/dlls/jscript/object.c
+++ b/dlls/jscript/object.c
@@ -120,6 +120,8 @@ static HRESULT Object_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAM
     TRACE("\n");
 
     switch(flags) {
+    case INVOKE_FUNC:
+        return throw_type_error(dispex->ctx, ei, IDS_NOT_FUNC, NULL);
     case DISPATCH_PROPERTYGET:
         V_VT(retv) = VT_BSTR;
         V_BSTR(retv) = SysAllocString(default_valueW);
diff --git a/dlls/jscript/regexp.c b/dlls/jscript/regexp.c
index 9722919..a4d640e 100644
--- a/dlls/jscript/regexp.c
+++ b/dlls/jscript/regexp.c
@@ -3516,8 +3516,17 @@ static HRESULT RegExp_test(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS
 static HRESULT RegExp_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
         VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    TRACE("\n");
+
+    switch(flags) {
+    case INVOKE_FUNC:
+        return throw_type_error(dispex->ctx, ei, IDS_NOT_FUNC, NULL);
+    default:
+        FIXME("unimplemented flags %x\n", flags);
+        return E_NOTIMPL;
+    }
+
+    return S_OK;
 }
 
 static void RegExp_destructor(DispatchEx *dispex)
diff --git a/dlls/jscript/string.c b/dlls/jscript/string.c
index a0ca268..6695bf8 100644
--- a/dlls/jscript/string.c
+++ b/dlls/jscript/string.c
@@ -1485,6 +1485,8 @@ static HRESULT String_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAM
     TRACE("\n");
 
     switch(flags) {
+    case INVOKE_FUNC:
+        return throw_type_error(dispex->ctx, ei, IDS_NOT_FUNC, NULL);
     case DISPATCH_PROPERTYGET: {
         BSTR str = SysAllocString(This->str);
         if(!str)
diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js
index 2ed8bda..7428413 100644
--- a/dlls/jscript/tests/api.js
+++ b/dlls/jscript/tests/api.js
@@ -1315,5 +1315,7 @@ exception_test(function() {arr.toString = Number.prototype.toString; arr.toStrin
 exception_test(function() {(new Number(3)).toString(1);}, "TypeError", -2146828283);
 exception_test(function() {not_existing_variable.something();}, "TypeError", -2146823279);
 exception_test(function() {arr.toString = Function.prototype.toString; arr.toString();}, "TypeError", -2146823286);
+exception_test(function() {date();}, "TypeError", -2146823286);
+exception_test(function() {arr();}, "TypeError", -2146823286);
 
 reportSuccess();




More information about the wine-cvs mailing list