gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/as_object.cpp testsuite/...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/as_object.cpp testsuite/...
Date: Fri, 26 Oct 2007 23:34:15 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/10/26 23:34:15

Modified files:
        .              : ChangeLog 
        server         : as_object.cpp 
        testsuite/swfdec: PASSING 

Log message:
                * server/as_object.cpp: have __proto__ respect the same
                  visibility rules of other properties, check visibility
                  rules in findUpdatableProperty.
                * testsuite/swfdec/PASSING: one more test passing (more failing
                  from the same set).

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4724&r2=1.4725
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.cpp?cvsroot=gnash&r1=1.72&r2=1.73
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/swfdec/PASSING?cvsroot=gnash&r1=1.50&r2=1.51

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.4724
retrieving revision 1.4725
diff -u -b -r1.4724 -r1.4725
--- ChangeLog   26 Oct 2007 23:30:24 -0000      1.4724
+++ ChangeLog   26 Oct 2007 23:34:14 -0000      1.4725
@@ -1,3 +1,11 @@
+2007-10-26 Sandro Santilli <address@hidden>
+
+       * server/as_object.cpp: have __proto__ respect the same
+         visibility rules of other properties, check visibility
+         rules in findUpdatableProperty.
+       * testsuite/swfdec/PASSING: one more test passing (more failing
+         from the same set).
+
 2007-10-26 Tomas Groth Christensen <address@hidden>
 
        * server/parser/video_stream_def.cpp: Check if iterator is valid, before

Index: server/as_object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.cpp,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -b -r1.72 -r1.73
--- server/as_object.cpp        26 Oct 2007 22:56:07 -0000      1.72
+++ server/as_object.cpp        26 Oct 2007 23:34:14 -0000      1.73
@@ -212,15 +212,13 @@
 Property*
 as_object::findUpdatableProperty(string_table::key key, string_table::key 
nsname)
 {
+       int swfVersion = _vm.getSWFVersion();
+
        Property* prop = _members.getProperty(key, nsname);
-       if ( prop ) return prop;
+       if ( prop && prop->isVisible(swfVersion) ) return prop;
 
        // don't enter an infinite loop looking for __proto__ ...
-       if (key == NSV::PROP_uuPROTOuu)
-       {
-               Property* prop = _members.getProperty(key, nsname);
-               if ( prop ) return prop;
-       }
+       if (key == NSV::PROP_uuPROTOuu) return NULL;
 
        // this set will keep track of visited objects,
        // to avoid infinite loops
@@ -231,7 +229,7 @@
        while ( obj && visited.insert(obj.get()).second )
        {
                Property* prop = obj->_members.getProperty(key, nsname);
-               if ( prop && prop->isGetterSetter() )
+               if ( prop && prop->isGetterSetter() && 
prop->isVisible(swfVersion) )
                {
                        // what if a property is found which is
                        // NOT a getter/setter ?
@@ -636,6 +634,8 @@
 as_object::copyProperties(const as_object& o)
 {
        PropsCopier copier(*this);
+
+       // TODO: check if non-visible properties should be also copied !
        o._members.visitValues(copier,
                        // Need const_cast due to getValue getting non-const ...
                        const_cast<as_object&>(o));
@@ -780,24 +780,18 @@
 as_object::get_prototype()
 {
        static string_table::key key = NSV::PROP_uuPROTOuu;
-       as_value tmp;
-       // I don't think any subclass should override getting __proto__ 
anyway...
-       //if ( ! get_member(key, &tmp) ) return NULL;
-       if (!_members.getValue(key, tmp, *this) ) return NULL;
-       return tmp.to_object();
 
-#if 0 // the inheritance chain MUST end somewhere, handle the SWF4 thing in 
some other way
-       if ( m_prototype ) return m_prototype.get();
-       //log_msg(_("as_object::get_prototype(): Hit top of inheritance 
chain"));
+       int swfVersion = _vm.getSWFVersion();
 
-       // if SWF version < 5 the Object interface won't keep alive !
-       if ( _vm.getSWFVersion() > 4 )
-       {
-               return getObjectInterface();
-       }
+       boost::intrusive_ptr<as_object> nullRet;
 
-       return NULL;
-#endif
+       Property* prop = _members.getProperty(key);
+       if ( ! prop ) return nullRet;
+       if ( ! prop->isVisible(swfVersion) ) return nullRet;
+
+       as_value tmp = prop->getValue(*this);
+
+       return tmp.to_object();
 }
 
 #ifdef NEW_KEY_LISTENER_LIST_DESIGN

Index: testsuite/swfdec/PASSING
===================================================================
RCS file: /sources/gnash/gnash/testsuite/swfdec/PASSING,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -b -r1.50 -r1.51
--- testsuite/swfdec/PASSING    26 Oct 2007 22:56:07 -0000      1.50
+++ testsuite/swfdec/PASSING    26 Oct 2007 23:34:14 -0000      1.51
@@ -280,6 +280,7 @@
 preload.swf:2fd2da9440e29289e83dadd1ed9c99c4
 property-native-5.swf:3609da1095cd97f5373da462b45ead1d
 prototype-addProperty-5.swf:1d9ac80542b3a9238ed09e78bdb8c563
+prototype-propflags-5.swf:43f4ffa51653f54d0182610a01db8f1f
 prototype-propflags-8.swf:3c6f02bf6a3348879f3f50c28ee599cb
 prototypes.swf:21df8d7eda568fd27f19a56fec87a415
 register-count.swf:861abb623a228e4152df92896ee807f0




reply via email to

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