summaryrefslogtreecommitdiffstats
path: root/aconf/model/node.lua
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2015-02-21 15:01:36 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2015-02-21 15:08:18 +0200
commit30ea327005ed2f45e19b2314b8caaae3c7edd894 (patch)
treef3ddfcf58e488080ad4d7c21b1e2d3b4d9b5296f /aconf/model/node.lua
parent174f24cfc838de64f6c2e104ca236517363e2b93 (diff)
downloadaconf-30ea327005ed2f45e19b2314b8caaae3c7edd894.tar.bz2
aconf-30ea327005ed2f45e19b2314b8caaae3c7edd894.tar.xz
model: cache member context
Diffstat (limited to 'aconf/model/node.lua')
-rw-r--r--aconf/model/node.lua29
1 files changed, 13 insertions, 16 deletions
diff --git a/aconf/model/node.lua b/aconf/model/node.lua
index 2a4687c..735e7df 100644
--- a/aconf/model/node.lua
+++ b/aconf/model/node.lua
@@ -32,27 +32,24 @@ M.BoundMember = class()
function M.BoundMember:init(parent, name, field)
local pmt = getmetatable(parent)
+
+ local addr = field.addr or address.escape(name)
+ if type(addr) == 'function' then addr = addr(pmt.path, name) end
+
+ local context = {
+ txn=pmt.txn,
+ privileged=pmt.privileged,
+ parent=parent,
+ path=pth.join(pmt.path, name),
+ addr=address.to_absolute(addr, pmt.addr)
+ }
+
local mt = {}
function mt.__index(t, k)
local member = field[k]
if type(member) ~= 'function' then return member end
-
- local addr = field.addr or address.escape(name)
- if type(addr) == 'function' then addr = addr(pmt.path, name) end
- return function(self, ...)
- return member(
- field,
- {
- txn=pmt.txn,
- privileged=pmt.privileged,
- parent=parent,
- path=pth.join(pmt.path, name),
- addr=address.to_absolute(addr, pmt.addr)
- },
- ...
- )
- end
+ return function(self, ...) return member(field, context, ...) end
end
setmetatable(self, mt)