[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Gnash-commit] gnash testsuite/actionscript.all/XML.as ChangeL...
From: |
strk |
Subject: |
Re: [Gnash-commit] gnash testsuite/actionscript.all/XML.as ChangeL... |
Date: |
Wed, 14 Feb 2007 12:06:12 +0100 |
After this commit:
FAIL: astests-v#-Runner: expected: true obtained: false
[/home/strk/src/gnash/gnash-head/testsuite/actionscript.all/XMLNode.as:70]
FAIL: astests-v#-Runner: expected: childnode1 obtained: null
[/home/strk/src/gnash/gnash-head/testsuite/actionscript.all/XMLNode.as:71]
FAIL: astests-v#-Runner: expected: childnode1 obtained: null
[/home/strk/src/gnash/gnash-head/testsuite/actionscript.all/XMLNode.as:72]
FAIL: astests-v#-Runner: expected: true obtained: false
[/home/strk/src/gnash/gnash-head/testsuite/actionscript.all/XMLNode.as:80]
FAIL: astests-v#-Runner: expected: childnode1 obtained: null
[/home/strk/src/gnash/gnash-head/testsuite/actionscript.all/XMLNode.as:81]
FAIL: astests-v#-Runner: expected: nextnode obtained: null
[/home/strk/src/gnash/gnash-head/testsuite/actionscript.all/XMLNode.as:82]
The expected result are verified.
--strk;
On Tue, Feb 13, 2007 at 07:36:35PM +0000, Rob Savoye wrote:
> CVSROOT: /sources/gnash
> Module name: gnash
> Changes by: Rob Savoye <rsavoye> 07/02/13 19:36:35
>
> Modified files:
> testsuite/actionscript.all: XML.as
> . : ChangeLog
> server/asobj : Makefile.am NetStream.cpp Number.cpp xml.cpp
> xml.h xmlnode.cpp xmlnode.h xmlsocket.cpp
> xmlsocket.h
> server/vm : ActionExec.cpp
>
> Log message:
> * server/asobj/xmlnode.cpp: Implement toString(). Make
> appendChild
> actually work.
> * server/asobj/xml.cpp: Re-implement toString(). Make
> createElement() and createTextNode() actually work.
> * server/asobj/xmlnode.h, xml.h: Include stringstream, and add
> to
> stringify() prototype.
> * server/asobj/xml.cpp:
> * server/vm/ActionExec.cpp: Renable the stack dump messages for
> -va.
> * testsuite/actionscript.all/XML.as: Replace all the create* and
> appendChild() tests now that this functionality actually works.
> * server/Makefile.am: Add boost and pthread libs for cross
> compiling.
> * server/asobj/Makefile.am: Add glib and gstreamer cflags,
> needed
> when cross compiling with Gstreamer support.
>
> CVSWeb URLs:
> http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/XML.as?cvsroot=gnash&r1=1.16&r2=1.17
> http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.2349&r2=1.2350
> http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Makefile.am?cvsroot=gnash&r1=1.29&r2=1.30
> http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/NetStream.cpp?cvsroot=gnash&r1=1.25&r2=1.26
> http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Number.cpp?cvsroot=gnash&r1=1.20&r2=1.21
> http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/xml.cpp?cvsroot=gnash&r1=1.15&r2=1.16
> http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/xml.h?cvsroot=gnash&r1=1.5&r2=1.6
> http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/xmlnode.cpp?cvsroot=gnash&r1=1.9&r2=1.10
> http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/xmlnode.h?cvsroot=gnash&r1=1.5&r2=1.6
> http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/xmlsocket.cpp?cvsroot=gnash&r1=1.5&r2=1.6
> http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/xmlsocket.h?cvsroot=gnash&r1=1.3&r2=1.4
> http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ActionExec.cpp?cvsroot=gnash&r1=1.18&r2=1.19
>
> Patches:
> Index: testsuite/actionscript.all/XML.as
> ===================================================================
> RCS file: /sources/gnash/gnash/testsuite/actionscript.all/XML.as,v
> retrieving revision 1.16
> retrieving revision 1.17
> diff -u -b -r1.16 -r1.17
> --- testsuite/actionscript.all/XML.as 18 Jan 2007 22:53:22 -0000 1.16
> +++ testsuite/actionscript.all/XML.as 13 Feb 2007 19:36:34 -0000 1.17
> @@ -1,5 +1,5 @@
> //
> -// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
> +// Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
> //
> // This program is free software; you can redistribute it and/or modify
> // it under the terms of the GNU General Public License as published by
> @@ -16,13 +16,11 @@
> // along with this program; if not, write to the Free Software
> // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
>
> -//
> -
> // Test case for XML ActionScript class
> // compile this test case with Ming makeswf, and then
> // execute it like this gnash -1 -r 0 -v out.swf
>
> -rcsid="$Id: XML.as,v 1.16 2007/01/18 22:53:22 strk Exp $";
> +rcsid="$Id: XML.as,v 1.17 2007/02/13 19:36:34 rsavoye Exp $";
>
> #include "dejagnu.as"
> #include "utils.as"
> @@ -231,97 +229,77 @@
> fail("bytes counts are not the same");
> }
>
> -check(XML);
>
> +check(XML);
> myXML = new XML();
> check(myXML != undefined);
> +check(myXML.createElement);
>
> -var before = myXML.hasChildNodes();
> -//trace(before);
> +// file.puts("function: dodo()");
> +// create three XML nodes using createElement()
> +var element1 = myXML.createElement("element1");
> +check(element1.nodeName == "element1");
>
> -check(myXML.createElement);
> +var element2 = myXML.createElement("element2");
> +check(element2.nodeName == "element2");
>
> -getElement = myXML.createElement("module");
> +var element3 = myXML.createElement("element3");
> +check(element3.nodeName == "element3");
>
> -check(getElement);
> -trace(typeof(getElement));
> -check(getElement.nodeName != undefined );
> -#if OUTPUT_VERSION > 6
> -// we're case-sensitive in version 7 !!
> -check_equals(getElement.nodename, undefined );
> -#else
> -check(getElement.nodename != undefined );
> -#endif
> -
> -check_equals(getElement.nodeName, "module");
> -if (getElement.nodeName == "module") {
> - pass("XML::createElementNode() works");
> -} else {
> - fail("XML::createElementNode() doesn't work");
> -}
> +check(myXML.createTextNode);
>
> -textElement = myXML.createTextNode("Hello World");
> -if (textElement.nodeValue == "Hello World") {
> - pass("XML::createTextNode() works");
> -} else {
> - fail("XML::createTextNode() doesn't work");
> -}
> +// create two XML text nodes using createTextNode()
> +var textNode1 = myXML.createTextNode("textNode1 String value");
> +check(textNode1.nodeValue == "textNode1 String value");
>
> -check_equals(textElement.nodeType, 3);
> -check_equals(textElement.nodeValue, "Hello World");
> -check_equals(typeof(textElement.nodeName), 'null');
> -check_equals(textElement.nodeName, null);
> -
> -//note(textElement);
> -
> -check(getElement);
> -check(getElement.appendChild);
> -check(textElement);
> -
> -check_equals(getElement.hasChildNodes(), false);
> -
> -getElement.appendChild(textElement);
> -if ( getElement.hasChildNodes() ) {
> - pass("Appending Text Node to Element Node works");
> -} else {
> - xfail("Appending Text Node to Element Node doesn't work");
> -}
> +var textNode2 = myXML.createTextNode("textNode2 String value");
> +check(textNode2.nodeValue == "textNode2 String value");
>
> -nodename = getElement.nodeName;
> -myXML.appendChild(getElement);
> -var after = myXML.hasChildNodes();
> +// place the new nodes into the XML tree
> +element2.appendChild(textNode1);
> +check(element2.nodeValue == "textNode1 String value");
>
> -//trace(after);
> +element3.appendChild(textNode2);
> +check(element3.nodeValue == "textNode2 String value");
>
> -if ((before == false) && (after == true) && (nodename == "module")) {
> - pass("XML::appendChild() works");
> -} else {
> - fail("XML::appendChild() doesn't work");
> -}
> +// place the new nodes into the XML tree
> +doc.appendChild(element1);
> +//check(doc.firstChild.nodeName == "element1");
>
> -// trace(myXML.toString());
> +element1.appendChild(element2);
> +check(element1.hasChildNodes());
> +// trace(element1.nodeName);
> +// trace(element1.firstChild.nodeName);
> +check(element1.firstChild.nodeName == "element2");
>
> -newnode = myXML.cloneNode(false);
> +element2.appendChild(element3);
> +check(element2.hasChildNodes());
>
> -//trace(myXML.nodeName);
> -//trace(newnode.nodeValue);
> +trace(doc.toString());
>
> -//trace("Child1" + _global.child1);
> -//trace("Child2" + _global.child2);
> -
> -// This won't work as onLoad is not called unless you
> -// actually *load* the XML, we're using parseXML that
> -// does *not* trigger loading (see also getBytesLoaded
> -// and getBytesTotal) and does *not* trigger onLoad
> -// event to execute.
> -#if 0
> -if ((_global.child1 == "sub sub1 node data 1")
> - && (global.child2 == "sub sub1 node data 2")) {
> - pass("XML::onLoad works");
> -} else {
> - fail("XML::onLoad doesn't work");
> -}
> -#endif
> +// // trace(myXML.toString());
> +
> +// newnode = myXML.cloneNode(false);
> +
> +// //trace(myXML.nodeName);
> +// //trace(newnode.nodeValue);
> +
> +// //trace("Child1" + _global.child1);
> +// //trace("Child2" + _global.child2);
> +
> +// // This won't work as onLoad is not called unless you
> +// // actually *load* the XML, we're using parseXML that
> +// // does *not* trigger loading (see also getBytesLoaded
> +// // and getBytesTotal) and does *not* trigger onLoad
> +// // event to execute.
> +// #if 0
> +// if ((_global.child1 == "sub sub1 node data 1")
> +// && (global.child2 == "sub sub1 node data 2")) {
> +// pass("XML::onLoad works");
> +// } else {
> +// fail("XML::onLoad doesn't work");
> +// }
> +// #endif
>
> // We're done
> totals();
>
> Index: ChangeLog
> ===================================================================
> RCS file: /sources/gnash/gnash/ChangeLog,v
> retrieving revision 1.2349
> retrieving revision 1.2350
> diff -u -b -r1.2349 -r1.2350
> --- ChangeLog 13 Feb 2007 17:11:06 -0000 1.2349
> +++ ChangeLog 13 Feb 2007 19:36:34 -0000 1.2350
> @@ -1,3 +1,21 @@
> +2007-02-13 Rob Savoye <address@hidden>
> +
> + * server/asobj/xmlnode.cpp: Implement toString(). Make appendChild
> + actually work.
> + * server/asobj/xml.cpp: Re-implement toString(). Make
> + createElement() and createTextNode() actually work.
> + * server/asobj/xmlnode.h, xml.h: Include stringstream, and add to
> + stringify() prototype.
> + * server/asobj/xml.cpp:
> + * server/vm/ActionExec.cpp: Renable the stack dump messages for
> + -va.
> + * testsuite/actionscript.all/XML.as: Replace all the create* and
> + appendChild() tests now that this functionality actually works.
> + * server/Makefile.am: Add boost and pthread libs for cross compiling.
> + * server/asobj/Makefile.am: Add glib and gstreamer cflags, needed
> + when cross compiling with Gstreamer support.
> +
> +
> 2007-02-13 Sandro Santilli <address@hidden>
>
> * server/parser/shape_character_def.h: new add_path() and
>
> Index: server/asobj/Makefile.am
> ===================================================================
> RCS file: /sources/gnash/gnash/server/asobj/Makefile.am,v
> retrieving revision 1.29
> retrieving revision 1.30
> diff -u -b -r1.29 -r1.30
> --- server/asobj/Makefile.am 13 Jan 2007 20:06:17 -0000 1.29
> +++ server/asobj/Makefile.am 13 Feb 2007 19:36:34 -0000 1.30
> @@ -1,6 +1,6 @@
> ## Process this file with automake to generate Makefile.in
> #
> -# Copyright (C) 2005, 2006 Free Software Foundation, Inc.
> +# Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
> #
> # This program is free software; you can redistribute it and/or modify
> # it under the terms of the GNU General Public License as published by
> @@ -15,10 +15,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: Makefile.am,v 1.29 2007/01/13 20:06:17 tgc Exp $
> +# $Id: Makefile.am,v 1.30 2007/02/13 19:36:34 rsavoye Exp $
>
> AUTOMAKE_OPTIONS =
>
> @@ -37,6 +34,8 @@
> -I$(top_srcdir) \
> $(PTHREAD_CFLAGS) \
> $(DMALLOC_CFLAGS) \
> + $(GLIB_CFLAGS) \
> + $(GSTREAMER_CFLAGS) \
> $(BOOST_CFLAGS) \
> $(LIBXML_CFLAGS) \
> $(NULL)
>
> Index: server/asobj/NetStream.cpp
> ===================================================================
> RCS file: /sources/gnash/gnash/server/asobj/NetStream.cpp,v
> retrieving revision 1.25
> retrieving revision 1.26
> diff -u -b -r1.25 -r1.26
> --- server/asobj/NetStream.cpp 30 Jan 2007 12:49:03 -0000 1.25
> +++ server/asobj/NetStream.cpp 13 Feb 2007 19:36:34 -0000 1.26
> @@ -1,5 +1,5 @@
> //
> -// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
> +// Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
> //
> // This program is free software; you can redistribute it and/or modify
> // it under the terms of the GNU General Public License as published by
> @@ -13,12 +13,9 @@
> // You should have received a copy of the GNU General Public License
> // along with this program; if not, write to the Free Software
> // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
> -
> -//
> -//
> //
>
> -/* $Id: NetStream.cpp,v 1.25 2007/01/30 12:49:03 strk Exp $ */
> +/* $Id: NetStream.cpp,v 1.26 2007/02/13 19:36:34 rsavoye Exp $ */
>
> #ifdef HAVE_CONFIG_H
> #include "config.h"
>
> Index: server/asobj/Number.cpp
> ===================================================================
> RCS file: /sources/gnash/gnash/server/asobj/Number.cpp,v
> retrieving revision 1.20
> retrieving revision 1.21
> diff -u -b -r1.20 -r1.21
> --- server/asobj/Number.cpp 12 Feb 2007 01:18:45 -0000 1.20
> +++ server/asobj/Number.cpp 13 Feb 2007 19:36:34 -0000 1.21
> @@ -1,5 +1,5 @@
> //
> -// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
> +// Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
> //
> // This program is free software; you can redistribute it and/or modify
> // it under the terms of the GNU General Public License as published by
> @@ -14,11 +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: Number.cpp,v 1.20 2007/02/12 01:18:45 nihilus Exp $ */
> +/* $Id: Number.cpp,v 1.21 2007/02/13 19:36:34 rsavoye Exp $ */
>
> // Implementation of ActionScript Number class.
>
> @@ -33,6 +29,23 @@
> #include <sstream>
> #include <cmath>
>
> +// Why ?
> +//#undef fpclassify
> +//#define fpclassify(x) _fpclassify(x)
> +
> +/* C99: 7.12 6 defines for floating point classification */
> +
> +#undef FP_ZERO
> +#define FP_ZERO 1
> +#undef FP_SUBNORMAL
> +#define FP_SUBNORMAL 2
> +#undef FP_NORMAL
> +#define FP_NORMAL 4
> +#undef FP_INFINITE
> +#define FP_INFINITE 8
> +#undef FP_NAN
> +#define FP_NAN 16
> +
> using namespace std;
>
> namespace gnash {
>
> Index: server/asobj/xml.cpp
> ===================================================================
> RCS file: /sources/gnash/gnash/server/asobj/xml.cpp,v
> retrieving revision 1.15
> retrieving revision 1.16
> diff -u -b -r1.15 -r1.16
> --- server/asobj/xml.cpp 5 Feb 2007 07:18:30 -0000 1.15
> +++ server/asobj/xml.cpp 13 Feb 2007 19:36:34 -0000 1.16
> @@ -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.15 2007/02/05 07:18:30 zoulunkai Exp $ */
> +/* $Id: xml.cpp,v 1.16 2007/02/13 19:36:34 rsavoye Exp $ */
>
> #ifdef HAVE_CONFIG_H
> #include "config.h"
> @@ -29,6 +29,7 @@
> #include "xmlnode.h"
> #include "xml.h"
> #include "builtin_function.h"
> +#include "debugger.h"
>
> #include <libxml/xmlmemory.h>
> #include <libxml/parser.h>
> @@ -38,6 +39,7 @@
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <string>
> +#include <sstream>
> #include <vector>
>
> using namespace std;
> @@ -78,6 +80,11 @@
> static void xml_nodename(const fn_call& fn);
> static void xml_nodevalue(const fn_call& fn);
>
> +static LogFile& dbglogfile = gnash::LogFile::getDefaultInstance();
> +#ifdef USE_DEBUGGER
> +static Debugger& debugger = Debugger::getDefaultInstance();
> +#endif
> +
> XML::XML()
> :
> as_object(getXMLInterface()),
> @@ -244,10 +251,10 @@
>
> element = new XMLNode;
>
> - //log_msg("Created new element for %s at %p\n", node->name, element);
> +// log_msg("Created new element for %s at %p\n", node->name, element);
> memset(element, 0, sizeof (XMLNode));
>
> - log_msg("%s: extracting node %s\n", __FUNCTION__, node->name);
> +// log_msg("%s: extracting node %s\n", __FUNCTION__, node->name);
>
> // See if we have any Attributes (properties)
> attr = node->properties;
> @@ -299,14 +306,14 @@
>
> while (childnode != NULL) {
> if (childnode->type == XML_ELEMENT_NODE) {
> - //log_msg("\t\t extracting node %s\n", childnode->name);
> +// log_msg("\t\t extracting node %s\n", childnode->name);
> child = extractNode(childnode, mem);
> //if (child->_value.get_type() != as_value::UNDEFINED) {
> - if (child->_value != 0) {
> - //log_msg("\tPushing childNode %s, value %s on element
> %p\n", child->_name.c_str(), child->_value.to_string(), element);
> - } else {
> - //log_msg("\tPushing childNode %s on element %p\n",
> child->_name.c_str(), element);
> - }
> +// if (child->_value != 0) {
> +// log_msg("\tPushing childNode %s, value %s on element
> %s\n", child->_name, child->_value, element->_name);
> +// } else {
> +// log_msg("\tPushing childNode %s on element %s\n",
> child->_name, element->_name);
> +// }
> element->_children.push_back(child);
> }
> childnode = childnode->next;
> @@ -320,8 +327,6 @@
> XML::parseDoc(xmlDocPtr document, bool mem)
> {
> GNASH_REPORT_FUNCTION;
> -
> - XMLNode *top;
> xmlNodePtr cur;
>
> if (document == 0) {
> @@ -332,11 +337,7 @@
> cur = xmlDocGetRootElement(document);
>
> if (cur != NULL) {
> - top = extractNode(cur, mem);
> - //_nodes->_name = reinterpret_cast<const char *>(cur->name);
> - _nodes = top;
> - //_node_data.push_back(top);
> - //cur = cur->next;
> + _nodes = extractNode(cur, mem);
> }
>
> _loaded = true;
> @@ -389,7 +390,7 @@
> bool
> XML::load(const char *filespec)
> {
> - GNASH_REPORT_FUNCTION;
> +// GNASH_REPORT_FUNCTION;
> struct stat stats;
> log_msg("Load disk XML file: %s\n", filespec);
>
> @@ -479,7 +480,7 @@
> obj->set_member("length", length); // FIXME: use a getter/setter !
> if (xml->_value != 0) {
> //obj->set_member("nodeValue", xml->_value); // use the
> getter/setter !
> - log_msg("\tnodevalue for %s is: %s\n", nodename, xml->_value);
> + //log_msg("\tnodevalue for %s is: %s\n", nodename, xml->_value);
> } else {
> // obj->set_member("nodeValue", as_value::UNDEFINED); // use the
> getter/setter !
> }
> @@ -492,9 +493,9 @@
> attr_obj = new xmlattr_as_object;
> for (i=0; i<xml->_attributes.size(); i++) {
> attr_obj->set_member(xml->_attributes[i]->_name,
> xml->_attributes[i]->_value);
> - log_msg("\t\tAdding attribute as member %s, value is %s to node %s
> (%p)\n",
> - xml->_attributes[i]->_name,
> - xml->_attributes[i]->_value, nodename,
> static_cast<void*>(obj) );
> +// log_msg("\t\tAdding attribute as member %s, value is %s to node %s
> (%p)\n",
> +// xml->_attributes[i]->_name,
> +// xml->_attributes[i]->_value, nodename,
> static_cast<void*>(obj) );
> }
> obj->set_member("attributes", attr_obj);
> }
> @@ -561,11 +562,14 @@
> void
> XML::appendChild(XMLNode *node)
> {
> + GNASH_REPORT_FUNCTION;
> +
> if (!_nodes) {
> _nodes = new XMLNode;
> }
> _nodes->_children.push_back(node);
> - // log_msg("%s: %p at _nodes at %p\n", __PRETTY_FUNCTION__, this,
> _nodes);
> +// log_msg("%s: %p at _nodes at %p\n", __PRETTY_FUNCTION__, this, _nodes);
> +// dbglogfile << node->_name << endl;
> }
>
> /// \brief copy a node
> @@ -577,6 +581,7 @@
> XMLNode &
> XML::cloneNode(XMLNode &newnode, bool deep)
> {
> + GNASH_REPORT_FUNCTION;
> log_msg("%s: deep is %d\n", __PRETTY_FUNCTION__, deep);
>
> if (_nodes && deep) {
> @@ -591,6 +596,7 @@
> log_msg("%s:partially unimplemented \n", __PRETTY_FUNCTION__);
> }
>
> +# if 0
> /// \brief create a new XML element
> ///
> /// Method; creates a new XML element with the name specified in the
> @@ -620,6 +626,7 @@
> log_msg("%s:unimplemented \n", __FUNCTION__);
> return (XMLNode*)0;
> }
> +#endif
>
> /// \brief insert a node before a node
> ///
> @@ -669,60 +676,81 @@
> const char *
> XML::toString()
> {
> + GNASH_REPORT_FUNCTION;
> if (_nodes) {
> - return stringify(_nodes);
> + stringstream xmlout;
> + return stringify(_nodes, &xmlout);
> }
> return NULL;
> }
>
> -//
> const char *
> -XML::stringify(XMLNode *xml)
> +XML::stringify(XMLNode *xml, stringstream *xmlout)
> {
> - int child;
> - unsigned int i;
> +// GNASH_REPORT_FUNCTION;
> const char *nodename = xml->nodeName();
> - int length;
> - string str;
> -
> - log_msg("%s: processing for object %p\n", __PRETTY_FUNCTION__,
> (void*)this);
> + const char *nodevalue = xml->nodeValue();
> +// stringstream xmlout;
> +// string str;
>
> - // Process the attributes, if any
> - if (_nodes->_attributes.size() == 0) {
> - log_msg("\t\tNo attributes for node\n");
> - } else {
> - for (i=0; i<xml->_attributes.size(); i++) {
> - log_msg("\t\tAdding attribute as member %s, value is %s to node
> %s\n",
> - xml->_attributes[i]->_name,
> - xml->_attributes[i]->_value, nodename);
> - }
> - }
> +// log_msg("%s: processing for object %s <%p>\n", __PRETTY_FUNCTION__,
> nodename, (void*)xml);
>
> - vector<XMLNode *>::iterator it;
> - for (it = _nodes->_children.begin(); it != _nodes->_children.end();
> ++it) {
> - log_msg("Found One!!!! %p\n", (void*)*it);
> + if (nodename) {
> + *xmlout << "<" << nodename;
> +// str = "<";
> +// str += nodename;
> }
>
> - // Process the children, if there are any
> - length = xml->_children.size();
> -
> - if (length) {
> - log_msg("\tProcessing %d children nodes\n", length);
> - for (child=0; child<length; child++) {
> - log_msg("Name %p\n", (void*)(xml->_children[child]));
> - if (xml->_children[child]->_name) {
> -// log_msg("Name %p", xml->_children[child]);
> - }
> - if (xml->_children[child]->_value) {
> -// log_msg("Value %s", xml->_children[child]->_value);
> + if (nodevalue) {
> + *xmlout << nodevalue;
> +// str += nodevalue;
> }
>
> -// str += stringify(xml->_children[child]);
> - }
> - } else {
> - log_msg("\tNode %s has no children\n", nodename);
> - }
> - return str.c_str();
> + // Process the attributes, if any
> + vector<XMLAttr *>::iterator ita;
> + for (ita = xml->_attributes.begin(); ita != xml->_attributes.end();
> ita++) {
> +// log_msg("Found One child !!!! %p\n", (void*)*ita);
> +// cerr << "<" << (*it)->nodeName() << ">" << endl;
> + XMLAttr *xa = *ita;
> +// log_msg("\t\tAdding attribute as member %s, value is %s to node %s",
> +// nodename, xa->_name, xa->_value);
> + *xmlout << " " << xa->_name << "=\"" << xa->_value << "\"";
> +// str += " ";
> +// str += xa->_name;
> +// str += "=\"";
> +// str += xa->_value;
> +// str += "\"";
> + }
> +
> + if (nodename) {
> + *xmlout << ">"; // closing symbol for this tag
> +// str += ">";
> + }
> +
> + int length = xml->_children.size();
> +// log_msg("\tProcessing %d children nodes for %s", length, nodename);
> +
> + vector<XMLNode *>::iterator itx;
> + for (itx = _nodes->_children.begin(); itx != _nodes->_children.end();
> ++itx) {
> +// log_msg("Found One XML child !!!! %s <%p>\n", (*itx)->nodeName(),
> (void*)*itx);
> +// cerr << "<" << (*it)->nodeName() << ">" << endl;
> + XMLNode *x = *itx;
> + *xmlout << x->toString();
> +// str += x->stringify(x);
> + }
> +
> + if (nodename) {
> + *xmlout << "</" << nodename << ">";
> +// str += "</";
> +// str += nodename;
> +
> +// str += ">";
> + }
> +
> + const char *xxx = xmlout->str().c_str();
> +// cerr << "XMLOUT XML= " << xxx << endl;
> + return xmlout->str().c_str();
> +// return str.c_str();
> }
>
> //
> @@ -935,8 +963,7 @@
> getXMLInterface()
> {
> static boost::intrusive_ptr<as_object> o;
> - if ( o == NULL )
> - {
> + if ( o == NULL ) {
> o = new as_object();
> attachXMLInterface(*o);
> }
> @@ -991,6 +1018,7 @@
> void
> xml_loaded(const fn_call& fn)
> {
> + GNASH_REPORT_FUNCTION;
> as_value method;
> as_value val;
>
> @@ -1006,6 +1034,7 @@
>
> void xml_addrequestheader(const fn_call& fn)
> {
> + GNASH_REPORT_FUNCTION;
> log_msg("%s: %d args\n", __PRETTY_FUNCTION__, fn.nargs);
> XML *ptr = (XML*)fn.this_ptr;
> assert(ptr);
> @@ -1016,17 +1045,26 @@
> }
> void xml_appendchild(const fn_call& fn)
> {
> + GNASH_REPORT_FUNCTION;
> // log_msg("%s: %d args\n", __PRETTY_FUNCTION__, fn.nargs);
> + if (fn.nargs > 0) {
> XML *ptr = (XML*)fn.this_ptr;
> assert(ptr);
> - XMLNode *xml_obj = (XMLNode*)fn.env->top(0).to_object();
> -
> + XMLNode *xml_obj = dynamic_cast<XMLNode*>(fn.arg(0).to_object());
> + if (xml_obj->nodeType() == XML_ELEMENT_NODE) {
> ptr->appendChild(xml_obj);
> + } else {
> + ptr->nodeValueSet(xml_obj->nodeValue());
> + }
> + } else {
> + log_msg("ERROR: no child XMLNode paramaters!\\n");
> + }
> }
>
> void xml_clonenode(const fn_call& fn)
> {
> - log_msg("%s: %d args\n", __PRETTY_FUNCTION__, fn.nargs);
> + GNASH_REPORT_FUNCTION;
> +// log_msg("%s: %d args\n", __PRETTY_FUNCTION__, fn.nargs);
> XML *ptr = (XML*)fn.this_ptr;
> XMLNode *xml_obj;
> assert(ptr);
> @@ -1043,18 +1081,21 @@
> }
> void xml_createelement(const fn_call& fn)
> {
> - // log_msg("%s: %d args\n", __PRETTY_FUNCTION__, fn.nargs);
> +// GNASH_REPORT_FUNCTION;
> +
> XML *ptr = (XML*)fn.this_ptr;
> assert(ptr);
> - XMLNode *xml_obj;
> - const char *text;
>
> if (fn.nargs > 0) {
> - text = fn.arg(0).to_string();
> - xml_obj = new XMLNode;
> + const char *text = fn.arg(0).to_string();
> + XMLNode *xml_obj = new XMLNode();
> +// cerr << "create new child XMLNode is at " << (void *)xml_obj << endl;
> xml_obj->nodeNameSet(text);
> xml_obj->nodeTypeSet(XML_ELEMENT_NODE);
> +// ptr->set_member(text, xml_obj); // FIXME: use a getter/setter !
> + // no return code from this method
> fn.result->set_as_object(xml_obj);
> +
> } else {
> log_msg("ERROR: no text for element creation!\n");
> }
> @@ -1063,7 +1104,7 @@
>
> void xml_createtextnode(const fn_call& fn)
> {
> - log_msg("%s: %d args\n", __PRETTY_FUNCTION__, fn.nargs);
> +// GNASH_REPORT_FUNCTION;
>
> //assert(dynamic_cast<XML*>(fn.this_ptr));
> //XML *ptr = static_cast<XML*>(fn.this_ptr);
> @@ -1071,8 +1112,7 @@
> XMLNode *xml_obj;
> const char *text;
>
> - if (fn.nargs > 0)
> - {
> + if (fn.nargs > 0) {
> text = fn.arg(0).to_string();
> xml_obj = new XMLNode;
> xml_obj->nodeValueSet(text);
> @@ -1100,12 +1140,14 @@
>
> void xml_haschildnodes(const fn_call& fn)
> {
> + GNASH_REPORT_FUNCTION;
> XML *ptr = (XML*)fn.this_ptr;
> assert(ptr);
> fn.result->set_bool(ptr->hasChildNodes());
> }
> void xml_insertbefore(const fn_call& fn)
> {
> + GNASH_REPORT_FUNCTION;
> XML *ptr = (XML*)fn.this_ptr;
> assert(ptr);
>
> @@ -1115,6 +1157,7 @@
> }
> void xml_parsexml(const fn_call& fn)
> {
> +// GNASH_REPORT_FUNCTION;
> const char *text;
> as_value method;
> as_value val;
> @@ -1157,6 +1200,7 @@
>
> void xml_removenode(const fn_call& fn)
> {
> + GNASH_REPORT_FUNCTION;
> XML *ptr = (XML*)fn.this_ptr;
> assert(ptr);
>
> @@ -1165,6 +1209,7 @@
> }
> void xml_send(const fn_call& fn)
> {
> + GNASH_REPORT_FUNCTION;
> XML *ptr = (XML*)fn.this_ptr;
> assert(ptr);
>
> @@ -1173,6 +1218,7 @@
> }
> void xml_sendandload(const fn_call& fn)
> {
> + GNASH_REPORT_FUNCTION;
> XML *ptr = (XML*)fn.this_ptr;
> assert(ptr);
>
> @@ -1181,16 +1227,20 @@
> }
> void xml_tostring(const fn_call& fn)
> {
> +// GNASH_REPORT_FUNCTION;
> XML *ptr = (XML*)fn.this_ptr;
> assert(ptr);
>
> - fn.result->set_string(ptr->toString());
> + string str = ptr->toString();
> +// cerr << "AAAAHHHHH: " << str << endl;
> + fn.result->set_string(str.c_str());
> }
>
> // Both a getter and a setter for nodeName
> static void
> xml_nodename(const fn_call& fn)
> {
> +// GNASH_REPORT_FUNCTION;
> assert(dynamic_cast<XML*>(fn.this_ptr));
> XML *ptr = static_cast<XML*>(fn.this_ptr);
>
> @@ -1210,7 +1260,7 @@
> static void
> xml_nodevalue(const fn_call& fn)
> {
> - //GNASH_REPORT_FUNCTION;
> +// GNASH_REPORT_FUNCTION;
>
> assert(dynamic_cast<XML*>(fn.this_ptr));
> XML *ptr = static_cast<XML*>(fn.this_ptr);
> @@ -1234,16 +1284,14 @@
> static void
> xml_firstchild(const fn_call& fn)
> {
> + GNASH_REPORT_FUNCTION;
> assert(dynamic_cast<XML*>(fn.this_ptr));
> XML *ptr = static_cast<XML*>(fn.this_ptr);
>
> - if ( fn.nargs == 0 )
> - {
> + if ( fn.nargs == 0 ) {
> //fn.result->set_as_object(ptr->firstChild());
> fn.result->set_as_object(ptr);
> - }
> - else
> - {
> + } else {
> IF_VERBOSE_ASCODING_ERRORS(
> log_aserror("Tried to set read-only property
> XML.firstChild");
> );
> @@ -1254,16 +1302,14 @@
> static void
> xml_childnodes(const fn_call& fn)
> {
> + GNASH_REPORT_FUNCTION;
> assert(dynamic_cast<XML*>(fn.this_ptr));
> XML *ptr = static_cast<XML*>(fn.this_ptr);
>
> - if ( fn.nargs == 0 )
> - {
> + if ( fn.nargs == 0 ) {
> //fn.result->set_as_object(ptr->childNodes());
> fn.result->set_as_object(ptr);
> - }
> - else
> - {
> + } else {
> IF_VERBOSE_ASCODING_ERRORS(
> log_aserror("Tried to set read-only property
> XML.childNodes");
> );
> @@ -1279,16 +1325,15 @@
> // extern (used by Global.cpp)
> void xml_class_init(as_object& global)
> {
> +// GNASH_REPORT_FUNCTION;
> // This is going to be the global XML "class"/"function"
> static boost::intrusive_ptr<builtin_function> cl;
>
> - if ( cl == NULL )
> - {
> + if ( cl == NULL ) {
> cl=new builtin_function(&xml_new, getXMLInterface());
> // replicate all interface to class, to be able to access
> // all methods as static functions
> attachXMLInterface(*cl);
> -
> }
>
> // Register _global.String
>
> Index: server/asobj/xml.h
> ===================================================================
> RCS file: /sources/gnash/gnash/server/asobj/xml.h,v
> retrieving revision 1.5
> retrieving revision 1.6
> diff -u -b -r1.5 -r1.6
> --- server/asobj/xml.h 18 Jan 2007 16:55:35 -0000 1.5
> +++ server/asobj/xml.h 13 Feb 2007 19:36:34 -0000 1.6
> @@ -28,6 +28,7 @@
>
> //#define DEBUG_MEMORY_ALLOCATION 1
> #include <vector>
> +#include <sstream>
>
> #include "xmlattrs.h"
> #include "xmlnode.h"
> @@ -40,17 +41,16 @@
> #include <libxml/parser.h>
> #include <libxml/xmlreader.h>
>
> -// Forward declarations
> -namespace gnash {
> - class fn_call;
> -}
> +using namespace std;
>
> namespace gnash {
>
> +// Forward declarations
> +class fn_call;
> +
> /// XML class and ActionScript object
> class DSOLOCAL XML : public as_object
> {
> -
> public:
>
> XML();
> @@ -92,7 +92,7 @@
>
> std::vector<XMLNode *> childNodes();
>
> - const char *stringify(XMLNode *xml);
> + const char *stringify(XMLNode *xml, std::stringstream *str);
> // Returns true if the specified node has child nodes; otherwise,
> returns false.
> bool hasChildNodes() {
> if (_nodes) {
>
> Index: server/asobj/xmlnode.cpp
> ===================================================================
> RCS file: /sources/gnash/gnash/server/asobj/xmlnode.cpp,v
> retrieving revision 1.9
> retrieving revision 1.10
> diff -u -b -r1.9 -r1.10
> --- server/asobj/xmlnode.cpp 5 Feb 2007 07:18:30 -0000 1.9
> +++ server/asobj/xmlnode.cpp 13 Feb 2007 19:36:34 -0000 1.10
> @@ -1,5 +1,5 @@
> //
> -// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
> +// Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
> //
> // This program is free software; you can redistribute it and/or modify
> // it under the terms of the GNU General Public License as published by
> @@ -14,11 +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: xmlnode.cpp,v 1.9 2007/02/05 07:18:30 zoulunkai Exp $ */
> +/* $Id: xmlnode.cpp,v 1.10 2007/02/13 19:36:34 rsavoye Exp $ */
>
> #ifdef HAVE_CONFIG_H
> #include "config.h"
> @@ -27,6 +23,7 @@
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <vector>
> +#include "log.h"
> #include "tu_config.h"
> #include "fn_call.h"
> #include "builtin_function.h"
> @@ -36,10 +33,12 @@
> #include "xmlnode.h"
>
> #ifdef DEBUG_MEMORY_ALLOCATION
> - #include "log.h"
> +#include "log.h"
> #endif
>
> #include <unistd.h>
> +#include <string>
> +#include <sstream>
> #include <libxml/xmlmemory.h>
> #include <libxml/parser.h>
> #include <libxml/tree.h>
> @@ -67,6 +66,8 @@
> static void xmlnode_previoussibling(const fn_call& fn);
> static as_object* getXMLNodeInterface();
>
> +static LogFile& dbglogfile = gnash::LogFile::getDefaultInstance();
> +
>
> //std::vector<as_object *> _xmlobjs; // FIXME: hack alert
>
> @@ -211,6 +212,7 @@
> void
> XMLNode::appendChild(XMLNode *node)
> {
> +// GNASH_REPORT_FUNCTION;
> // log_msg("%s: %p, as is %d, node is %d\n",
> // __PRETTY_FUNCTION__, this, _children.size(), _children.size());
> //
> @@ -231,6 +233,7 @@
> XMLNode &
> XMLNode::cloneNode(XMLNode &newnode, bool deep)
> {
> + GNASH_REPORT_FUNCTION;
> log_msg("%s: deep is %d\n", __PRETTY_FUNCTION__, deep);
>
> if (deep) {
> @@ -264,30 +267,11 @@
> {
> log_msg("%s: unimplemented \n", __PRETTY_FUNCTION__);
> }
> -const char *
> -XMLNode::toString()
> -{
> - XMLNode *node;
> -
> - vector<XMLNode *>::const_iterator it;
> - for (it = _children.begin(); it != _children.end(); it++) {
> - node = *it;
> -// log_msg("Got something\n");
> - if (node->_name) {
> - log_msg("Node name is %s", node->_name);
> - }
> - if (node->_value) {
> - log_msg("Node value is %s", node->_name);
> - }
> - }
> -
> - log_msg("%s: unimplemented \n", __PRETTY_FUNCTION__);
> - return "Hello World!";
> -}
>
> XMLNode *
> XMLNode::previousSibling(int x)
> {
> +// GNASH_REPORT_FUNCTION;
> log_msg("%s: partially implemented. " SIZET_FMT " objects\n",
> __PRETTY_FUNCTION__, _children.size());
> if (_children.size() > 0) {
> @@ -300,6 +284,7 @@
> XMLNode *
> XMLNode::nextSibling(int x)
> {
> + GNASH_REPORT_FUNCTION;
> log_msg("%s: unimplemented \n", __PRETTY_FUNCTION__);
> if (x < (int) _children.size()) {
> return _children[x];
> @@ -307,6 +292,61 @@
> return NULL;
> }
>
> +const char *
> +XMLNode::toString()
> +{
> +// GNASH_REPORT_FUNCTION;
> + stringstream xmlout;
> + return stringify(this, &xmlout);
> +}
> +
> +const char *
> +XMLNode::stringify(XMLNode *xml, stringstream *xmlout)
> +{
> +// GNASH_REPORT_FUNCTION;
> + int child;
> + const char *nodevalue = xml->nodeValue();
> + const char *nodename = xml->nodeName();
> +
> +// log_msg("%s: processing for object %s <%p>\n", __PRETTY_FUNCTION__,
> nodename, xml);
> +
> + // Create the beginning of the tag
> + *xmlout << "<" << nodename;
> +
> + // Process the attributes, if any
> + vector<XMLAttr *>::iterator ita;
> + for (ita = xml->_attributes.begin(); ita != xml->_attributes.end();
> ita++) {
> + XMLAttr *xa = *ita;
> +// log_msg("\t\tAdding attribute as member %s, value is %s to node %s",
> +// nodename, xa->_name, xa->_value);
> + *xmlout << " " << xa->_name << "=\"" << xa->_value << "\"";
> + }
> +
> + *xmlout << ">"; // closing symbol for this tag
> +
> + if (nodevalue) {
> + *xmlout << nodevalue;
> + *xmlout << "</" << nodename << ">";
> + }
> +
> + int length = xml->_children.size();
> +// log_msg("\tProcessing %d children nodes for %s", length, nodename);
> +
> + vector<XMLNode *>::iterator itx;
> + for (itx = xml->_children.begin(); itx != xml->_children.end(); itx++) {
> +// log_msg("Found One XMLNode child !!!! %s <%p>\n", (*itx)->nodeName(),
> (void*)*itx);
> +// cerr << "<" << (*it)->nodeName() << ">" << endl;
> + XMLNode *x = *itx;
> + *xmlout << x->toString();
> + }
> +
> + if (!nodevalue) {
> + *xmlout << "</" << nodename << ">";
> + }
> +
> + return xmlout->str().c_str();;
> +}
> +
> void
> attachXMLNodeInterface(as_object& o)
> {
> @@ -338,7 +378,7 @@
> /// \brief XMLNode::firstChild property
> ///
> /// Read-only property; evaluates the specified XML object and
> - /// references the first child in the parent node\ufffds child
> + /// references the first child in the parent node's child
> /// list. This property is null if the node does not have
> /// children. This property is undefined if the node is a text
> /// node. This is a read-only property and cannot be used to
> @@ -373,8 +413,7 @@
> getXMLNodeInterface()
> {
> static boost::intrusive_ptr<as_object> o;
> - if ( o == NULL )
> - {
> + if ( o == NULL ) {
> o = new as_object();
> attachXMLNodeInterface(*o);
> }
> @@ -384,16 +423,13 @@
> static void
> xmlnode_new(const fn_call& fn)
> {
> - XMLNode *xml_obj;
> +// GNASH_REPORT_FUNCTION;
>
> - xml_obj = new XMLNode;
> -
> - if ( fn.nargs > 0 )
> - {
> + XMLNode *xml_obj = new XMLNode;
> + if ( fn.nargs > 0 ) {
> xml_obj->nodeTypeSet(static_cast<xmlElementType>(
> static_cast<int>(fn.arg(0).to_number())));
> - if ( fn.nargs > 1 )
> - {
> + if (fn.nargs > 1) {
> xml_obj->nodeValueSet(fn.arg(1).to_string());
> }
> }
> @@ -404,34 +440,41 @@
> static void
> xmlnode_appendchild(const fn_call& fn)
> {
> +// GNASH_REPORT_FUNCTION;
> + if (fn.nargs > 0) {
> XMLNode *ptr = (XMLNode*)fn.this_ptr;
> assert(ptr);
> // log_msg("%s: %p, %d args\n", __PRETTY_FUNCTION__, ptr, fn.nargs);
>
> - XMLNode *node = dynamic_cast<XMLNode*>(fn.arg(0).to_object());
> + XMLNode *xml_obj = dynamic_cast<XMLNode*>(fn.arg(0).to_object());
> + if (xml_obj->nodeType() == XML_ELEMENT_NODE) {
> + ptr->appendChild(xml_obj);
> + } else {
> + ptr->nodeValueSet(xml_obj->nodeValue());
> + }
>
> // log_msg("%s: %p \n", __PRETTY_FUNCTION__, xml_obj);
> int length = ptr->length();
> if (length > 0) {
> - XMLNode *ass = node->previousSibling(length); // or is it 'ptr' ??
> + XMLNode *ass = xml_obj->previousSibling(length); // or is it 'ptr'
> ??
> // FIXME: This shouldn't always be NULL
> // log_msg("%s: ASS is %p, length is %d\n", __PRETTY_FUNCTION__,
> // ass, length);
> ptr->set_member("previousSibling", ass); // FIXME: don't do this, rely
> on getter/setter
> // ptr->set_member("nextSibling",
> xml_obj->obj.nextSibling(ptr->obj.length()));
> }
> - ptr->appendChild(node);
> // The last child in the list is always the one we just appended
> - ptr->set_member("lastChild", node); // FIXME: don't do this, rely on
> getter/setter
> -
> -// ptr->obj.appendChild(&(xml_obj->obj));
> -// ptr->obj.nodeValueSet((char *)xmlnode_obj->obj.nodeValue());
> + ptr->set_member("lastChild", xml_obj); // FIXME: don't do this, rely on
> getter/setter
> + } else {
> + log_msg("ERROR: no child XMLNode paramaters!\\n");
> + }
> }
>
> static void
> xmlnode_clonenode(const fn_call& fn)
> {
> - log_msg("%s: %d args\n", __PRETTY_FUNCTION__, fn.nargs);
> + GNASH_REPORT_FUNCTION;
> +// log_msg("%s: %d args\n", __PRETTY_FUNCTION__, fn.nargs);
> XMLNode *ptr = (XMLNode*)fn.this_ptr;
> XMLNode *xmlnode_obj;
> assert(ptr);
> @@ -450,6 +493,7 @@
> static void
> xmlnode_insertbefore(const fn_call& fn)
> {
> + GNASH_REPORT_FUNCTION;
> XMLNode *ptr = (XMLNode*)fn.this_ptr;
> assert(ptr);
>
> @@ -460,6 +504,7 @@
> static void
> xmlnode_removenode(const fn_call& fn)
> {
> + GNASH_REPORT_FUNCTION;
> XMLNode *ptr = (XMLNode*)fn.this_ptr;
> assert(ptr);
>
> @@ -471,6 +516,8 @@
> static void
> xmlnode_tostring(const fn_call& fn)
> {
> +// GNASH_REPORT_FUNCTION;
> +
> XMLNode *ptr = (XMLNode*)fn.this_ptr;
> assert(ptr);
>
> @@ -535,12 +582,9 @@
> assert(dynamic_cast<XMLNode*>(fn.this_ptr));
> XMLNode *ptr = static_cast<XMLNode*>(fn.this_ptr);
>
> - if ( fn.nargs == 0 )
> - {
> + if ( fn.nargs == 0 ) {
> fn.result->set_double(ptr->nodeType());
> - }
> - else
> - {
> + } else {
> IF_VERBOSE_ASCODING_ERRORS(
> log_aserror("Tried to set read-only property
> XMLNode.nodeType");
> );
> @@ -554,12 +598,9 @@
> assert(dynamic_cast<XMLNode*>(fn.this_ptr));
> XMLNode *ptr = static_cast<XMLNode*>(fn.this_ptr);
>
> - if ( fn.nargs == 0 )
> - {
> + if ( fn.nargs == 0 ) {
> fn.result->set_as_object(ptr->firstChild());
> - }
> - else
> - {
> + } else {
> IF_VERBOSE_ASCODING_ERRORS(
> log_aserror("Tried to set read-only property
> XMLNode.firstChild");
> );
> @@ -573,12 +614,9 @@
> assert(dynamic_cast<XMLNode*>(fn.this_ptr));
> XMLNode *ptr = static_cast<XMLNode*>(fn.this_ptr);
>
> - if ( fn.nargs == 0 )
> - {
> + if ( fn.nargs == 0 ) {
> fn.result->set_as_object(ptr->lastChild());
> - }
> - else
> - {
> + } else {
> IF_VERBOSE_ASCODING_ERRORS(
> log_aserror("Tried to set read-only property
> XMLNode.lastChild");
> );
> @@ -592,14 +630,11 @@
> assert(dynamic_cast<XMLNode*>(fn.this_ptr));
> XMLNode *ptr = static_cast<XMLNode*>(fn.this_ptr);
>
> - if ( fn.nargs == 0 )
> - {
> + if ( fn.nargs == 0 ) {
> log_error("FIXME: XMLNode.nextSibling unimplemented");
> //fn.result->set_as_object(ptr->nextSibling());
> fn.result->set_null();
> - }
> - else
> - {
> + } else {
> IF_VERBOSE_ASCODING_ERRORS(
> log_aserror("Tried to set read-only property
> XMLNode.nextSibling");
> );
> @@ -613,14 +648,11 @@
> assert(dynamic_cast<XMLNode*>(fn.this_ptr));
> XMLNode *ptr = static_cast<XMLNode*>(fn.this_ptr);
>
> - if ( fn.nargs == 0 )
> - {
> + if ( fn.nargs == 0 ) {
> log_error("FIXME: XMLNode.previousSibling unimplemented");
> //fn.result->set_as_object(ptr->previousSibling());
> fn.result->set_null();
> - }
> - else
> - {
> + } else {
> IF_VERBOSE_ASCODING_ERRORS(
> log_aserror("Tried to set read-only property
> XMLNode.previousSibling");
> );
> @@ -633,13 +665,11 @@
> // This is going to be the global XMLNode "class"/"function"
> static boost::intrusive_ptr<builtin_function> cl;
>
> - if ( cl == NULL )
> - {
> + if ( cl == NULL ) {
> cl=new builtin_function(&xmlnode_new, getXMLNodeInterface());
> // replicate all interface to class, to be able to access
> // all methods as static functions
> attachXMLNodeInterface(*cl);
> -
> }
>
> // Register _global.String
>
> Index: server/asobj/xmlnode.h
> ===================================================================
> RCS file: /sources/gnash/gnash/server/asobj/xmlnode.h,v
> retrieving revision 1.5
> retrieving revision 1.6
> diff -u -b -r1.5 -r1.6
> --- server/asobj/xmlnode.h 18 Jan 2007 15:30:53 -0000 1.5
> +++ server/asobj/xmlnode.h 13 Feb 2007 19:36:34 -0000 1.6
> @@ -29,6 +29,9 @@
>
> //#define DEBUG_MEMORY_ALLOCATION 1
> #include <vector>
> +#include <string>
> +#include <sstream>
> +
> #include "action.h"
> #include "impl.h"
>
> @@ -50,7 +53,6 @@
> public:
> XMLNode();
> ~XMLNode();
> -
> int length() { return _children.size(); }
> const char *nodeName();
> const char *nodeValue();
> @@ -71,6 +73,7 @@
> void nodeValueSet(const char *value);
> // nodeType XML.nodeType
>
> + const char *stringify(XMLNode *xml, std::stringstream *xmlout);
> bool hasChildNodes()
> {
> return ! _children.empty();
>
> Index: server/asobj/xmlsocket.cpp
> ===================================================================
> RCS file: /sources/gnash/gnash/server/asobj/xmlsocket.cpp,v
> retrieving revision 1.5
> retrieving revision 1.6
> diff -u -b -r1.5 -r1.6
> --- server/asobj/xmlsocket.cpp 9 Feb 2007 13:38:50 -0000 1.5
> +++ server/asobj/xmlsocket.cpp 13 Feb 2007 19:36:34 -0000 1.6
> @@ -63,8 +63,9 @@
>
> const int INBUF = 10000;
>
> -XMLSocket::XMLSocket() {
> - //log_msg("%s: \n", __FUNCTION__);
> +XMLSocket::XMLSocket()
> +{
> +// GNASH_REPORT_FUNCTION;
> _data = false;
> _xmldata = false;
> _closed = false;
> @@ -77,130 +78,14 @@
>
> XMLSocket::~XMLSocket()
> {
> - //log_msg("%s: \n", __FUNCTION__);
> +// GNASH_REPORT_FUNCTION;
> }
>
> bool
> -XMLSocket::connect(const char *host, int port)
> +XMLSocket::connect(const char *host, short port)
> {
> - struct sockaddr_in sock_in;
> - fd_set fdset;
> - struct timeval tval;
> - int ret;
> - int retries;
> - char thishostname[MAXHOSTNAMELEN];
> - struct protoent *proto;
> -
> - if (port < 1024) {
> - log_error("Can't connect to priviledged port #%d!\n", port);
> - _connect = false;
> - return false;
> - }
> -
> - log_msg("%s: to host %s at port %d\n", __FUNCTION__, host, port);
> -
> - memset(&sock_in, 0, sizeof(struct sockaddr_in));
> - memset(&thishostname, 0, MAXHOSTNAMELEN);
> - if (strlen(host) == 0) {
> - if (gethostname(thishostname, MAXHOSTNAMELEN) == 0) {
> - log_msg("The hostname for this machine is %s.\n", thishostname);
> - } else {
> - log_msg("Couldn't get the hostname for this machine!\n");
> - return false;
> - }
> - }
> - const struct hostent *hent = ::gethostbyname(host);
> - if (hent > 0) {
> - ::memcpy(&sock_in.sin_addr, hent->h_addr, hent->h_length);
> - }
> - sock_in.sin_family = AF_INET;
> - sock_in.sin_port = ntohs(static_cast<short>(port));
> -
> -#if 0
> - char ascip[32];
> - inet_ntop(AF_INET, &sock_in.sin_addr.s_addr, ascip, INET_ADDRSTRLEN);
> - log_msg("The IP address for this client socket is %s\n", ascip);
> -#endif
> -
> - proto = ::getprotobyname("TCP");
> -
> - _sockfd = ::socket(PF_INET, SOCK_STREAM, proto->p_proto);
> - if (_sockfd < 0)
> - {
> - log_error("unable to create socket : %s\n", strerror(errno));
> - _sockfd = -1;
> - return false;
> - }
> -
> - retries = 2;
> - while (retries-- > 0) {
> - // We use select to wait for the read file descriptor to be
> - // active, which means there is a client waiting to connect.
> - FD_ZERO(&fdset);
> - FD_SET(_sockfd, &fdset);
> -
> - // Reset the timeout value, since select modifies it on return. To
> - // block, set the timeout to zero.
> - tval.tv_sec = 5;
> - tval.tv_usec = 0;
> -
> - ret = ::select(_sockfd+1, &fdset, NULL, NULL, &tval);
> -
> - // If interupted by a system call, try again
> - if (ret == -1 && errno == EINTR)
> - {
> - log_msg("The connect() socket for fd #%d was interupted by a system
> call!\n",
> - _sockfd);
> - continue;
> - }
> -
> - if (ret == -1)
> - {
> - log_msg("The connect() socket for fd #%d never was available for
> writing!\n",
> - _sockfd);
> -#ifdef HAVE_WINSOCK
> - ::shutdown(_sockfd, SHUT_BOTH);
> -#else
> - ::shutdown(_sockfd, SHUT_RDWR);
> -#endif
> - _sockfd = -1;
> - return false;
> - }
> - if (ret == 0) {
> - log_error("The connect() socket for fd #%d timed out waiting to
> write!\n",
> - _sockfd);
> - continue;
> - }
> -
> - if (ret > 0) {
> - ret = ::connect(_sockfd, reinterpret_cast<struct sockaddr
> *>(&sock_in), sizeof(sock_in));
> - if (ret == 0) {
> - log_msg("\tport %d at IP %s for fd #%d\n", port,
> - ::inet_ntoa(sock_in.sin_addr), _sockfd);
> - _connect = true;
> - xml_fd = _sockfd; // FIXME: This file descriptor is
> used by
> - // XML::checkSocket() when called
> from
> - // the main processing loop.
> - return true;
> - }
> - if (ret == -1) {
> - log_msg("The connect() socket for fd #%d never was available for
> writing!\n",
> - _sockfd);
> - _sockfd = -1;
> - return false;
> - }
> - }
> - }
> - // ::close(_sockfd);
> - // return false;
> -
> - printf("\tConnected at port %d on IP %s for fd #%d\n", port,
> - ::inet_ntoa(sock_in.sin_addr), _sockfd);
> -
> -#ifndef HAVE_WINSOCK
> - fcntl(_sockfd, F_SETFL, O_NONBLOCK);
> -#endif
> -
> + GNASH_REPORT_FUNCTION;
> + createClient(host, port);
> _connect = true;
> return true;
> }
> @@ -208,7 +93,7 @@
> void
> XMLSocket::close()
> {
> - log_msg("%s: \n", __FUNCTION__);
> + GNASH_REPORT_FUNCTION;
> // Since the return code from close() doesn't get used by Shockwave,
> // we don't care either.
> if (_sockfd > 0) {
> @@ -220,18 +105,20 @@
> bool
> XMLSocket::anydata(char **msgs)
> {
> - //printf("%s: \n", __FUNCTION__);
> + GNASH_REPORT_FUNCTION;
> return anydata(_sockfd, msgs);
> }
>
> bool XMLSocket::processingData()
> {
> + GNASH_REPORT_FUNCTION;
> //printf("%s: processing flags is is %d\n", __FUNCTION__, _processing);
> return _processing;
> }
>
> void XMLSocket::processing(bool x)
> {
> + GNASH_REPORT_FUNCTION;
> //printf("%s: set processing flag to %d\n", __FUNCTION__, x);
> _processing = x;
> }
> @@ -392,38 +279,39 @@
> void
> XMLSocket::onClose(std::string /* str */)
> {
> - log_msg("%s: \n", __FUNCTION__);
> + GNASH_REPORT_FUNCTION;
> }
>
> void
> XMLSocket::onConnect(std::string /* str */)
> {
> - log_msg("%s: \n", __FUNCTION__);
> + GNASH_REPORT_FUNCTION;
> }
>
> void
> XMLSocket::onData(std::string /* str */)
> {
> - log_msg("%s: \n", __FUNCTION__);
> + GNASH_REPORT_FUNCTION;
> }
>
> void
> XMLSocket::onXML(std::string /* str */)
> {
> - log_msg("%s: \n", __FUNCTION__);
> + GNASH_REPORT_FUNCTION;
> }
>
> void
> XMLSocket::push(as_object *obj)
> {
> + GNASH_REPORT_FUNCTION;
> _nodes.push_back(obj);
> }
>
> void
> XMLSocket::clear()
> {
> - unsigned int i;
> - for (i=0; i< _nodes.size(); i++) {
> + GNASH_REPORT_FUNCTION;
> + for (unsigned int i=0; i< _nodes.size(); i++) {
> delete _nodes[i];
> }
> }
> @@ -431,23 +319,25 @@
> int
> XMLSocket::count()
> {
> + GNASH_REPORT_FUNCTION;
> return _nodes.size();
> }
>
> int
> XMLSocket::checkSockets(void)
> {
> + GNASH_REPORT_FUNCTION;
> return checkSockets(_sockfd);
> }
>
> int
> XMLSocket::checkSockets(int fd)
> {
> + GNASH_REPORT_FUNCTION;
> fd_set fdset;
> int ret = 0;
> struct timeval tval;
>
> - //log_msg("%s:\n", __FUNCTION__);
>
> FD_ZERO(&fdset);
> FD_SET(fd, &fdset);
> @@ -478,6 +368,7 @@
> void
> xmlsocket_connect(const fn_call& fn)
> {
> + GNASH_REPORT_FUNCTION;
> as_value method;
> as_value val;
> static bool first = true; // This event handler should only be
> executed once.
> @@ -545,6 +436,7 @@
> void
> xmlsocket_send(const fn_call& fn)
> {
> + GNASH_REPORT_FUNCTION;
> as_value method;
> as_value val;
>
> @@ -558,6 +450,7 @@
> void
> xmlsocket_close(const fn_call& fn)
> {
> + GNASH_REPORT_FUNCTION;
> as_value method;
> as_value val;
>
> @@ -571,6 +464,7 @@
> void
> xmlsocket_xml_new(const fn_call& fn)
> {
> + GNASH_REPORT_FUNCTION;
> //log_msg("%s: nargs=%d\n", __FUNCTION__, nargs);
>
> xml_new(fn);
> @@ -579,6 +473,7 @@
> void
> xmlsocket_new(const fn_call& fn)
> {
> + GNASH_REPORT_FUNCTION;
> //log_msg("%s: nargs=%d\n", __FUNCTION__, nargs);
>
> as_object* xmlsock_obj = new xmlsocket_as_object;
> @@ -639,7 +534,7 @@
> void
> xmlsocket_event_ondata(const fn_call& fn)
> {
> - //log_msg("%s: nargs is %d\n", __FUNCTION__, nargs);
> + GNASH_REPORT_FUNCTION;
>
> as_value method;
> as_value val;
> @@ -734,6 +629,7 @@
> void
> xmlsocket_event_connect(const fn_call& fn)
> {
> + GNASH_REPORT_FUNCTION;
> as_value method;
> as_value val;
> static bool first = true; // This event handler should only be
> executed once.
> @@ -780,6 +676,7 @@
> void
> xmlsocket_event_xml(const fn_call& /* fn */)
> {
> + GNASH_REPORT_FUNCTION;
> #if 0
> as_value* result = fn.result;
> as_object* this_ptr = fn.this_ptr;
> @@ -795,6 +692,7 @@
> int
> check_sockets(int x)
> {
> + GNASH_REPORT_FUNCTION;
> if (xml_fd == 0) {
> return -1;
> }
> @@ -802,5 +700,9 @@
> return xs.checkSockets(x);
> }
>
> -} // end of gnaash namespace
> +} // end of gnash namespace
>
> +// Local Variables:
> +// mode: C++
> +// indent-tabs-mode: t
> +// End:
>
> Index: server/asobj/xmlsocket.h
> ===================================================================
> RCS file: /sources/gnash/gnash/server/asobj/xmlsocket.h,v
> retrieving revision 1.3
> retrieving revision 1.4
> diff -u -b -r1.3 -r1.4
> --- server/asobj/xmlsocket.h 30 Jan 2007 02:02:29 -0000 1.3
> +++ server/asobj/xmlsocket.h 13 Feb 2007 19:36:34 -0000 1.4
> @@ -24,6 +24,7 @@
> #include "tu_config.h"
> #include "xml.h"
> #include "impl.h"
> +#include "network.h"
>
> #include <string>
>
> @@ -31,16 +32,15 @@
>
> extern const int SOCKET_DATA;
>
> -class DSOLOCAL XMLSocket {
> - public:
> +class DSOLOCAL XMLSocket : public Network {
> +public:
> XMLSocket();
> ~XMLSocket();
>
> - bool connect(const char *host, int port);
> + bool connect(const char *host, short port);
> bool send(std::string str);
> void close();
>
> -
> bool anydata(char **msgs);
> bool anydata(int sockfd, char **msgs);
> bool connected() { return _connect; };
> @@ -69,7 +69,7 @@
> int checkSockets(void);
> int checkSockets(int x);
>
> - private:
> +private:
> std::string _host;
> short _port;
> int _sockfd;
> @@ -109,3 +109,7 @@
> // __XMLSOCKETSOCKET_H__
> #endif
>
> +// Local Variables:
> +// mode: C++
> +// indent-tabs-mode: t
> +// End:
>
> Index: server/vm/ActionExec.cpp
> ===================================================================
> RCS file: /sources/gnash/gnash/server/vm/ActionExec.cpp,v
> retrieving revision 1.18
> retrieving revision 1.19
> diff -u -b -r1.18 -r1.19
> --- server/vm/ActionExec.cpp 10 Feb 2007 01:30:32 -0000 1.18
> +++ server/vm/ActionExec.cpp 13 Feb 2007 19:36:34 -0000 1.19
> @@ -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: ActionExec.cpp,v 1.18 2007/02/10 01:30:32 rsavoye Exp $ */
> +/* $Id: ActionExec.cpp,v 1.19 2007/02/13 19:36:34 rsavoye Exp $ */
>
> #ifdef HAVE_CONFIG_H
> #include "config.h"
> @@ -47,7 +47,7 @@
> // too much information for my tastes. I really want just
> // to see how stack changes while executing actions...
> // --strk Fri Jun 30 02:28:46 CEST 2006
> -// #define DEBUG_STACK 1
> +#define DEBUG_STACK 1
> #endif
>
> using namespace gnash;
>
>
> _______________________________________________
> Gnash-commit mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/gnash-commit
--
() ASCII Ribbon Campaign
/\ Keep it simple!