refactoring

This commit is contained in:
Manuel Simon Hirsig
2016-08-24 12:31:57 +02:00
parent 2683e2591d
commit e679f487a1
5 changed files with 44 additions and 40 deletions
+3 -4
View File
@@ -2,7 +2,7 @@ local type, setmetatable, setfenv, unpack, mask, _g = type, setmetatable, setfen
local PRIVATE, PUBLIC, MUTABLE, PROPERTY, ACCESSOR, MUTATOR = 0, 1, 2, 4, 8, 16
local error, import_error, modifier_error, property_error, immutable_error, collision_error, set_property, env_mt, interface_mt, declarator_mt, importer_mt
local _state, _modules = {}, {}
function error(message, ...) return _g.error(format(message, unpack(arg))..'\n'..debugstack(1, 15, 5), 0) end
function error(message, ...) return _g.error(format(message or '', unpack(arg))..'\n'..debugstack(), 0) end
import_error, modifier_error, property_error = function() error 'Invalid modifiers.' end, function() error 'Invalid modifiers.' end, function() error 'Accessor/Mutator must be function.' end
immutable_error, collision_error = function(key) error('Field "%s" is immutable.', key) end, function(key) error('Field "%s" already exists.', key) end
importer_mt = {__metatable=false}
@@ -105,10 +105,9 @@ function module(name)
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 = {
env=env, interface=interface, modifiers=PRIVATE,
metadata = {_=MUTABLE, _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},
data = {_g=_g, _m=env, _i=interface, import=importer}, accessors=accessors, mutators=mutators,
metadata = {_=MUTABLE, _g=PRIVATE, _m=PRIVATE, _i=PRIVATE, error=PRIVATE, import=PRIVATE, private=PROPERTY+ACCESSOR, public=PROPERTY+ACCESSOR, mutable=PROPERTY+ACCESSOR, accessor=PROPERTY+ACCESSOR+MUTATOR, mutator=PROPERTY+ACCESSOR+MUTATOR},
data = {_g=_g, _m=env, _i=interface, error=error, import=importer}, accessors=accessors, mutators=mutators,
}
if not name then error('kek', 2) end
_modules[name], _state[env], _state[interface], _state[declarator], _state[importer] = state, state, state, state, state
importer [''] 'core'
end