gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/as_value.cpp server/as_v...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/as_value.cpp server/as_v...
Date: Tue, 19 Feb 2008 12:06:08 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  08/02/19 12:06:08

Modified files:
        .              : ChangeLog 
        server         : as_value.cpp as_value.h 
        server/asobj   : Number.cpp 
        testsuite/actionscript.all: Number.as 
        testsuite/swfdec: PASSING 

Log message:
        Implement Number.toString(). Fixes bug #22360.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5691&r2=1.5692
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_value.cpp?cvsroot=gnash&r1=1.115&r2=1.116
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_value.h?cvsroot=gnash&r1=1.83&r2=1.84
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Number.cpp?cvsroot=gnash&r1=1.37&r2=1.38
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/Number.as?cvsroot=gnash&r1=1.39&r2=1.40
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/swfdec/PASSING?cvsroot=gnash&r1=1.90&r2=1.91

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5691
retrieving revision 1.5692
diff -u -b -r1.5691 -r1.5692
--- ChangeLog   19 Feb 2008 09:55:34 -0000      1.5691
+++ ChangeLog   19 Feb 2008 12:06:06 -0000      1.5692
@@ -1,5 +1,14 @@
 2008-02-19 Sandro Santilli <address@hidden>
 
+       * server/as_value.{cpp,h}: add optional second argument
+         to doubleToString static method, to specify a base
+         (defaults to 10).
+       * server/asobj/Number.cpp: implement Number.toString(<radix>).
+       * testsuite/actionscript.all/Number.as: successes.
+       * testsuite/swfdec/PASSING: successes.
+
+2008-02-19 Sandro Santilli <address@hidden>
+
        * testsuite/actionscript.all/Number.as: add test for toString(<radix>)
 
 2008-02-19 Sandro Santilli <address@hidden>

Index: server/as_value.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_value.cpp,v
retrieving revision 1.115
retrieving revision 1.116
diff -u -b -r1.115 -r1.116
--- server/as_value.cpp 15 Feb 2008 20:50:43 -0000      1.115
+++ server/as_value.cpp 19 Feb 2008 12:06:07 -0000      1.116
@@ -1199,7 +1199,7 @@
 
 // Convert numeric value to string value, following ECMA-262 specification
 std::string
-as_value::doubleToString(double val)
+as_value::doubleToString(double val, int radix)
 {
        // Printing formats:
        //
@@ -1291,6 +1291,8 @@
        std::ostringstream ostr;
        std::string str;
        
+       if ( radix == 10 )
+       {
        // ActionScript always expects dot as decimal point?
        ostr.imbue(std::locale("C")); 
        
@@ -1324,6 +1326,24 @@
                }
                
        }
+       }
+       else
+       {
+               bool negative = (val < 0);
+               if ( negative ) val = -val;
+
+               double left = floor(val);
+               if ( left < 1 ) return "0";
+               while ( left != 0 )
+               {
+                       double n = left;
+                       left = floor(left/radix);
+                       n -= (left*radix);
+                       //str = std::string(n < 10 ? ((int)n+'0') : 
((int)n+('a'-10))) + str;
+                       str.insert(0, 1, (n < 10 ? ((int)n+'0') : 
((int)n+('a'-10))));
+               }
+               if ( negative ) str.insert(0, 1, '-'); 
+       }
 
        return str;
        

Index: server/as_value.h
===================================================================
RCS file: /sources/gnash/gnash/server/as_value.h,v
retrieving revision 1.83
retrieving revision 1.84
diff -u -b -r1.83 -r1.84
--- server/as_value.h   29 Jan 2008 12:31:09 -0000      1.83
+++ server/as_value.h   19 Feb 2008 12:06:07 -0000      1.84
@@ -15,7 +15,7 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-/* $Id: as_value.h,v 1.83 2008/01/29 12:31:09 strk Exp $ */
+/* $Id: as_value.h,v 1.84 2008/02/19 12:06:07 strk Exp $ */
 
 #ifndef GNASH_AS_VALUE_H
 #define GNASH_AS_VALUE_H
@@ -198,7 +198,7 @@
        //
        /// TODO: move here some of the good comments found in the function 
definition.
        ///
-       static std::string doubleToString(double val);
+       static std::string doubleToString(double val, int radix=10);
 
        /// Drop any ref counts we have.
        //

Index: server/asobj/Number.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Number.cpp,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -b -r1.37 -r1.38
--- server/asobj/Number.cpp     19 Feb 2008 08:51:44 -0000      1.37
+++ server/asobj/Number.cpp     19 Feb 2008 12:06:07 -0000      1.38
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-/* $Id: Number.cpp,v 1.37 2008/02/19 08:51:44 strk Exp $ */
+/* $Id: Number.cpp,v 1.38 2008/02/19 12:06:07 strk Exp $ */
 
 #include "log.h"
 #include "tu_config.h"
