gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash ChangeLog server/asobj/xml.cpp server/aso...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/asobj/xml.cpp server/aso...
Date: Thu, 18 Jan 2007 16:55:35 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/01/18 16:55:35

Modified files:
        .              : ChangeLog 
        server/asobj   : xml.cpp xml.h 

Log message:
                * server/asobj/xml.{cpp,h}: third pass of new layout port:
                  don't override get_member, rely on getter/setters instead.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.2135&r2=1.2136
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/xml.cpp?cvsroot=gnash&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/xml.h?cvsroot=gnash&r1=1.4&r2=1.5

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.2135
retrieving revision 1.2136
diff -u -b -r1.2135 -r1.2136
--- ChangeLog   18 Jan 2007 16:28:10 -0000      1.2135
+++ ChangeLog   18 Jan 2007 16:55:35 -0000      1.2136
@@ -1,5 +1,10 @@
 2007-01-18 Sandro Santilli <address@hidden>
 
+       * server/asobj/xml.{cpp,h}: third pass of new layout port:
+         don't override get_member, rely on getter/setters instead.
+
+2007-01-18 Sandro Santilli <address@hidden>
+
        * server/asobj/: Global.cpp, xml.{cpp,h}: second pass of new layout
          port: use xml_class_init and hide method functions.
 

