diff --git a/crates/lune-roblox/src/instance/base.rs b/crates/lune-roblox/src/instance/base.rs index 58a2ae78..4b737d3f 100644 --- a/crates/lune-roblox/src/instance/base.rs +++ b/crates/lune-roblox/src/instance/base.rs @@ -113,7 +113,6 @@ pub fn add_methods<'lua, M: LuaUserDataMethods<'lua, Instance>>(m: &mut M) { }, ); m.add_method("IsA", |_, this, class_name: String| { - ensure_not_destroyed(this)?; Ok(class_is_a(&this.class_name, class_name).unwrap_or(false)) }); m.add_method( @@ -217,19 +216,20 @@ fn instance_property_get<'lua>( this: &Instance, prop_name: String, ) -> LuaResult> { - ensure_not_destroyed(this)?; - match prop_name.as_str() { "ClassName" => return this.get_class_name().into_lua(lua), - "Name" => { - return this.get_name().into_lua(lua); - } "Parent" => { return this.get_parent().into_lua(lua); } _ => {} } + ensure_not_destroyed(this)?; + + if prop_name.as_str() == "Name" { + return this.get_name().into_lua(lua); + } + if let Some(info) = find_property_info(&this.class_name, &prop_name) { if let Some(prop) = this.get_property(&prop_name) { if let DomValue::Enum(enum_value) = prop { diff --git a/crates/lune-roblox/src/instance/mod.rs b/crates/lune-roblox/src/instance/mod.rs index 3397e095..120a5140 100644 --- a/crates/lune-roblox/src/instance/mod.rs +++ b/crates/lune-roblox/src/instance/mod.rs @@ -302,10 +302,7 @@ impl Instance { pub fn get_parent(&self) -> Option { let dom = INTERNAL_DOM.lock().expect("Failed to lock document"); - let parent_ref = dom - .get_by_ref(self.dom_ref) - .expect("Failed to find instance in document") - .parent(); + let parent_ref = dom.get_by_ref(self.dom_ref)?.parent(); if parent_ref == dom.root_ref() { None diff --git a/tests/roblox/instance/methods/ClearAllChildren.luau b/tests/roblox/instance/methods/ClearAllChildren.luau index ed6ec22d..01bd6b58 100644 --- a/tests/roblox/instance/methods/ClearAllChildren.luau +++ b/tests/roblox/instance/methods/ClearAllChildren.luau @@ -20,14 +20,10 @@ assert(not pcall(function() return child1.Name end)) -assert(not pcall(function() - return child1.Parent -end)) +assert(not child1.Parent) assert(not pcall(function() return child2.Name end)) -assert(not pcall(function() - return child2.Parent -end)) +assert(not child2.Parent) diff --git a/tests/roblox/instance/methods/Destroy.luau b/tests/roblox/instance/methods/Destroy.luau index aa18344d..bbffa07c 100644 --- a/tests/roblox/instance/methods/Destroy.luau +++ b/tests/roblox/instance/methods/Destroy.luau @@ -14,22 +14,16 @@ assert(not pcall(function() return root.Name end)) -assert(not pcall(function() - return root.Parent -end)) +assert(not root.Parent) assert(not pcall(function() return child.Name end)) -assert(not pcall(function() - return child.Parent -end)) +assert(not child.Parent) assert(not pcall(function() return descendant.Name end)) -assert(not pcall(function() - return descendant.Parent -end)) +assert(not descendant.Parent)