From f7ee6dc63529e6f7cb429a64d8d5c522ff2d6416 Mon Sep 17 00:00:00 2001 From: Alex Orlenko Date: Sun, 17 Jul 2022 00:03:40 +0100 Subject: [PATCH] Add lua_xpush to 5.1-5.4 --- src/ffi/lua51/lua.rs | 6 ++++++ src/ffi/lua52/lua.rs | 6 ++++++ src/ffi/lua53/lua.rs | 6 ++++++ src/ffi/lua54/lua.rs | 6 ++++++ src/lua.rs | 6 ------ 5 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/ffi/lua51/lua.rs b/src/ffi/lua51/lua.rs index 6c99503..5503b7f 100644 --- a/src/ffi/lua51/lua.rs +++ b/src/ffi/lua51/lua.rs @@ -324,6 +324,12 @@ pub unsafe fn lua_tostring(L: *mut lua_State, i: c_int) -> *const c_char { lua_tolstring(L, i, ptr::null_mut()) } +#[inline(always)] +pub unsafe fn lua_xpush(from: *mut lua_State, to: *mut lua_State, idx: c_int) { + lua_pushvalue(from, idx); + lua_xmove(from, to, 1); +} + // // Debug API // diff --git a/src/ffi/lua52/lua.rs b/src/ffi/lua52/lua.rs index f8c7108..482e69f 100644 --- a/src/ffi/lua52/lua.rs +++ b/src/ffi/lua52/lua.rs @@ -410,6 +410,12 @@ pub unsafe fn lua_tostring(L: *mut lua_State, i: c_int) -> *const c_char { lua_tolstring(L, i, ptr::null_mut()) } +#[inline(always)] +pub unsafe fn lua_xpush(from: *mut lua_State, to: *mut lua_State, idx: c_int) { + lua_pushvalue(from, idx); + lua_xmove(from, to, 1); +} + // // Debug API // diff --git a/src/ffi/lua53/lua.rs b/src/ffi/lua53/lua.rs index 753408c..c0127bb 100644 --- a/src/ffi/lua53/lua.rs +++ b/src/ffi/lua53/lua.rs @@ -434,6 +434,12 @@ pub unsafe fn lua_replace(L: *mut lua_State, idx: c_int) { lua_pop(L, 1) } +#[inline(always)] +pub unsafe fn lua_xpush(from: *mut lua_State, to: *mut lua_State, idx: c_int) { + lua_pushvalue(from, idx); + lua_xmove(from, to, 1); +} + // // Debug API // diff --git a/src/ffi/lua54/lua.rs b/src/ffi/lua54/lua.rs index 113f324..f124c37 100644 --- a/src/ffi/lua54/lua.rs +++ b/src/ffi/lua54/lua.rs @@ -455,6 +455,12 @@ pub unsafe fn lua_replace(L: *mut lua_State, idx: c_int) { lua_pop(L, 1) } +#[inline(always)] +pub unsafe fn lua_xpush(from: *mut lua_State, to: *mut lua_State, idx: c_int) { + lua_pushvalue(from, idx); + lua_xmove(from, to, 1); +} + #[inline(always)] pub unsafe fn lua_newuserdata(L: *mut lua_State, sz: usize) -> *mut c_void { lua_newuserdatauv(L, sz, 1) diff --git a/src/lua.rs b/src/lua.rs index 77a79a7..1a20328 100644 --- a/src/lua.rs +++ b/src/lua.rs @@ -2394,12 +2394,6 @@ impl Lua { "Lua instance passed Value created from a different main Lua state" ); let extra = &*self.extra.get(); - #[cfg(not(feature = "luau"))] - { - ffi::lua_pushvalue(extra.ref_thread, lref.index); - ffi::lua_xmove(extra.ref_thread, self.state, 1); - } - #[cfg(feature = "luau")] ffi::lua_xpush(extra.ref_thread, self.state, lref.index); }