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 server/array.h...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/array.cpp server/array.h...
Date: Wed, 19 Mar 2008 14:36:22 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  08/03/19 14:36:22

Modified files:
        .              : ChangeLog 
        server         : array.cpp array.h as_object.cpp as_object.h 
        server/asobj   : Object.cpp 
        testsuite/actionscript.all: array.as 

Log message:
        Virtualize delProperty and hasOwnProperty, for override by the array 
class.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5976&r2=1.5977
http://cvs.savannah.gnu.org/viewcvs/gnash/server/array.cpp?cvsroot=gnash&r1=1.97&r2=1.98
http://cvs.savannah.gnu.org/viewcvs/gnash/server/array.h?cvsroot=gnash&r1=1.45&r2=1.46
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.cpp?cvsroot=gnash&r1=1.106&r2=1.107
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.h?cvsroot=gnash&r1=1.98&r2=1.99
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Object.cpp?cvsroot=gnash&r1=1.44&r2=1.45
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/array.as?cvsroot=gnash&r1=1.58&r2=1.59

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5976
retrieving revision 1.5977
diff -u -b -r1.5976 -r1.5977
--- ChangeLog   19 Mar 2008 12:04:22 -0000      1.5976
+++ ChangeLog   19 Mar 2008 14:36:20 -0000      1.5977
@@ -1,3 +1,12 @@
+2008-03-19 Sandro Santilli <address@hidden>
+
+       * server/as_object.{cpp,h}: enumerateNonProperProperty made protected,
+         add a virtual hasOwnProperty, made delProperty virtual.
+       * server/array.{cpp,h}: implement hasOwnProperty and delProperty.
+       * server/asobj/Object.cpp: use as_object::hasOwnProperty to implement
+         Object.hasOwnProperty().
+       * testsuite/actionscript.all/array.as: more successes.
+
 2008-03-19 Benjamin Wolsey <address@hidden>
 
        * gui/gnash.cpp: minor changes to 'usage' display.
@@ -8,7 +17,7 @@
          units for translation. Set locale for LC_ALL to avoid mangling
          non-ASCII characters in some log messages.
 
-2008-03-19 Sandro Santilli <address@hidden>
+2008-03-18 Sandro Santilli <address@hidden>
 
        * server/array.{cpp,h}: use boost's mapped_vector for a sparse
          array implementation. Saves space at some cpu cycles till all

Index: server/array.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/array.cpp,v
retrieving revision 1.97
retrieving revision 1.98
diff -u -b -r1.97 -r1.98
--- server/array.cpp    19 Mar 2008 11:40:15 -0000      1.97
+++ server/array.cpp    19 Mar 2008 14:36:21 -0000      1.98
@@ -788,6 +788,45 @@
        return get_member_default(name, val, nsname);
 }
 
+bool
+as_array_object::hasOwnProperty(string_table::key name, string_table::key 
nsname)
+{
+       // an index has been requested
+       int index = index_requested(name);
+
+       if ( index >= 0 ) // a valid index was requested
+       {
+               size_t i = index;
+               const_iterator it = elements.find(i);
+               if ( it != elements.end() && it.index() == i )
+               {
+                       return true;
+               }
+       }
+
+       return as_object::hasOwnProperty(name, nsname);
+}
+
+std::pair<bool,bool> 
+as_array_object::delProperty(string_table::key name, string_table::key nsname)
+{
+       // an index has been requested
+       int index = index_requested(name);
+
+       if ( index >= 0 ) // a valid index was requested
+       {
+               size_t i = index;
+               const_iterator it = elements.find(i);
+               if ( it != elements.end() && it.index() == i )
+               {
+                       elements.erase_element(i);
+                       return std::make_pair(true, true);
+               }
+       }
+
+       return as_object::delProperty(name, nsname);
+}
+
 void
 as_array_object::resize(unsigned int newsize)
 {

Index: server/array.h
===================================================================
RCS file: /sources/gnash/gnash/server/array.h,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -b -r1.45 -r1.46
--- server/array.h      19 Mar 2008 11:40:15 -0000      1.45
+++ server/array.h      19 Mar 2008 14:36:21 -0000      1.46
@@ -371,6 +371,12 @@
        virtual void set_member(string_table::key name,
                const as_value& val, string_table::key nsname = 0);
 
+       /// Overridden to deal with indexed elements
+       virtual std::pair<bool,bool> delProperty(string_table::key name, 
string_table::key nsname = 0);
+
+       /// Overridden to expose indexed elements
+       virtual bool hasOwnProperty(string_table::key name, string_table::key 
nsname = 0);
+
        /// Enumerate elements
        //
        /// See as_object::enumerateNonProperties(as_environment&) for more 
info.

Index: server/as_object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.cpp,v
retrieving revision 1.106
retrieving revision 1.107
diff -u -b -r1.106 -r1.107
--- server/as_object.cpp        13 Mar 2008 08:44:03 -0000      1.106
+++ server/as_object.cpp        19 Mar 2008 14:36:21 -0000      1.107
@@ -985,6 +985,12 @@
        return _members.getProperty(key, nsname);
 }
 
