mirror of
https://github.com/leafo/moonscript.git
synced 2024-11-22 02:44:23 +00:00
d1059b8f98
Looking up a class property will now search the parent class properties if parent exists Classes have a few more built in properties: * __name holds the name of the class as it was defined as a string * __base holds the instance metatable as it was defined (not dynamic) * __parent holds the class's parent class if it exists (not dynamic) The way class inheritance is handled was CHANGED (uses __base instead of looking at __index of parents metatable). Make sure you recompile all your code if using class inheritance because old classes won't work with new ones.
446 lines
9.9 KiB
Lua
446 lines
9.9 KiB
Lua
local Hello
|
|
Hello = (function()
|
|
local _parent_0 = nil
|
|
local _base_0 = {
|
|
hello = function(self)
|
|
return print(self.test, self.world)
|
|
end,
|
|
__tostring = function(self)
|
|
return "hello world"
|
|
end
|
|
}
|
|
_base_0.__index = _base_0
|
|
if _parent_0 then
|
|
setmetatable(_base_0, _parent_0.__base)
|
|
end
|
|
local _class_0 = setmetatable({
|
|
__init = function(self, test, world)
|
|
self.test, self.world = test, world
|
|
return print("creating object..")
|
|
end,
|
|
__base = _base_0,
|
|
__name = "Hello",
|
|
__parent = _parent_0
|
|
}, {
|
|
__index = function(cls, name)
|
|
local val = rawget(_base_0, name)
|
|
if val == nil and _parent_0 then
|
|
return _parent_0[name]
|
|
else
|
|
return val
|
|
end
|
|
end,
|
|
__call = function(cls, ...)
|
|
local _self_0 = setmetatable({}, _base_0)
|
|
cls.__init(_self_0, ...)
|
|
return _self_0
|
|
end
|
|
})
|
|
_base_0.__class = _class_0
|
|
return _class_0
|
|
end)()
|
|
local x = Hello(1, 2)
|
|
x:hello()
|
|
print(x)
|
|
local Simple
|
|
Simple = (function()
|
|
local _parent_0 = nil
|
|
local _base_0 = {
|
|
cool = function(self)
|
|
return print("cool")
|
|
end
|
|
}
|
|
_base_0.__index = _base_0
|
|
if _parent_0 then
|
|
setmetatable(_base_0, _parent_0.__base)
|
|
end
|
|
local _class_0 = setmetatable({
|
|
__init = function(self, ...)
|
|
if _parent_0 then
|
|
return _parent_0.__init(self, ...)
|
|
end
|
|
end,
|
|
__base = _base_0,
|
|
__name = "Simple",
|
|
__parent = _parent_0
|
|
}, {
|
|
__index = function(cls, name)
|
|
local val = rawget(_base_0, name)
|
|
if val == nil and _parent_0 then
|
|
return _parent_0[name]
|
|
else
|
|
return val
|
|
end
|
|
end,
|
|
__call = function(cls, ...)
|
|
local _self_0 = setmetatable({}, _base_0)
|
|
cls.__init(_self_0, ...)
|
|
return _self_0
|
|
end
|
|
})
|
|
_base_0.__class = _class_0
|
|
return _class_0
|
|
end)()
|
|
local Yikes
|
|
Yikes = (function()
|
|
local _parent_0 = Simple
|
|
local _base_0 = { }
|
|
_base_0.__index = _base_0
|
|
if _parent_0 then
|
|
setmetatable(_base_0, _parent_0.__base)
|
|
end
|
|
local _class_0 = setmetatable({
|
|
__init = function(self)
|
|
return print("created hello")
|
|
end,
|
|
__base = _base_0,
|
|
__name = "Yikes",
|
|
__parent = _parent_0
|
|
}, {
|
|
__index = function(cls, name)
|
|
local val = rawget(_base_0, name)
|
|
if val == nil and _parent_0 then
|
|
return _parent_0[name]
|
|
else
|
|
return val
|
|
end
|
|
end,
|
|
__call = function(cls, ...)
|
|
local _self_0 = setmetatable({}, _base_0)
|
|
cls.__init(_self_0, ...)
|
|
return _self_0
|
|
end
|
|
})
|
|
_base_0.__class = _class_0
|
|
return _class_0
|
|
end)()
|
|
x = Yikes()
|
|
x:cool()
|
|
local Hi
|
|
Hi = (function()
|
|
local _parent_0 = nil
|
|
local _base_0 = {
|
|
cool = function(self, num)
|
|
return print("num", num)
|
|
end
|
|
}
|
|
_base_0.__index = _base_0
|
|
if _parent_0 then
|
|
setmetatable(_base_0, _parent_0.__base)
|
|
end
|
|
local _class_0 = setmetatable({
|
|
__init = function(self, arg)
|
|
return print("init arg", arg)
|
|
end,
|
|
__base = _base_0,
|
|
__name = "Hi",
|
|
__parent = _parent_0
|
|
}, {
|
|
__index = function(cls, name)
|
|
local val = rawget(_base_0, name)
|
|
if val == nil and _parent_0 then
|
|
return _parent_0[name]
|
|
else
|
|
return val
|
|
end
|
|
end,
|
|
__call = function(cls, ...)
|
|
local _self_0 = setmetatable({}, _base_0)
|
|
cls.__init(_self_0, ...)
|
|
return _self_0
|
|
end
|
|
})
|
|
_base_0.__class = _class_0
|
|
return _class_0
|
|
end)()
|
|
Simple = (function()
|
|
local _parent_0 = Hi
|
|
local _base_0 = {
|
|
cool = function(self)
|
|
return _parent_0.cool(self, 120302)
|
|
end
|
|
}
|
|
_base_0.__index = _base_0
|
|
if _parent_0 then
|
|
setmetatable(_base_0, _parent_0.__base)
|
|
end
|
|
local _class_0 = setmetatable({
|
|
__init = function(self)
|
|
return _parent_0.__init(self, "man")
|
|
end,
|
|
__base = _base_0,
|
|
__name = "Simple",
|
|
__parent = _parent_0
|
|
}, {
|
|
__index = function(cls, name)
|
|
local val = rawget(_base_0, name)
|
|
if val == nil and _parent_0 then
|
|
return _parent_0[name]
|
|
else
|
|
return val
|
|
end
|
|
end,
|
|
__call = function(cls, ...)
|
|
local _self_0 = setmetatable({}, _base_0)
|
|
cls.__init(_self_0, ...)
|
|
return _self_0
|
|
end
|
|
})
|
|
_base_0.__class = _class_0
|
|
return _class_0
|
|
end)()
|
|
x = Simple()
|
|
x:cool()
|
|
print(x.__class == Simple)
|
|
local Okay
|
|
Okay = (function()
|
|
local _parent_0 = nil
|
|
local _base_0 = {
|
|
something = 20323
|
|
}
|
|
_base_0.__index = _base_0
|
|
if _parent_0 then
|
|
setmetatable(_base_0, _parent_0.__base)
|
|
end
|
|
local _class_0 = setmetatable({
|
|
__init = function(self, ...)
|
|
if _parent_0 then
|
|
return _parent_0.__init(self, ...)
|
|
end
|
|
end,
|
|
__base = _base_0,
|
|
__name = "Okay",
|
|
__parent = _parent_0
|
|
}, {
|
|
__index = function(cls, name)
|
|
local val = rawget(_base_0, name)
|
|
if val == nil and _parent_0 then
|
|
return _parent_0[name]
|
|
else
|
|
return val
|
|
end
|
|
end,
|
|
__call = function(cls, ...)
|
|
local _self_0 = setmetatable({}, _base_0)
|
|
cls.__init(_self_0, ...)
|
|
return _self_0
|
|
end
|
|
})
|
|
_base_0.__class = _class_0
|
|
return _class_0
|
|
end)()
|
|
local Biggie
|
|
Biggie = (function()
|
|
local _parent_0 = Okay
|
|
local _base_0 = {
|
|
something = function(self)
|
|
_parent_0.something(self, 1, 2, 3, 4)
|
|
_parent_0.something(another_self, 1, 2, 3, 4)
|
|
return assert(_parent_0 == Okay)
|
|
end
|
|
}
|
|
_base_0.__index = _base_0
|
|
if _parent_0 then
|
|
setmetatable(_base_0, _parent_0.__base)
|
|
end
|
|
local _class_0 = setmetatable({
|
|
__init = function(self, ...)
|
|
if _parent_0 then
|
|
return _parent_0.__init(self, ...)
|
|
end
|
|
end,
|
|
__base = _base_0,
|
|
__name = "Biggie",
|
|
__parent = _parent_0
|
|
}, {
|
|
__index = function(cls, name)
|
|
local val = rawget(_base_0, name)
|
|
if val == nil and _parent_0 then
|
|
return _parent_0[name]
|
|
else
|
|
return val
|
|
end
|
|
end,
|
|
__call = function(cls, ...)
|
|
local _self_0 = setmetatable({}, _base_0)
|
|
cls.__init(_self_0, ...)
|
|
return _self_0
|
|
end
|
|
})
|
|
_base_0.__class = _class_0
|
|
return _class_0
|
|
end)()
|
|
local Yeah
|
|
Yeah = (function()
|
|
local _parent_0 = nil
|
|
local _base_0 = {
|
|
okay = function(self)
|
|
return _parent_0.something(self, 1, 2, 3, 4)
|
|
end
|
|
}
|
|
_base_0.__index = _base_0
|
|
if _parent_0 then
|
|
setmetatable(_base_0, _parent_0.__base)
|
|
end
|
|
local _class_0 = setmetatable({
|
|
__init = function(self, ...)
|
|
if _parent_0 then
|
|
return _parent_0.__init(self, ...)
|
|
end
|
|
end,
|
|
__base = _base_0,
|
|
__name = "Yeah",
|
|
__parent = _parent_0
|
|
}, {
|
|
__index = function(cls, name)
|
|
local val = rawget(_base_0, name)
|
|
if val == nil and _parent_0 then
|
|
return _parent_0[name]
|
|
else
|
|
return val
|
|
end
|
|
end,
|
|
__call = function(cls, ...)
|
|
local _self_0 = setmetatable({}, _base_0)
|
|
cls.__init(_self_0, ...)
|
|
return _self_0
|
|
end
|
|
})
|
|
_base_0.__class = _class_0
|
|
return _class_0
|
|
end)()
|
|
local What
|
|
What = (function()
|
|
local _parent_0 = nil
|
|
local _base_0 = {
|
|
something = function(self)
|
|
return print("val:", self.val)
|
|
end
|
|
}
|
|
_base_0.__index = _base_0
|
|
if _parent_0 then
|
|
setmetatable(_base_0, _parent_0.__base)
|
|
end
|
|
local _class_0 = setmetatable({
|
|
__init = function(self, ...)
|
|
if _parent_0 then
|
|
return _parent_0.__init(self, ...)
|
|
end
|
|
end,
|
|
__base = _base_0,
|
|
__name = "What",
|
|
__parent = _parent_0
|
|
}, {
|
|
__index = function(cls, name)
|
|
local val = rawget(_base_0, name)
|
|
if val == nil and _parent_0 then
|
|
return _parent_0[name]
|
|
else
|
|
return val
|
|
end
|
|
end,
|
|
__call = function(cls, ...)
|
|
local _self_0 = setmetatable({}, _base_0)
|
|
cls.__init(_self_0, ...)
|
|
return _self_0
|
|
end
|
|
})
|
|
_base_0.__class = _class_0
|
|
return _class_0
|
|
end)()
|
|
Hello = (function()
|
|
local _parent_0 = What
|
|
local _base_0 = {
|
|
val = 2323,
|
|
something = function(self)
|
|
return (function()
|
|
local _base_1 = _parent_0
|
|
local _fn_0 = _base_1.something
|
|
return function(...)
|
|
return _fn_0(self, ...)
|
|
end
|
|
end)()
|
|
end
|
|
}
|
|
_base_0.__index = _base_0
|
|
if _parent_0 then
|
|
setmetatable(_base_0, _parent_0.__base)
|
|
end
|
|
local _class_0 = setmetatable({
|
|
__init = function(self, ...)
|
|
if _parent_0 then
|
|
return _parent_0.__init(self, ...)
|
|
end
|
|
end,
|
|
__base = _base_0,
|
|
__name = "Hello",
|
|
__parent = _parent_0
|
|
}, {
|
|
__index = function(cls, name)
|
|
local val = rawget(_base_0, name)
|
|
if val == nil and _parent_0 then
|
|
return _parent_0[name]
|
|
else
|
|
return val
|
|
end
|
|
end,
|
|
__call = function(cls, ...)
|
|
local _self_0 = setmetatable({}, _base_0)
|
|
cls.__init(_self_0, ...)
|
|
return _self_0
|
|
end
|
|
})
|
|
_base_0.__class = _class_0
|
|
return _class_0
|
|
end)()
|
|
do
|
|
local _with_0 = Hello()
|
|
x = _with_0:something()
|
|
print(x)
|
|
x()
|
|
end
|
|
local CoolSuper
|
|
CoolSuper = (function()
|
|
local _parent_0 = nil
|
|
local _base_0 = {
|
|
hi = function(self)
|
|
_parent_0.hi(self, 1, 2, 3, 4)(1, 2, 3, 4)
|
|
_parent_0.something(1, 2, 3, 4)
|
|
local _ = _parent_0.something(1, 2, 3, 4).world
|
|
_parent_0.yeah(self, "world").okay(hi, hi, hi)
|
|
_ = something.super
|
|
_ = _parent_0.super.super.super
|
|
return nil
|
|
end
|
|
}
|
|
_base_0.__index = _base_0
|
|
if _parent_0 then
|
|
setmetatable(_base_0, _parent_0.__base)
|
|
end
|
|
local _class_0 = setmetatable({
|
|
__init = function(self, ...)
|
|
if _parent_0 then
|
|
return _parent_0.__init(self, ...)
|
|
end
|
|
end,
|
|
__base = _base_0,
|
|
__name = "CoolSuper",
|
|
__parent = _parent_0
|
|
}, {
|
|
__index = function(cls, name)
|
|
local val = rawget(_base_0, name)
|
|
if val == nil and _parent_0 then
|
|
return _parent_0[name]
|
|
else
|
|
return val
|
|
end
|
|
end,
|
|
__call = function(cls, ...)
|
|
local _self_0 = setmetatable({}, _base_0)
|
|
cls.__init(_self_0, ...)
|
|
return _self_0
|
|
end
|
|
})
|
|
_base_0.__class = _class_0
|
|
return _class_0
|
|
end)() |