SL-18837: Ditch Boost.Phoenix implicit lambda syntax.
It's cool to be able to write 'arg1 << "stuff" << var ...;' for a lambda accepting a std::ostream reference, but cascading compile errors mean it's no longer worth trying to make that work -- given actual C++ lambdas. Also clean up a lingering BOOST_FOREACH() and a boost::bind() while at it.master
parent
1db7ac7139
commit
c4366378b6
|
|
@ -18,8 +18,6 @@
|
|||
#include <functional>
|
||||
// external library headers
|
||||
#include <boost/assign/list_of.hpp>
|
||||
#include <boost/phoenix/core/argument.hpp>
|
||||
#include <boost/phoenix/operator/bitwise.hpp> // operator<<()
|
||||
// other Linden headers
|
||||
#include "../test/lltut.h"
|
||||
#include "../test/namedtempfile.h"
|
||||
|
|
@ -105,7 +103,7 @@ namespace tut
|
|||
llleap_data():
|
||||
reader(".py",
|
||||
// This logic is adapted from vita.viewerclient.receiveEvent()
|
||||
boost::phoenix::placeholders::arg1 <<
|
||||
[](std::ostream& out){ out <<
|
||||
"import re\n"
|
||||
"import os\n"
|
||||
"import sys\n"
|
||||
|
|
@ -189,7 +187,7 @@ namespace tut
|
|||
"def request(pump, data):\n"
|
||||
" # we expect 'data' is a dict\n"
|
||||
" data['reply'] = _reply\n"
|
||||
" send(pump, data)\n"),
|
||||
" send(pump, data)\n";}),
|
||||
// Get the actual pathname of the NamedExtTempFile and trim off
|
||||
// the ".py" extension. (We could cache reader.getName() in a
|
||||
// separate member variable, but I happen to know getName() just
|
||||
|
|
@ -383,7 +381,7 @@ namespace tut
|
|||
AckAPI api;
|
||||
Result result;
|
||||
NamedExtTempFile script("py",
|
||||
boost::phoenix::placeholders::arg1 <<
|
||||
[&](std::ostream& out){ out <<
|
||||
"from " << reader_module << " import *\n"
|
||||
// make a request on our little API
|
||||
"request(pump='" << api.getName() << "', data={})\n"
|
||||
|
|
@ -391,7 +389,7 @@ namespace tut
|
|||
"resp = get()\n"
|
||||
"result = '' if resp == dict(pump=replypump(), data='ack')\\\n"
|
||||
" else 'bad: ' + str(resp)\n"
|
||||
"send(pump='" << result.getName() << "', data=result)\n");
|
||||
"send(pump='" << result.getName() << "', data=result)\n";});
|
||||
waitfor(LLLeap::create(get_test_name(), sv(list_of(PYTHON)(script.getName()))));
|
||||
result.ensure();
|
||||
}
|
||||
|
|
@ -421,7 +419,7 @@ namespace tut
|
|||
ReqIDAPI api;
|
||||
Result result;
|
||||
NamedExtTempFile script("py",
|
||||
boost::phoenix::placeholders::arg1 <<
|
||||
[&](std::ostream& out){ out <<
|
||||
"import sys\n"
|
||||
"from " << reader_module << " import *\n"
|
||||
// Note that since reader imports llsd, this
|
||||
|
|
@ -450,7 +448,7 @@ namespace tut
|
|||
" if resp['data']['reqid'] != i:\n"
|
||||
" result = 'expected reqid=%s in %s' % (i, resp)\n"
|
||||
" break\n"
|
||||
"send(pump='" << result.getName() << "', data=result)\n");
|
||||
"send(pump='" << result.getName() << "', data=result)\n";});
|
||||
waitfor(LLLeap::create(get_test_name(), sv(list_of(PYTHON)(script.getName()))),
|
||||
300); // needs more realtime than most tests
|
||||
result.ensure();
|
||||
|
|
@ -464,7 +462,7 @@ namespace tut
|
|||
ReqIDAPI api;
|
||||
Result result;
|
||||
NamedExtTempFile script("py",
|
||||
boost::phoenix::placeholders::arg1 <<
|
||||
[&](std::ostream& out){ out <<
|
||||
"import sys\n"
|
||||
"from " << reader_module << " import *\n"
|
||||
// Generate a very large string value.
|
||||
|
|
@ -516,7 +514,7 @@ namespace tut
|
|||
" send('" << result.getName() << "',\n"
|
||||
" 'at offset %s, expected %r but got %r' %\n"
|
||||
" (start, large[start:end], echoed[start:end]))\n"
|
||||
"sys.exit(1)\n");
|
||||
"sys.exit(1)\n";});
|
||||
waitfor(LLLeap::create(test_name,
|
||||
sv(list_of
|
||||
(PYTHON)
|
||||
|
|
|
|||
|
|
@ -45,13 +45,6 @@ typedef U32 uint32_t;
|
|||
#endif
|
||||
|
||||
#include "boost/range.hpp"
|
||||
#include "boost/foreach.hpp"
|
||||
#include "boost/function.hpp"
|
||||
#include "boost/bind.hpp"
|
||||
#include "boost/phoenix/bind/bind_function.hpp"
|
||||
#include "boost/phoenix/core/argument.hpp"
|
||||
#include <boost/phoenix/operator/bitwise.hpp>
|
||||
using namespace boost::phoenix;
|
||||
|
||||
#include "../llsd.h"
|
||||
#include "../llsdserialize.h"
|
||||
|
|
@ -1802,7 +1795,7 @@ namespace tut
|
|||
// helper for test<3>
|
||||
static void writeLLSDArray(std::ostream& out, const LLSD& array)
|
||||
{
|
||||
BOOST_FOREACH(LLSD item, llsd::inArray(array))
|
||||
for (const LLSD& item: llsd::inArray(array))
|
||||
{
|
||||
LLSDSerialize::toNotation(item, out);
|
||||
// It's important to separate with newlines because Python's llsd
|
||||
|
|
@ -1842,21 +1835,21 @@ namespace tut
|
|||
// Create an llsdXXXXXX file containing 'data' serialized to
|
||||
// notation.
|
||||
NamedTempFile file("llsd",
|
||||
// NamedTempFile's boost::function constructor
|
||||
// NamedTempFile's function constructor
|
||||
// takes a callable. To this callable it passes the
|
||||
// std::ostream with which it's writing the
|
||||
// NamedTempFile.
|
||||
boost::bind(writeLLSDArray, _1, cdata));
|
||||
[&](std::ostream& out){ writeLLSDArray(out, cdata); });
|
||||
|
||||
python("read C++ notation",
|
||||
placeholders::arg1 <<
|
||||
[&](std::ostream& out){ out <<
|
||||
import_llsd <<
|
||||
"def parse_each(iterable):\n"
|
||||
" for item in iterable:\n"
|
||||
" yield llsd.parse(item)\n" <<
|
||||
pydata <<
|
||||
// Don't forget raw-string syntax for Windows pathnames.
|
||||
"verify(parse_each(open(r'" << file.getName() << "', 'rb')))\n");
|
||||
"verify(parse_each(open(r'" << file.getName() << "', 'rb')))\n";});
|
||||
}
|
||||
|
||||
template<> template<>
|
||||
|
|
@ -1870,7 +1863,7 @@ namespace tut
|
|||
NamedTempFile file("llsd", "");
|
||||
|
||||
python("write Python notation",
|
||||
placeholders::arg1 <<
|
||||
[&](std::ostream& out){ out <<
|
||||
import_llsd <<
|
||||
"DATA = [\n"
|
||||
" 17,\n"
|
||||
|
|
@ -1884,7 +1877,7 @@ namespace tut
|
|||
// N.B. Using 'print' implicitly adds newlines.
|
||||
"with open(r'" << file.getName() << "', 'w') as f:\n"
|
||||
" for item in DATA:\n"
|
||||
" print(llsd.format_notation(item).decode(), file=f)\n");
|
||||
" print(llsd.format_notation(item).decode(), file=f)\n";});
|
||||
|
||||
std::ifstream inf(file.getName().c_str());
|
||||
LLSD item;
|
||||
|
|
|
|||
Loading…
Reference in New Issue