Rename init_gc_metatable_for and get_gc_metatable_for

This commit is contained in:
Alex Orlenko 2021-07-08 22:57:54 +01:00
parent 56b6b128b5
commit 582b2c585f
No known key found for this signature in database
GPG Key ID: 4C150C250863B96D
2 changed files with 19 additions and 19 deletions

View File

@ -27,8 +27,8 @@ use crate::userdata::{
}; };
use crate::util::{ use crate::util::{
self, assert_stack, callback_error, check_stack, get_destructed_userdata_metatable, self, assert_stack, callback_error, check_stack, get_destructed_userdata_metatable,
get_gc_metatable_for, get_gc_userdata, get_main_state, get_userdata, get_wrapped_error, get_gc_metatable, get_gc_userdata, get_main_state, get_userdata, get_wrapped_error,
init_error_registry, init_gc_metatable_for, init_userdata_metatable, pop_error, protect_lua, init_error_registry, init_gc_metatable, init_userdata_metatable, pop_error, protect_lua,
push_gc_userdata, push_string, push_table, push_userdata, push_wrapped_error, rawset_field, push_gc_userdata, push_string, push_table, push_userdata, push_wrapped_error, rawset_field,
safe_pcall, safe_xpcall, StackGuard, WrappedError, WrappedPanic, safe_pcall, safe_xpcall, StackGuard, WrappedError, WrappedPanic,
}; };
@ -398,14 +398,14 @@ impl Lua {
// Create the internal metatables and place them in the registry // Create the internal metatables and place them in the registry
// to prevent them from being garbage collected. // to prevent them from being garbage collected.
init_gc_metatable_for::<Callback>(state, None)?; init_gc_metatable::<Callback>(state, None)?;
init_gc_metatable_for::<CallbackUpvalue>(state, None)?; init_gc_metatable::<CallbackUpvalue>(state, None)?;
#[cfg(feature = "async")] #[cfg(feature = "async")]
{ {
init_gc_metatable_for::<AsyncCallback>(state, None)?; init_gc_metatable::<AsyncCallback>(state, None)?;
init_gc_metatable_for::<AsyncCallbackUpvalue>(state, None)?; init_gc_metatable::<AsyncCallbackUpvalue>(state, None)?;
init_gc_metatable_for::<AsyncPollUpvalue>(state, None)?; init_gc_metatable::<AsyncPollUpvalue>(state, None)?;
init_gc_metatable_for::<Option<Waker>>(state, None)?; init_gc_metatable::<Option<Waker>>(state, None)?;
// Create empty Waker slot // Create empty Waker slot
push_gc_userdata::<Option<Waker>>(state, None)?; push_gc_userdata::<Option<Waker>>(state, None)?;
@ -2420,7 +2420,7 @@ where
Ok(Err(err)) => { Ok(Err(err)) => {
let wrapped_error = get_prealloc_err() as *mut WrappedError; let wrapped_error = get_prealloc_err() as *mut WrappedError;
ptr::write(wrapped_error, WrappedError(err)); ptr::write(wrapped_error, WrappedError(err));
get_gc_metatable_for::<WrappedError>(state); get_gc_metatable::<WrappedError>(state);
ffi::lua_setmetatable(state, -2); ffi::lua_setmetatable(state, -2);
// Convert to CallbackError and attach traceback // Convert to CallbackError and attach traceback
@ -2440,7 +2440,7 @@ where
Err(p) => { Err(p) => {
let wrapped_panic = get_prealloc_err() as *mut WrappedPanic; let wrapped_panic = get_prealloc_err() as *mut WrappedPanic;
ptr::write(wrapped_panic, WrappedPanic(Some(p))); ptr::write(wrapped_panic, WrappedPanic(Some(p)));
get_gc_metatable_for::<WrappedPanic>(state); get_gc_metatable::<WrappedPanic>(state);
ffi::lua_setmetatable(state, -2); ffi::lua_setmetatable(state, -2);
ffi::lua_error(state) ffi::lua_error(state)
} }

View File

@ -271,7 +271,7 @@ pub unsafe fn take_userdata<T>(state: *mut ffi::lua_State) -> T {
// Internally uses 3 stack spaces, does not call checkstack. // Internally uses 3 stack spaces, does not call checkstack.
pub unsafe fn push_gc_userdata<T: Any>(state: *mut ffi::lua_State, t: T) -> Result<()> { pub unsafe fn push_gc_userdata<T: Any>(state: *mut ffi::lua_State, t: T) -> Result<()> {
push_userdata(state, t)?; push_userdata(state, t)?;
get_gc_metatable_for::<T>(state); get_gc_metatable::<T>(state);
ffi::lua_setmetatable(state, -2); ffi::lua_setmetatable(state, -2);
Ok(()) Ok(())
} }
@ -282,7 +282,7 @@ pub unsafe fn get_gc_userdata<T: Any>(state: *mut ffi::lua_State, index: c_int)
if ud.is_null() || ffi::lua_getmetatable(state, index) == 0 { if ud.is_null() || ffi::lua_getmetatable(state, index) == 0 {
return ptr::null_mut(); return ptr::null_mut();
} }
get_gc_metatable_for::<T>(state); get_gc_metatable::<T>(state);
let res = ffi::lua_rawequal(state, -1, -2); let res = ffi::lua_rawequal(state, -1, -2);
ffi::lua_pop(state, 2); ffi::lua_pop(state, 2);
if res == 0 { if res == 0 {
@ -496,7 +496,7 @@ where
let wrapped_error = ud as *mut WrappedError; let wrapped_error = ud as *mut WrappedError;
ptr::write(wrapped_error, WrappedError(err)); ptr::write(wrapped_error, WrappedError(err));
get_gc_metatable_for::<WrappedError>(state); get_gc_metatable::<WrappedError>(state);
ffi::lua_setmetatable(state, -2); ffi::lua_setmetatable(state, -2);
// Convert to CallbackError and attach traceback // Convert to CallbackError and attach traceback
@ -516,7 +516,7 @@ where
Err(p) => { Err(p) => {
ffi::lua_settop(state, 1); ffi::lua_settop(state, 1);
ptr::write(ud as *mut WrappedPanic, WrappedPanic(Some(p))); ptr::write(ud as *mut WrappedPanic, WrappedPanic(Some(p)));
get_gc_metatable_for::<WrappedPanic>(state); get_gc_metatable::<WrappedPanic>(state);
ffi::lua_setmetatable(state, -2); ffi::lua_setmetatable(state, -2);
ffi::lua_error(state) ffi::lua_error(state)
} }
@ -651,7 +651,7 @@ pub unsafe fn get_wrapped_error(state: *mut ffi::lua_State, index: c_int) -> *co
// Initialize the internal (with __gc method) metatable for a type T. // Initialize the internal (with __gc method) metatable for a type T.
// Uses 6 stack spaces and calls checkstack. // Uses 6 stack spaces and calls checkstack.
pub unsafe fn init_gc_metatable_for<T: Any>( pub unsafe fn init_gc_metatable<T: Any>(
state: *mut ffi::lua_State, state: *mut ffi::lua_State,
customize_fn: Option<fn(*mut ffi::lua_State) -> Result<()>>, customize_fn: Option<fn(*mut ffi::lua_State) -> Result<()>>,
) -> Result<()> { ) -> Result<()> {
@ -687,7 +687,7 @@ pub unsafe fn init_gc_metatable_for<T: Any>(
Ok(()) Ok(())
} }
pub unsafe fn get_gc_metatable_for<T: Any>(state: *mut ffi::lua_State) { pub unsafe fn get_gc_metatable<T: Any>(state: *mut ffi::lua_State) {
let type_id = TypeId::of::<T>(); let type_id = TypeId::of::<T>();
let ref_addr = { let ref_addr = {
let mt_cache = mlua_expect!(METATABLE_CACHE.lock(), "cannot lock metatable cache"); let mt_cache = mlua_expect!(METATABLE_CACHE.lock(), "cannot lock metatable cache");
@ -773,7 +773,7 @@ pub unsafe fn init_error_registry(state: *mut ffi::lua_State) -> Result<()> {
}) })
} }
init_gc_metatable_for::<WrappedError>( init_gc_metatable::<WrappedError>(
state, state,
Some(|state| { Some(|state| {
ffi::lua_pushcfunction(state, error_tostring); ffi::lua_pushcfunction(state, error_tostring);
@ -781,7 +781,7 @@ pub unsafe fn init_error_registry(state: *mut ffi::lua_State) -> Result<()> {
}), }),
)?; )?;
init_gc_metatable_for::<WrappedPanic>( init_gc_metatable::<WrappedPanic>(
state, state,
Some(|state| { Some(|state| {
ffi::lua_pushcfunction(state, error_tostring); ffi::lua_pushcfunction(state, error_tostring);
@ -846,7 +846,7 @@ pub unsafe fn init_error_registry(state: *mut ffi::lua_State) -> Result<()> {
})?; })?;
// Create error print buffer // Create error print buffer
init_gc_metatable_for::<String>(state, None)?; init_gc_metatable::<String>(state, None)?;
push_gc_userdata(state, String::new())?; push_gc_userdata(state, String::new())?;
protect_lua(state, 1, 0, |state| { protect_lua(state, 1, 0, |state| {
let err_buf_key = &ERROR_PRINT_BUFFER_KEY as *const u8 as *const c_void; let err_buf_key = &ERROR_PRINT_BUFFER_KEY as *const u8 as *const c_void;