From 30ea327005ed2f45e19b2314b8caaae3c7edd894 Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Sat, 21 Feb 2015 15:01:36 +0200 Subject: model: cache member context --- aconf/model/node.lua | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) (limited to 'aconf') 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) -- cgit v1.2.3