Skip to content

Commit 80471c6

Browse files
committed
Optimize AnyUserData::metatable
1 parent 4b9d1cf commit 80471c6

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

src/userdata.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -888,16 +888,17 @@ impl AnyUserData {
888888
self.raw_metatable().map(UserDataMetatable)
889889
}
890890

891+
/// Returns a raw metatable of this [`AnyUserData`].
891892
fn raw_metatable(&self) -> Result<Table> {
892893
let lua = self.0.lua.lock();
893-
let state = lua.state();
894+
let ref_thread = lua.ref_thread();
894895
unsafe {
895-
let _sg = StackGuard::new(state);
896-
check_stack(state, 3)?;
896+
// Check that userdata is registered and not destructed
897+
// All registered userdata types have a non-empty metatable
898+
let _type_id = lua.get_userdata_ref_type_id(&self.0)?;
897899

898-
lua.push_userdata_ref(&self.0)?;
899-
ffi::lua_getmetatable(state, -1); // Checked that non-empty on the previous call
900-
Ok(Table(lua.pop_ref()))
900+
ffi::lua_getmetatable(ref_thread, self.0.index);
901+
Ok(Table(lua.pop_ref_thread()))
901902
}
902903
}
903904

0 commit comments

Comments
 (0)