diff options
author | Philipp Gesang <phg42.2a@gmail.com> | 2013-09-15 21:15:17 +0200 |
---|---|---|
committer | Philipp Gesang <phg42.2a@gmail.com> | 2013-09-15 21:15:17 +0200 |
commit | 96ba331ed3395bd61f377e5c176b372d38e078da (patch) | |
tree | acd09ab82fe6fbbab851e9e6a5d10afca411dc79 /lualibs-util-sto.lua | |
parent | 9613f4348a811be2f2751873cd98072a9378c9d4 (diff) | |
download | lualibs-96ba331ed3395bd61f377e5c176b372d38e078da.tar.gz |
sync with Context as of 2013-09-15
Diffstat (limited to 'lualibs-util-sto.lua')
-rw-r--r-- | lualibs-util-sto.lua | 58 |
1 files changed, 26 insertions, 32 deletions
diff --git a/lualibs-util-sto.lua b/lualibs-util-sto.lua index 191d6cd..8aafca4 100644 --- a/lualibs-util-sto.lua +++ b/lualibs-util-sto.lua @@ -103,12 +103,22 @@ end local function f_empty () return "" end -- t,k local function f_self (t,k) t[k] = k return k end local function f_table (t,k) local v = { } t[k] = v return v end +local function f_number(t,k) t[k] = 0 return 0 end -- t,k,v local function f_ignore() end -- t,k,v -local t_empty = { __index = f_empty } -local t_self = { __index = f_self } -local t_table = { __index = f_table } -local t_ignore = { __newindex = f_ignore } +local f_index = { + ["empty"] = f_empty, + ["self"] = f_self, + ["table"] = f_table, + ["number"] = f_number, +} + +local t_index = { + ["empty"] = { __index = f_empty }, + ["self"] = { __index = f_self }, + ["table"] = { __index = f_table }, + ["number"] = { __index = f_number }, +} function table.setmetatableindex(t,f) if type(t) ~= "table" then @@ -116,46 +126,30 @@ function table.setmetatableindex(t,f) end local m = getmetatable(t) if m then - if f == "empty" then - m.__index = f_empty - elseif f == "key" then - m.__index = f_self - elseif f == "table" then - m.__index = f_table - else - m.__index = f - end + m.__index = f_index[f] or f else - if f == "empty" then - setmetatable(t, t_empty) - elseif f == "key" then - setmetatable(t, t_self) - elseif f == "table" then - setmetatable(t, t_table) - else - setmetatable(t,{ __index = f }) - end + setmetatable(t,t_index[f] or { __index = f }) end return t end +local f_index = { + ["ignore"] = f_ignore, +} + +local t_index = { + ["ignore"] = { __newindex = f_ignore }, +} + function table.setmetatablenewindex(t,f) if type(t) ~= "table" then f, t = t, { } end local m = getmetatable(t) if m then - if f == "ignore" then - m.__newindex = f_ignore - else - m.__newindex = f - end + m.__newindex = f_index[f] or f else - if f == "ignore" then - setmetatable(t, t_ignore) - else - setmetatable(t,{ __newindex = f }) - end + setmetatable(t,t_index[f] or { __newindex = f }) end return t end |