@@ -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+ } ;
2628use 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} ;
3234use 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 (
0 commit comments