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 server/as_...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/as_object.cpp server/as_...
Date: Thu, 29 Mar 2007 14:29:16 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/03/29 14:29:16

Modified files:
        .              : ChangeLog 
        server         : as_object.cpp as_object.h 
        server/vm      : ASHandlers.cpp 
        testsuite/misc-mtasc.all: Makefile.am 
        testsuite/server: Makefile.am 
Added files:
        testsuite/misc-mtasc.all: enum.as 

Log message:
                * server/as_object.{cpp,h} add an optional argument
                  to init_property and init_readonly_proprety for setting
                  explicit flags, use same defaults as for init_member.
                * server/vm/ASHandlers.cpp (ActionEnum, ActionEnum2):
                  do not convert values to objects always.
                * testsuite/misc-mtasc.all/: Makefile.am, enum.as:
                  Add test for ActionEnum2.
                * testsuite/server/Makefile.am: more linking fixes.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.2718&r2=1.2719
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.cpp?cvsroot=gnash&r1=1.45&r2=1.46
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.h?cvsroot=gnash&r1=1.52&r2=1.53
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ASHandlers.cpp?cvsroot=gnash&r1=1.75&r2=1.76
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-mtasc.all/Makefile.am?cvsroot=gnash&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-mtasc.all/enum.as?cvsroot=gnash&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/server/Makefile.am?cvsroot=gnash&r1=1.23&r2=1.24

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.2718
retrieving revision 1.2719
diff -u -b -r1.2718 -r1.2719
--- ChangeLog   29 Mar 2007 12:57:36 -0000      1.2718
+++ ChangeLog   29 Mar 2007 14:29:15 -0000      1.2719
@@ -1,5 +1,16 @@
 2007-03-29 Sandro Santilli <address@hidden>
 
+       * server/as_object.{cpp,h} add an optional argument
+         to init_property and init_readonly_proprety for setting
+         explicit flags, use same defaults as for init_member.
+       * server/vm/ASHandlers.cpp (ActionEnum, ActionEnum2):
+         do not convert values to objects always.
+       * testsuite/misc-mtasc.all/: Makefile.am, enum.as: 
+         Add test for ActionEnum2.
+       * testsuite/server/Makefile.am: more linking fixes.
+
+2007-03-29 Sandro Santilli <address@hidden>
+
        * server/asobj/SharedObject.cpp: better stubs (nothing more).
 
 2007-03-29 Sandro Santilli <address@hidden>

Index: server/as_object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.cpp,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -b -r1.45 -r1.46
--- server/as_object.cpp        28 Mar 2007 15:22:24 -0000      1.45
+++ server/as_object.cpp        29 Mar 2007 14:29:15 -0000      1.46
@@ -277,7 +277,7 @@
 
 void
 as_object::init_property(const std::string& key, as_function& getter,
-               as_function& setter)
+               as_function& setter, int flags)
 {
        bool success;
        if ( _vm.getSWFVersion() < 7 )
@@ -286,11 +286,15 @@
                boost::to_lower(name, _vm.getLocale());
                success = _members.addGetterSetter(name, getter, setter);
                //log_msg("Initialized property '%s'", name.c_str());
+               // TODO: optimize this, don't scan again !
+               _members.setFlags(name, flags, 0);
        }
        else
        {
                success = _members.addGetterSetter(key, getter, setter);
                //log_msg("Initialized property '%s'", key.c_str());
+               // TODO: optimize this, don't scan again !
+               _members.setFlags(key, flags, 0);
        }
 
        // We shouldn't attempt to initialize a property twice, should we ?
@@ -298,9 +302,9 @@
 }
 
 void
