Optimize non-wrapped userdata method calls
This commit is contained in:
parent
14d5c2c887
commit
42b396d0d1
12
src/lua.rs
12
src/lua.rs
|
@ -2694,11 +2694,15 @@ impl<'lua, T: 'static + UserData> StaticUserDataMethods<'lua, T> {
|
||||||
Box::new(move |lua, mut args| {
|
Box::new(move |lua, mut args| {
|
||||||
if let Some(front) = args.pop_front() {
|
if let Some(front) = args.pop_front() {
|
||||||
let userdata = AnyUserData::from_lua(front, lua)?;
|
let userdata = AnyUserData::from_lua(front, lua)?;
|
||||||
match userdata.type_id()? {
|
// Try normal userdata first
|
||||||
id if id == TypeId::of::<T>() => {
|
let err = match userdata.borrow::<T>() {
|
||||||
let ud = userdata.borrow::<T>()?;
|
Ok(ud) => {
|
||||||
method(lua, &ud, A::from_lua_multi(args, lua)?)?.to_lua_multi(lua)
|
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::<T>() => Err(err),
|
||||||
#[cfg(not(feature = "send"))]
|
#[cfg(not(feature = "send"))]
|
||||||
id if id == TypeId::of::<Rc<RefCell<T>>>() => {
|
id if id == TypeId::of::<Rc<RefCell<T>>>() => {
|
||||||
let ud = userdata.borrow::<Rc<RefCell<T>>>()?;
|
let ud = userdata.borrow::<Rc<RefCell<T>>>()?;
|
||||||
|
|
Loading…
Reference in New Issue