[Top][All Lists]
[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);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash server/Property.cpp server/PropertyList.c...,
Sandro Santilli <=