Update LuaRef/LuaOwnedRef
Move content of `Lua::make_owned_ref` into `LuaRef::into_owned` Add crate-visible `Lua::clone` function (not trait)
This commit is contained in:
parent
03ab828342
commit
b8e3290f35
20
src/lua.rs
20
src/lua.rs
|
@ -2493,23 +2493,15 @@ impl Lua {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn drop_ref(&self, lref: &LuaRef) {
|
pub(crate) fn drop_ref_index(&self, index: c_int) {
|
||||||
unsafe {
|
unsafe {
|
||||||
let ref_thread = self.ref_thread();
|
let ref_thread = self.ref_thread();
|
||||||
ffi::lua_pushnil(ref_thread);
|
ffi::lua_pushnil(ref_thread);
|
||||||
ffi::lua_replace(ref_thread, lref.index);
|
ffi::lua_replace(ref_thread, index);
|
||||||
(*self.extra.get()).ref_free.push(lref.index);
|
(*self.extra.get()).ref_free.push(index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "unstable")]
|
|
||||||
pub(crate) fn make_owned_ref(&self, lref: LuaRef) -> crate::types::LuaOwnedRef {
|
|
||||||
assert!(lref.drop, "Cannot turn non-drop reference into owned");
|
|
||||||
let owned_ref = crate::types::LuaOwnedRef::new(Lua(self.0.clone()), lref.index);
|
|
||||||
mem::forget(lref);
|
|
||||||
owned_ref
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "unstable")]
|
#[cfg(feature = "unstable")]
|
||||||
pub(crate) fn adopt_owned_ref(&self, loref: crate::types::LuaOwnedRef) -> LuaRef {
|
pub(crate) fn adopt_owned_ref(&self, loref: crate::types::LuaOwnedRef) -> LuaRef {
|
||||||
assert!(
|
assert!(
|
||||||
|
@ -3041,6 +3033,12 @@ impl Lua {
|
||||||
.map(|x| x.as_ref().memory_limit == 0)
|
.map(|x| x.as_ref().memory_limit == 0)
|
||||||
.unwrap_or_default()
|
.unwrap_or_default()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "unstable")]
|
||||||
|
#[inline]
|
||||||
|
pub(crate) fn clone(&self) -> Self {
|
||||||
|
Lua(Arc::clone(&self.0))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl LuaInner {
|
impl LuaInner {
|
||||||
|
|
15
src/types.rs
15
src/types.rs
|
@ -195,7 +195,10 @@ impl<'lua> LuaRef<'lua> {
|
||||||
#[cfg(feature = "unstable")]
|
#[cfg(feature = "unstable")]
|
||||||
#[inline]
|
#[inline]
|
||||||
pub(crate) fn into_owned(self) -> LuaOwnedRef {
|
pub(crate) fn into_owned(self) -> LuaOwnedRef {
|
||||||
self.lua.make_owned_ref(self)
|
assert!(self.drop, "Cannot turn non-drop reference into owned");
|
||||||
|
let owned_ref = LuaOwnedRef::new(self.lua.clone(), self.index);
|
||||||
|
mem::forget(self);
|
||||||
|
owned_ref
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,7 +217,7 @@ impl<'lua> Clone for LuaRef<'lua> {
|
||||||
impl<'lua> Drop for LuaRef<'lua> {
|
impl<'lua> Drop for LuaRef<'lua> {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
if self.drop {
|
if self.drop {
|
||||||
self.lua.drop_ref(self);
|
self.lua.drop_ref_index(self.index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -250,18 +253,14 @@ impl fmt::Debug for LuaOwnedRef {
|
||||||
#[cfg(feature = "unstable")]
|
#[cfg(feature = "unstable")]
|
||||||
impl Clone for LuaOwnedRef {
|
impl Clone for LuaOwnedRef {
|
||||||
fn clone(&self) -> Self {
|
fn clone(&self) -> Self {
|
||||||
self.lua.make_owned_ref(self.to_ref().clone())
|
self.to_ref().clone().into_owned()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "unstable")]
|
#[cfg(feature = "unstable")]
|
||||||
impl Drop for LuaOwnedRef {
|
impl Drop for LuaOwnedRef {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
drop(LuaRef {
|
self.lua.drop_ref_index(self.index);
|
||||||
lua: &self.lua,
|
|
||||||
index: self.index,
|
|
||||||
drop: true,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue