Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local prepareObj
- prepareObj = function(root, obj, proto, mt)
- for k, v in pairs(proto) do
- local t = type(v)
- if t == "table" and k ~= "__proto__" and k ~= "__root__" then
- obj[k] = prepareObj(root, { __proto__ = v, __root__ = root }, v, mt)
- end
- end
- setmetatable(obj, mt)
- return obj
- end
- local classMt = {
- __index = function(self, key)
- local v = self.__proto__[key]
- if type(v) == "function"
- then return function(...) return v(self.__root__, ...) end
- else return v end
- end
- }
- return function(proto)
- proto.__new__ = function(...)
- local obj = { __proto__ = proto }
- obj.__root__ = prepareObj(obj, obj, proto, classMt)
- if proto.__init__ ~= nil then proto.__init__(obj.__root__, ...) end
- return obj
- end
- return proto.__new__, proto
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement