Refactoring and renaming

This commit is contained in:
kikito 2015-11-23 23:20:20 +01:00
parent 3de0dc2166
commit 15f6c82c50

View File

@ -28,6 +28,13 @@ local middleclass = {
]] ]]
} }
local _metamethods = {}
for m in ([[ add band bor bxor bnot call concat div eq
gc ipairs idiv le len lt metatable mod mode
mul pairs pow shl shr sub tostring unm ]]):gmatch("%S+") do
_metamethods['__' .. m] = true
end
local function _setClassDictionariesMetatables(aClass) local function _setClassDictionariesMetatables(aClass)
local dict = aClass.__instanceDict local dict = aClass.__instanceDict
dict.__index = dict dict.__index = dict
@ -42,31 +49,22 @@ local function _setClassDictionariesMetatables(aClass)
end end
end end
local all_metamethods_list = { '__add', '__band', '__bor', '__bxor', '__bnot', '__call', '__concat', local function _propagateMetamethod(aClass, name, f)
'__div', '__eq', '__gc', '__ipairs', '__idiv', '__le', '__len', '__lt',
'__metatable', '__mod', '__mode', '__mul', '__pairs', '__pow', '__shl',
'__shr', '__sub', '__tostring', '__unm' }
local all_metamethods = {}
for _, metamethod in ipairs(all_metamethods_list) do
all_metamethods[metamethod] = true
end
local function _propagateMetamethod(aClass, key, value)
for subclass in pairs(aClass.subclasses) do for subclass in pairs(aClass.subclasses) do
if not subclass.__metamethods[key] then if not subclass.__metamethods[name] then
subclass.__instanceDict[key] = value subclass.__instanceDict[name] = f
_propagateMetamethod(subclass, key, value) _propagateMetamethod(subclass, name, f)
end end
end end
end end
local function _updateClassDict(aClass, key, value) local function _updateClassDict(aClass, key, value)
if all_metamethods[key] then if _metamethods[key] then
if value == nil then if value == nil then
aClass.__metamethods[key] = nil aClass.__metamethods[key] = nil
value = aClass.super and aClass.super.__instanceDict[key] if aClass.super then
value = aClass.super.__instanceDict[key]
end
else else
aClass.__metamethods[key] = true aClass.__metamethods[key] = true
end end
@ -97,7 +95,7 @@ local function _createClass(name, super)
end end
local function _setSubclassMetamethods(aClass, subclass) local function _setSubclassMetamethods(aClass, subclass)
for m in pairs(all_metamethods) do for m in pairs(_metamethods) do
subclass.__instanceDict[m] = aClass.__instanceDict[m] subclass.__instanceDict[m] = aClass.__instanceDict[m]
end end
end end