gnash-commit
[Top][All Lists]
Advanced

[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();




reply via email to

[Prev in Thread] Current Thread [Next in Thread]