[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] /srv/bzr/gnash/trunk r9988: Reduce code duplication, cl
From: |
Benjamin Wolsey |
Subject: |
[Gnash-commit] /srv/bzr/gnash/trunk r9988: Reduce code duplication, clean up String charAt methods. |
Date: |
Mon, 13 Oct 2008 10:56:32 +0200 |
User-agent: |
Bazaar (1.5) |
------------------------------------------------------------
revno: 9988
committer: Benjamin Wolsey <address@hidden>
branch nick: trunk
timestamp: Mon 2008-10-13 10:56:32 +0200
message:
Reduce code duplication, clean up String charAt methods.
modified:
libcore/asobj/LoadVars_as.cpp
libcore/asobj/LoadableObject.cpp
libcore/asobj/LoadableObject.h
libcore/asobj/String_as.cpp
libcore/asobj/XML_as.cpp
testsuite/actionscript.all/LoadVars.as
------------------------------------------------------------
revno: 9902.1.5
committer: Benjamin Wolsey <address@hidden>
branch nick: postrelease
timestamp: Thu 2008-10-02 18:39:25 +0200
message:
Optimize charAt, prevent UB in float->int conversion.
modified:
libcore/asobj/String_as.cpp
------------------------------------------------------------
revno: 9902.1.6
committer: Benjamin Wolsey <address@hidden>
branch nick: postrelease
timestamp: Thu 2008-10-02 18:40:05 +0200
message:
Move common and interchangeable methods of LoadVars and XML to
LoadableObject.
modified:
libcore/asobj/LoadVars_as.cpp
libcore/asobj/LoadableObject.cpp
libcore/asobj/LoadableObject.h
libcore/asobj/XML_as.cpp
=== modified file 'libcore/asobj/LoadVars_as.cpp'
--- a/libcore/asobj/LoadVars_as.cpp 2008-09-29 08:40:24 +0000
+++ b/libcore/asobj/LoadVars_as.cpp 2008-10-02 16:40:05 +0000
@@ -40,10 +40,7 @@
namespace gnash {
-static as_value loadvars_addRequestHeader(const fn_call& fn);
-static as_value loadvars_load(const fn_call& fn);
static as_value loadvars_send(const fn_call& fn);
-static as_value loadvars_sendAndLoad(const fn_call& fn);
static as_value loadvars_tostring(const fn_call& fn);
static as_value loadvars_ctor(const fn_call& fn);
@@ -142,13 +139,18 @@
void
LoadVars_as::attachLoadVarsInterface(as_object& o)
{
- o.init_member("addRequestHeader", new
builtin_function(loadvars_addRequestHeader));
+ o.init_member("addRequestHeader", new builtin_function(
+ LoadableObject::loadableobject_addRequestHeader));
o.init_member("decode", new
builtin_function(LoadVars_as::decode_method));
- o.init_member("getBytesLoaded", new
builtin_function(LoadVars_as::getBytesLoaded_method));
- o.init_member("getBytesTotal", new
builtin_function(LoadVars_as::getBytesTotal_method));
- o.init_member("load", new builtin_function(loadvars_load));
+ o.init_member("getBytesLoaded", new builtin_function(
+ LoadVars_as::getBytesLoaded_method));
+ o.init_member("getBytesTotal", new builtin_function(
+ LoadVars_as::getBytesTotal_method));
+ o.init_member("load", new builtin_function(
+ LoadableObject::loadableobject_load));
o.init_member("send", new builtin_function(loadvars_send));
- o.init_member("sendAndLoad", new
builtin_function(loadvars_sendAndLoad));
+ o.init_member("sendAndLoad", new builtin_function(
+ LoadableObject::loadableobject_sendAndLoad));
o.init_member("toString", new builtin_function(loadvars_tostring));
o.init_member("onData", new
builtin_function(LoadVars_as::onData_method));
o.init_member("onLoad", new
builtin_function(LoadVars_as::onLoad_method));
@@ -168,113 +170,6 @@
as_value
-loadvars_addRequestHeader(const fn_call& fn)
-{
-
- boost::intrusive_ptr<LoadVars_as> ptr =
ensureType<LoadVars_as>(fn.this_ptr);
-
- as_value customHeaders;
- as_object* array;
-
- if (ptr->get_member(NSV::PROP_uCUSTOM_HEADERS, &customHeaders))
- {
- array = customHeaders.to_object().get();
- if (!array)
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("LoadVars.addRequestHeader: "
- "LoadVars._customHeaders is not an object"));
- );
- return as_value();
- }
- }
- else
- {
- array = new Array_as;
- // This property is always initialized on the first call to
- // addRequestHeaders.
- ptr->set_member(NSV::PROP_uCUSTOM_HEADERS, array);
- }
-
- if (fn.nargs == 0)
- {
- // Return after having initialized the _customHeaders array.
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("LoadVars.addRequestHeader requires at least "
- "one argument"));
- );
- return as_value();
- }
-
- if (fn.nargs == 1)
- {
- // This must be an array. Keys / values are pushed in valid
- // pairs to the _customHeaders array.
- boost::intrusive_ptr<as_object> obj = fn.arg(0).to_object();
- Array_as* headerArray = dynamic_cast<Array_as*>(obj.get());
-
- if (!headerArray)
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("LoadVars.addRequestHeader: single argument "
- "is not an array"));
- );
- return as_value();
- }
-
- Array_as::const_iterator e = headerArray->end();
- --e;
-
- for (Array_as::const_iterator i = headerArray->begin(); i != e; ++i)
- {
- // Only even indices can be a key, and they must be a string.
- if (i.index() % 2) continue;
- if (!(*i).is_string()) continue;
-
- // Only the immediately following odd number can be
- // a value, and it must also be a string.
- const as_value& val = headerArray->at(i.index() + 1);
- if (val.is_string())
- {
- array->callMethod(NSV::PROP_PUSH, *i, val);
- }
- }
- return as_value();
- }
-
- if (fn.nargs > 2)
- {
- IF_VERBOSE_ASCODING_ERRORS(
- std::ostringstream ss;
- fn.dump_args(ss);
- log_aserror(_("LoadVars.addRequestHeader(%s): arguments after the"
- "second will be discarded"), ss.str());
- );
- }
-
- // Push both to the _customHeaders array.
- const as_value& name = fn.arg(0);
- const as_value& val = fn.arg(1);
-
- // Both arguments must be strings.
- if (!name.is_string() || !val.is_string())
- {
- IF_VERBOSE_ASCODING_ERRORS(
- std::ostringstream ss;
- fn.dump_args(ss);
- log_aserror(_("LoadVars.addRequestHeader(%s): both arguments "
- "must be a string"), ss.str());
- );
- return as_value();
- }
-
- array->callMethod(NSV::PROP_PUSH, name, val);
-
- return as_value();
-}
-
-
-as_value
LoadVars_as::decode_method(const fn_call& fn)
{
boost::intrusive_ptr<LoadVars_as> ptr =
ensureType<LoadVars_as>(fn.this_ptr);
@@ -352,32 +247,6 @@
return as_value();
}
-static as_value
-loadvars_load(const fn_call& fn)
-{
- boost::intrusive_ptr<LoadVars_as> obj =
ensureType<LoadVars_as>(fn.this_ptr);
-
- if ( fn.nargs < 1 )
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("LoadVars.load() requires at least one
argument"));
- );
- return as_value(false);
- }
-
- const std::string& urlstr = fn.arg(0).to_string();
- if ( urlstr.empty() )
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("LoadVars.load(): invalid empty url"));
- );
- return as_value(false);
- }
-
- obj->load(urlstr);
- return as_value(true);
-
-}
static as_value
loadvars_send(const fn_call& fn)
@@ -387,46 +256,6 @@
return as_value();
}
-static as_value
-loadvars_sendAndLoad(const fn_call& fn)
-{
- boost::intrusive_ptr<LoadVars_as> ptr =
ensureType<LoadVars_as>(fn.this_ptr);
-
- if ( fn.nargs < 2 )
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("LoadVars.sendAndLoad() requires at least two
arguments"));
- );
- return as_value(false);
- }
-
- const std::string& urlstr = fn.arg(0).to_string();
- if ( urlstr.empty() )
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("LoadVars.sendAndLoad(): invalid empty url"));
- );
- return as_value(false);
- }
-
- if (!fn.arg(1).is_object())
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("LoadVars.sendAndLoad(): invalid target (must
be an object)"));
- );
- return as_value(false);
- }
-
-
- boost::intrusive_ptr<as_object> target = fn.arg(1).to_object();
-
- // Post by default, override by ActionScript third argument
- bool post = true;
- if ( fn.nargs > 2 && fn.arg(2).to_string() == "GET" ) post = false;
-
- ptr->sendAndLoad(urlstr, *target, post);
- return as_value(true);
-}
static as_value
loadvars_tostring(const fn_call& fn)
=== modified file 'libcore/asobj/LoadableObject.cpp'
--- a/libcore/asobj/LoadableObject.cpp 2008-09-29 08:40:24 +0000
+++ b/libcore/asobj/LoadableObject.cpp 2008-10-02 16:40:05 +0000
@@ -206,8 +206,7 @@
// Doing so also avoids processing queued load
// request immediately
//
- _loadThreads.push_front(lt.get());
- lt.release();
+ _loadThreads.push_front(lt.release());
if ( startTimer )
{
@@ -228,7 +227,8 @@
as_value
LoadableObject::checkLoads_wrapper(const fn_call& fn)
{
- boost::intrusive_ptr<LoadableObject> ptr =
ensureType<LoadableObject>(fn.this_ptr);
+ boost::intrusive_ptr<LoadableObject> ptr =
+ ensureType<LoadableObject>(fn.this_ptr);
ptr->checkLoads();
return as_value();
}
@@ -247,13 +247,15 @@
if ( lt->completed() )
{
- size_t xmlsize = _bytesTotal = _bytesLoaded = lt->getBytesTotal();
- boost::scoped_array<char> buf(new char[xmlsize+1]);
- size_t actuallyRead = lt->read(buf.get(), xmlsize);
- if ( actuallyRead != xmlsize )
+ size_t dataSize = _bytesTotal = _bytesLoaded = lt->getBytesTotal();
+
+ boost::scoped_array<char> buf(new char[dataSize + 1]);
+ size_t actuallyRead = lt->read(buf.get(), dataSize);
+ if ( actuallyRead != dataSize )
{
// This would be either a bug of LoadThread or
an expected
- // possibility which lacks documentation (thus
a bug in documentation)
+ // possibility which lacks documentation (thus
a bug in
+ // documentation)
//
}
buf[actuallyRead] = '\0';
@@ -262,10 +264,11 @@
// See http://savannah.gnu.org/bugs/?19915
utf8::TextEncoding encoding;
// NOTE: the call below will possibly change 'xmlsize' parameter
- char* bufptr = utf8::stripBOM(buf.get(), xmlsize, encoding);
+ char* bufptr = utf8::stripBOM(buf.get(), dataSize, encoding);
if ( encoding != utf8::encUTF8 && encoding != utf8::encUNSPECIFIED
)
{
- log_unimpl("%s to utf8 conversion in LoadVars input parsing",
utf8::textEncodingName(encoding));
+ log_unimpl("%s to utf8 conversion in LoadVars input parsing",
+ utf8::textEncodingName(encoding));
}
as_value dataVal(bufptr); // memory copy here (optimize?)
@@ -291,5 +294,189 @@
}
+/// Can take either a two strings as arguments or an array of strings,
+/// alternately header and value.
+as_value
+LoadableObject::loadableobject_addRequestHeader(const fn_call& fn)
+{
+
+ boost::intrusive_ptr<LoadableObject> ptr =
ensureType<LoadableObject>(fn.this_ptr);
+
+ as_value customHeaders;
+ as_object* array;
+
+ if (ptr->get_member(NSV::PROP_uCUSTOM_HEADERS, &customHeaders))
+ {
+ array = customHeaders.to_object().get();
+ if (!array)
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("XML.addRequestHeader: XML._customHeaders "
+ "is not an object"));
+ );
+ return as_value();
+ }
+ }
+ else
+ {
+ array = new Array_as;
+ // This property is always initialized on the first call to
+ // addRequestHeaders.
+ ptr->set_member(NSV::PROP_uCUSTOM_HEADERS, array);
+ }
+
+ if (fn.nargs == 0)
+ {
+ // Return after having initialized the _customHeaders array.
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("XML.addRequestHeader requires at least "
+ "one argument"));
+ );
+ return as_value();
+ }
+
+ if (fn.nargs == 1)
+ {
+ // This must be an array. Keys / values are pushed in valid
+ // pairs to the _customHeaders array.
+ boost::intrusive_ptr<as_object> obj = fn.arg(0).to_object();
+ Array_as* headerArray = dynamic_cast<Array_as*>(obj.get());
+
+ if (!headerArray)
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("XML.addRequestHeader: single argument "
+ "is not an array"));
+ );
+ return as_value();
+ }
+
+ Array_as::const_iterator e = headerArray->end();
+ --e;
+
+ for (Array_as::const_iterator i = headerArray->begin(); i != e; ++i)
+ {
+ // Only even indices can be a key, and they must be a string.
+ if (i.index() % 2) continue;
+ if (!(*i).is_string()) continue;
+
+ // Only the immediately following odd number can be
+ // a value, and it must also be a string.
+ const as_value& val = headerArray->at(i.index() + 1);
+ if (val.is_string())
+ {
+ array->callMethod(NSV::PROP_PUSH, *i, val);
+ }
+ }
+ return as_value();
+ }
+
+ if (fn.nargs > 2)
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ std::ostringstream ss;
+ fn.dump_args(ss);
+ log_aserror(_("XML.addRequestHeader(%s): arguments after the"
+ "second will be discarded"), ss.str());
+ );
+ }
+
+ // Push both to the _customHeaders array.
+ const as_value& name = fn.arg(0);
+ const as_value& val = fn.arg(1);
+
+ // Both arguments must be strings.
+ if (!name.is_string() || !val.is_string())
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ std::ostringstream ss;
+ fn.dump_args(ss);
+ log_aserror(_("XML.addRequestHeader(%s): both arguments "
+ "must be a string"), ss.str());
+ );
+ return as_value();
+ }
+
+ array->callMethod(NSV::PROP_PUSH, name, val);
+
+ return as_value();
+}
+
+
+/// Returns true if the arguments are valid, otherwise false. The
+/// success of the connection is irrelevant.
+/// The second argument must be a loadable object (XML or LoadVars).
+/// An optional third argument specifies the method ("GET", or by default
+/// "POST"). The values are partly URL encoded if using GET.
+as_value
+LoadableObject::loadableobject_sendAndLoad(const fn_call& fn)
+{
+ boost::intrusive_ptr<LoadableObject> ptr =
+ ensureType<LoadableObject>(fn.this_ptr);
+
+ if ( fn.nargs < 2 )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("sendAndLoad() requires at least two arguments"));
+ );
+ return as_value(false);
+ }
+
+ const std::string& urlstr = fn.arg(0).to_string();
+ if ( urlstr.empty() )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("sendAndLoad(): invalid empty url"));
+ );
+ return as_value(false);
+ }
+
+ if (!fn.arg(1).is_object())
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("sendAndLoad(): invalid target (must be an "
+ "XML or LoadVars object)"));
+ );
+ return as_value(false);
+ }
+
+
+ boost::intrusive_ptr<as_object> target = fn.arg(1).to_object();
+
+ // Post by default, override by ActionScript third argument
+ bool post = true;
+ if ( fn.nargs > 2 && fn.arg(2).to_string() == "GET" ) post = false;
+
+ ptr->sendAndLoad(urlstr, *target, post);
+ return as_value(true);
+}
+
+
+as_value
+LoadableObject::loadableobject_load(const fn_call& fn)
+{
+ boost::intrusive_ptr<LoadableObject> obj =
ensureType<LoadableObject>(fn.this_ptr);
+
+ if ( fn.nargs < 1 )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("load() requires at least one argument"));
+ );
+ return as_value(false);
+ }
+
+ const std::string& urlstr = fn.arg(0).to_string();
+ if ( urlstr.empty() )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("load(): invalid empty url"));
+ );
+ return as_value(false);
+ }
+
+ obj->load(urlstr);
+ return as_value(true);
+
+}
}
=== modified file 'libcore/asobj/LoadableObject.h'
--- a/libcore/asobj/LoadableObject.h 2008-09-29 08:40:24 +0000
+++ b/libcore/asobj/LoadableObject.h 2008-10-02 16:40:05 +0000
@@ -79,6 +79,13 @@
/// we're finished with it.
void queueLoad(std::auto_ptr<IOChannel> str);
+ /// Shared AS methods for XML and LoadVars, which can be used
+ /// interchangeably with each object in ActionScript.
+ static as_value loadableobject_addRequestHeader(const fn_call& fn);
+ static as_value loadableobject_sendAndLoad(const fn_call& fn);
+ static as_value loadableobject_load(const fn_call& fn);
+ static as_value loadableobject_send(const fn_call& fn);
+
protected:
/// Convert the Loadable Object to a string.
=== modified file 'libcore/asobj/String_as.cpp'
--- a/libcore/asobj/String_as.cpp 2008-09-25 11:13:14 +0000
+++ b/libcore/asobj/String_as.cpp 2008-10-02 16:39:25 +0000
@@ -655,21 +655,30 @@
const int version = obj->getVM().getSWFVersion();
- const std::wstring& wstr = utf8::decodeCanonicalString(str, version);
-
ENSURE_FN_ARGS(1, 1, "");
- size_t index = static_cast<size_t>(fn.arg(0).to_number());
-
- if (index >= wstr.length()) {
- return as_value("");
+ // to_int() makes this safe from overflows.
+ const size_t index = static_cast<size_t>(fn.arg(0).to_int());
+
+ size_t currentIndex = 0;
+
+ std::string::const_iterator it = str.begin(), e = str.end();
+
+ while (boost::uint32_t code = utf8::decodeNextUnicodeCharacter(it, e))
+ {
+ if (currentIndex == index)
+ {
+ if (version == 5)
+ {
+ return as_value(utf8::encodeLatin1Character(code));
+ }
+ return as_value(utf8::encodeUnicodeCharacter(code));
+ }
+ ++currentIndex;
}
- std::string rv;
-
- rv.append(utf8::encodeCanonicalString(wstr.substr(index, 1), version));
-
- return as_value(rv);
+ // We've reached the end without finding the index
+ return as_value("");
}
static as_value
=== modified file 'libcore/asobj/XML_as.cpp'
--- a/libcore/asobj/XML_as.cpp 2008-09-29 08:40:24 +0000
+++ b/libcore/asobj/XML_as.cpp 2008-10-02 16:40:05 +0000
@@ -60,15 +60,12 @@
static void attachXMLProperties(as_object& o);
static as_value xml_new(const fn_call& fn);
-static as_value xml_load(const fn_call& fn);
-static as_value xml_addRequestHeader(const fn_call& fn);
static as_value xml_createelement(const fn_call& fn);
static as_value xml_createtextnode(const fn_call& fn);
static as_value xml_getbytesloaded(const fn_call& fn);
static as_value xml_getbytestotal(const fn_call& fn);
static as_value xml_parsexml(const fn_call& fn);
static as_value xml_send(const fn_call& fn);
-static as_value xml_sendAndLoad(const fn_call& fn);
static as_value xml_ondata(const fn_call& fn);
@@ -333,25 +330,6 @@
}
-as_value
-xml_load(const fn_call& fn)
-{
- boost::intrusive_ptr<XML_as> obj = ensureType<XML_as>(fn.this_ptr);
-
- if ( ! fn.nargs )
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("XML.load(): missing argument"));
- );
- return as_value(false);
- }
-
- const std::string& filespec = fn.arg(0).to_string();
-
- obj->load(filespec);
-
- return as_value(true);
-}
static void
attachXMLProperties(as_object& /*o*/)
@@ -367,15 +345,18 @@
const int flags = 0;
// No flags:
- o.init_member("addRequestHeader", new
builtin_function(xml_addRequestHeader), flags);
+ o.init_member("addRequestHeader", new builtin_function(
+ LoadableObject::loadableobject_addRequestHeader), flags);
o.init_member("createElement", new builtin_function(xml_createelement),
flags);
o.init_member("createTextNode", new builtin_function(xml_createtextnode),
flags);
o.init_member("getBytesLoaded", new builtin_function(xml_getbytesloaded),
flags);
o.init_member("getBytesTotal", new builtin_function(xml_getbytestotal),
flags);
- o.init_member("load", new builtin_function(xml_load), flags);
+ o.init_member("load", new builtin_function(
+ LoadableObject::loadableobject_load), flags);
o.init_member("parseXML", new builtin_function(xml_parsexml), flags);
o.init_member("send", new builtin_function(xml_send), flags);
- o.init_member("sendAndLoad", new builtin_function(xml_sendAndLoad), flags);
+ o.init_member("sendAndLoad", new builtin_function(
+ LoadableObject::loadableobject_sendAndLoad), flags);
o.init_member("onData", new builtin_function(xml_ondata), flags);
}
@@ -432,114 +413,6 @@
return as_value(xml_obj.get());
}
-/// Can take either a two strings as arguments or an array of strings,
-/// alternately header and value.
-as_value
-xml_addRequestHeader(const fn_call& fn)
-{
-
- boost::intrusive_ptr<XML_as> ptr = ensureType<XML_as>(fn.this_ptr);
-
- as_value customHeaders;
- as_object* array;
-
- if (ptr->get_member(NSV::PROP_uCUSTOM_HEADERS, &customHeaders))
- {
- array = customHeaders.to_object().get();
- if (!array)
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("XML.addRequestHeader: XML._customHeaders "
- "is not an object"));
- );
- return as_value();
- }
- }
- else
- {
- array = new Array_as;
- // This property is always initialized on the first call to
- // addRequestHeaders.
- ptr->set_member(NSV::PROP_uCUSTOM_HEADERS, array);
- }
-
- if (fn.nargs == 0)
- {
- // Return after having initialized the _customHeaders array.
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("XML.addRequestHeader requires at least "
- "one argument"));
- );
- return as_value();
- }
-
- if (fn.nargs == 1)
- {
- // This must be an array. Keys / values are pushed in valid
- // pairs to the _customHeaders array.
- boost::intrusive_ptr<as_object> obj = fn.arg(0).to_object();
- Array_as* headerArray = dynamic_cast<Array_as*>(obj.get());
-
- if (!headerArray)
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("XML.addRequestHeader: single argument "
- "is not an array"));
- );
- return as_value();
- }
-
- Array_as::const_iterator e = headerArray->end();
- --e;
-
- for (Array_as::const_iterator i = headerArray->begin(); i != e; ++i)
- {
- // Only even indices can be a key, and they must be a string.
- if (i.index() % 2) continue;
- if (!(*i).is_string()) continue;
-
- // Only the immediately following odd number can be
- // a value, and it must also be a string.
- const as_value& val = headerArray->at(i.index() + 1);
- if (val.is_string())
- {
- array->callMethod(NSV::PROP_PUSH, *i, val);
- }
- }
- return as_value();
- }
-
- if (fn.nargs > 2)
- {
- IF_VERBOSE_ASCODING_ERRORS(
- std::ostringstream ss;
- fn.dump_args(ss);
- log_aserror(_("XML.addRequestHeader(%s): arguments after the"
- "second will be discarded"), ss.str());
- );
- }
-
- // Push both to the _customHeaders array.
- const as_value& name = fn.arg(0);
- const as_value& val = fn.arg(1);
-
- // Both arguments must be strings.
- if (!name.is_string() || !val.is_string())
- {
- IF_VERBOSE_ASCODING_ERRORS(
- std::ostringstream ss;
- fn.dump_args(ss);
- log_aserror(_("XML.addRequestHeader(%s): both arguments "
- "must be a string"), ss.str());
- );
- return as_value();
- }
-
- array->callMethod(NSV::PROP_PUSH, name, val);
-
- return as_value();
-}
-
/// \brief create a new XML element
///
@@ -644,56 +517,6 @@
return as_value();
}
-/// Returns true if the arguments are valid, otherwise false. The
-/// success of the connection is irrelevant.
-/// The second argument must be an object, but does not have to
-/// be an XML object.
-/// An optional third argument specifies the method ("GET", or by default
-/// "POST"). The XML node values are partly URL encoded if using GET.
-static as_value
-xml_sendAndLoad(const fn_call& fn)
-{
-
- boost::intrusive_ptr<XML_as> ptr = ensureType<XML_as>(fn.this_ptr);
-
- if ( fn.nargs < 2 )
- {
- IF_VERBOSE_ASCODING_ERRORS(
- std::stringstream ss;
- fn.dump_args(ss);
- log_aserror(_("XML.sendAndLoad(%s): missing arguments"),
- ss.str());
- );
- return as_value(false);
- }
-
- const std::string& filespec = fn.arg(0).to_string();
-
- if (!fn.arg(1).is_object())
- {
- IF_VERBOSE_ASCODING_ERRORS(
- std::ostringstream ss;
- fn.dump_args(ss);
- log_aserror(_("XML.sendAndLoad(%s): second argument is not "
- "an object"), ss.str());
- );
-
- return as_value(false);
- }
-
- boost::intrusive_ptr<as_object> targetObj = fn.arg(1).to_object();
- assert(targetObj);
-
- // Post by default, override by ActionScript third argument. This isn't
- // documented, but it is possible to send XML objects by the GET method,
- // exactly like LoadVars.
- bool post = true;
- if ( fn.nargs > 2 && fn.arg(2).to_string() == "GET" ) post = false;
-
- ptr->sendAndLoad(filespec, *targetObj, post);
-
- return as_value(true);
-}
static as_value
xml_ondata(const fn_call& fn)
=== modified file 'testsuite/actionscript.all/LoadVars.as'
--- a/testsuite/actionscript.all/LoadVars.as 2008-10-02 10:31:34 +0000
+++ b/testsuite/actionscript.all/LoadVars.as 2008-10-13 08:56:32 +0000
@@ -174,15 +174,15 @@
// For checking that the data were loaded with XML.prototype.load.
x.onLoad = function(success) {
- xcheck_equals(x['var2'], 'val2');
+ check_equals(x['var2'], 'val2');
play();
};
// The two objects are also interchangeable for these functions.
x.sendAndLoad = XML.prototype.sendAndLoad;
-xcheck_equals(x.sendAndLoad("some server name", r), true);
+check_equals(x.sendAndLoad("some server name", r), true);
x.load = XML.prototype.load;
-xcheck_equals(x.load( MEDIA(vars.txt) ), true);
+check_equals(x.load( MEDIA(vars.txt) ), true);
stop();
//--------------------------------------------------------------------------
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] /srv/bzr/gnash/trunk r9988: Reduce code duplication, clean up String charAt methods.,
Benjamin Wolsey <=