[Top][All Lists]
[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();
+ }
+
+}