summaryrefslogtreecommitdiffstats
path: root/acf2/model/node.lua
diff options
context:
space:
mode:
Diffstat (limited to 'acf2/model/node.lua')
-rw-r--r--acf2/model/node.lua14
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