gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash server/Property.cpp server/PropertyList.c...


From: Sandro Santilli
Subject: [Gnash-commit] gnash server/Property.cpp server/PropertyList.c...
Date: Thu, 03 Apr 2008 16:00:48 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  08/04/03 16:00:48

Modified files:
        server         : Property.cpp PropertyList.cpp PropertyList.h 
                         as_object.cpp as_object.h 
        server/asobj   : Object.cpp 
        testsuite/swfdec: PASSING 
        testsuite/actionscript.all: Object.as 

Log message:
                * server/: Property.cpp, PropertyList.{cpp,h},
                  as_object.{cpp,h}: add support for setter-less
                  gette-rsetters.
                * server/asobj/Object.cpp: addProperty call is valid
                  if setter argument is null.
                * testsuite/swfdec/PASSING: 11 new successes.
                * testsuite/actionscript.all/Object.as: addProperty
                  tests pass.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/server/Property.cpp?cvsroot=gnash&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/gnash/server/PropertyList.cpp?cvsroot=gnash&r1=1.31&r2=1.32
http://cvs.savannah.gnu.org/viewcvs/gnash/server/PropertyList.h?cvsroot=gnash&r1=1.27&r2=1.28
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.cpp?cvsroot=gnash&r1=1.110&r2=1.111
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.h?cvsroot=gnash&r1=1.101&r2=1.102
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Object.cpp?cvsroot=gnash&r1=1.49&r2=1.50
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/swfdec/PASSING?cvsroot=gnash&r1=1.119&r2=1.120
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/Object.as?cvsroot=gnash&r1=1.53&r2=1.54

Patches:
Index: server/Property.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/Property.cpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- server/Property.cpp 6 Mar 2008 14:52:20 -0000       1.9
+++ server/Property.cpp 3 Apr 2008 16:00:47 -0000       1.10
@@ -122,20 +122,20 @@
        }
 
        if ( mGetter ) return (*mGetter)(fn);
-       else return as_value();
+       else return as_value(); // should we return underlyingValue here ?
 }
 
 void
 GetterSetter::UserDefinedGetterSetter::set(fn_call& fn)
 {
        ScopedLock lock(*this);
-       if ( ! lock.obtained() )
+       if ( ! lock.obtained() || ! mSetter )
        {
                underlyingValue = fn.arg(0);
                return;
        }
 
-       if ( mSetter ) (*mSetter)(fn);
+       (*mSetter)(fn);
 }
 
 } // namespace gnash

Index: server/PropertyList.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/PropertyList.cpp,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -b -r1.31 -r1.32
--- server/PropertyList.cpp     12 Mar 2008 10:32:48 -0000      1.31
+++ server/PropertyList.cpp     3 Apr 2008 16:00:47 -0000       1.32
@@ -338,9 +338,9 @@
 
 bool
 PropertyList::addGetterSetter(string_table::key key, as_function& getter,
-       as_function& setter, string_table::key nsId)
+       as_function* setter, string_table::key nsId)
 {
-       Property a(key, nsId, &getter, &setter);
+       Property a(key, nsId, &getter, setter);
        a.setOrder(- ++mDefaultOrder - 1);
 
        container::iterator found = iterator_find(_props, key, nsId);

Index: server/PropertyList.h
===================================================================
RCS file: /sources/gnash/gnash/server/PropertyList.h,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -b -r1.27 -r1.28
--- server/PropertyList.h       27 Mar 2008 10:50:14 -0000      1.27
+++ server/PropertyList.h       3 Apr 2008 16:00:47 -0000       1.28
@@ -283,7 +283,7 @@
        ///         otherwise (property already existent?)
        ///
        bool addGetterSetter(string_table::key key, as_function& getter,
-               as_function& setter, string_table::key ns = 0);
+               as_function* setter, string_table::key ns = 0);
 
        /// \brief
        /// Add a getter/setter property, if not already existing

Index: server/as_object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.cpp,v
retrieving revision 1.110
retrieving revision 1.111
diff -u -b -r1.110 -r1.111
--- server/as_object.cpp        31 Mar 2008 23:18:33 -0000      1.110
+++ server/as_object.cpp        3 Apr 2008 16:00:47 -0000       1.111
@@ -156,7 +156,7 @@
 
 bool
 as_object::add_property(const std::string& name, as_function& getter,
-               as_function& setter)
+               as_function* setter)
 {
        string_table &st = _vm.getStringTable();
        return _members.addGetterSetter(st.find(PROPNAME(name)), getter, 
setter);
@@ -627,7 +627,7 @@
                as_function& setter, int flags, string_table::key nsname)
 {
        bool success;
-       success = _members.addGetterSetter(key, getter, setter, nsname);
+       success = _members.addGetterSetter(key, getter, &setter, nsname);
 
        // We shouldn't attempt to initialize a property twice, should we ?
        assert(success);

Index: server/as_object.h
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.h,v
retrieving revision 1.101
retrieving revision 1.102
diff -u -b -r1.101 -r1.102
--- server/as_object.h  31 Mar 2008 23:18:33 -0000      1.101
+++ server/as_object.h  3 Apr 2008 16:00:47 -0000       1.102
@@ -861,12 +861,14 @@
        /// @param setter
        ///     A function to invoke when setting this property's value.
        ///     add_ref will be called on the function.
+       ///     By passing NULL, the property will have no setter
+       ///     (valid ActionScript - see actionscript.all/Object.as)
        ///
        /// @return true if the property was successfully added, false
        ///         otherwise (property already existent?)
        ///
        bool add_property(const std::string& key, as_function& getter,
-               as_function& setter);
+               as_function* setter=NULL);
 
        /// \brief
        /// Add a getter/setter property, if no member already has