@@ -191,13 +191,24 @@
 {
        boost::intrusive_ptr<as_object> obj = fn.this_ptr;
 
+       double val = obj->get_numeric_value();
+       unsigned radix=10;
+
        if ( fn.nargs ) 
        {
-               // See https://savannah.gnu.org/bugs/index.php?22360
-               log_unimpl("Number.toString(<radix>)");
+               int userRadix = fn.arg(0).to_int();
+               if ( userRadix >= 2 && userRadix <= 36 ) radix=userRadix;
+               else
+               {
+                       IF_VERBOSE_ASCODING_ERRORS(
+                       log_aserror(_("Number.toString(%s): "
+                               "radix must be in the 2..36 range (%d is 
invalid)"),
+                               fn.arg(0).to_debug_string().c_str(), userRadix)
+                       )
+               }
+
        }
-       std::string text_val = obj->get_text_value();
-       return as_value(text_val);
+       return as_value::doubleToString(val, radix); 
 }
   
 } // namespace gnash

Index: testsuite/actionscript.all/Number.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/Number.as,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -b -r1.39 -r1.40
--- testsuite/actionscript.all/Number.as        19 Feb 2008 09:58:42 -0000      
1.39
+++ testsuite/actionscript.all/Number.as        19 Feb 2008 12:06:07 -0000      
1.40
@@ -27,7 +27,7 @@
 // TODO: test with SWF target != 6 (the only one tested so far)
 //     
 
-rcsid="$Id: Number.as,v 1.39 2008/02/19 09:58:42 strk Exp $";
+rcsid="$Id: Number.as,v 1.40 2008/02/19 12:06:07 strk Exp $";
 
 #include "check.as"
 
@@ -68,19 +68,19 @@
 #endif
 
 tmp = new Number(10);
-xcheck_equals(tmp.toString(2), '1010'); 
+check_equals(tmp.toString(2), '1010'); 
 tmp = 6;
-xcheck_equals(tmp.toString(2), '110'); 
-xcheck_equals(tmp.toString(3), '20'); 
+check_equals(tmp.toString(2), '110'); 
+check_equals(tmp.toString(3), '20'); 
 check_equals(tmp.toString(8), '6'); 
 check_equals(tmp.toString(-2), '6'); // invalid, returns 10 ?
 check_equals(tmp.toString(0), '6'); // invalid, returns 10 ?
-xcheck_equals(tmp.toString(5), '11'); 
+check_equals(tmp.toString(5), '11'); 
 tmp = -5;
-xcheck_equals(tmp.toString(2), '-101'); 
+check_equals(tmp.toString(2), '-101'); 
 check_equals(tmp.toString(16), '-5'); 
 tmp = -11;
-xcheck_equals(tmp.toString(16), '-b'); 
+check_equals(tmp.toString(16), '-b'); 
 
 //------------------------------------
 // Test Number.valueOf 

Index: testsuite/swfdec/PASSING
===================================================================
RCS file: /sources/gnash/gnash/testsuite/swfdec/PASSING,v
retrieving revision 1.90
retrieving revision 1.91
diff -u -b -r1.90 -r1.91
--- testsuite/swfdec/PASSING    8 Feb 2008 13:22:08 -0000       1.90
+++ testsuite/swfdec/PASSING    19 Feb 2008 12:06:07 -0000      1.91
@@ -129,6 +129,7 @@
 crash-0.5.5-stylesheet-update-6.swf:ea135a06ae6032fd3cd9e2588ed1be67
 crash-0.5.5-stylesheet-update-7.swf:c112cfe1b313fb437fe45cb0c3a7b665
 crash-0.5.5-stylesheet-update-8.swf:73a61afbd582fabd2dbba360cc3763e4
+crash-0.5.90-empty-action.swf:c564ca09c4bc71fb89b042bc07d247eb
 currentframe.swf:ba479d5adbece0ddafeaa75e68eff052
 dangling-compare-5.swf:7daa85d63e7bf29df6aa1668d21a28a9
 dangling-compare-6.swf:51999fa1cbc988765b5dee03717d22a5
@@ -372,6 +373,10 @@
 newobject-paths-6.swf:e2e207b7b6966fdffd3a0017cdbf2f1c
 newobject-paths-7.swf:e8af4c2cd51e1b3c5e7ab3121386d0ba
 newobject-paths-8.swf:fc8407413a00bf2e41e27db7e7ec8c9f
+number-tostring-radix-5.swf:9c620b9523efbfc2cd30832d38c3d403
+number-tostring-radix-6.swf:82b91ba51d982a8c27dddffd129051df
+number-tostring-radix-7.swf:c6870eb97ffb4af5f99c3a18498de2f5
+number-tostring-radix-8.swf:93317f3088c690df93f8cdb9d314263d
 object-hasownproperty-6.swf:45e9d8d671d900b1331bff8df052b02c
 object-hasownproperty-7.swf:417475e7c38fe61d2ab1d6b153a3eee1
 object-hasownproperty-8.swf:6cee106e21a390e63533f0f397bc69d4




reply via email to

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