refactoring

This commit is contained in:
Manuel Simon Hirsig
2016-08-23 06:45:02 +02:00
parent 5f03b95e8f
commit 5319e00a0a
3 changed files with 27 additions and 27 deletions
+20 -22
View File
@@ -29,8 +29,8 @@ do
tinsert(table_pool, t) tinsert(table_pool, t)
end end
function public.accessor.t() return function public.accessor.t()
tremove(table_pool) or {} return tremove(table_pool) or {}
end end
function public.accessor.tt() -- TODO or 'tmp'? t (and t -> T)? function public.accessor.tt() -- TODO or 'tmp'? t (and t -> T)?
@@ -46,13 +46,12 @@ do
__newindex=function(_, _, value) return f(value) end, __unm=function(self) return self end, __newindex=function(_, _, value) return f(value) end, __unm=function(self) return self end,
}) })
end end
local temp, perm = modifier(function(t) temporary[t] = true; return t end), modifier(function(t) temporary[t] = false; return t end) local temp, perm = modifier(function(t) temporary[t] = true; return t end), modifier(function(t) temporary[t] = nil; return t end)
public.temp() -- TODO or 'auto'? public.temp() -- TODO or 'auto'?
function accessor() return setmetatable(tt, mt) end function accessor() return temp end
function mutator(value) return temp(value) end function mutator(t) return temp(t) end
public.perm() -- TODO or 'keep'? public.perm() -- TODO or 'keep' 'hold'??
function accessor() return setmetatable(tt, mt) end function mutator(t) return perm(t) end
function mutator(value) return perm(value) end
function public.collector_mt(f) function public.collector_mt(f)
return { return {
@@ -129,20 +128,19 @@ function public.log(...) temp=arg
DEFAULT_CHAT_FRAME:AddMessage(LIGHTYELLOW_FONT_COLOR_CODE..msg) DEFAULT_CHAT_FRAME:AddMessage(LIGHTYELLOW_FONT_COLOR_CODE..msg)
end end
tab_info = t tab_info = t
for k, v in -object :search_tab 'Search' :post_tab 'Post' :auctions_tab 'Auctions' :bids_tab 'Bids' do do
local m, tab = _m, -object :name(v); local data = -list :search_tab 'Search' :post_tab 'Post' :auctions_tab 'Auctions' :bids_tab 'Bids'
log(tab.name); for i=1,7,2 do
(function() local tab = perm<-object :name(data[i + 1]);
module(k) local env = (function() module(data[i]) return _m end)()
function mutator.OPEN(f) tab.OPEN = f end function env.mutator.OPEN(f) tab.OPEN = f end
function mutator.CLOSE(f) tab.CLOSE = f end function env.mutator.CLOSE(f) tab.CLOSE = f end
function mutator.USE_ITEM(f) tab.USE_ITEM = f end function env.mutator.USE_ITEM(f) tab.USE_ITEM = f end
function mutator.CLICK_LINK(f) tab.CLICK_LINK = f end function env.mutator.CLICK_LINK(f) tab.CLICK_LINK = f end
function public.accessor.ACTIVE() return tab == m.active_tab end function env.public.accessor.ACTIVE() return tab == active_tab end
end)() tinsert(tab_info, tab)
tinsert(tab_info, tab) end
end end
do do
@@ -174,7 +172,7 @@ function UseContainerItem(...) temp=arg
end end
public.orig = setmetatable({[_g]=t}, {__index=function(self, key) return self[_g][key] end}) public.orig = setmetatable({[_g]=t}, {__index=function(self, key) return self[_g][key] end})
function public.hook(...) function public.hook(...) temp=arg
local name, object, handler local name, object, handler
if arg.n == 3 then if arg.n == 3 then
name, object, handler = unpack(arg) name, object, handler = unpack(arg)
+6 -4
View File
@@ -29,9 +29,10 @@ function importer_mt.__call(self, arg1, arg2)
end end
return self return self
end end
function set_property(data, property, value) function set_property(metadata, data, modifier, key, f)
if property and not data[property] and type(value) == 'function' or property_error() then if key and not data[key] and type(f) == 'function' or property_error() then
data[property] = value metadata[key] = metadata[key] + modifier
data[key] = f
end end
end end
declarator_mt = {__metatable=false} declarator_mt = {__metatable=false}
@@ -67,6 +68,7 @@ do
local function index(access, default) local function index(access, default)
return function(self, key) return function(self, key)
local state = _state[self]; local modifiers = state.metadata[key] or 0 local state = _state[self]; local modifiers = state.metadata[key] or 0
if key == 'perm' then DEFAULT_CHAT_FRAME:AddMessage(tostring(key)) end
if mask(access+ACCESSOR, modifiers) == access+ACCESSOR then return state.accessors[key]() end if mask(access+ACCESSOR, modifiers) == access+ACCESSOR then return state.accessors[key]() end
return state.data[key] or default[key] return state.data[key] or default[key]
end end
@@ -101,7 +103,7 @@ function module(name)
private=function() state.modifiers = PRIVATE return declarator end, public=function() state.modifiers = PUBLIC return declarator end, private=function() state.modifiers = PRIVATE return declarator end, public=function() state.modifiers = PUBLIC return declarator end,
mutable=function() state.modifiers = MUTABLE return declarator end, mutable=function() state.modifiers = MUTABLE return declarator end,
accessor=function() state.modifiers = PROPERTY+ACCESSOR return declarator end, mutator=function() state.modifiers = PROPERTY+MUTATOR return declarator end} accessor=function() state.modifiers = PROPERTY+ACCESSOR return declarator end, mutator=function() state.modifiers = PROPERTY+MUTATOR return declarator end}
mutators = {accessor=function(value) set_property(accessors, state.property, value) end, mutator=function(value) set_property(mutators, state.property, value) end} mutators = {accessor=function(f) set_property(state.metadata, accessors, ACCESSOR, state.property, f) end, mutator=function(f) set_property(state.metadata, mutators, MUTATOR, state.property, f) end}
state = { state = {
env=env, interface=interface, modifiers=PRIVATE, env=env, interface=interface, modifiers=PRIVATE,
metadata = {_g=PRIVATE, _m=PRIVATE, _i=PRIVATE, import=PRIVATE, private=PROPERTY+ACCESSOR, public=PROPERTY+ACCESSOR, mutable=PROPERTY+ACCESSOR, accessor=PROPERTY+ACCESSOR+MUTATOR, mutator=PROPERTY+ACCESSOR+MUTATOR}, metadata = {_g=PRIVATE, _m=PRIVATE, _i=PRIVATE, import=PRIVATE, private=PROPERTY+ACCESSOR, public=PROPERTY+ACCESSOR, mutable=PROPERTY+ACCESSOR, accessor=PROPERTY+ACCESSOR+MUTATOR, mutator=PROPERTY+ACCESSOR+MUTATOR},
+1 -1
View File
@@ -374,7 +374,7 @@ function suggestions(components)
if components.blizzard.name and size(components.blizzard) == 1 then tinsert(suggestions, 'exact') end if components.blizzard.name and size(components.blizzard) == 1 then tinsert(suggestions, 'exact') end
tinsert(suggestions, 'and'); tinsert(suggestions, 'or'); tinsert(suggestions, 'not'); tinsert(suggestions, 'tt') tinsert(suggestions, 'and'); tinsert(suggestions, 'or'); tinsert(suggestions, 'not'); tinsert(suggestions, 'tooltip')
for key in filters do tinsert(suggestions, key) end for key in filters do tinsert(suggestions, key) end