This commit is contained in:
Kaan 2026-10-19 17:49:34 +03:00 • committed by GitHub
commit c203241e1c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 30 additions and 3 deletions

View file

@ -62,7 +62,7 @@ local function update_children_effect(p: {
push_cleanup(assert(get_scope()), function()
for child in node.cache.cur_children_set do
child.Parent = nil
if child.Parent == p.instance then child.Parent = nil end
end
end)
end
@ -71,7 +71,7 @@ local function update_children_effect(p: {
process_child(new_children)
for child in cur_children_set do
child.Parent = nil -- unparent all children that weren't in the new children set
if child.Parent == p.instance then child.Parent = nil end -- unparent all children that weren't in the new children set
end
table.clear(cur_children_set) -- clear cache, preserve capacity
@ -116,7 +116,7 @@ return {
push_cleanup(assert_stable_scope(), function()
for child in node.cache.cur_children_set do
child.Parent = nil
if child.Parent == instance then child.Parent = nil end
end
end)

View file

@ -1050,6 +1050,33 @@ TEST("create()", wrap_root(function()
CHECK(parent:FindFirstChild "c")
end
do CASE "children moved to another parent"
local other = create "Frame" {}
local child = create "Frame" {}
local children_a = source { child }
local children_b = source {}
create "Frame" { children_a }
local parent_b = create "Frame" { children_b }
children_b { child }
children_a {}
CHECK(child.Parent == parent_b)
local a = create "Frame" {}
local b = create "Frame" {}
local destroy = root(function()
create "Frame" { function() return a end }
create "Frame" { function() return { function() return b end } end }
end)
a.Parent = other
b.Parent = other
destroy()
CHECK(a.Parent == other)
CHECK(b.Parent == other)
end
do CASE "garbage collection test"
local wref