@@ -24,9 +24,9 @@ use crate::types::{
2424use crate :: userdata:: { AnyUserData , MetaMethod , UserData , UserDataRegistry , UserDataStorage } ;
2525use crate :: util:: {
2626 assert_stack, check_stack, get_destructed_userdata_metatable, get_internal_userdata, get_main_state,
27- get_userdata, init_error_registry, init_internal_metatable, init_userdata_metatable, pop_error ,
28- push_internal_userdata, push_string, push_table, rawset_field, safe_pcall, safe_xpcall, short_type_name ,
29- StackGuard , WrappedFailure ,
27+ get_metatable_ptr , get_userdata, init_error_registry, init_internal_metatable, init_userdata_metatable,
28+ pop_error , push_internal_userdata, push_string, push_table, rawset_field, safe_pcall, safe_xpcall,
29+ short_type_name , StackGuard , WrappedFailure ,
3030} ;
3131use crate :: value:: { Nil , Value } ;
3232
@@ -1026,11 +1026,10 @@ impl RawLua {
10261026 state : * mut ffi:: lua_State ,
10271027 idx : c_int ,
10281028 ) -> Result < Option < TypeId > > {
1029- if ffi:: lua_getmetatable ( state, idx) == 0 {
1029+ let mt_ptr = get_metatable_ptr ( state, idx) ;
1030+ if mt_ptr. is_null ( ) {
10301031 return Err ( Error :: UserDataTypeMismatch ) ;
10311032 }
1032- let mt_ptr = ffi:: lua_topointer ( state, -1 ) ;
1033- ffi:: lua_pop ( state, 1 ) ;
10341033
10351034 // Fast path to skip looking up the metatable in the map
10361035 let ( last_mt, last_type_id) = ( * self . extra . get ( ) ) . last_checked_userdata_mt ;
0 commit comments