version bump

This commit is contained in:
ThePhD 2017-11-07 20:20:57 -05:00
parent 10b1bb04a9
commit 43dda398a0
2 changed files with 259 additions and 191 deletions

View File

@ -61,7 +61,7 @@ author = 'ThePhD'
# The short X.Y version.
version = '2.18'
# The full version, including alpha/beta/rc tags.
release = '2.18.5'
release = '2.18.6'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.

View File

@ -20,8 +20,8 @@
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// This file was generated with a script.
// Generated 2017-10-30 18:38:03.122522 UTC
// This header was generated with sol v2.18.5 (revision 882f337)
// Generated 2017-11-08 01:20:39.160314 UTC
// This header was generated with sol v2.18.6 (revision 10b1bb0)
// https://github.com/ThePhD/sol2
#ifndef SOL_SINGLE_INCLUDE_HPP
@ -206,7 +206,7 @@ namespace sol {
using main_protected_function = main_safe_function;
using stack_protected_function = stack_safe_function;
using stack_aligned_protected_function = stack_aligned_safe_function;
#ifdef SOL_SAFE_FUNCTIONS
#ifdef SOL_SAFE_FUNCTION
using function = protected_function;
using main_function = main_protected_function;
using stack_function = stack_protected_function;
@ -219,10 +219,14 @@ namespace sol {
#endif
using stack_aligned_stack_handler_function = basic_protected_function<stack_reference, true, stack_reference>;
struct function_result;
struct unsafe_function_result;
struct protected_function_result;
using safe_function_result = protected_function_result;
using unsafe_function_result = function_result;
#ifdef SOL_SAFE_FUNCTION
using function_result = safe_function_result;
#else
using function_result = unsafe_function_result;
#endif
template <typename base_t>
class basic_object;
@ -5410,7 +5414,7 @@ namespace sol {
template <typename T>
struct is_lua_primitive<T*> : std::true_type {};
template <>
struct is_lua_primitive<function_result> : std::true_type {};
struct is_lua_primitive<unsafe_function_result> : std::true_type {};
template <>
struct is_lua_primitive<protected_function_result> : std::true_type {};
template <typename T>
@ -10426,7 +10430,7 @@ namespace sol {
}
inline void luajit_exception_handler(lua_State* L, int (*handler)(lua_State*, lua_CFunction) = detail::c_trampoline) {
#ifdef SOL_LUAJIT
#if defined(SOL_LUAJIT) && !defined(SOL_EXCEPTIONS_SAFE_PROPAGATION)
if (L == nullptr) {
return;
}
@ -10458,6 +10462,8 @@ namespace sol {
// beginning of sol/function_result.hpp
// beginning of sol/protected_function_result.hpp
// beginning of sol/proxy_base.hpp
namespace sol {
@ -10494,27 +10500,164 @@ namespace sol {
#include <cstdint>
namespace sol {
struct function_result : public proxy_base<function_result> {
struct protected_function_result : public proxy_base<protected_function_result> {
private:
lua_State* L;
int index;
int returncount;
int popcount;
call_status err;
template <typename T>
decltype(auto) tagged_get(types<optional<T>>, int index_offset) const {
int target = index + index_offset;
if (!valid()) {
return optional<T>(nullopt);
}
return stack::get<optional<T>>(L, target);
}
template <typename T>
decltype(auto) tagged_get(types<T>, int index_offset) const {
int target = index + index_offset;
#ifdef SOL_CHECK_ARGUMENTS
if (!valid()) {
type t = type_of(L, target);
type_panic_c_str(L, target, t, type::none, "bad get from protected_function_result (is not an error)");
}
#endif // Check Argument Safety
return stack::get<T>(L, target);
}
optional<error> tagged_get(types<optional<error>>, int index_offset) const {
int target = index + index_offset;
if (valid()) {
return nullopt;
}
return error(detail::direct_error, stack::get<std::string>(L, target));
}
error tagged_get(types<error>, int index_offset) const {
int target = index + index_offset;
#ifdef SOL_CHECK_ARGUMENTS
if (valid()) {
type t = type_of(L, target);
type_panic_c_str(L, target, t, type::none, "bad get from protected_function_result (is an error)");
}
#endif // Check Argument Safety
return error(detail::direct_error, stack::get<std::string>(L, target));
}
public:
protected_function_result() = default;
protected_function_result(lua_State* Ls, int idx = -1, int retnum = 0, int popped = 0, call_status pferr = call_status::ok) noexcept
: L(Ls), index(idx), returncount(retnum), popcount(popped), err(pferr) {
}
protected_function_result(const protected_function_result&) = default;
protected_function_result& operator=(const protected_function_result&) = default;
protected_function_result(protected_function_result&& o) noexcept
: L(o.L), index(o.index), returncount(o.returncount), popcount(o.popcount), err(o.err) {
// Must be manual, otherwise destructor will screw us
// return count being 0 is enough to keep things clean
// but we will be thorough
o.abandon();
}
protected_function_result& operator=(protected_function_result&& o) noexcept {
L = o.L;
index = o.index;
returncount = o.returncount;
popcount = o.popcount;
err = o.err;
// Must be manual, otherwise destructor will screw us
// return count being 0 is enough to keep things clean
// but we will be thorough
o.abandon();
return *this;
}
protected_function_result(const unsafe_function_result& o) = delete;
protected_function_result& operator=(const unsafe_function_result& o) = delete;
protected_function_result(unsafe_function_result&& o) noexcept;
protected_function_result& operator=(unsafe_function_result&& o) noexcept;
call_status status() const noexcept {
return err;
}
bool valid() const noexcept {
return status() == call_status::ok || status() == call_status::yielded;
}
template <typename T>
decltype(auto) get(int index_offset = 0) const {
return tagged_get(types<meta::unqualified_t<T>>(), index_offset);
}
lua_State* lua_state() const noexcept {
return L;
};
int stack_index() const noexcept {
return index;
};
int return_count() const noexcept {
return returncount;
};
int pop_count() const noexcept {
return popcount;
};
void abandon() noexcept {
//L = nullptr;
index = 0;
returncount = 0;
popcount = 0;
err = call_status::runtime;
}
~protected_function_result() {
stack::remove(L, index, popcount);
}
};
namespace stack {
template <>
struct pusher<protected_function_result> {
static int push(lua_State* L, const protected_function_result& pfr) {
int p = 0;
for (int i = 0; i < pfr.pop_count(); ++i) {
lua_pushvalue(L, i + pfr.stack_index());
++p;
}
return p;
}
};
} // namespace stack
} // namespace sol
// end of sol/protected_function_result.hpp
// beginning of sol/unsafe_function_result.hpp
namespace sol {
struct unsafe_function_result : public proxy_base<unsafe_function_result> {
private:
lua_State* L;
int index;
int returncount;
public:
function_result() = default;
function_result(lua_State* Ls, int idx = -1, int retnum = 0)
: L(Ls), index(idx), returncount(retnum) {
unsafe_function_result() = default;
unsafe_function_result(lua_State* Ls, int idx = -1, int retnum = 0)
: L(Ls), index(idx), returncount(retnum) {
}
function_result(const function_result&) = default;
function_result& operator=(const function_result&) = default;
function_result(function_result&& o)
: L(o.L), index(o.index), returncount(o.returncount) {
unsafe_function_result(const unsafe_function_result&) = default;
unsafe_function_result& operator=(const unsafe_function_result&) = default;
unsafe_function_result(unsafe_function_result&& o)
: L(o.L), index(o.index), returncount(o.returncount) {
// Must be manual, otherwise destructor will screw us
// return count being 0 is enough to keep things clean
// but will be thorough
o.abandon();
}
function_result& operator=(function_result&& o) {
unsafe_function_result& operator=(unsafe_function_result&& o) {
L = o.L;
index = o.index;
returncount = o.returncount;
@ -10525,14 +10668,14 @@ namespace sol {
return *this;
}
function_result(const protected_function_result& o) = delete;
function_result& operator=(const protected_function_result& o) = delete;
function_result(protected_function_result&& o) noexcept;
function_result& operator=(protected_function_result&& o) noexcept;
unsafe_function_result(const protected_function_result& o) = delete;
unsafe_function_result& operator=(const protected_function_result& o) = delete;
unsafe_function_result(protected_function_result&& o) noexcept;
unsafe_function_result& operator=(protected_function_result&& o) noexcept;
template <typename T>
decltype(auto) get() const {
return stack::get<T>(L, index);
decltype(auto) get(int index_offset = 0) const {
return stack::get<T>(L, index + index_offset);
}
call_status status() const noexcept {
@ -10557,15 +10700,15 @@ namespace sol {
index = 0;
returncount = 0;
}
~function_result() {
~unsafe_function_result() {
lua_pop(L, returncount);
}
};
namespace stack {
template <>
struct pusher<function_result> {
static int push(lua_State* L, const function_result& fr) {
struct pusher<unsafe_function_result> {
static int push(lua_State* L, const unsafe_function_result& fr) {
int p = 0;
for (int i = 0; i < fr.return_count(); ++i) {
lua_pushvalue(L, i + fr.stack_index());
@ -10577,6 +10720,8 @@ namespace sol {
} // namespace stack
} // namespace sol
// end of sol/unsafe_function_result.hpp
// end of sol/function_result.hpp
// beginning of sol/function_types.hpp
@ -12769,13 +12914,13 @@ namespace sol {
luacall(n, 0);
}
function_result invoke(types<>, std::index_sequence<>, std::ptrdiff_t n) const {
unsafe_function_result invoke(types<>, std::index_sequence<>, std::ptrdiff_t n) const {
int stacksize = lua_gettop(lua_state());
int firstreturn = (std::max)(1, stacksize - static_cast<int>(n));
luacall(n, LUA_MULTRET);
int poststacksize = lua_gettop(lua_state());
int returncount = poststacksize - (firstreturn - 1);
return function_result(lua_state(), firstreturn, returncount);
return unsafe_function_result(lua_state(), firstreturn, returncount);
}
public:
@ -12829,7 +12974,7 @@ namespace sol {
}
template <typename... Args>
function_result operator()(Args&&... args) const {
unsafe_function_result operator()(Args&&... args) const {
return call<>(std::forward<Args>(args)...);
}
@ -12853,137 +12998,6 @@ namespace sol {
// beginning of sol/protected_function.hpp
// beginning of sol/protected_function_result.hpp
namespace sol {
struct protected_function_result : public proxy_base<protected_function_result> {
private:
lua_State* L;
int index;
int returncount;
int popcount;
call_status err;
template <typename T>
decltype(auto) tagged_get(types<optional<T>>) const {
if (!valid()) {
return optional<T>(nullopt);
}
return stack::get<optional<T>>(L, index);
}
template <typename T>
decltype(auto) tagged_get(types<T>) const {
#ifdef SOL_CHECK_ARGUMENTS
if (!valid()) {
type_panic_c_str(L, index, type_of(L, index), type::none, "bad get from protected_function_result (is not an error)");
}
#endif // Check Argument Safety
return stack::get<T>(L, index);
}
optional<error> tagged_get(types<optional<error>>) const {
if (valid()) {
return nullopt;
}
return error(detail::direct_error, stack::get<std::string>(L, index));
}
error tagged_get(types<error>) const {
#ifdef SOL_CHECK_ARGUMENTS
if (valid()) {
type_panic_c_str(L, index, type_of(L, index), type::none, "bad get from protected_function_result (is an error)");
}
#endif // Check Argument Safety
return error(detail::direct_error, stack::get<std::string>(L, index));
}
public:
protected_function_result() = default;
protected_function_result(lua_State* Ls, int idx = -1, int retnum = 0, int popped = 0, call_status pferr = call_status::ok) noexcept
: L(Ls), index(idx), returncount(retnum), popcount(popped), err(pferr) {
}
protected_function_result(const protected_function_result&) = default;
protected_function_result& operator=(const protected_function_result&) = default;
protected_function_result(protected_function_result&& o) noexcept
: L(o.L), index(o.index), returncount(o.returncount), popcount(o.popcount), err(o.err) {
// Must be manual, otherwise destructor will screw us
// return count being 0 is enough to keep things clean
// but we will be thorough
o.abandon();
}
protected_function_result& operator=(protected_function_result&& o) noexcept {
L = o.L;
index = o.index;
returncount = o.returncount;
popcount = o.popcount;
err = o.err;
// Must be manual, otherwise destructor will screw us
// return count being 0 is enough to keep things clean
// but we will be thorough
o.abandon();
return *this;
}
protected_function_result(const function_result& o) = delete;
protected_function_result& operator=(const function_result& o) = delete;
protected_function_result(function_result&& o) noexcept;
protected_function_result& operator=(function_result&& o) noexcept;
call_status status() const noexcept {
return err;
}
bool valid() const noexcept {
return status() == call_status::ok || status() == call_status::yielded;
}
template <typename T>
decltype(auto) get() const {
return tagged_get(types<meta::unqualified_t<T>>());
}
lua_State* lua_state() const noexcept {
return L;
};
int stack_index() const noexcept {
return index;
};
int return_count() const noexcept {
return returncount;
};
int pop_count() const noexcept {
return popcount;
};
void abandon() noexcept {
//L = nullptr;
index = 0;
returncount = 0;
popcount = 0;
err = call_status::runtime;
}
~protected_function_result() {
stack::remove(L, index, popcount);
}
};
namespace stack {
template <>
struct pusher<protected_function_result> {
static int push(lua_State* L, const protected_function_result& pfr) {
int p = 0;
for (int i = 0; i < pfr.pop_count(); ++i) {
lua_pushvalue(L, i + pfr.stack_index());
++p;
}
return p;
}
};
} // namespace stack
} // namespace sol
// end of sol/protected_function_result.hpp
namespace sol {
namespace detail {
inline const char (&default_handler_name())[9] {
@ -13313,7 +13327,7 @@ namespace sol {
namespace sol {
inline protected_function_result::protected_function_result(function_result&& o) noexcept
inline protected_function_result::protected_function_result(unsafe_function_result&& o) noexcept
: L(o.lua_state()), index(o.stack_index()), returncount(o.return_count()), popcount(o.return_count()), err(o.status()) {
// Must be manual, otherwise destructor will screw us
// return count being 0 is enough to keep things clean
@ -13321,7 +13335,7 @@ namespace sol {
o.abandon();
}
inline protected_function_result& protected_function_result::operator=(function_result&& o) noexcept {
inline protected_function_result& protected_function_result::operator=(unsafe_function_result&& o) noexcept {
L = o.lua_state();
index = o.stack_index();
returncount = o.return_count();
@ -13334,14 +13348,14 @@ namespace sol {
return *this;
}
inline function_result::function_result(protected_function_result&& o) noexcept
inline unsafe_function_result::unsafe_function_result(protected_function_result&& o) noexcept
: L(o.lua_state()), index(o.stack_index()), returncount(o.return_count()) {
// Must be manual, otherwise destructor will screw us
// return count being 0 is enough to keep things clean
// but we will be thorough
o.abandon();
}
inline function_result& function_result::operator=(protected_function_result&& o) noexcept {
inline unsafe_function_result& unsafe_function_result::operator=(protected_function_result&& o) noexcept {
L = o.lua_state();
index = o.stack_index();
returncount = o.return_count();
@ -13911,7 +13925,7 @@ namespace sol {
namespace detail {
template <>
struct is_speshul<function_result> : std::true_type {};
struct is_speshul<unsafe_function_result> : std::true_type {};
template <>
struct is_speshul<protected_function_result> : std::true_type {};
@ -13927,15 +13941,15 @@ namespace sol {
} // namespace detail
template <>
struct tie_size<function_result> : std::integral_constant<std::size_t, SIZE_MAX> {};
struct tie_size<unsafe_function_result> : std::integral_constant<std::size_t, SIZE_MAX> {};
template <std::size_t I>
stack_proxy get(const function_result& fr) {
stack_proxy get(const unsafe_function_result& fr) {
return stack_proxy(fr.lua_state(), static_cast<int>(fr.stack_index() + I));
}
template <std::size_t I, typename... Args>
stack_proxy get(types<Args...> t, const function_result& fr) {
stack_proxy get(types<Args...> t, const unsafe_function_result& fr) {
return detail::get(t, index_value<I>(), index_value<0>(), fr);
}
@ -16640,35 +16654,47 @@ namespace sol {
return;
}
luaL_Reg reg = usertype_detail::make_reg(std::forward<N>(n), make_func<Idx>());
for (std::size_t i = 1; i < properties.size(); ++i) {
for (std::size_t i = 0; i < properties.size(); ++i) {
meta_function mf = static_cast<meta_function>(i);
bool& prop = properties[i];
const std::string& mfname = to_string(mf);
if (mfname == reg.name) {
switch (mf) {
case meta_function::construct:
if (prop) {
#ifndef SOL_NO_EXCEPTIONS
throw error(
#else
assert(false &&
#endif
"sol: 2 separate constructor (new) functions were set on this type. Please specify only 1 sol::meta_function::construct/'new' type AND wrap the function in a sol::factories/initializers call, as shown by the documentation and examples, otherwise you may create problems");
}
break;
case meta_function::garbage_collect:
if (destructfunc != nullptr) {
#ifdef SOL_NO_EXCEPTIONS
throw error("sol: 2 separate garbage_collect functions were set on this type. Please specify only 1 sol::meta_function::gc type AND wrap the function in a sol::destruct call, as shown by the documentation and examples");
#ifndef SOL_NO_EXCEPTIONS
throw error(
#else
assert(false && "sol: 2 separate garbage_collect functions were set on this type. Please specify only 1 sol::meta_function::gc type AND wrap the function in a sol::destruct call, as shown by the documentation and examples");
assert(false &&
#endif
"sol: 2 separate garbage_collect functions were set on this type. Please specify only 1 sol::meta_function::gc type AND wrap the function in a sol::destruct call, as shown by the documentation and examples");
}
destructfunc = reg.func;
return;
case meta_function::index:
indexfunc = reg.func;
mustindex = true;
properties[i] = true;
prop = true;
return;
case meta_function::new_index:
newindexfunc = reg.func;
mustindex = true;
properties[i] = true;
prop = true;
return;
default:
break;
}
properties[i] = true;
prop = true;
break;
}
}
@ -17357,14 +17383,55 @@ namespace sol {
stack::set_field(L, "name", detail::demangle<T>(), type_table.stack_index());
stack::set_field(L, "is", &usertype_detail::is_check<T>, type_table.stack_index());
auto register_kvp = [&](std::size_t meta_index, stack_reference& t, const std::string& first, object& second) {
meta_function mf = meta_function::construct;
for (std::size_t j = 1; j < properties.size(); ++j) {
mf = static_cast<meta_function>(j);
auto safety_check = [&](const std::string& first) {
for (std::size_t j = 0; j < properties.size(); ++j) {
meta_function mf = static_cast<meta_function>(j);
const std::string& mfname = to_string(mf);
bool& prop = properties[j];
if (mfname != first)
continue;
switch (mf) {
case meta_function::construct:
if (prop) {
#ifndef SOL_NO_EXCEPTIONS
throw error(
#else
assert(false &&
#endif
"sol: 2 separate constructor (new) functions were set on this type. Please specify only 1 sol::meta_function::construct/'new' type AND wrap the function in a sol::factories/initializers call, as shown by the documentation and examples, otherwise you may create problems");
}
break;
case meta_function::garbage_collect:
if (prop) {
#ifndef SOL_NO_EXCEPTIONS
throw error(
#else
assert(false &&
#endif
"sol: 2 separate garbage_collect functions were set on this type. Please specify only 1 sol::meta_function::gc type AND wrap the function in a sol::destruct call, as shown by the documentation and examples");
}
return;
default:
break;
}
prop = true;
break;
}
};
for (auto& kvp : varmap.functions) {
auto& first = std::get<0>(kvp);
safety_check(first);
}
auto register_kvp = [&](std::size_t meta_index, stack_reference& t, const std::string& first, object& second) {
meta_function mf = meta_function::construct;
for (std::size_t j = 0; j < properties.size(); ++j) {
mf = static_cast<meta_function>(j);
const std::string& mfname = to_string(mf);
bool& prop = properties[j];
if (mfname != first)
continue;
properties[j] = true;
switch (mf) {
case meta_function::index:
umx.indexfunc = second;
@ -17375,6 +17442,7 @@ namespace sol {
default:
break;
}
prop = true;
break;
}
switch (meta_index) {
@ -18964,7 +19032,7 @@ namespace sol {
}
template <typename E>
function_result unsafe_script(const string_view& code, const basic_environment<E>& env, const std::string& chunkname = detail::default_chunk_name(), load_mode mode = load_mode::any) {
unsafe_function_result unsafe_script(const string_view& code, const basic_environment<E>& env, const std::string& chunkname = detail::default_chunk_name(), load_mode mode = load_mode::any) {
detail::typical_chunk_name_t basechunkname = {};
const char* chunknametarget = detail::make_chunk_name(code, chunkname, basechunkname);
int index = lua_gettop(L);
@ -18977,19 +19045,19 @@ namespace sol {
}
int postindex = lua_gettop(L);
int returns = postindex - index;
return function_result(L, (std::max)(postindex - (returns - 1), 1), returns);
return unsafe_function_result(L, (std::max)(postindex - (returns - 1), 1), returns);
}
function_result unsafe_script(const string_view& code, const std::string& chunkname = detail::default_chunk_name(), load_mode mode = load_mode::any) {
unsafe_function_result unsafe_script(const string_view& code, const std::string& chunkname = detail::default_chunk_name(), load_mode mode = load_mode::any) {
int index = lua_gettop(L);
stack::script(L, code, chunkname, mode);
int postindex = lua_gettop(L);
int returns = postindex - index;
return function_result(L, (std::max)(postindex - (returns - 1), 1), returns);
return unsafe_function_result(L, (std::max)(postindex - (returns - 1), 1), returns);
}
template <typename E>
function_result unsafe_script_file(const std::string& filename, const basic_environment<E>& env, load_mode mode = load_mode::any) {
unsafe_function_result unsafe_script_file(const std::string& filename, const basic_environment<E>& env, load_mode mode = load_mode::any) {
int index = lua_gettop(L);
if (luaL_loadfilex(L, filename.c_str(), to_string(mode).c_str())) {
lua_error(L);
@ -19000,15 +19068,15 @@ namespace sol {
}
int postindex = lua_gettop(L);
int returns = postindex - index;
return function_result(L, (std::max)(postindex - (returns - 1), 1), returns);
return unsafe_function_result(L, (std::max)(postindex - (returns - 1), 1), returns);
}
function_result unsafe_script_file(const std::string& filename, load_mode mode = load_mode::any) {
unsafe_function_result unsafe_script_file(const std::string& filename, load_mode mode = load_mode::any) {
int index = lua_gettop(L);
stack::script_file(L, filename, mode);
int postindex = lua_gettop(L);
int returns = postindex - index;
return function_result(L, (std::max)(postindex - (returns - 1), 1), returns);
return unsafe_function_result(L, (std::max)(postindex - (returns - 1), 1), returns);
}
template <typename Fx, meta::disable<meta::is_specialization_of<basic_environment, meta::unqualified_t<Fx>>> = meta::enabler>
@ -19039,7 +19107,7 @@ namespace sol {
return safe_script_file(filename, env, script_default_on_error, mode);
}
#ifdef SOL_SAFE_FUNCTIONS
#ifdef SOL_SAFE_FUNCTION
protected_function_result script(const string_view& code, const std::string& chunkname = detail::default_chunk_name(), load_mode mode = load_mode::any) {
return safe_script(code, chunkname, mode);
}
@ -19048,11 +19116,11 @@ namespace sol {
return safe_script_file(filename, mode);
}
#else
function_result script(const string_view& code, const std::string& chunkname = detail::default_chunk_name(), load_mode mode = load_mode::any) {
unsafe_function_result script(const string_view& code, const std::string& chunkname = detail::default_chunk_name(), load_mode mode = load_mode::any) {
return unsafe_script(code, chunkname, mode);
}
function_result script_file(const std::string& filename, load_mode mode = load_mode::any) {
unsafe_function_result script_file(const std::string& filename, load_mode mode = load_mode::any) {
return unsafe_script_file(filename, mode);
}
#endif