diff options
Diffstat (limited to 'acf2/transaction')
-rw-r--r-- | acf2/transaction/init.lua | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/acf2/transaction/init.lua b/acf2/transaction/init.lua index 627703c..ec8da59 100644 --- a/acf2/transaction/init.lua +++ b/acf2/transaction/init.lua @@ -75,9 +75,19 @@ function Transaction:set_multiple(mods) local addr, value = unpack(mod) if value == nil then for _, val in ipairs{self.validable, self.commit_val} do - for path, a in pairs(val) do - if a == addr then val[path] = nil end - end + local done + repeat + done = true + for path, a in pairs(copy(val)) do + if a == addr then + for p, _ in pairs(copy(val)) do + if pth.is_subordinate(p, path) then val[p] = nil end + end + done = false + break + end + end + until done end end end |