1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
local _anon_func_0 = function(setmetatable)
local _class_0
local _base_0 = { }
if _base_0.__index == nil then
_base_0.__index = _base_0
end
_class_0 = setmetatable({
__init = function(self)
self.value = 1
end,
__base = _base_0
}, {
__index = _base_0,
__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 _anon_func_1 = function(setmetatable)
local _class_0
local _base_0 = { }
if _base_0.__index == nil then
_base_0.__index = _base_0
end
_class_0 = setmetatable({
__init = function(self)
self.value = 2
end,
__base = _base_0
}, {
__index = _base_0,
__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
return describe("class expression", function()
it("should support class expression assignment", function()
local MyClass
do
local _class_0
local _base_0 = {
value = 100
}
if _base_0.__index == nil then
_base_0.__index = _base_0
end
_class_0 = setmetatable({
__init = function() end,
__base = _base_0,
__name = "MyClass"
}, {
__index = _base_0,
__call = function(cls, ...)
local _self_0 = setmetatable({ }, _base_0)
cls.__init(_self_0, ...)
return _self_0
end
})
_base_0.__class = _class_0
MyClass = _class_0
end
return assert.same(MyClass.value, 100)
end)
it("should support class expression in table", function()
local classes = {
Alpha = _anon_func_0(setmetatable),
Beta = _anon_func_1(setmetatable)
}
local a = classes.Alpha()
local b = classes.Beta()
assert.same(a.value, 1)
return assert.same(b.value, 2)
end)
return it("should work with return", function()
local fn
fn = function()
local _class_0
local _base_0 = {
value = 50
}
if _base_0.__index == nil then
_base_0.__index = _base_0
end
_class_0 = setmetatable({
__init = function() end,
__base = _base_0
}, {
__index = _base_0,
__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 Instance = fn()
return assert.same(Instance().value, 50)
end)
end)
|