-as_object::init_readonly_property(const std::string& key, as_function& getter)
+as_object::init_readonly_property(const std::string& key, as_function& getter, 
int initflags)
 {
-       init_property(key, getter, getter);
+       init_property(key, getter, getter, initflags);
 
        as_prop_flags& flags = getOwnProperty(key)->getFlags();
 
@@ -478,7 +482,6 @@
 {
        assert( env.top(0).is_null() );
 
-
        // this set will keep track of visited objects,
        // to avoid infinite loops
        std::set<const as_object*> visited;

Index: server/as_object.h
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.h,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -b -r1.52 -r1.53
--- server/as_object.h  28 Mar 2007 15:22:24 -0000      1.52
+++ server/as_object.h  29 Mar 2007 14:29:15 -0000      1.53
@@ -210,8 +210,12 @@
        ///     A function to invoke when setting this property's value.
        ///     add_ref will be called on the function.
        ///
+       /// @param flags
+       ///     Flags for the new member. By default dontDelete and dontEnum.
+       ///     See as_prop_flags::Flags.
+       ///
        void init_property(const std::string& key, as_function& getter,
-               as_function& setter);
+               as_function& setter, int 
flags=as_prop_flags::dontDelete|as_prop_flags::dontEnum);
 
        /// \brief
        /// Use this method for read-only properties.
@@ -223,7 +227,9 @@
        /// 
        /// The arguments are the same as the above init_property arguments,
        /// although the setter argument is omitted.
-       void init_readonly_property(const std::string& key, as_function& 
getter);
+       ///
+       void init_readonly_property(const std::string& key, as_function& getter,
+                       int 
flags=as_prop_flags::dontDelete|as_prop_flags::dontEnum);
 
        /// Get a member as_value by name
        //

Index: server/vm/ASHandlers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ASHandlers.cpp,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -b -r1.75 -r1.76
--- server/vm/ASHandlers.cpp    28 Mar 2007 16:24:39 -0000      1.75
+++ server/vm/ASHandlers.cpp    29 Mar 2007 14:29:15 -0000      1.76
@@ -14,7 +14,7 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-/* $Id: ASHandlers.cpp,v 1.75 2007/03/28 16:24:39 strk Exp $ */
+/* $Id: ASHandlers.cpp,v 1.76 2007/03/29 14:29:15 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -2370,15 +2370,13 @@
 
        // Get the object
        as_value& var_name = env.top(0);
-       string var_string = var_name.to_std_string();
+       string var_string = var_name.to_std_string(&env);
+
        as_value variable = thread.getVariable(var_string);
-       const boost::intrusive_ptr<as_object> obj = variable.to_object();
 
-       // The end of the enumeration, don't set top(0) *before*
-       // fetching the as_object* obj above or it will get lost
        env.top(0).set_null();
 
-       if ( ! obj )
+       if ( ! variable.is_object() )
        {
                IF_VERBOSE_ASCODING_ERRORS(
                log_aserror("Top of stack not an object (%s) at "
@@ -2388,6 +2386,8 @@
                return;
        }
 
+       const boost::intrusive_ptr<as_object> obj = variable.to_object();
+
        enumerateObject(env, *obj);
 }
 
@@ -2900,8 +2900,7 @@
        // as we copied that as_value.
        env.top(0).set_null(); 
 
-       boost::intrusive_ptr<as_object> obj = obj_val.to_object();
-       if ( ! obj )
+       if ( ! obj_val.is_object() )
        {
                IF_VERBOSE_ASCODING_ERRORS(
                log_aserror("Top of stack not an object %s at ActionEnum2 "
@@ -2911,6 +2910,8 @@
                return;
        }
 
+       boost::intrusive_ptr<as_object> obj = obj_val.to_object();
+
        enumerateObject(env, *obj);
 
        static bool warned=false;

Index: testsuite/misc-mtasc.all/Makefile.am
===================================================================
RCS file: /sources/gnash/gnash/testsuite/misc-mtasc.all/Makefile.am,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- testsuite/misc-mtasc.all/Makefile.am        28 Mar 2007 23:42:20 -0000      
1.6
+++ testsuite/misc-mtasc.all/Makefile.am        29 Mar 2007 14:29:15 -0000      
1.7
@@ -25,14 +25,16 @@
 DEJAGNU_SO_FINI = $(srcdir)/../actionscript.all/dejagnu_so_fini.as
 MTASC_FLAGS= -cp $(MTASC_CLASSPATH) -cp $(srcdir) -v -header 800:600:20
 
-EXTRA_DIST = hello.as inheritance.as TestClass.as function.as hello.as
-
 ASTESTS = \
        hello.as \
        inheritance.as \
        function.as \
+       enum.as \
        $(NULL)
 
+EXTRA_DIST = $(ASTESTS) TestClass.as 
+
+
 ASTESTS_OUT = $(ASTESTS:.as=.swf)
 
 TEST_DRIVERS = ../simple.exp

Index: testsuite/server/Makefile.am
===================================================================
RCS file: /sources/gnash/gnash/testsuite/server/Makefile.am,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -b -r1.23 -r1.24
--- testsuite/server/Makefile.am        29 Mar 2007 07:01:48 -0000      1.23
+++ testsuite/server/Makefile.am        29 Mar 2007 14:29:15 -0000      1.24
@@ -51,6 +51,7 @@
 MatrixTest_SOURCES = MatrixTest.cpp
 MatrixTest_LDADD = \
        $(top_builddir)/server/libgnashserver.la \
+       $(top_builddir)/server/asobj/libgnashasobjs.la \
        $(top_builddir)/server/vm/libgnashvm.la \
        $(top_builddir)/libbase/libgnashbase.la \
        $(NULL)
@@ -59,6 +60,7 @@
 PropertyListTest_LDADD = \
        $(top_builddir)/server/libgnashserver.la \
        $(top_builddir)/server/parser/libgnashparser.la \
+       $(top_builddir)/server/asobj/libgnashasobjs.la \
        $(top_builddir)/server/vm/libgnashvm.la \
        $(top_builddir)/libbase/libgnashbase.la \
        $(NULL)
@@ -67,6 +69,7 @@
 GetterSetterTest_LDADD = \
        $(top_builddir)/server/libgnashserver.la \
        $(top_builddir)/server/parser/libgnashparser.la \
+       $(top_builddir)/server/asobj/libgnashasobjs.la \
        $(top_builddir)/server/vm/libgnashvm.la \
        $(top_builddir)/libbase/libgnashbase.la \
        $(NULL)
@@ -74,6 +77,7 @@
 as_prop_flagsTest_SOURCES = as_prop_flagsTest.cpp
 as_prop_flagsTest_LDADD = \
        $(top_builddir)/server/libgnashserver.la \
+       $(top_builddir)/server/asobj/libgnashasobjs.la \
        $(top_builddir)/server/vm/libgnashvm.la \
        $(top_builddir)/libbase/libgnashbase.la \
        $(NULL)
@@ -81,6 +85,7 @@
 DisplayListTest_SOURCES = DisplayListTest.cpp
 DisplayListTest_LDADD = \
        $(top_builddir)/server/libgnashserver.la \
+       $(top_builddir)/server/asobj/libgnashasobjs.la \
        $(top_builddir)/server/parser/libgnashparser.la \
        $(top_builddir)/server/vm/libgnashvm.la \
        $(top_builddir)/libbase/libgnashbase.la \

Index: testsuite/misc-mtasc.all/enum.as
===================================================================
RCS file: testsuite/misc-mtasc.all/enum.as
diff -N testsuite/misc-mtasc.all/enum.as
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ testsuite/misc-mtasc.all/enum.as    29 Mar 2007 14:29:15 -0000      1.1
@@ -0,0 +1,79 @@
+// This movie tests ActionEnum2
+
+class Test 
+{
+
+       // constructor
+       function Test()
+       {
+               _root.note("Test constructor called");
+       }
+
+       function enumerate(obj, enum)
+       {
+               var enumlen = 0;
+               for (var i in obj) {
+                       enum[i] = obj[i];
+                       ++enumlen;
+               }
+               return enumlen;
+       }
+
+       function dump(obj)
+       {
+               for (var i in obj) {
+                       _root.note("DUMP: obj["+i+"] = "+obj[i]);
+               }
+       }
+
+       function test_all()
+       {
+               var res;
+               var len;
+               var a = new Object;
+               a.m1 = 20;
+
+               dump(a);
+
+               res = new Array;
+               len = enumerate(a, res);
+               _root.check_equals(len, 1);
+               _root.check_equals(res['m1'], 20);
+
+               res = new Array;
+               len = enumerate(null, res);
+               _root.check_equals(len, 0);
+               _root.check_equals(res.length, 0);
+
+               res = new Array;
+               len = enumerate(undefined, res);
+               _root.check_equals(len, 0);
+               _root.check_equals(res.length, 0);
+
+               res = new Array;
+               dump(""); // becomes a string, most likely
+               len = enumerate("", res);
+               _root.check_equals(len, 0);
+               _root.check_equals(res.length, 0);
+
+               String.prototype.addedMember = 3;
+
+               res = new Array;
+               len = enumerate(new String, res);
+               _root.check_equals(len, 1);
+               _root.check_equals(res.length, 0);
+
+               // enum2 doesn't convert the empty string to a String object!
+               res = new Array;
+               len = enumerate("", res);
+               _root.check_equals(len, 0);
+               _root.check_equals(res.length, 0);
+       }
+
+       static function main(mc)
+       {
+               var myTest = new Test;
+               myTest.test_all();
+       }
+
+}




reply via email to

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