diff --git a/src/state/raw.rs b/src/state/raw.rs index 7ac5558..5ec5748 100644 --- a/src/state/raw.rs +++ b/src/state/raw.rs @@ -961,9 +961,9 @@ impl RawLua { #[cfg(feature = "luau")] let extra_init = None; #[cfg(not(feature = "luau"))] - let extra_init: Option Result<()>> = Some(|state| { + let extra_init: Option Result<()>> = Some(|state, mt_idx| { ffi::lua_pushcfunction(state, crate::util::userdata_destructor::>); - rawset_field(state, -2, "__gc") + rawset_field(state, mt_idx, "__gc") }); init_userdata_metatable( diff --git a/src/util/userdata.rs b/src/util/userdata.rs index d352f8c..17a5ee2 100644 --- a/src/util/userdata.rs +++ b/src/util/userdata.rs @@ -152,7 +152,7 @@ pub(crate) unsafe fn init_userdata_metatable( field_getters: Option, field_setters: Option, methods: Option, - extra_init: Option Result<()>>, + extra_init: Option Result<()>>, ) -> Result<()> { if field_getters.is_some() || methods.is_some() { // Push `__index` generator function @@ -197,7 +197,7 @@ pub(crate) unsafe fn init_userdata_metatable( // Additional initialization if let Some(extra_init) = extra_init { - extra_init(state)?; + extra_init(state, metatable)?; } ffi::lua_pushboolean(state, 0);