Index: server/asobj/xml.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/xml.cpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- server/asobj/xml.cpp        18 Jan 2007 16:28:10 -0000      1.9
+++ server/asobj/xml.cpp        18 Jan 2007 16:55:35 -0000      1.10
@@ -14,7 +14,7 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-/* $Id: xml.cpp,v 1.9 2007/01/18 16:28:10 strk Exp $ */
+/* $Id: xml.cpp,v 1.10 2007/01/18 16:55:35 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -66,6 +66,8 @@
 static void xml_send(const fn_call& fn);
 static void xml_sendandload(const fn_call& fn);
 static void xml_tostring(const fn_call& fn);
+static void xml_firstchild(const fn_call& fn);
+static void xml_childnodes(const fn_call& fn);
 
 // These are the event handlers called for this object
 static void xml_onload(const fn_call& fn);
@@ -166,7 +168,7 @@
 }
 
 void
-XML::nodeNameSet(char */*name */)
+XML::nodeNameSet(const char */*name */)
 {
   if (!_nodes) {
     _nodes = new XMLNode;
@@ -178,7 +180,7 @@
 }
 
 void
-XML::nodeValueSet(char */* value */)
+XML::nodeValueSet(const char */* value */)
 {
   if (!_nodes) {
     _nodes = new XMLNode;
@@ -659,25 +661,15 @@
     // primarily by the disk based XML parser, where at least in all my current
     // test cases this is referenced with firstChild first, then nodeName and
     // childNodes.
-    obj->set_member("nodeName",           nodename);
-    obj->set_member("length",             length);
+    //obj->set_member("nodeName", nodename); // use the getter/setter !
+    obj->set_member("length", length); // FIXME: use a getter/setter !
     if (xml->_value != 0) {
-        obj->set_member("nodeValue",        xml->_value);
+        //obj->set_member("nodeValue", xml->_value); // use the getter/setter !
         log_msg("\tnodevalue for %s is: %s\n", nodename, xml->_value);
     } else {
-        obj->set_member("nodeValue", as_value::UNDEFINED);
+        // obj->set_member("nodeValue", as_value::UNDEFINED); // use the 
getter/setter !
     }
 
-//   if (nodevalue.get_type() != as_value::UNDEFINED) {
-//     obj->set_member("nodeValue",        nodevalue.to_string());
-//     log_msg("\tnodevalue for %s is: %s\n", nodename, nodevalue.to_string());
-//   } else {
-//     // If there is no value, we want to define it as an empty
-//     // string.
-//     obj->set_member("nodeValue", "");
-//   }
-
-  
     // Process the attributes, if any
     if (xml->_attributes.size() == 0) {
         //log_msg("\t\tNo attributes for node %s, created empty object at 
%p\n", nodename, attr_obj);
@@ -1107,10 +1099,22 @@
         o.set_member("send", &xml_send);
         o.set_member("sendAndLoad", &xml_sendandload);
         o.set_member("toString", &xml_tostring);
+
        // Properties
-        o.set_member("nodeName", as_value().set_null());
-        o.set_member("nodevalue", as_value());
 
+       boost::intrusive_ptr<builtin_function> gettersetter;
+
+       gettersetter = new builtin_function(&xml_nodename, NULL);
+       o.add_property("nodeName", *gettersetter, *gettersetter);
+
+       gettersetter = new builtin_function(&xml_nodevalue, NULL);
+       o.add_property("nodeValue", *gettersetter, *gettersetter);
+
+       gettersetter = new builtin_function(&xml_firstchild, NULL);
+       o.add_property("firstChild", *gettersetter, *gettersetter);
+
+       gettersetter = new builtin_function(&xml_childnodes, NULL);
+       o.add_property("childNodes", *gettersetter, *gettersetter);
 }
 
 static as_object*
@@ -1368,6 +1372,89 @@
     fn.result->set_string(ptr->toString());
 }
 
+// Both a getter and a setter for nodeName
+static void
+xml_nodename(const fn_call& fn)
+{
+       assert(dynamic_cast<XML*>(fn.this_ptr));
+       XML *ptr = static_cast<XML*>(fn.this_ptr);
+
+       if ( fn.nargs == 0 ) {
+               const char* val = ptr->nodeName();
+               if ( val ) {
+                       fn.result->set_string(val);
+               } else {
+                       fn.result->set_null();
+               }
+       } else {
+               ptr->nodeNameSet(fn.arg(0).to_string());
+       }
+}
+
+// Both a getter and a setter for nodeValue
+static void
+xml_nodevalue(const fn_call& fn)
+{
+       //GNASH_REPORT_FUNCTION;
+
+       assert(dynamic_cast<XML*>(fn.this_ptr));
+       XML *ptr = static_cast<XML*>(fn.this_ptr);
+    
+       //log_msg("xml_nodevalue called with %d args against 'this' = %p", 
fn.nargs, ptr);
+       if ( fn.nargs == 0 ) {
+               //log_msg("  nodeValue() returns '%s'", ptr->nodeValue());
+               const char* val = ptr->nodeValue();
+               if ( val ) {
+                       fn.result->set_string(val);
+               } else {
+                       fn.result->set_null();
+               }
+       } else {
+               //log_msg(" arg(0) == '%s'", fn.arg(0).to_string());
+               ptr->nodeValueSet(fn.arg(0).to_string());
+       }
+}
+
+// Both a getter and a (do-nothing) setter for firstChild
+static void
+xml_firstchild(const fn_call& fn)
+{
+       assert(dynamic_cast<XML*>(fn.this_ptr));
+       XML *ptr = static_cast<XML*>(fn.this_ptr);
+
+       if ( fn.nargs == 0 )
+       {
+               //fn.result->set_as_object(ptr->firstChild());
+               fn.result->set_as_object(ptr);
+       }
+       else
+       {
+               IF_VERBOSE_ASCODING_ERRORS(
+                       log_aserror("Tried to set read-only property 
XML.firstChild");
+               );
+       }
+}
+
+// Both a getter and a (do-nothing) setter for childNodes
+static void
+xml_childnodes(const fn_call& fn)
+{
+       assert(dynamic_cast<XML*>(fn.this_ptr));
+       XML *ptr = static_cast<XML*>(fn.this_ptr);
+
+       if ( fn.nargs == 0 )
+       {
+               //fn.result->set_as_object(ptr->childNodes());
+               fn.result->set_as_object(ptr);
+       }
+       else
+       {
+               IF_VERBOSE_ASCODING_ERRORS(
+                       log_aserror("Tried to set read-only property 
XML.childNodes");
+               );
+       }
+}
+
 int
 memadjust(int x)
 {

Index: server/asobj/xml.h
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/xml.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- server/asobj/xml.h  18 Jan 2007 16:28:10 -0000      1.4
+++ server/asobj/xml.h  18 Jan 2007 16:55:35 -0000      1.5
@@ -114,8 +114,8 @@
     const char *nodeNameGet()    { return _nodename; }
     const char *nodeName();
     const char *nodeValue();
-    void nodeNameSet(char *name);
-    void nodeValueSet(char *value);
+    void nodeNameSet(const char *name);
+    void nodeValueSet(const char *value);
     int length()                 { return _nodes->length(); }
   
     // These 6 have to 
@@ -159,21 +159,6 @@
         return this;
     }
 
-    // FIXME: drop this override when firstChild and childNodes are properties
-    virtual bool get_member(const tu_stringi& name, as_value* val) {
-        //printf("GET XML MEMBER: %s at %p for object %p\n", name.c_str(), 
val, this);
-        
-        if ((name == "firstChild") || (name == "childNodes")) {
-//             printf("Returning a self reference for %s for object at %p\n",
-//                    name.c_str(), this);
-            val->set_as_object(this);
-            return true;
-        }
-
-       return get_member_default(name, val);
-        
-    }
-    
 private:
     xmlDocPtr _doc;
     xmlNodePtr _firstChild;




reply via email to

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