Jacek Caban : jscript: Added infinity and nan handling to str_to_number.

Alexandre Julliard julliard at winehq.org
Fri Oct 17 07:25:50 CDT 2008


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Oct 16 14:31:40 2008 -0500

jscript: Added infinity and nan handling to str_to_number.

---

 dlls/jscript/jsutils.c     |   30 +++++++++++++++---------------
 dlls/jscript/tests/lang.js |    7 +++++++
 2 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/dlls/jscript/jsutils.c b/dlls/jscript/jsutils.c
index 2adfcb7..defddd4 100644
--- a/dlls/jscript/jsutils.c
+++ b/dlls/jscript/jsutils.c
@@ -246,26 +246,26 @@ static HRESULT str_to_number(BSTR str, VARIANT *ret)
     while(isspaceW(*ptr))
         ptr++;
 
+    if(*ptr == '-') {
+        neg = TRUE;
+        ptr++;
+    }else if(*ptr == '+') {
+        ptr++;
+    }
+
     if(!strncmpW(ptr, infinityW, sizeof(infinityW)/sizeof(WCHAR))) {
         ptr += sizeof(infinityW)/sizeof(WCHAR);
         while(*ptr && isspaceW(*ptr))
             ptr++;
 
-        if(*ptr) {
-            FIXME("NaN\n");
-            return E_NOTIMPL;
-        }
-
-        FIXME("inf\n");
-        return E_NOTIMPL;
+        if(*ptr)
+            num_set_nan(ret);
+        else
+            num_set_inf(ret, !neg);
+        return S_OK;
     }
 
-    if(*ptr == '-') {
-        neg = TRUE;
-        ptr++;
-    }else if(*ptr == '+') {
-        ptr++;
-    }else if(*ptr == '0' && ptr[1] == 'x') {
+    if(*ptr == '0' && ptr[1] == 'x') {
         DWORD l = 0;
 
         ptr += 2;
@@ -313,8 +313,8 @@ static HRESULT str_to_number(BSTR str, VARIANT *ret)
         ptr++;
 
     if(*ptr) {
-        FIXME("NaN\n");
-        return E_NOTIMPL;
+        num_set_nan(ret);
+        return S_OK;
     }
 
     if(neg)
diff --git a/dlls/jscript/tests/lang.js b/dlls/jscript/tests/lang.js
index 2b92d68..d66e887 100644
--- a/dlls/jscript/tests/lang.js
+++ b/dlls/jscript/tests/lang.js
@@ -813,4 +813,11 @@ ok((Infinity < 2) === false, "(Infinity < 2) !== false");
 ok((Infinity > 2) === true, "(Infinity > 2) !== true");
 ok((-Infinity < 2) === true, "(-Infinity < 2) !== true");
 
+ok(isNaN(+"test") === true, "isNaN(+'test') !== true");
+ok(isNaN(+"123t") === true, "isNaN(+'123t') !== true");
+ok(isNaN(+"Infinity x") === true, "isNaN(+'Infinity x') !== true");
+ok(+"Infinity" === Infinity, "+'Infinity' !== Infinity");
+ok(+" Infinity " === Infinity, "+' Infinity ' !== Infinity");
+ok(+"-Infinity" === -Infinity, "+'-Infinity' !== -Infinity");
+
 reportSuccess();




More information about the wine-cvs mailing list