From 8e4e5cfeb1949b44d133a71d6ab20ac1e1f6a303 Mon Sep 17 00:00:00 2001 From: Manuel Simon Hirsig Date: Fri, 30 Sep 2016 22:47:55 +0200 Subject: [PATCH] refactoring --- libs/module.lua | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/libs/module.lua b/libs/module.lua index 2c8efe0..d970d59 100644 --- a/libs/module.lua +++ b/libs/module.lua @@ -2,7 +2,7 @@ if getmetatable(getfenv(0)) == false then return end local tinsert, tremove, getn, setn, strfind, type, setmetatable, setfenv, _G = tinsert, tremove, getn, table.setn, strfind, type, setmetatable, setfenv, getfenv(0) local PRIVATE, PUBLIC, FIELD, ACCESSOR, MUTATOR = 0, 1, 2, 4, 6 -local TYPES = { FIELD, ACCESSOR, MUTATOR } +local MODES = { FIELD, ACCESSOR, MUTATOR } local READ, WRITE = '', '=' local OPERATION = { [FIELD]=READ, [ACCESSOR]=READ, [MUTATOR]=WRITE } local META = { get=ACCESSOR, set=MUTATOR } @@ -25,21 +25,22 @@ function definition_helper_mt:__index(k) _name[self] = _name[self] and error('Invalid modifier "%s".', k) or k return self end -function definition_helper_mt:__newindex(k, v) local module = _module[self] - local name = META[k] and (_name[self] or error'Definition missing identifier.') or k +function definition_helper_mt:__newindex(k, v) + local module, name, mode + module, name = _module[self], _name[self] + if name then mode = META[k] or error('Invalid modifier "%s"', k) else name, mode = k, FIELD end if type(name) ~= 'string' or not strfind(name, '^[_%a][_%w]*') then error('Invalid identifier "%s".', name) end - local type = META[k] or FIELD - module.defined[name .. OPERATION[type]] = module.defined[name .. OPERATION[type]] and error('Duplicate identifier "%s".', name) or true - module[type][name], module[_access[self]+type][name] = v, v + module.defined[name .. OPERATION[mode]] = module.defined[name .. OPERATION[mode]] and error('Duplicate identifier "%s".', name) or true + module[mode][name], module[_access[self]+mode][name] = v, v _access[self], _name[self] = nil, nil end local function include(self, interface) local module = (interface < INTERFACE or error'Import error.') and _module[interface] - for _, type in TYPES do - for k, v in module[PUBLIC+type] do - if not self.defined[k .. OPERATION[type]] then - self.defined[k .. OPERATION[type]], self[type][k] = true, v + for _, mode in MODES do + for k, v in module[PUBLIC+mode] do + if not self.defined[k .. OPERATION[mode]] then + self.defined[k .. OPERATION[mode]], self[mode][k] = true, v end end end