From 33c276d0b4904f5f7c00502d46422cb9e84555e4 Mon Sep 17 00:00:00 2001 From: Alex Orlenko Date: Sat, 4 Mar 2023 11:58:34 +0000 Subject: [PATCH] Optimize userdata methods call when __index and fields_getters are nil --- src/util.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/util.rs b/src/util.rs index f736a41..a34c2b2 100644 --- a/src/util.rs +++ b/src/util.rs @@ -409,11 +409,17 @@ unsafe fn init_userdata_metatable_index(state: *mut ffi::lua_State) -> Result<() } ffi::lua_pop(state, 1); - // Create and cache `__index` helper + // Create and cache `__index` generator let code = cstr!( r#" local error, isfunction = ... return function (__index, field_getters, methods) + -- Fastpath to return methods table for index access + if __index == nil and field_getters == nil then + return methods + end + + -- Alternatively return a function for index access return function (self, key) if field_getters ~= nil then local field_getter = field_getters[key] @@ -463,7 +469,7 @@ pub unsafe fn init_userdata_metatable_newindex(state: *mut ffi::lua_State) -> Re } ffi::lua_pop(state, 1); - // Create and cache `__newindex` helper + // Create and cache `__newindex` generator let code = cstr!( r#" local error, isfunction = ...