+bool
+as_object::hasOwnProperty(string_table::key key, string_table::key nsname)
+{
+       return getOwnProperty(key, nsname) != NULL;
+}
+
 as_value
 as_object::tostring_method(const fn_call& fn)
 {

Index: server/as_object.h
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.h,v
retrieving revision 1.98
retrieving revision 1.99
diff -u -b -r1.98 -r1.99
--- server/as_object.h  12 Mar 2008 22:33:07 -0000      1.98
+++ server/as_object.h  19 Mar 2008 14:36:21 -0000      1.99
@@ -627,7 +627,7 @@
        ///     - (true, false) : property protected from deletion
        ///     - (true, true) : property successfully deleted
        ///
-       std::pair<bool,bool> delProperty(string_table::key name, 
string_table::key nsname = 0);
+       virtual std::pair<bool,bool> delProperty(string_table::key name, 
string_table::key nsname = 0);
 
        /// Get this object's own named property, if existing.
        //
@@ -648,6 +648,22 @@
        ///
        Property* getOwnProperty(string_table::key name, string_table::key 
nsname = 0);
 
+       /// Return true if this object has the named property
+       //
+       /// @parame name
+       ///     Name of the property.
+       ///     Case insensitive up to SWF6,
+       ///     case *sensitive* from SWF7 up.
+       ///
+       /// @param nsname
+       ///     The id of the namespace to which this member belongs. 0 is a 
wildcard
+       ///     and will be matched by anything not asking for a specific 
namespace.
+       ///
+       /// @return
+       ///     true if the object has the property, false otherwise.
+       ///
+       virtual bool hasOwnProperty(string_table::key name, string_table::key 
nsname = 0);
+
        /// Get a property from this object (or a prototype) by ordering index.
        ///
        /// @param index
@@ -784,18 +800,6 @@
        ///
        void enumerateProperties(as_environment& env) const;
 
-       /// Enumerate any non-proper properties
-       //
-       /// This function is called by enumerateProperties(as_environment&) 
-       /// to allow for enumeration of properties that are not "proper"
-       /// (not contained in the as_object PropertyList).
-       ///
-       /// The default implementation adds nothing
-       ///
-       virtual void enumerateNonProperties(as_environment&) const
-       {
-       }
-
        /// \brief
        /// Enumerate all non-hidden properties inserting
        /// their name/value pair to the given map.
@@ -923,6 +927,16 @@
        
 protected:
 
+       /// Enumerate any non-proper properties
+       //
+       /// This function is called by enumerateProperties(as_environment&) 
+       /// to allow for enumeration of properties that are not "proper"
+       /// (not contained in the as_object PropertyList).
+       ///
+       /// The default implementation adds nothing
+       ///
+       virtual void enumerateNonProperties(as_environment&) const {}
+
        /// Get a property value by name
        //
        /// This is the default implementation, taking care of

Index: server/asobj/Object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Object.cpp,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -b -r1.44 -r1.45
--- server/asobj/Object.cpp     17 Mar 2008 18:02:04 -0000      1.44
+++ server/asobj/Object.cpp     19 Mar 2008 14:36:22 -0000      1.45
@@ -353,7 +353,7 @@
                return as_value(false);
        }
        //log_debug("%p.hasOwnProperty", fn.this_ptr);
-       return 
as_value(fn.this_ptr->getOwnProperty(VM::get().getStringTable().find(propname)) 
!= NULL);
+       return 
as_value(fn.this_ptr->hasOwnProperty(VM::get().getStringTable().find(propname)));
 }
 
 as_value

