gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] [SCM] Gnash branch, master, updated. 9dbb1413bb3b8a43675f


From: Benjamin Wolsey
Subject: [Gnash-commit] [SCM] Gnash branch, master, updated. 9dbb1413bb3b8a43675f9a7906e61d95552082c9
Date: Tue, 19 Oct 2010 09:10:54 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Gnash".

The branch, master has been updated
       via  9dbb1413bb3b8a43675f9a7906e61d95552082c9 (commit)
       via  0d9d14d25ac064ef5392c84b4cb0417b3d231638 (commit)
       via  331ee065f749ba84991a709ea0640fa5374bb612 (commit)
       via  829f87b470d3faf2375e425d58576c7f6264297b (commit)
       via  7c8305916bbfba330be03c87b96c3278b9dd2993 (commit)
       via  ade3d3bea4991c2bddb19c58ccf04ac5d6dc558c (commit)
      from  db7acef8780f6bbd300f095da23c23d86d64ae01 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.savannah.gnu.org/cgit//commit/?id=9dbb1413bb3b8a43675f9a7906e61d95552082c9


commit 9dbb1413bb3b8a43675f9a7906e61d95552082c9
Author: Benjamin Wolsey <address@hidden>
Date:   Tue Oct 19 11:08:42 2010 +0200

    Remove unnecessary include.

diff --git a/libcore/asobj/flash/external/ExternalInterface_as.cpp 
b/libcore/asobj/flash/external/ExternalInterface_as.cpp
index bc273f9..0d799c5 100644
--- a/libcore/asobj/flash/external/ExternalInterface_as.cpp
+++ b/libcore/asobj/flash/external/ExternalInterface_as.cpp
@@ -25,7 +25,6 @@
 #include <sstream>
 #include <boost/algorithm/string/erase.hpp>
 #include <algorithm>
-#include <boost/lexical_cast.hpp>
 #include "GnashSystemNetHeaders.h"
 
 #include "ExternalInterface.h"

http://git.savannah.gnu.org/cgit//commit/?id=0d9d14d25ac064ef5392c84b4cb0417b3d231638


commit 0d9d14d25ac064ef5392c84b4cb0417b3d231638
Author: Benjamin Wolsey <address@hidden>
Date:   Tue Oct 19 10:42:32 2010 +0200

    Clean up unused functions.

diff --git a/libcore/ExternalInterface.cpp b/libcore/ExternalInterface.cpp
index 49ff8e2..99cb542 100644
--- a/libcore/ExternalInterface.cpp
+++ b/libcore/ExternalInterface.cpp
@@ -103,42 +103,6 @@ ExternalInterface::_objectToXML(as_object *obj)
 
 /// Convert an AS object to an XML string.
 std::string
-ExternalInterface::_arrayToXML(as_object *obj)
-{
-    // GNASH_REPORT_FUNCTION;
-    std::stringstream ss;
-    if (obj == 0) {
-        // callers should check (we might just abort here)
-        log_error("Need a valid AS Object!");
-        return ss.str();
-    }
-
-    VM& vm = getVM(*obj);    
-    string_table& st = vm.getStringTable();
-    
-    ss << "<array>";
-
-    // This is an ActionScript-like implementation, which is why it looks
-    // like poor C++.
-    const int length = toInt(getMember(*obj, NSV::PROP_LENGTH), vm);
-    int i = 0;
-    while (i < length) {
-        std::ostringstream s;
-        s << i;
-        as_value el = getMember(*obj, st.find(s.str()));
-        ss << "<property id=\"" << i << "\">"
-           << _toXML(el) 
-           << "</property>";
-        ++i;
-    }
-
-    ss << "</array>";
-    
-    return ss.str();
-}
-
-/// Convert an AS object to an XML string.
-std::string
 ExternalInterface::_toXML(const as_value &val)
 {
     // GNASH_REPORT_FUNCTION;
@@ -238,24 +202,6 @@ ExternalInterface::toAS(Global_as& /*gl*/, const 
std::string &xml)
     return val;
 }
 