Index: server/asobj/Object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Object.cpp,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -b -r1.49 -r1.50
--- server/asobj/Object.cpp     31 Mar 2008 17:17:16 -0000      1.49
+++ server/asobj/Object.cpp     3 Apr 2008 16:00:48 -0000       1.50
@@ -233,21 +233,27 @@
                return as_value(false);
        }
 
-       as_function* setter = fn.arg(2).to_as_function();
+       as_function* setter = NULL;
+       const as_value& setterval = fn.arg(2);
+       if ( ! setterval.is_null() )
+       {
+               setter = setterval.to_as_function();
        if ( ! setter )
        {
                IF_VERBOSE_ASCODING_ERRORS(
                log_aserror(_("Invalid call to Object.addProperty() - "
-                       "setter is not an AS function"));
+                               "setter is not null and not an AS function 
(%s)"),
+                               setterval.to_debug_string());
                );
                return as_value(false);
        }
+       }
 
 
        // Now that we checked everything, let's call the as_object
        // interface for getter/setter properties :)
        
-       bool result = obj->add_property(propname, *getter, *setter);
+       bool result = obj->add_property(propname, *getter, setter);
 
        //log_debug("Object.addProperty(): testing");
        return as_value(result);

Index: testsuite/swfdec/PASSING
===================================================================
RCS file: /sources/gnash/gnash/testsuite/swfdec/PASSING,v
retrieving revision 1.119
retrieving revision 1.120
diff -u -b -r1.119 -r1.120
--- testsuite/swfdec/PASSING    2 Apr 2008 15:50:51 -0000       1.119
+++ testsuite/swfdec/PASSING    3 Apr 2008 16:00:48 -0000       1.120
@@ -4,7 +4,13 @@
 abort-really-aborts-8.swf:cfd60440f939844201b7bc405a75d662
 add2-different-objects-5.swf:e35553c20f435d125b6e4905cbd1ad20
 addProperty-5.swf:00e23fa4da0445805c0c4ea3f54a140d
+addProperty-6.swf:d35a3de35c9da995d03e0c2da1ea0dce
+addProperty-7.swf:6bb7593ed139daddaa7be97db33833fb
+addProperty-8.swf:8bd2137601b88a6a44cc6c332d1fd68b
 addProperty-delete-5.swf:27b4309647c2ef74ec4ce8caea05f4bd
+addProperty-delete-6.swf:1ad962de27d1187410a015a4da8c35eb
+addProperty-delete-7.swf:5fa090b1e0e4914875ae7191dca3eb0f
+addProperty-delete-8.swf:0e27629384de8fc7ae84b477f8296294
 addProperty-flags-5.swf:16a729f3d956fd1287236873fb26fac4
 addProperty-flags-6.swf:574869d2213ee609d3f2910dabecaa80
 addProperty-flags-7.swf:b52073016bf68198756bdc210e0d2b41
@@ -14,6 +20,9 @@
 addProperty-get-prototypes-7.swf:db2e8ce9695eb081b9c01da90d0e494f
 addProperty-get-prototypes-8.swf:ac8d51d66f9144311ce0abbbc80cb42b
 addProperty-set-prototypes-5.swf:8b70bc713c001802c96c5b38f9aba14a
+addProperty-set-prototypes-6.swf:9c551f9e26d382466c9f1e33c648b857
+addProperty-set-prototypes-7.swf:ace9ab3223a575532ccba54a0a257091
+addProperty-set-prototypes-8.swf:f5f6a0305a91b7cf09448d60bb86ddae
 and-or-5.swf:a734facbc191156759ad278e25c3f308
 and-or-6.swf:a3a02811b62c07c4d2dd6d6d547f1d2f
 and-or-7.swf:b4c3eb73aa8e0403e8d141516b25c9c6
@@ -530,6 +539,8 @@
 propflags-call-prototype-8.swf:e144d5fa2807272f7d45ad2bd3cb9eb9
 propflags-call-prototype-9.swf:d4a4fd3e2f4727e5cdc4b4ff9c8ed1b5
 propflags-get-9.swf:56b0cf506962343f670d24c4ed64dedf
+propflags-get-prototype-8.swf:711bd46c4c4a3e62a324c0902ee5b364
+propflags-get-prototype-9.swf:713e3808411e4c89458fae8c082e208f
 propflags-set-native-5.swf:a0c0652f4c7a1626e064ae0dd6a867a8
 propflags-set-native-8.swf:b11c0be85a33c08d588897a99ed35f7f
 propflags-set-proto-5.swf:d8cfcbffc8213a9eb60301a877f750e1

Index: testsuite/actionscript.all/Object.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/Object.as,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -b -r1.53 -r1.54
--- testsuite/actionscript.all/Object.as        3 Apr 2008 10:39:42 -0000       
1.53
+++ testsuite/actionscript.all/Object.as        3 Apr 2008 16:00:48 -0000       
1.54
@@ -21,7 +21,7 @@
 // execute it like this gnash -1 -r 0 -v out.swf
 
 
-rcsid="$Id: Object.as,v 1.53 2008/04/03 10:39:42 strk Exp $";
+rcsid="$Id: Object.as,v 1.54 2008/04/03 16:00:48 strk Exp $";
 #include "check.as"
 
 // Test things in Class Object (swf5~swf8)
@@ -415,10 +415,10 @@
 r = o.addProperty('lnull', getter, o); // self as setter..
 check(!r);
 r = o.addProperty('lnull', getter, null);
-xcheck(r);
+check(r);
 getcalls=0;
 t=o.lnull;
-xcheck_equals(getcalls, 1);
+check_equals(getcalls, 1);
 o.lnull = 5;
 _root.retwhat='lnull';
 check_equals(o.lnull, 5);




reply via email to

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