gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash server/action.cpp ./ChangeLog testsuite/a...


From: Michael Carlson
Subject: [Gnash-commit] gnash server/action.cpp ./ChangeLog testsuite/a...
Date: Thu, 09 Feb 2006 10:02:17 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Branch:         
Changes by:     Michael Carlson <address@hidden>        06/02/09 10:02:17

Modified files:
        server         : action.cpp 
        .              : ChangeLog 
        testsuite/actionscript.all: Global.as 

Log message:
        Implement _global.parseFloat, add testcases for parseFloat to Global.as

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/action.cpp.diff?tr1=1.33&tr2=1.34&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/ChangeLog.diff?tr1=1.109&tr2=1.110&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/testsuite/actionscript.all/Global.as.diff?tr1=1.4&tr2=1.5&r1=text&r2=text

Patches:
Index: gnash/ChangeLog
diff -u gnash/ChangeLog:1.109 gnash/ChangeLog:1.110
--- gnash/ChangeLog:1.109       Thu Feb  9 09:19:51 2006
+++ gnash/ChangeLog     Thu Feb  9 10:02:17 2006
@@ -1,9 +1,11 @@
 2006-02-09 Michael Carlson <address@hidden>
 
        * server/action.cpp: implement _global.parseInt for all cases
-       Also implement _global.isNan, _global.isFinite
+       Implement _global.parseFloat, and _global.isNan,
+       _global.isFinite
        * server/action.h: add as_value::is_finite() for internal use
-       * testsuite/actionscript.all: add and fix up parseint test cases
+       * testsuite/actionscript.all: add and fix up parseInt test cases
+       add some parseFloat test cases
 
 2006-02-08  Rob Savoye  <address@hidden>
 
Index: gnash/server/action.cpp
diff -u gnash/server/action.cpp:1.33 gnash/server/action.cpp:1.34
--- gnash/server/action.cpp:1.33        Thu Feb  9 09:19:51 2006
+++ gnash/server/action.cpp     Thu Feb  9 10:02:17 2006
@@ -1055,13 +1055,25 @@
                fn.result->set_bool(!fn.arg(0).is_finite());
        }
 
+       void as_global_parsefloat(const fn_call& fn)
+       {
+               assert(fn.nargs == 1);
+
+               float result;
+
+               // sscanf will handle the whitespace / unneeded characters etc. 
automatically
+               if (1 == sscanf(fn.arg(0).to_string(), "%f", &result))
+                       fn.result->set_double(double(result));
+               else
+                       // if sscanf didn't find anything, return NaN
+                       fn.result->set_nan();
+       }
+
        void    as_global_parseint(const fn_call& fn)
        {
                assert(fn.nargs == 2 || fn.nargs == 1);
 
-               // Make sure our arguments are the correct type
-               fn.arg(0).convert_to_string();
-
+               // Make sure our argument is the correct type
                if (fn.nargs > 1)
                        fn.arg(1).convert_to_number();
 
@@ -1315,6 +1327,8 @@
                        s_global->set_member("ASSetPropFlags", 
as_global_assetpropflags);
                        // parseInt
                        s_global->set_member("parseInt", as_global_parseint);
+                       // parseFloat
+                       s_global->set_member("parseFloat", 
as_global_parsefloat);
                        // isNan
                        s_global->set_member("isNan", as_global_isnan);
                        // isFinite
Index: gnash/testsuite/actionscript.all/Global.as
diff -u gnash/testsuite/actionscript.all/Global.as:1.4 
gnash/testsuite/actionscript.all/Global.as:1.5
--- gnash/testsuite/actionscript.all/Global.as:1.4      Thu Feb  9 09:19:51 2006
+++ gnash/testsuite/actionscript.all/Global.as  Thu Feb  9 10:02:17 2006
@@ -45,6 +45,14 @@
 // parseInt returns NaN (which is different from infinity)
 check ( isFinite(parseInt('none')) );
 
+// It's not reliable to compare a double type with ==, so we'll give it a
+// small range using >= and <=
+check ( isNaN(parseFloat('test')) );
+check ( parseFloat('1.5') >= 1.499 && parseFloat('1.5') <= 1.501 );
+check ( parseFloat('               -2001.5') >= -2001.51 && parseFloat('       
    -2001.5') <= -2001.49 );
+check ( parseFloat('            5.13123abc2.35387') >= 5.1312 && parseFloat('  
         5.13123abc2.35387') <= 5.1313 );
+check ( isNaN(parseFloat('         x1.234')) );
+
 // All %NN must become the corresponding ascii char
 check ( unescape('%3A%2F%3F%3D%26') == ':/?=&' );
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]