Index: testsuite/actionscript.all/array.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/array.as,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -b -r1.58 -r1.59
--- testsuite/actionscript.all/array.as 19 Mar 2008 11:40:16 -0000      1.58
+++ testsuite/actionscript.all/array.as 19 Mar 2008 14:36:22 -0000      1.59
@@ -19,7 +19,7 @@
 // Initial test written by Mike Carlson
 
 
-rcsid="$Id: array.as,v 1.58 2008/03/19 11:40:16 strk Exp $";
+rcsid="$Id: array.as,v 1.59 2008/03/19 14:36:22 strk Exp $";
 #include "check.as"
 
 check_equals(typeof(Array), 'function');
@@ -203,8 +203,8 @@
 check_equals(gaparray[4], '4');
 check_equals(gaparray[16], '16');
 #if OUTPUT_VERSION > 5
-xcheck(gaparray.hasOwnProperty('4'));
-xcheck(gaparray.hasOwnProperty('16'));
+check(gaparray.hasOwnProperty('4'));
+check(gaparray.hasOwnProperty('16'));
 check(!gaparray.hasOwnProperty('0'));
 check(!gaparray.hasOwnProperty('1'));
 #endif
@@ -243,12 +243,12 @@
  xcheck(gaparray.hasOwnProperty('15'));
  xcheck(gaparray.hasOwnProperty('16'));
  xcheck(gaparray.hasOwnProperty('4')); // a-ha!
- check(!gaparray.hasOwnProperty('0'));
+ xcheck(!gaparray.hasOwnProperty('0'));
 #else
  xcheck(gaparray.hasOwnProperty('16'));
  xcheck(gaparray.hasOwnProperty('4')); 
- xcheck(gaparray.hasOwnProperty('1'));
- xcheck(gaparray.hasOwnProperty('0'));
+ check(gaparray.hasOwnProperty('1'));
+ check(gaparray.hasOwnProperty('0'));
  xcheck(gaparray.hasOwnProperty('2'));
 #endif
 #endif
@@ -455,7 +455,7 @@
 check_equals(count, 1); // a single element exists
 #if OUTPUT_VERSION > 5
  check(!sparse.hasOwnProperty(0));
- xcheck(sparse.hasOwnProperty(5));
+ check(sparse.hasOwnProperty(5));
 #endif
 #if OUTPUT_VERSION < 7
  check_equals(sparse.toString(), ",,,,,5");
@@ -466,8 +466,8 @@
 count=0; for (var i in sparse) count++;
 check_equals(count, 6); // no more holes
 #if OUTPUT_VERSION > 5
- xcheck(sparse.hasOwnProperty(0));
- xcheck(sparse.hasOwnProperty(5));
+ check(sparse.hasOwnProperty(0));
+ check(sparse.hasOwnProperty(5));
 #endif
 #if OUTPUT_VERSION < 7
  check_equals(sparse.toString(), "5,,,,,");
@@ -720,26 +720,26 @@
 check_equals(c[1], 20);
 check_equals(c[2], 30);
 #if OUTPUT_VERSION > 5
-xcheck(c.hasOwnProperty('0'));
-xcheck(c.hasOwnProperty('1'));
-xcheck(c.hasOwnProperty('2'));
+check(c.hasOwnProperty('0'));
+check(c.hasOwnProperty('1'));
+check(c.hasOwnProperty('2'));
 #endif
-xcheck(delete c[1]);
+check(delete c[1]);
 check_equals ( c.length, 3 );
 check_equals(c[0], 10);
-xcheck_equals(typeof(c[1]), 'undefined');
+check_equals(typeof(c[1]), 'undefined');
 check_equals(c[2], 30);
 #if OUTPUT_VERSION > 5
-xcheck(c.hasOwnProperty('0'));
+check(c.hasOwnProperty('0'));
 check(!c.hasOwnProperty('1'));
-xcheck(c.hasOwnProperty('2'));
+check(c.hasOwnProperty('2'));
 #endif
 
 c[10] = 'ten';
 check_equals(c.length, 11);
 ASSetPropFlags(c, "2", 7, 0); // protect from deletion
-check( ! delete c[2] );
-check_equals(c[2], 30);
+xcheck( ! delete c[2] ); // gnash doesn't store prop flags here..
+xcheck_equals(c[2], 30); // so won't respect delete-protection
 c.length = 2;
 xcheck_equals(c[2], 30); // was protected !
 check_equals(typeof(c[10]), 'undefined'); // was not protected..




reply via email to

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