[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/asobj/ClassHierarchy.cpp...
From: |
Benjamin Wolsey |
Subject: |
[Gnash-commit] gnash ChangeLog server/asobj/ClassHierarchy.cpp... |
Date: |
Tue, 17 Jun 2008 08:45:36 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Benjamin Wolsey <bwy> 08/06/17 08:45:36
Modified files:
. : ChangeLog
server/asobj : ClassHierarchy.cpp Error_as.cpp
testsuite/actionscript.all: Error.as
Log message:
* server/asobj/Error_as.cpp: partial implementation of Error
class.
* server/asobj/ClassHierarchy.cpp: Error available from SWF5.
* testsuite/actionscript.all/Error.as: more tests, some pass
now.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.6951&r2=1.6952
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/ClassHierarchy.cpp?cvsroot=gnash&r1=1.19&r2=1.20
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Error_as.cpp?cvsroot=gnash&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/Error.as?cvsroot=gnash&r1=1.13&r2=1.14
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.6951
retrieving revision 1.6952
diff -u -b -r1.6951 -r1.6952
--- ChangeLog 17 Jun 2008 07:18:46 -0000 1.6951
+++ ChangeLog 17 Jun 2008 08:45:35 -0000 1.6952
@@ -1,5 +1,11 @@
2008-06-17 Benjamin Wolsey <address@hidden>
+ * server/asobj/Error_as.cpp: partial implementation of Error class.
+ * server/asobj/ClassHierarchy.cpp: Error available from SWF5.
+ * testsuite/actionscript.all/Error.as: more tests, some pass now.
+
+2008-06-17 Benjamin Wolsey <address@hidden>
+
* server/asobj/Error_as.{cpp,h}: regenerate unimplemented Error
class.
* server/asobj/ClassHierarchy.cpp: Error also works in SWF6.
Index: server/asobj/ClassHierarchy.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/ClassHierarchy.cpp,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -b -r1.19 -r1.20
--- server/asobj/ClassHierarchy.cpp 17 Jun 2008 07:18:47 -0000 1.19
+++ server/asobj/ClassHierarchy.cpp 17 Jun 2008 08:45:35 -0000 1.20
@@ -289,7 +289,7 @@
{ netstream_class_init, NSV::CLASS_NET_STREAM, NSV::CLASS_OBJECT,
NSV::NS_FLASH_NET, 6 },
{ contextmenu_class_init, NSV::CLASS_CONTEXT_MENU, NSV::CLASS_OBJECT,
NSV::NS_FLASH_UI, 7 },
{ moviecliploader_class_init, NSV::CLASS_MOVIE_CLIP_LOADER,
NSV::CLASS_OBJECT, NS_GLOBAL, 7 },
- { Error_class_init, NSV::CLASS_ERROR, NSV::CLASS_OBJECT, NS_GLOBAL, 6 },
+ { Error_class_init, NSV::CLASS_ERROR, NSV::CLASS_OBJECT, NS_GLOBAL, 5 },
};
void
Index: server/asobj/Error_as.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Error_as.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- server/asobj/Error_as.cpp 17 Jun 2008 07:18:48 -0000 1.1
+++ server/asobj/Error_as.cpp 17 Jun 2008 08:45:36 -0000 1.2
@@ -35,6 +35,7 @@
namespace gnash {
+static as_value Error_toString(const fn_call& fn);
static as_value Error_message_getset(const fn_call& fn);
static as_value Error_name_getset(const fn_call& fn);
@@ -44,6 +45,7 @@
static void
attachErrorInterface(as_object& o)
{
+ o.init_member("toString", new builtin_function(Error_toString));
o.init_property("message", Error_message_getset, Error_message_getset);
o.init_property("name", Error_name_getset, Error_name_getset);
}
@@ -61,8 +63,6 @@
if ( ! o )
{
- // TODO: check if this class should inherit from Object
- // or from a different class
o = new as_object(getObjectInterface());
VM::get().addStatic(o.get());
@@ -80,32 +80,63 @@
Error_as()
:
- as_object(getErrorInterface())
+ as_object(getErrorInterface()),
+ _name("Error"),
+ _message("Error")
{}
- // override from as_object ?
- //std::string get_text_value() const { return "Error"; }
+ void setName(const std::string& n) { _name = n; }
+ const std::string& getName() const { return _name; }
- // override from as_object ?
- //double get_numeric_value() const { return 0; }
+ void setMessage(const std::string& m) { _message = m; }
+ const std::string& getMessage() const { return _message; }
+
+private:
+ std::string _name;
+ std::string _message;
};
static as_value
+Error_toString(const fn_call& fn)
+{
+ boost::intrusive_ptr<Error_as> ptr = ensureType<Error_as>(fn.this_ptr);
+ return as_value(ptr->getMessage());
+}
+
+static as_value
Error_message_getset(const fn_call& fn)
{
boost::intrusive_ptr<Error_as> ptr = ensureType<Error_as>(fn.this_ptr);
- UNUSED(ptr);
- LOG_ONCE( log_unimpl (__FUNCTION__) );
+ if (fn.nargs == 0)
+ {
+ // Getter
+ return as_value(ptr->getMessage());
+ }
+ else
+ {
+ // Setter
+ ptr->setMessage(fn.arg(0).to_string());
return as_value();
+ }
}
static as_value
Error_name_getset(const fn_call& fn)
{
boost::intrusive_ptr<Error_as> ptr = ensureType<Error_as>(fn.this_ptr);
- UNUSED(ptr);
- LOG_ONCE( log_unimpl (__FUNCTION__) );
+
+ if (fn.nargs == 0)
+ {
+ // Getter
+ return as_value(ptr->getName());
+ }
+ else
+ {
+ // Setter
+ ptr->setName(fn.arg(0).to_string());
return as_value();
+ }
+
}
@@ -113,16 +144,14 @@
as_value
Error_ctor(const fn_call& fn)
{
- boost::intrusive_ptr<as_object> obj = new Error_as;
+ boost::intrusive_ptr<Error_as> err = new Error_as;
- if ( fn.nargs )
+ if ( fn.nargs > 0)
{
- std::stringstream ss;
- fn.dump_args(ss);
- LOG_ONCE( log_unimpl("Error(%s): %s", ss.str(), _("arguments
discarded")) );
+ err->setMessage(fn.arg(0).to_string());
}
- return as_value(obj.get()); // will keep alive
+ return as_value(err.get()); // will keep alive
}
// extern
Index: testsuite/actionscript.all/Error.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/Error.as,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- testsuite/actionscript.all/Error.as 11 Mar 2008 19:31:47 -0000 1.13
+++ testsuite/actionscript.all/Error.as 17 Jun 2008 08:45:36 -0000 1.14
@@ -22,20 +22,19 @@
// execute it like this gnash -1 -r 0 -v out.swf
-rcsid="$Id: Error.as,v 1.13 2008/03/11 19:31:47 strk Exp $";
+rcsid="$Id: Error.as,v 1.14 2008/06/17 08:45:36 bwy Exp $";
#include "check.as"
-var errorObj = new Error;
-
-#if OUTPUT_VERSION < 7
-
-// test the Error constuctor
-xcheck_equals (typeof(errorObj), 'object');
+#if OUTPUT_VERSION > 5
+check(Error.prototype.hasOwnProperty("name"));
+check(Error.prototype.hasOwnProperty("toString"));
+check(Error.prototype.hasOwnProperty("message"));
+#endif
-// test the Error::tostring method
-xcheck_equals (typeof(errorObj.toString), 'function');
+xcheck_equals(typeof(Error.prototype.message), "string");
+xcheck_equals(typeof(Error.prototype.name), "string");
-#else // OUTPUT_VERSION >= 7
+var errorObj = new Error;
// test the Error constuctor
check_equals (typeof(errorObj), 'object');
@@ -43,5 +42,38 @@
// test the Error::tostring method
check_equals (typeof(errorObj.toString), 'function');
-#endif
+
+e = new Error;
+check_equals(e.toString(), "Error");
+check_equals(e.message, "Error");
+check_equals(e.name, "Error");
+
+e = new Error("NameOfError");
+check_equals(e.toString(), "NameOfError");
+check_equals(e.name, "Error");
+check_equals(e.message, "NameOfError");
+
+
+e = new Error(7.8898);
+check_equals(e.toString(), "7.8898");
+check_equals(e.name, "Error");
+check_equals(e.message, "7.8898");
+
+
+// Is there any sense in this?
+e = new Error(new Color);
+xcheck_equals(typeof(e.toString()), "object");
+check_equals(e.toString().toString(), "[object Object]");
+check_equals(e.name, "Error");
+xcheck_equals(typeof(e.message), "object");
+
+e.name = "ANewName";
+check_equals(e.name, "ANewName");
+e.message = "New message";
+check_equals(e.message, "New message");
+
+
+e = Error("NameOfSecondError");
+xcheck_equals(typeof(e), "undefined");
+
totals();