[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash server/array.cpp testsuite/actionscript.a...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash server/array.cpp testsuite/actionscript.a... |
Date: |
Wed, 04 Apr 2007 09:49:43 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 07/04/04 09:49:43
Modified files:
server : array.cpp
testsuite/actionscript.all: array.as
Log message:
* server/array.cpp: use a getter/setter for the 'length'
property.
* testsuite/actionscript.all/array.as: another success.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/server/array.cpp?cvsroot=gnash&r1=1.55&r2=1.56
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/array.as?cvsroot=gnash&r1=1.16&r2=1.17
Patches:
Index: server/array.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/array.cpp,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -b -r1.55 -r1.56
--- server/array.cpp 28 Mar 2007 14:58:30 -0000 1.55
+++ server/array.cpp 4 Apr 2007 09:49:43 -0000 1.56
@@ -47,6 +47,8 @@
namespace gnash {
static as_object* getArrayInterface();
+static void attachArrayProperties(as_object& proto);
+static void attachArrayInterface(as_object& proto);
// Default as_value strict weak comparator (string based)
class AsValueLessThen
@@ -144,6 +146,7 @@
elements(0)
{
//log_action("%s : %p\n", __FUNCTION__, (void*)this);
+ attachArrayProperties(*this);
}
as_array_object::as_array_object(const as_array_object& other)
@@ -362,12 +365,6 @@
bool
as_array_object::get_member(const std::string& name, as_value *val)
{
- if ( name == "length" )
- {
- val->set_double((double)size());
- return true;
- }
-
// an index has been requested
int index = index_requested(name);
if ( index >= 0 && (unsigned int)index < elements.size() )
@@ -390,13 +387,6 @@
as_array_object::set_member(const std::string& name,
const as_value& val )
{
- if ( name == "length" )
- {
- //log_warning("Attempt to assign to Array.length - ignored");
- resize(unsigned(val.to_number()));
- return;
- }
-
int index = index_requested(name);
// if we were sent a valid array index and not a normal member
@@ -824,6 +814,22 @@
}
+static as_value
+array_length(const fn_call& fn)
+{
+ boost::intrusive_ptr<as_array_object> array =
ensureType<as_array_object>(fn.this_ptr);
+
+ if ( fn.nargs ) // setter
+ {
+ array->resize(unsigned(fn.arg(0).to_number(&(fn.env()))));
+ return as_value();
+ }
+ else // getter
+ {
+ return as_value(array->size());
+ }
+}
+
as_value
array_new(const fn_call& fn)
{
@@ -831,8 +837,7 @@
log_action("array_new called, nargs = %d", fn.nargs);
);
- //boost::intrusive_ptr<as_array_object> ao = new as_array_object;
- as_array_object* ao = new as_array_object;
+ boost::intrusive_ptr<as_array_object> ao = new as_array_object;
if (fn.nargs == 0)
{
@@ -862,20 +867,25 @@
}
IF_VERBOSE_ACTION (
- log_action("array_new setting object %p in result", (void*)ao);
+ log_action("array_new setting object %p in result",
(void*)ao.get());
);
- //return as_value(ao.get());
- return as_value(ao);
+ return as_value(ao.get());
+ //return as_value(ao);
+}
+
+static void
+attachArrayProperties(as_object& proto)
+{
+ boost::intrusive_ptr<builtin_function> gettersetter;
+
+ gettersetter = new builtin_function(&array_length, NULL);
+ proto.init_property("length", *gettersetter, *gettersetter);
}
static void
attachArrayInterface(as_object& proto)
{
- // we don't need an explicit member here,
- // we will be handling 'length' requests
- // within overridden get_member()
- //proto->init_member("length", &array_length);
proto.init_member("join", new builtin_function(array_join));
proto.init_member("concat", new builtin_function(array_concat));
Index: testsuite/actionscript.all/array.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/array.as,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- testsuite/actionscript.all/array.as 4 Apr 2007 09:22:30 -0000 1.16
+++ testsuite/actionscript.all/array.as 4 Apr 2007 09:49:43 -0000 1.17
@@ -5,7 +5,7 @@
// Updated with sort functions, and to use check() macro
// by Mike Carlson Feb. 14th, 2006
-rcsid="$Id: array.as,v 1.16 2007/04/04 09:22:30 strk Exp $";
+rcsid="$Id: array.as,v 1.17 2007/04/04 09:49:43 strk Exp $";
#include "check.as"
@@ -48,7 +48,7 @@
check (a instanceOf Array);
check_equals(a.length, 3);
#if OUTPUT_VERSION >= 6
-xcheck(a.hasOwnProperty('length'));
+check(a.hasOwnProperty('length'));
#endif
b=[];
@@ -290,6 +290,11 @@
check_equals(c[8], undefined);
// $Log: array.as,v $
+// Revision 1.17 2007/04/04 09:49:43 strk
+//
+// * server/array.cpp: use a getter/setter for the 'length' property.
+// * testsuite/actionscript.all/array.as: another success.
+//
// Revision 1.16 2007/04/04 09:22:30 strk
// * testsuite/actionscript.all/array.as: more tests added.
//
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash server/array.cpp testsuite/actionscript.a...,
Sandro Santilli <=