[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/asobj/flash/geom/Point_a...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/asobj/flash/geom/Point_a... |
Date: |
Mon, 19 May 2008 11:05:27 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 08/05/19 11:05:27
Modified files:
. : ChangeLog
server/asobj/flash/geom: Point_as.cpp
testsuite/actionscript.all: Point.as
Log message:
Chill-out monday hacking:
* server/asobj/flash/geom/Point_as.cpp: implement Point.add(),
Point.equals() and Point.clone()
* testsuite/actionscript.all/Point.as: test Point.add(),
Point.equals() and Point.clone().
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.6642&r2=1.6643
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/flash/geom/Point_as.cpp?cvsroot=gnash&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/Point.as?cvsroot=gnash&r1=1.1&r2=1.2
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.6642
retrieving revision 1.6643
diff -u -b -r1.6642 -r1.6643
--- ChangeLog 19 May 2008 08:35:06 -0000 1.6642
+++ ChangeLog 19 May 2008 11:05:26 -0000 1.6643
@@ -1,5 +1,12 @@
2008-05-19 Sandro Santilli <address@hidden>
+ * server/asobj/flash/geom/Point_as.cpp: implement Point.add(),
+ Point.equals() and Point.clone()
+ * testsuite/actionscript.all/Point.as: test Point.add(),
+ Point.equals() and Point.clone().
+
+2008-05-19 Sandro Santilli <address@hidden>
+
* configure.ac: add --with-plugins-install=user|system|prefix,
default to user.
* doc/C/refmanual/custompath_configuration.xml: document
Index: server/asobj/flash/geom/Point_as.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/flash/geom/Point_as.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- server/asobj/flash/geom/Point_as.cpp 17 May 2008 12:41:40 -0000
1.8
+++ server/asobj/flash/geom/Point_as.cpp 19 May 2008 11:05:27 -0000
1.9
@@ -112,27 +112,126 @@
Point_add(const fn_call& fn)
{
boost::intrusive_ptr<Point_as> ptr = ensureType<Point_as>(fn.this_ptr);
- UNUSED(ptr);
- LOG_ONCE( log_unimpl (__FUNCTION__) );
- return as_value();
+
+ as_value x, y;
+ ptr->get_member(NSV::PROP_X, &x);
+ ptr->get_member(NSV::PROP_Y, &y);
+
+ as_value x1, y1;
+
+ if ( ! fn.nargs )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("%s: missing arguments"), "Point.add()");
+ );
+ }
+ else
+ {
+ if ( fn.nargs > 1 )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ std::stringstream ss; fn.dump_args(ss);
+ log_aserror("Point.add(%s): %s", ss.str(), _("arguments
after first discarded"));
+ );
+ }
+ as_value& arg1 = fn.arg(0);
+ as_object* o = arg1.to_object().get();
+ if ( ! o )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ std::stringstream ss; fn.dump_args(ss);
+ log_aserror("Point.add(%s): %s", ss.str(), _("first
argument doesn't cast to object"));
+ );
+ }
+ else
+ {
+ if ( ! o->get_member(NSV::PROP_X, &x1) )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ std::stringstream ss; fn.dump_args(ss);
+ log_aserror("Point.add(%s): %s", ss.str(),
+ _("first argument casted to object
doesn't contain an 'x' member"));
+ );
+ }
+ if ( ! o->get_member(NSV::PROP_Y, &y1) )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ std::stringstream ss; fn.dump_args(ss);
+ log_aserror("Point.add(%s): %s", ss.str(),
+ _("first argument casted to object
doesn't contain an 'y' member"));
+ );
+ }
+ }
+ }
+
+ x.newAdd(x1);
+ y.newAdd(y1);
+
+ boost::intrusive_ptr<as_object> ret = new Point_as;
+ ret->set_member(NSV::PROP_X, x);
+ ret->set_member(NSV::PROP_Y, y);
+
+ return as_value(ret.get());
}
static as_value
Point_clone(const fn_call& fn)
{
boost::intrusive_ptr<Point_as> ptr = ensureType<Point_as>(fn.this_ptr);
- UNUSED(ptr);
- LOG_ONCE( log_unimpl (__FUNCTION__) );
- return as_value();
+
+ as_value x, y;
+ ptr->get_member(NSV::PROP_X, &x);
+ ptr->get_member(NSV::PROP_Y, &y);
+
+ boost::intrusive_ptr<as_object> ret = new Point_as;
+ ret->set_member(NSV::PROP_X, x);
+ ret->set_member(NSV::PROP_Y, y);
+
+ return as_value(ret.get());
}
static as_value
Point_equals(const fn_call& fn)
{
boost::intrusive_ptr<Point_as> ptr = ensureType<Point_as>(fn.this_ptr);
- UNUSED(ptr);
- LOG_ONCE( log_unimpl (__FUNCTION__) );
- return as_value();
+
+ if ( ! fn.nargs )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("%s: missing arguments"), "Point.equals()");
+ );
+ return as_value(false);
+ }
+
+ as_value& arg1 = fn.arg(0);
+ if ( ! arg1.is_object() )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ std::stringstream ss; fn.dump_args(ss);
+ log_aserror("Point.equals(%s): %s", ss.str(), _("First arg must
be an object"));
+ );
+ return as_value(false);
+ }
+ as_object* o = arg1.to_object().get();
+ assert(o);
+ if ( ! o->instanceOf(getFlashGeomPointConstructor()) )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ std::stringstream ss; fn.dump_args(ss);
+ log_aserror("Point.equals(%s): %s %s", ss.str(), _("First arg
must be an instance of"), "flash.geom.Point");
+ );
+ return as_value(false);
+ }
+
+ as_value x, y;
+ ptr->get_member(NSV::PROP_X, &x);
+ ptr->get_member(NSV::PROP_Y, &y);
+
+ as_value x1, y1;
+ o->get_member(NSV::PROP_X, &x1);
+ o->get_member(NSV::PROP_Y, &y1);
+
+ return as_value(x.equals(x1) && y.equals(y1));
}
static as_value
Index: testsuite/actionscript.all/Point.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/Point.as,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- testsuite/actionscript.all/Point.as 7 May 2008 08:03:40 -0000 1.1
+++ testsuite/actionscript.all/Point.as 19 May 2008 11:05:27 -0000 1.2
@@ -20,7 +20,7 @@
// compile this test case with Ming makeswf, and then
// execute it like this gnash -1 -r 0 -v out.swf
-rcsid="$Id: Point.as,v 1.1 2008/05/07 08:03:40 strk Exp $";
+rcsid="$Id: Point.as,v 1.2 2008/05/19 11:05:27 strk Exp $";
#include "check.as"
@@ -93,12 +93,51 @@
//-------------------------------------------------------------
// TODO
+p0 = new Point('x', 'y');
+ret = p0.add();
+check(ret instanceof Point);
+check_equals(p0.toString(), '(x=x, y=y)');
+check_equals(ret.toString(), '(x=xundefined, y=yundefined)');
+String.prototype.x = 3; // to test it's used
+ret = p0.add('1');
+delete String.prototype.x;
+check(ret instanceof Point);
+check_equals(ret.toString(), '(x=x3, y=yundefined)');
+check_equals(p0.toString(), '(x=x, y=y)');
+ret = p0.add(1, '2');
+check(ret instanceof Point);
+check_equals(ret.toString(), '(x=xundefined, y=yundefined)');
+check_equals(p0.toString(), '(x=x, y=y)');
+
+p0 = new Point('x', 'y');
+p1 = new Point('x1', 'y1');
+ret = p0.add(p1);
+check(ret instanceof Point);
+check_equals(ret.toString(), '(x=xx1, y=yy1)');
+check_equals(p0.toString(), '(x=x, y=y)');
+check_equals(p1.toString(), '(x=x1, y=y1)');
+
+p0 = new Point(2, 3);
+p1 = { x:1, y:1 };
+ret = p0.add(p1);
+check_equals(ret.toString(), '(x=3, y=4)');
+
+ret = p0.add(p1, 4, 5, 6);
+check_equals(ret.toString(), '(x=3, y=4)');
//-------------------------------------------------------------
// Test Point.clone
//-------------------------------------------------------------
-// TODO
+p0 = new Point(3, 4);
+p0.z = 5;
+p2 = p0.clone();
+check(p2 instanceof Point);
+check_equals(p2.toString(), "(x=3, y=4)");
+check_equals(typeof(p2.z), 'undefined');
+p2 = p0.clone(1, 2, 3);
+check(p2 instanceof Point);
+check_equals(p2.toString(), "(x=3, y=4)");
//-------------------------------------------------------------
// Test Point.distance (static)
@@ -110,7 +149,47 @@
// Test Point.equals
//-------------------------------------------------------------
-// TODO
+o0 = {};
+o0.valueOf = function() { return 4; };
+o1 = {};
+o1.valueOf = function() { return 4; };
+
+p0 = new Point(3, o0);
+check(p0.equals(p0));
+
+p1 = new Point(3, o1);
+check(p1.equals(p1));
+
+check(p0 != p1);
+check_equals(p0.toString(), p1.toString());
+
+check(!p0.equals(p1));
+check(!p1.equals(p0));
+
+ret = p0.equals();
+check_equals(typeof(ret), 'boolean');
+check(!ret);
+
+p2 = new Point(3, o1);
+check(p1.equals(p2));
+// Equals doesn't return true if p2 isn't an point
+p2 = {x:3, y:o1};
+ret = p1.equals(p2);
+check_equals(typeof(ret), 'boolean');
+check(!ret);
+// But we can cheat ...
+p2.__proto__ = Point.prototype;
+check(p1.equals(p2));
+// ... even with double jump to get there ...
+o3 = {}; o3.prototype = {}; o3.prototype.__proto__ = Point.prototype;
+p2.__proto__ = o3.prototype;
+check(p1.equals(p2));
+// ... but not with syntetized objects ?
+String.prototype.x = 3;
+String.prototype.y = o1;
+String.prototype.__proto__ = Point.prototype;
+check(!p1.equals('string'));
+
//-------------------------------------------------------------
// Test Point.interpolate (static)
@@ -146,6 +225,6 @@
// END OF TEST
//-------------------------------------------------------------
-check_totals(37);
+check_totals(71);
#endif // OUTPUT_VERSION >= 8
- [Gnash-commit] gnash ChangeLog server/asobj/flash/geom/Point_a..., Sandro Santilli, 2008/05/07
- [Gnash-commit] gnash ChangeLog server/asobj/flash/geom/Point_a...,
Sandro Santilli <=
- [Gnash-commit] gnash ChangeLog server/asobj/flash/geom/Point_a..., Sandro Santilli, 2008/05/19
- [Gnash-commit] gnash ChangeLog server/asobj/flash/geom/Point_a..., Sandro Santilli, 2008/05/19
- [Gnash-commit] gnash ChangeLog server/asobj/flash/geom/Point_a..., Sandro Santilli, 2008/05/19
- [Gnash-commit] gnash ChangeLog server/asobj/flash/geom/Point_a..., Sandro Santilli, 2008/05/19
- [Gnash-commit] gnash ChangeLog server/asobj/flash/geom/Point_a..., Sandro Santilli, 2008/05/19