-as_value
-ExternalInterface::argumentsToXML(std::vector<as_value> &args)
-{
-    // GNASH_REPORT_FUNCTION;
-
-    std::vector<as_value>::iterator it;
-    std::stringstream ss;
-
-    ss << "<arguments>";
-    for (it=args.begin(); it != args.end(); it++) {
-        as_value val = *it;
-        ss << toXML(val);
-    }
-    ss << "</arguments>";
-    
-    return as_value(ss.str());
-}
-
 std::map<std::string, as_value>
 ExternalInterface::propertiesToAS(Global_as& gl, std::string &xml)
 {
diff --git a/libcore/ExternalInterface.h b/libcore/ExternalInterface.h
index 31d3087..ff4e40b 100644
--- a/libcore/ExternalInterface.h
+++ b/libcore/ExternalInterface.h
@@ -30,24 +30,23 @@
 #include "dsodefs.h" /* For DSOEXPORT */
 
 namespace gnash {
-
-class as_object;
-class as_value;
-struct ObjectURI;
-class Global_as;
-class movie_root;
-class IOChannel;
+    class as_object;
+    class as_value;
+    struct ObjectURI;
+    class Global_as;
+    class movie_root;
+    class IOChannel;
 }
 
 namespace gnash {
 
 struct DSOEXPORT ExternalInterface
 {
-    typedef struct DSOLOCAL {
+    struct DSOLOCAL invoke_t {
         std::string name;
         std::string type;
         std::vector<as_value> args;
-    } invoke_t;
+    };
 
     // Some of these appear to be undocumented helper functions of this class
     // that while probably designed to be used internally, get used
@@ -60,8 +59,6 @@ struct DSOEXPORT ExternalInterface
     DSOEXPORT static std::map<std::string, as_value> propertiesToAS(Global_as& 
gl,
                                                    std::string &xml);
     
-    DSOEXPORT static as_value argumentsToXML(std::vector<as_value> &args);
-    
     DSOEXPORT static as_value objectToAS(Global_as& gl, const std::string 
&xml);
 
     static std::string objectToXML(as_object *obj) {
@@ -69,28 +66,12 @@ struct DSOEXPORT ExternalInterface
         return ei._objectToXML(obj);
     }
     
-    static std::string arrayToXML(as_object *obj) {
-        ExternalInterface ei;
-        return ei._arrayToXML(obj);
-    }
-
     /// Convert an AS object to an XML string.
     static std::string toXML(const as_value &obj) {
         ExternalInterface ei;
         return ei._toXML(obj);
     }
     
-
-//  static std::string arrayToJS();
-//  static as_value arrayToAS();
-
-//  static std::string jsQuoteString();
-//  static void initJS();
-//  static bool evalJS();
-    
-//  static callOut"));
-//  static callIn"));
-
     static std::string escapeXML(as_object &obj);
     static std::string unescapeXML(as_object &obj);
 
@@ -134,7 +115,6 @@ private:
 
 } // end of gnash namespace
 
-// __GNASH_ASOBJ_EXTERNALINTERFACE_H__
 #endif
 
 // local Variables:
diff --git a/libcore/movie_root.cpp b/libcore/movie_root.cpp
index d64c525..8a6c8cb 100644
--- a/libcore/movie_root.cpp
+++ b/libcore/movie_root.cpp
@@ -153,7 +153,6 @@ movie_root::movie_root(const movie_definition& def,
     _quality(QUALITY_HIGH),
     _alignMode(0),
     _allowScriptAccess(SCRIPT_ACCESS_SAME_DOMAIN),
-    _marshallExceptions(false),
     _showMenu(true),
     _scaleMode(SCALEMODE_SHOWALL),
     _displayState(DISPLAYSTATE_NORMAL),
diff --git a/libcore/movie_root.h b/libcore/movie_root.h
index d7d4041..88f81c1 100644
--- a/libcore/movie_root.h
+++ b/libcore/movie_root.h
@@ -564,11 +564,6 @@ public:
     /// current gui
     void setShowMenuState(bool state);
 
-    // This is a flag that specifies whether exceptions in ActionScript
-    // should be propogated to JavaScript in the browser.
-    void setMarshallExceptions(bool x) { _marshallExceptions = x; };
-    bool getMarshallExceptions() { return _marshallExceptions; };
-    
     /// Sets the Stage object's align mode.
     void setStageScaleMode(ScaleMode sm);
     
@@ -1123,7 +1118,6 @@ private:
     std::bitset<4u> _alignMode;
 
     AllowScriptAccessMode _allowScriptAccess;
-    bool _marshallExceptions;
 
     /// Whether to show the menu or not.
     bool _showMenu;

http://git.savannah.gnu.org/cgit//commit/?id=331ee065f749ba84991a709ea0640fa5374bb612


commit 331ee065f749ba84991a709ea0640fa5374bb612
Author: Benjamin Wolsey <address@hidden>
Date:   Tue Oct 19 10:42:17 2010 +0200

    Implement _argumentsToXML in the AS file.

diff --git a/libcore/asobj/flash/external/ExternalInterface_as.cpp 
b/libcore/asobj/flash/external/ExternalInterface_as.cpp
index c46ad69..bc273f9 100644
--- a/libcore/asobj/flash/external/ExternalInterface_as.cpp
+++ b/libcore/asobj/flash/external/ExternalInterface_as.cpp
@@ -97,10 +97,10 @@ private:
     std::vector<ObjectURI>& _uris;
 };
 
-class ToXML
+class ArrayToXML
 {
 public:
-    ToXML(as_value& ret, const fn_call& fn)
+    ArrayToXML(as_value& ret, const fn_call& fn)
         :
         _ret(ret),
         _fn(fn),
@@ -127,6 +127,28 @@ private:
     size_t _count;
 };
 
+class ArgsToXML
+{
+public:
+    ArgsToXML(as_value& ret, const fn_call& fn)
+        :
+        _ret(ret),
+        _fn(fn)
+    {}
+
+    void operator()(const as_value& val) {
+        VM& vm = getVM(_fn);
+        as_object* ei = 
+            _fn.env().find_object("flash.external.ExternalInterface");
+        string_table& st = getStringTable(_fn);
+        const as_value& x = callMethod(ei, st.find("_toXML"), val);
+        newAdd(_ret, x, vm);
+    }
+private:
+    as_value& _ret;
+    const fn_call& _fn;
+};
+
 
 }
 
@@ -405,46 +427,30 @@ externalInterfaceConstructor(const fn_call& fn)
 as_value
 externalinterface_uArgumentsToXML(const fn_call& fn)
 {
-//    GNASH_REPORT_FUNCTION;
-
-    std::stringstream ss;
-    
-    std::vector<as_value> args;
-    VM& vm = getVM(fn);
-    string_table& st = vm.getStringTable();
+    as_value ret("<arguments>");
 
     if (fn.nargs) {
-        // This is an ActionScript-like implementation, which is why it looks
-        // like poor C++.
-        as_object* obj = fn.arg(0).to_object(vm);
-        if ( obj ) {
-            const int length = toInt(getMember(*obj, NSV::PROP_LENGTH), vm);
-            int i = 1;
-            while (i < length) {
-                std::ostringstream s;
-                s << i;
-                as_value el = getMember(*obj, st.find(s.str()));
-                args.push_back(el);
-                ++i;
+        as_object *obj = toObject(fn.arg(0), getVM(fn));
+        if (obj) {
+            ArgsToXML tx(ret, fn);
+            size_t size = arrayLength(*obj);
+            string_table& st = getStringTable(*obj);
+            if (size) {
+                for (size_t i = 1; i < static_cast<size_t>(size); ++i) {
+                    tx(getOwnProperty(*obj, arrayKey(st, i)));
+                }
             }
         }
     }
-
-    return ExternalInterface::argumentsToXML(args);
+    
+    newAdd(ret, "</arguments>", getVM(fn));
+    return ret;
 }
 
 as_value
 externalinterface_uArgumentsToAS(const fn_call& /*fn*/)
 {
-    // GNASH_REPORT_FUNCTION;
     LOG_ONCE( log_unimpl (__FUNCTION__) );
-#if 0
-    std::string str(fn.arg(0).to_string());
-    if (fn.nargs > 0) {
-        return ExternalInterface::argumentsToAS();
-    }
-#endif
-
     return as_value();
 }
 
@@ -481,7 +487,7 @@ externalinterface_uArrayToXML(const fn_call& fn)
     if (fn.nargs) {
         as_object *obj = toObject(fn.arg(0), getVM(fn));
         if (obj) {
-            ToXML tx(ret, fn);
+            ArrayToXML tx(ret, fn);
             foreachArray(*obj, tx);
         }
     }

http://git.savannah.gnu.org/cgit//commit/?id=829f87b470d3faf2375e425d58576c7f6264297b


commit 829f87b470d3faf2375e425d58576c7f6264297b
Author: Benjamin Wolsey <address@hidden>
Date:   Tue Oct 19 10:06:16 2010 +0200

    Move _arrayToXML to the AS implementation file.

diff --git a/libcore/asobj/flash/external/ExternalInterface_as.cpp 
b/libcore/asobj/flash/external/ExternalInterface_as.cpp
index be12156..c46ad69 100644
--- a/libcore/asobj/flash/external/ExternalInterface_as.cpp
+++ b/libcore/asobj/flash/external/ExternalInterface_as.cpp
@@ -25,6 +25,7 @@
 #include <sstream>
 #include <boost/algorithm/string/erase.hpp>
 #include <algorithm>
+#include <boost/lexical_cast.hpp>
 #include "GnashSystemNetHeaders.h"
 
 #include "ExternalInterface.h"
@@ -96,6 +97,37 @@ private:
     std::vector<ObjectURI>& _uris;
 };
 
+class ToXML
+{
+public:
+    ToXML(as_value& ret, const fn_call& fn)
+        :
+        _ret(ret),
+        _fn(fn),
+        _count(0)
+    {}
+
+    void operator()(const as_value& val) {
+        VM& vm = getVM(_fn);
+        string_table& st = getStringTable(_fn);
+
+        newAdd(_ret, "<property id=\"", vm);
+        newAdd(_ret, static_cast<double>(_count), vm);
+        newAdd(_ret, "\">", vm);
+        as_object* ei = 
+            _fn.env().find_object("flash.external.ExternalInterface");
+        const as_value& x = callMethod(ei, st.find("_toXML"), val);
+        newAdd(_ret, x, vm);
+        newAdd(_ret, "</property>", vm);
+        ++_count;
+    }
+private:
+    as_value& _ret;
+    const fn_call& _fn;
+    size_t _count;
+};
+
+
 }
 
 void
@@ -444,15 +476,18 @@ externalinterface_uArrayToJS(const fn_call& /*fn*/)
 as_value
 externalinterface_uArrayToXML(const fn_call& fn)
 {
-//    GNASH_REPORT_FUNCTION;
-    
-    if (fn.nargs == 1) {
+    as_value ret("<array>");
+
+    if (fn.nargs) {
         as_object *obj = toObject(fn.arg(0), getVM(fn));
-        std::string str = ExternalInterface::arrayToXML(obj);
-        return as_value(str);
+        if (obj) {
+            ToXML tx(ret, fn);
+            foreachArray(*obj, tx);
+        }
     }
     
-    return as_value();
+    newAdd(ret, "</array>", getVM(fn));
+    return ret;
 }
 
 as_value
diff --git a/testsuite/actionscript.all/ExternalInterface.as 
b/testsuite/actionscript.all/ExternalInterface.as
index 3b9c9c8..2fe5284 100644
--- a/testsuite/actionscript.all/ExternalInterface.as
+++ b/testsuite/actionscript.all/ExternalInterface.as
@@ -236,6 +236,11 @@ check_equals (xml, 
'<arguments><undefined/><undefined/></arguments>');
 xml = EI._argumentsToXML(1,2,3);
 check_equals (xml, '<arguments></arguments>');
 
+// It uses the length property...
+str = "hi";
+ret = flash.external.ExternalInterface._arrayToXML(str);
+check_equals(ret, '<array><property id="0"><undefined/></property><property 
id="1"><undefined/></property></array>');
+
 // xml = EI._toXML(o);
 // if (xml == '<object><property id="a"><number>1</number></property><property 
id="b"><string>string</string></property></object>') {
 //     pass("ExternalInterface::_toXML(object)");
@@ -308,6 +313,6 @@ xcheck_equals (typeOf(val), 'object');
 #elif OUTPUT_VERSION < 8 // }{
        check_totals(49);
 #else // SWF8+ }{
-       check_totals(100);
+       check_totals(101);
 # endif // }
 

http://git.savannah.gnu.org/cgit//commit/?id=7c8305916bbfba330be03c87b96c3278b9dd2993


commit 7c8305916bbfba330be03c87b96c3278b9dd2993
Author: Benjamin Wolsey <address@hidden>
Date:   Tue Oct 19 09:30:07 2010 +0200

    Implement _toXML in the AS implementation.

diff --git a/libcore/asobj/flash/external/ExternalInterface_as.cpp 
b/libcore/asobj/flash/external/ExternalInterface_as.cpp
index d35faab..be12156 100644
--- a/libcore/asobj/flash/external/ExternalInterface_as.cpp
+++ b/libcore/asobj/flash/external/ExternalInterface_as.cpp
@@ -574,15 +574,47 @@ externalinterface_uToJS(const fn_call& /*fn*/)
 as_value
 externalinterface_uToXML(const fn_call& fn)
 {
-//  GNASH_REPORT_FUNCTION;
 
-    if (fn.nargs == 1) {
-        as_value val = fn.arg(0);
-        std::string str = ExternalInterface::toXML(val);
-        return as_value(str);
+    // Probably implemented with switch(typeof value)
+    if (fn.nargs) {
+
+        as_object* ei = 
+            fn.env().find_object("flash.external.ExternalInterface");
+        string_table& st = getStringTable(fn);
+        VM& vm = getVM(fn);
+
+        const as_value& val = fn.arg(0);
+        if (val.is_string()) {
+            as_value ret = "<string>";
+            newAdd(ret, callMethod(ei, st.find("_escapeXML"), val), vm);
+            newAdd(ret, "</string>", vm);
+            return ret;
+        }
+        if (val.is_undefined()) {
+            return as_value("<undefined/>");
+        }
+        if (val.is_number()) {
+            as_value ret = "<number>";
+            newAdd(ret, val, vm);
+            newAdd(ret, "</number>", vm);
+            return ret;
+        }
+        if (val.is_null()) {
+            return as_value("<null/>");
+        }
+        if (val.is_bool()) {
+            return toBool(val, vm) ? as_value("<true/>") : 
as_value("<false/>");
+        }
+        if (val.is_object()) {
+            as_object* obj = toObject(val, vm);
+            assert(obj);
+            if (hasOwnProperty(*obj, NSV::PROP_LENGTH)) {
+                return callMethod(ei, st.find("_arrayToXML"), val);
+            }
+            return callMethod(ei, st.find("_objectToXML"), val);
+        }
     }
-    
-    return as_value();
+    return as_value("<null/>");
 }
 
 as_value

http://git.savannah.gnu.org/cgit//commit/?id=ade3d3bea4991c2bddb19c58ccf04ac5d6dc558c


commit ade3d3bea4991c2bddb19c58ccf04ac5d6dc558c
Author: Benjamin Wolsey <address@hidden>
Date:   Tue Oct 19 09:04:21 2010 +0200

    Implement objectToXML in AS as expected.

diff --git a/libcore/asobj/flash/external/ExternalInterface_as.cpp 
b/libcore/asobj/flash/external/ExternalInterface_as.cpp
index 2e6adac..d35faab 100644
--- a/libcore/asobj/flash/external/ExternalInterface_as.cpp
+++ b/libcore/asobj/flash/external/ExternalInterface_as.cpp
@@ -55,86 +55,45 @@
 namespace gnash {
 
 namespace {
-as_value externalInterfaceConstructor(const fn_call& fn);
-
-as_value externalinterface_addCallback(const fn_call& fn);
-as_value externalinterface_call(const fn_call& fn);
-as_value externalinterface_available(const fn_call& fn);
-as_value externalinterface_objectID(const fn_call& fn);
-
-as_value externalinterface_uArgumentsToXML(const fn_call& fn);
-as_value externalinterface_uArgumentsToAS(const fn_call& fn);
-as_value externalinterface_uAddCallback(const fn_call& fn);
-as_value externalinterface_uArrayToAS(const fn_call& fn);
-as_value externalinterface_uArrayToJS(const fn_call& fn);
-as_value externalinterface_uArrayToXML(const fn_call& fn);
-as_value externalinterface_uCallIn(const fn_call& fn);
-as_value externalinterface_uCallOut(const fn_call& fn);
-as_value externalinterface_uEscapeXML(const fn_call& fn);
-as_value externalinterface_uEvalJS(const fn_call& fn);
-as_value externalinterface_uInitJS(const fn_call& fn);
-as_value externalinterface_uJsQuoteString(const fn_call& fn);
-as_value externalinterface_uObjectID(const fn_call& fn);
-as_value externalinterface_uObjectToAS(const fn_call& fn);
-as_value externalinterface_uObjectToJS(const fn_call& fn);
-as_value externalinterface_uObjectToXML(const fn_call& fn);
-as_value externalinterface_uToAS(const fn_call& fn);
-as_value externalinterface_uToJS(const fn_call& fn);
-as_value externalinterface_uToXML(const fn_call& fn);
-as_value externalinterface_uUnescapeXML(const fn_call& fn);
-as_value externalinterface_ctor(const fn_call& fn);
-
-void attachExternalInterfaceStaticInterface(as_object& o);
+    as_value externalInterfaceConstructor(const fn_call& fn);
+    as_value externalinterface_addCallback(const fn_call& fn);
+    as_value externalinterface_call(const fn_call& fn);
+    as_value externalinterface_available(const fn_call& fn);
+    as_value externalinterface_objectID(const fn_call& fn);
+    as_value externalinterface_uArgumentsToXML(const fn_call& fn);
+    as_value externalinterface_uArgumentsToAS(const fn_call& fn);
+    as_value externalinterface_uAddCallback(const fn_call& fn);
+    as_value externalinterface_uArrayToAS(const fn_call& fn);
+    as_value externalinterface_uArrayToJS(const fn_call& fn);
+    as_value externalinterface_uArrayToXML(const fn_call& fn);
+    as_value externalinterface_uCallIn(const fn_call& fn);
+    as_value externalinterface_uCallOut(const fn_call& fn);
+    as_value externalinterface_uEscapeXML(const fn_call& fn);
+    as_value externalinterface_uEvalJS(const fn_call& fn);
+    as_value externalinterface_uInitJS(const fn_call& fn);
+    as_value externalinterface_uJsQuoteString(const fn_call& fn);
+    as_value externalinterface_uObjectID(const fn_call& fn);
+    as_value externalinterface_uObjectToAS(const fn_call& fn);
+    as_value externalinterface_uObjectToJS(const fn_call& fn);
+    as_value externalinterface_uObjectToXML(const fn_call& fn);
+    as_value externalinterface_uToAS(const fn_call& fn);
+    as_value externalinterface_uToJS(const fn_call& fn);
+    as_value externalinterface_uToXML(const fn_call& fn);
+    as_value externalinterface_uUnescapeXML(const fn_call& fn);
+    as_value externalinterface_ctor(const fn_call& fn);
 }
 
 namespace {
 
-/// Class used to serialize properties of an object to a buffer
-class PropsSerializer : public PropertyVisitor
+class Enumerator : public KeyVisitor
 {
-
 public:
-    
-    PropsSerializer(VM& vm)
-        : _st(vm.getStringTable()),
-          _error(false)
-        { /* do nothing */}
-    
-    bool success() const { return !_error; }
-
-    bool accept(const ObjectURI& uri, const as_value& val) {
-        if (_error) return true;
-
-        const string_table::key key = getName(uri);
-
-        if (key == NSV::PROP_uuPROTOuu || key == NSV::PROP_CONSTRUCTOR) {
-            log_debug(" skip serialization of specially-named property %s",
-                      _st.value(key));
-            return true;
-        }
-
-        // write property name
-        const std::string& id = _st.value(key);
-
-//        log_debug(" serializing property %s", id);
-        
-        _xml << "<property id=\"" << id << "\">";
-        _xml << ExternalInterface::toXML(val);
-        _xml << "</property>";
-
-        _noprops.push_back(val);
-            
-        return true;
+    Enumerator(std::vector<ObjectURI>& uris) : _uris(uris) {}
+    void operator()(const ObjectURI& u) {
+        _uris.push_back(u);
     }
-
-    std::string getXML() { return _xml.str(); };
-    std::vector<as_value> getArgs() { return _noprops; };
-    
 private:
-    string_table&       _st;
-    mutable bool        _error;
-    std::stringstream   _xml;
-    std::vector<as_value>   _noprops;
+    std::vector<ObjectURI>& _uris;
 };
 
 }
@@ -565,16 +524,44 @@ externalinterface_uObjectToJS(const fn_call& /*fn*/)
 as_value
 externalinterface_uObjectToXML(const fn_call& fn)
 {
-    // GNASH_REPORT_FUNCTION;
-    
-    as_object *obj = 0;
+    VM& vm = getVM(fn);
+
+    as_value ret("<object>");
 
     if (fn.nargs) {
-        obj = toObject(fn.arg(0), getVM(fn));
+        as_object* obj = toObject(fn.arg(0), getVM(fn));
+
+        if (obj) {
+
+            string_table& st = getStringTable(fn);
+
+            typedef std::vector<ObjectURI> URIs;
+            URIs uris;
+
+            // Fake AS enumeration.
+            Enumerator en(uris);
+            obj->visitKeys(en);
+
+            for (URIs::const_reverse_iterator i = uris.rbegin(), e = 
uris.rend();
+                    i != e; ++i) {
+                const std::string& id = i->toString(st);
+
+                newAdd(ret, "<property id=\"", vm);
+                newAdd(ret, id, vm);
+                newAdd(ret, "\">", vm);
+
+                as_object* ei = 
+                    fn.env().find_object("flash.external.ExternalInterface");
+                const as_value& val = getMember(*obj, *i); 
+                newAdd(ret, callMethod(ei, st.find("_toXML"), val), vm);
+                newAdd(ret, "</property>", vm);
+            }
+        }
     }
-    
-    const std::string& str = ExternalInterface::objectToXML(obj);
-    return as_value(str);
+
+    newAdd(ret, "</object>", vm);
+    return ret;
+
 }
 
 as_value

-----------------------------------------------------------------------

Summary of changes:
 libcore/ExternalInterface.cpp                      |   54 ----
 libcore/ExternalInterface.h                        |   36 +--
 .../asobj/flash/external/ExternalInterface_as.cpp  |  297 ++++++++++++--------
 libcore/movie_root.cpp                             |    1 -
 libcore/movie_root.h                               |    6 -
 testsuite/actionscript.all/ExternalInterface.as    |    7 +-
 6 files changed, 192 insertions(+), 209 deletions(-)


hooks/post-receive
-- 
Gnash



reply via email to

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