[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/array.cpp testsuite/acti...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/array.cpp testsuite/acti... |
Date: |
Sat, 01 Sep 2007 01:59:33 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 07/09/01 01:59:33
Modified files:
. : ChangeLog
server : array.cpp
testsuite/actionscript.all: array.as
Log message:
Patch #6176 by Ivor Blockley <address@hidden>:
* server/array.cpp: make to_number calls environment-aware.
* testsuite/actionscript.all/array.as: success in invalid
array.sort()
calls
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4180&r2=1.4181
http://cvs.savannah.gnu.org/viewcvs/gnash/server/array.cpp?cvsroot=gnash&r1=1.75&r2=1.76
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/array.as?cvsroot=gnash&r1=1.32&r2=1.33
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.4180
retrieving revision 1.4181
diff -u -b -r1.4180 -r1.4181
--- ChangeLog 1 Sep 2007 01:20:45 -0000 1.4180
+++ ChangeLog 1 Sep 2007 01:59:32 -0000 1.4181
@@ -1,3 +1,9 @@
+2007-09-01 Ivor Blockley <address@hidden>
+
+ * server/array.cpp: make to_number calls environment-aware.
+ * testsuite/actionscript.all/array.as: success in invalid array.sort()
+ calls
+
2007-09-01 Sandro Santilli <address@hidden>
* server/dlist.{cpp,h}: when unloaded character's unload() method
Index: server/array.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/array.cpp,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -b -r1.75 -r1.76
--- server/array.cpp 31 Aug 2007 21:53:31 -0000 1.75
+++ server/array.cpp 1 Sep 2007 01:59:33 -0000 1.76
@@ -75,7 +75,7 @@
inline int str_cmp(const as_value& a, const as_value& b)
{
std::string s = a.to_string_versioned(_sv, &_env);
- return s.compare(b.to_string_versioned(_sv,& _env));
+ return s.compare(b.to_string_versioned(_sv, &_env));
}
inline int str_nocase_cmp(const as_value& a, const as_value& b)
@@ -345,12 +345,14 @@
as_function& _comp;
as_object* _object;
bool (*_zeroCmp)(const int);
+ as_environment& _env;
as_value_custom(as_function& comparator, bool (*zc)(const int),
- boost::intrusive_ptr<as_object> this_ptr)
+ boost::intrusive_ptr<as_object> this_ptr, as_environment& env)
:
_comp(comparator),
- _zeroCmp(zc)
+ _zeroCmp(zc),
+ _env(env)
{
_object = this_ptr.get();
}
@@ -364,7 +366,7 @@
env.push(a);
env.push(b);
ret = call_method(cmp_method, &env, _object, 2, 1);
- return (*_zeroCmp)((int)ret.to_number());
+ return (*_zeroCmp)((int)ret.to_number(&_env));
}
};
@@ -919,7 +921,7 @@
else icmp = &int_gt;
as_value_custom avc =
- as_value_custom(*as_func, icmp, fn.this_ptr);
+ as_value_custom(*as_func, icmp, fn.this_ptr, env);
if ( (flags & as_array_object::fReturnIndexedArray) )
return as_value(array->sort_indexed(avc));
@@ -933,7 +935,8 @@
IF_VERBOSE_ASCODING_ERRORS(
log_aserror(_("Sort called with invalid arguments."));
)
- return as_value();
+ if ( fn.arg(0).is_undefined() ) return as_value();
+ return as_value((boost::intrusive_ptr<as_object>)array);
}
bool do_unique, do_index;
flags = flag_preprocess(flags, &do_unique, &do_index);
@@ -969,7 +972,7 @@
if ( fn.nargs > 1 && fn.arg(1).is_number() )
{
- flags = static_cast<uint8_t>(fn.arg(1).to_number());
+ flags = static_cast<uint8_t>(fn.arg(1).to_number(&env));
flags = flag_preprocess(flags, &do_unique, &do_index);
}
as_value_prop avc = as_value_prop(propField,
@@ -1257,6 +1260,7 @@
// start and end index of the part we're slicing
int startindex, endindex;
unsigned int arraysize = array->size();
+ as_environment& env = fn.env();
if (fn.nargs > 2)
{
@@ -1276,7 +1280,7 @@
}
- startindex = int(fn.arg(0).to_number());
+ startindex = int(fn.arg(0).to_number(&env));
// if the index is negative, it means "places from the end"
// where -1 is the last element
@@ -1285,7 +1289,7 @@
// if we sent at least two arguments, setup endindex
if (fn.nargs >= 2)
{
- endindex = int(fn.arg(1).to_number());
+ endindex = int(fn.arg(1).to_number(&env));
// if the index is negative, it means
// "places from the end" where -1 is the last element
Index: testsuite/actionscript.all/array.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/array.as,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -b -r1.32 -r1.33
--- testsuite/actionscript.all/array.as 31 Aug 2007 21:53:33 -0000 1.32
+++ testsuite/actionscript.all/array.as 1 Sep 2007 01:59:33 -0000 1.33
@@ -18,7 +18,7 @@
// Initial test written by Mike Carlson
-rcsid="$Id: array.as,v 1.32 2007/08/31 21:53:33 strk Exp $";
+rcsid="$Id: array.as,v 1.33 2007/09/01 01:59:33 strk Exp $";
#include "check.as"
@@ -261,7 +261,7 @@
// using objects that implement valueOf as index positions
portion = concatted.slice(zero, two);
-xcheck_equals ( portion.toString(), "0,1");
+check_equals ( portion.toString(), "0,1");
//-------------------------------
// Test splice
@@ -486,7 +486,7 @@
check_equals( r.toString(), "8,5,3,1,0,-2,-7,-9" );
check_equals( b.toString(), "8,5,3,1,0,-2,-7,-9" );
r = b.sort( zero );
-xcheck_equals( r.toString(), "8,5,3,1,0,-2,-7,-9" );
+check_equals( r.toString(), "8,5,3,1,0,-2,-7,-9" );
check_equals( b.toString(), "8,5,3,1,0,-2,-7,-9" );
b.sort( numeric );
check_equals( b.toString(), "8,5,3,1,0,-2,-7,-9" );
@@ -591,7 +591,7 @@
check_equals( tolen(r), "[5, 5, 4, 2, 2, 0]" );
check_equals( tolen(a), "[5, 5, 4, 2, 2, 0]" );
a.sort( cmp_fn_obj, Array.CASEINSENSITIVE | Array.NUMERIC );
-xcheck_equals( tolen(a), "[0, 2, 2, 4, 5, 5]" );
+check_equals( tolen(a), "[0, 2, 2, 4, 5, 5]" );
r = a.sort( cmp_fn_obj, Array.RETURNINDEXEDARRAY );
check_equals( r.toString(), "0,1,2,3,4,5" );
r = a.sort( cmp_fn_obj, Array.RETURNINDEXEDARRAY | Array.DESCENDING );