gnash-commit
[Top][All Lists]
Advanced

[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 );




reply via email to

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