From 42b396d0d117814731d0b07c75bbb01deb136ab7 Mon Sep 17 00:00:00 2001 From: Alex Orlenko Date: Sun, 20 Jun 2021 12:38:47 +0100 Subject: [PATCH] Optimize non-wrapped userdata method calls --- src/lua.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/lua.rs b/src/lua.rs index ef977a9..326b74f 100644 --- a/src/lua.rs +++ b/src/lua.rs @@ -2694,11 +2694,15 @@ impl<'lua, T: 'static + UserData> StaticUserDataMethods<'lua, T> { Box::new(move |lua, mut args| { if let Some(front) = args.pop_front() { let userdata = AnyUserData::from_lua(front, lua)?; - match userdata.type_id()? { - id if id == TypeId::of::() => { - let ud = userdata.borrow::()?; - method(lua, &ud, A::from_lua_multi(args, lua)?)?.to_lua_multi(lua) + // Try normal userdata first + let err = match userdata.borrow::() { + Ok(ud) => { + return method(lua, &ud, A::from_lua_multi(args, lua)?)?.to_lua_multi(lua) } + Err(err) => err, + }; + match userdata.type_id()? { + id if id == TypeId::of::() => Err(err), #[cfg(not(feature = "send"))] id if id == TypeId::of::>>() => { let ud = userdata.borrow::>>()?;