diff options
Diffstat (limited to 'acf2/model/node.lua')
-rw-r--r-- | acf2/model/node.lua | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/acf2/model/node.lua b/acf2/model/node.lua index 2d9aa98..bebad93 100644 --- a/acf2/model/node.lua +++ b/acf2/model/node.lua @@ -128,6 +128,15 @@ function M.TreeNode:fetch(path, create) if #path == 0 then return self end local name = path[1] + table.remove(path, 1) + + if name == pth.up then + if not mt.parent then + raise(mt.path, 'Root object does not have parent') + end + return M.TreeNode.fetch(mt.parent, path, create) + end + if not mt.member(name) then raise(mt.path, 'Member does not exist: '..name) end @@ -135,14 +144,13 @@ function M.TreeNode:fetch(path, create) local options = {} if create then options.create = true - if #path == 1 then options.dereference = false end + if #path == 0 then options.dereference = false end end local next = mt.get(name, options) - if next == nil and (not create or #path > 1) then + if next == nil and (not create or #path > 0) then raise(mt.path, 'Subordinate does not exist: '..name) end - table.remove(path, 1) if #path > 0 and type(next) ~= 'table' then raise(pth.join(mt.path, name), 'Is a primitive value') end |