Skip to content

Commit 89b68e2

Browse files
committed
Remove generic from RawLua::push_userdata_metatable.
This should help to reduce amount of generated code.
1 parent cbf805f commit 89b68e2

File tree

6 files changed

+109
-87
lines changed

6 files changed

+109
-87
lines changed

src/scope.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ impl<'scope, 'env: 'scope> Scope<'scope, 'env> {
176176
// Push the metatable and register it with no TypeId
177177
let mut registry = UserDataRegistry::new_unique(ud_ptr as *mut _);
178178
T::register(&mut registry);
179-
self.lua.push_userdata_metatable(registry)?;
179+
self.lua.push_userdata_metatable(registry.into_raw())?;
180180
let mt_ptr = ffi::lua_topointer(state, -1);
181181
self.lua.register_userdata_metatable(mt_ptr, None);
182182

@@ -224,7 +224,7 @@ impl<'scope, 'env: 'scope> Scope<'scope, 'env> {
224224
// Push the metatable and register it with no TypeId
225225
let mut registry = UserDataRegistry::new_unique(ud_ptr as *mut _);
226226
register(&mut registry);
227-
self.lua.push_userdata_metatable(registry)?;
227+
self.lua.push_userdata_metatable(registry.into_raw())?;
228228
let mt_ptr = ffi::lua_topointer(state, -1);
229229
self.lua.register_userdata_metatable(mt_ptr, None);
230230

src/state.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1317,7 +1317,7 @@ impl Lua {
13171317
}
13181318

13191319
// Register the type
1320-
lua.create_userdata_metatable(registry)?;
1320+
lua.create_userdata_metatable(registry.into_raw())?;
13211321
}
13221322
Ok(())
13231323
}

src/state/raw.rs

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ use crate::types::{
2222
AppDataRef, AppDataRefMut, Callback, CallbackUpvalue, DestructedUserdata, Integer, LightUserData,
2323
MaybeSend, ReentrantMutex, RegistryKey, ValueRef, XRc,
2424
};
25-
use crate::userdata::{AnyUserData, MetaMethod, UserData, UserDataRegistry, UserDataStorage};
25+
use crate::userdata::{
26+
AnyUserData, MetaMethod, RawUserDataRegistry, UserData, UserDataRegistry, UserDataStorage,
27+
};
2628
use crate::util::{
2729
assert_stack, check_stack, get_destructed_userdata_metatable, get_internal_userdata, get_main_state,
2830
get_metatable_ptr, get_userdata, init_error_registry, init_internal_metatable, init_userdata_metatable,
2931
pop_error, push_internal_userdata, push_string, push_table, rawset_field, safe_pcall, safe_xpcall,
30-
short_type_name, take_userdata, StackGuard, WrappedFailure,
32+
short_type_name, StackGuard, WrappedFailure,
3133
};
3234
use crate::value::{Nil, Value};
3335

@@ -757,7 +759,7 @@ impl RawLua {
757759
let mut registry = UserDataRegistry::new(type_id);
758760
T::register(&mut registry);
759761

760-
self.create_userdata_metatable(registry)
762+
self.create_userdata_metatable(registry.into_raw())
761763
})
762764
}
763765

@@ -774,7 +776,7 @@ impl RawLua {
774776

775777
// Create an empty metatable
776778
let registry = UserDataRegistry::<T>::new(type_id);
777-
self.create_userdata_metatable(registry)
779+
self.create_userdata_metatable(registry.into_raw())
778780
})
779781
}
780782

@@ -810,12 +812,9 @@ impl RawLua {
810812
Ok(AnyUserData(self.pop_ref()))
811813
}
812814

813-
pub(crate) unsafe fn create_userdata_metatable<T>(
814-
&self,
815-
registry: UserDataRegistry<T>,
816-
) -> Result<Integer> {
815+
pub(crate) unsafe fn create_userdata_metatable(&self, registry: RawUserDataRegistry) -> Result<Integer> {
817816
let state = self.state();
818-
let type_id = registry.type_id();
817+
let type_id = registry.type_id;
819818

820819
self.push_userdata_metatable(registry)?;
821820

@@ -832,7 +831,7 @@ impl RawLua {
832831
Ok(id as Integer)
833832
}
834833

835-
pub(crate) unsafe fn push_userdata_metatable<T>(&self, mut registry: UserDataRegistry<T>) -> Result<()> {
834+
pub(crate) unsafe fn push_userdata_metatable(&self, mut registry: RawUserDataRegistry) -> Result<()> {
836835
let state = self.state();
837836
let mut stack_guard = StackGuard::new(state);
838837
check_stack(state, 13)?;
@@ -859,7 +858,7 @@ impl RawLua {
859858
}
860859
// Set `__name/__type` if not provided
861860
if !has_name {
862-
let type_name = short_type_name::<T>();
861+
let type_name = registry.type_name;
863862
push_string(state, type_name.as_bytes(), !self.unlikely_memory_error())?;
864863
rawset_field(state, -2, MetaMethod::Type.name())?;
865864
}
@@ -960,18 +959,7 @@ impl RawLua {
960959
}
961960
}
962961

963-
unsafe extern "C-unwind" fn userdata_destructor<T>(state: *mut ffi::lua_State) -> c_int {
964-
let ud = get_userdata::<UserDataStorage<T>>(state, -1);
965-
if !(*ud).is_borrowed() {
966-
take_userdata::<UserDataStorage<T>>(state);
967-
ffi::lua_pushboolean(state, 1);
968-
} else {
969-
ffi::lua_pushboolean(state, 0);
970-
}
971-
1
972-
}
973-
974-
ffi::lua_pushcfunction(state, userdata_destructor::<T>);
962+
ffi::lua_pushcfunction(state, registry.destructor);
975963
rawset_field(state, metatable_index, "__gc")?;
976964

977965
init_userdata_metatable(

src/userdata.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ use {
2727
// Re-export for convenience
2828
pub(crate) use cell::UserDataStorage;
2929
pub use cell::{UserDataRef, UserDataRefMut};
30-
pub(crate) use registry::UserDataProxy;
3130
pub use registry::UserDataRegistry;
31+
pub(crate) use registry::{RawUserDataRegistry, UserDataProxy};
3232

3333
/// Kinds of metamethods that can be overridden.
3434
///

0 commit comments

Comments
 (0)