@@ -24,9 +24,9 @@ use crate::types::{
24
24
use crate :: userdata:: { AnyUserData , MetaMethod , UserData , UserDataRegistry , UserDataStorage } ;
25
25
use crate :: util:: {
26
26
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 ,
30
30
} ;
31
31
use crate :: value:: { Nil , Value } ;
32
32
@@ -1026,11 +1026,10 @@ impl RawLua {
1026
1026
state : * mut ffi:: lua_State ,
1027
1027
idx : c_int ,
1028
1028
) -> 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 ( ) {
1030
1031
return Err ( Error :: UserDataTypeMismatch ) ;
1031
1032
}
1032
- let mt_ptr = ffi:: lua_topointer ( state, -1 ) ;
1033
- ffi:: lua_pop ( state, 1 ) ;
1034
1033
1035
1034
// Fast path to skip looking up the metatable in the map
1036
1035
let ( last_mt, last_type_id) = ( * self . extra . get ( ) ) . last_checked_userdata_mt ;
0 commit comments