[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog server/as_value.cpp server/as_v...,
Sandro Santilli <=