Skip to content

Commit

Permalink
[ci skip] single update
Browse files Browse the repository at this point in the history
  • Loading branch information
ThePhD committed Aug 23, 2016
1 parent 4e967a2 commit ffe6e79
Showing 1 changed file with 34 additions and 19 deletions.
53 changes: 34 additions & 19 deletions single/sol/sol.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 2016-08-22 02:15:33.510154 UTC
// This header was generated with sol v2.11.5 (revision 56ed859)
// Generated 2016-08-23 03:42:51.761893 UTC
// This header was generated with sol v2.11.7 (revision 4e967a2)
// https://github.com/ThePhD/sol2

#ifndef SOL_SINGLE_INCLUDE_HPP
Expand Down Expand Up @@ -4013,7 +4013,7 @@ namespace sol {
}

template <typename T>
bool check(lua_State* L, int index = -1) {
bool check(lua_State* L, int index = -lua_size<meta::unqualified_t<T>>::value) {
auto handler = no_panic;
return check<T>(L, index, handler);
}
Expand All @@ -4030,7 +4030,7 @@ namespace sol {
}

template<typename T>
inline decltype(auto) check_get(lua_State* L, int index = -1) {
inline decltype(auto) check_get(lua_State* L, int index = -lua_size<meta::unqualified_t<T>>::value) {
auto handler = no_panic;
return check_get<T>(L, index, handler);
}
Expand Down Expand Up @@ -4127,7 +4127,7 @@ namespace sol {
}

template<typename T>
inline decltype(auto) get(lua_State* L, int index = -1) {
inline decltype(auto) get(lua_State* L, int index = -lua_size<meta::unqualified_t<T>>::value) {
record tracking{};
return get<T>(L, index, tracking);
}
Expand Down Expand Up @@ -5745,15 +5745,14 @@ namespace sol {

template<typename T>
struct pusher<user<T>> {
template <bool with_meta = true, typename... Args>
static int push_with(lua_State* L, Args&&... args) {
template <bool with_meta = true, typename Key, typename... Args>
static int push_with(lua_State* L, Key&& name, Args&&... args) {
// A dumb pusher
void* rawdata = lua_newuserdata(L, sizeof(T));
T* data = static_cast<T*>(rawdata);
std::allocator<T> alloc;
alloc.construct(data, std::forward<Args>(args)...);
if (with_meta) {
const auto name = &usertype_traits<meta::unqualified_t<T>>::user_gc_metatable[0];
lua_CFunction cdel = stack_detail::alloc_destroy<T>;
// Make sure we have a plain GC set for this data
if (luaL_newmetatable(L, name) != 0) {
Expand All @@ -5766,30 +5765,42 @@ namespace sol {
return 1;
}

template <typename Arg, typename... Args, meta::disable<std::is_same<no_metatable_t, meta::unqualified_t<Arg>>> = meta::enabler>
template <typename Arg, typename... Args, meta::disable<meta::any_same<meta::unqualified_t<Arg>, no_metatable_t, metatable_key_t>> = meta::enabler>
static int push(lua_State* L, Arg&& arg, Args&&... args) {
return push_with(L, std::forward<Arg>(arg), std::forward<Args>(args)...);
const auto name = &usertype_traits<meta::unqualified_t<T>>::user_gc_metatable[0];
return push_with(L, name, std::forward<Arg>(arg), std::forward<Args>(args)...);
}

template <typename... Args>
static int push(lua_State* L, no_metatable_t, Args&&... args) {
return push_with<false>(L, std::forward<Args>(args)...);
const auto name = &usertype_traits<meta::unqualified_t<T>>::user_gc_metatable[0];
return push_with<false>(L, name, std::forward<Args>(args)...);
}

template <typename Key, typename... Args>
static int push(lua_State* L, metatable_key_t, Key&& key, Args&&... args) {
const auto name = &key[0];
return push_with<true>(L, name, std::forward<Args>(args)...);
}

static int push(lua_State* L, const user<T>& u) {
return push_with(L, u.value);
const auto name = &usertype_traits<meta::unqualified_t<T>>::user_gc_metatable[0];
return push_with(L, name, u.value);
}

static int push(lua_State* L, user<T>&& u) {
return push_with(L, std::move(u.value));
const auto name = &usertype_traits<meta::unqualified_t<T>>::user_gc_metatable[0];
return push_with(L, name, std::move(u.value));
}

static int push(lua_State* L, no_metatable_t, const user<T>& u) {
return push_with<false>(L, u.value);
const auto name = &usertype_traits<meta::unqualified_t<T>>::user_gc_metatable[0];
return push_with<false>(L, name, u.value);
}

static int push(lua_State* L, no_metatable_t, user<T>&& u) {
return push_with<false>(L, std::move(u.value));
const auto name = &usertype_traits<meta::unqualified_t<T>>::user_gc_metatable[0];
return push_with<false>(L, name, std::move(u.value));
}
};

Expand Down Expand Up @@ -9611,12 +9622,16 @@ namespace sol {
typedef typename umt_t::regs_t regs_t;

static umt_t& make_cleanup(lua_State* L, umt_t&& umx) {
// ensure some sort of uniqueness
static int uniqueness = 0;
std::string uniquegcmetakey = usertype_traits<T>::user_gc_metatable;
uniquegcmetakey.append(std::to_string(uniqueness++));
const char* gcmetakey = &usertype_traits<T>::gc_table[0];

// Make sure userdata's memory is properly in lua first,
// otherwise all the light userdata we make later will become invalid

stack::push<user<umt_t>>(L, metatable_key, uniquegcmetakey, std::move(umx));
// Create the top level thing that will act as our deleter later on
const char* gcmetakey = &usertype_traits<T>::gc_table[0];
stack::push<user<umt_t>>(L, std::move(umx));
stack_reference umt(L, -1);
stack::set_field<true>(L, gcmetakey, umt);
umt.pop();
Expand Down Expand Up @@ -10612,7 +10627,7 @@ namespace sol {
template <typename Fx>
object require_core(const std::string& key, Fx&& action, bool create_global = true) {
optional<object> loaded = is_loaded_package(key);
if (loaded)
if (loaded && loaded->valid())
return std::move(*loaded);
action();
auto sr = stack::get<stack_reference>(L);
Expand Down

0 comments on commit ffe6e79

Please sign in to comment.