typescript-to-lua 1.22.0 → 1.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/LuaAST.d.ts +7 -7
- package/dist/LuaLib.d.ts +2 -0
- package/dist/LuaLib.js +2 -0
- package/dist/lualib/5.0/Await.lua +42 -42
- package/dist/lualib/5.0/DescriptorGet.lua +24 -0
- package/dist/lualib/5.0/DescriptorSet.lua +30 -0
- package/dist/lualib/5.0/Promise.lua +83 -109
- package/dist/lualib/5.0/SetDescriptor.lua +12 -45
- package/dist/lualib/5.0/lualib_bundle.lua +180 -181
- package/dist/lualib/5.0/lualib_module_info.json +14 -4
- package/dist/lualib/universal/Await.lua +42 -42
- package/dist/lualib/universal/DescriptorGet.lua +24 -0
- package/dist/lualib/universal/DescriptorSet.lua +30 -0
- package/dist/lualib/universal/Promise.lua +83 -109
- package/dist/lualib/universal/SetDescriptor.lua +12 -45
- package/dist/lualib/universal/lualib_bundle.lua +180 -181
- package/dist/lualib/universal/lualib_module_info.json +14 -4
- package/dist/transformation/utils/function-context.js +5 -1
- package/dist/transformation/visitors/access.js +6 -0
- package/dist/transformation/visitors/binary-expression/assignments.js +14 -4
- package/dist/transpilation/resolve.js +7 -7
- package/package.json +3 -3
package/dist/LuaAST.d.ts
CHANGED
|
@@ -33,25 +33,25 @@ export declare enum SyntaxKind {
|
|
|
33
33
|
Identifier = 29,
|
|
34
34
|
TableIndexExpression = 30,
|
|
35
35
|
ParenthesizedExpression = 31,
|
|
36
|
-
AdditionOperator = 32,
|
|
36
|
+
AdditionOperator = 32,// Maybe use abbreviations for those add, sub, mul ...
|
|
37
37
|
SubtractionOperator = 33,
|
|
38
38
|
MultiplicationOperator = 34,
|
|
39
39
|
DivisionOperator = 35,
|
|
40
40
|
FloorDivisionOperator = 36,
|
|
41
41
|
ModuloOperator = 37,
|
|
42
42
|
PowerOperator = 38,
|
|
43
|
-
NegationOperator = 39
|
|
43
|
+
NegationOperator = 39,// Unary minus
|
|
44
44
|
ConcatOperator = 40,
|
|
45
|
-
LengthOperator = 41
|
|
45
|
+
LengthOperator = 41,// Unary
|
|
46
46
|
EqualityOperator = 42,
|
|
47
47
|
InequalityOperator = 43,
|
|
48
48
|
LessThanOperator = 44,
|
|
49
49
|
LessEqualOperator = 45,
|
|
50
50
|
GreaterThanOperator = 46,
|
|
51
|
-
GreaterEqualOperator = 47
|
|
51
|
+
GreaterEqualOperator = 47,// Syntax Sugar `x >= y` <=> `not (y < x)`
|
|
52
52
|
AndOperator = 48,
|
|
53
53
|
OrOperator = 49,
|
|
54
|
-
NotOperator = 50
|
|
54
|
+
NotOperator = 50,// Unary
|
|
55
55
|
BitwiseAndOperator = 51,
|
|
56
56
|
BitwiseOrOperator = 52,
|
|
57
57
|
BitwiseExclusiveOrOperator = 53,
|
|
@@ -69,8 +69,8 @@ export type SymbolId = number & {
|
|
|
69
69
|
};
|
|
70
70
|
export declare enum NodeFlags {
|
|
71
71
|
None = 0,
|
|
72
|
-
Inline = 1
|
|
73
|
-
Declaration = 2
|
|
72
|
+
Inline = 1,// Keep function body on same line
|
|
73
|
+
Declaration = 2,// Prefer declaration syntax `function foo()` over assignment syntax `foo = function()`
|
|
74
74
|
TableUnpackCall = 4
|
|
75
75
|
}
|
|
76
76
|
export interface TextRange {
|
package/dist/LuaLib.d.ts
CHANGED
|
@@ -45,6 +45,8 @@ export declare enum LuaLibFeature {
|
|
|
45
45
|
DecorateParam = "DecorateParam",
|
|
46
46
|
Delete = "Delete",
|
|
47
47
|
DelegatedYield = "DelegatedYield",
|
|
48
|
+
DescriptorGet = "DescriptorGet",
|
|
49
|
+
DescriptorSet = "DescriptorSet",
|
|
48
50
|
Error = "Error",
|
|
49
51
|
FunctionBind = "FunctionBind",
|
|
50
52
|
Generator = "Generator",
|
package/dist/LuaLib.js
CHANGED
|
@@ -50,6 +50,8 @@ var LuaLibFeature;
|
|
|
50
50
|
LuaLibFeature["DecorateParam"] = "DecorateParam";
|
|
51
51
|
LuaLibFeature["Delete"] = "Delete";
|
|
52
52
|
LuaLibFeature["DelegatedYield"] = "DelegatedYield";
|
|
53
|
+
LuaLibFeature["DescriptorGet"] = "DescriptorGet";
|
|
54
|
+
LuaLibFeature["DescriptorSet"] = "DescriptorSet";
|
|
53
55
|
LuaLibFeature["Error"] = "Error";
|
|
54
56
|
LuaLibFeature["FunctionBind"] = "FunctionBind";
|
|
55
57
|
LuaLibFeature["Generator"] = "Generator";
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
local
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
local __TS__AsyncAwaiter, __TS__Await
|
|
2
|
+
do
|
|
3
|
+
local cocreate = coroutine.create
|
|
4
|
+
local coresume = coroutine.resume
|
|
5
|
+
local costatus = coroutine.status
|
|
6
|
+
local coyield = coroutine.yield
|
|
7
|
+
function __TS__AsyncAwaiter(generator)
|
|
8
|
+
return __TS__New(
|
|
9
|
+
__TS__Promise,
|
|
10
|
+
function(____, resolve, reject)
|
|
11
|
+
local fulfilled, step, resolved, asyncCoroutine
|
|
12
|
+
function fulfilled(self, value)
|
|
13
|
+
local success, resultOrError = coresume(asyncCoroutine, value)
|
|
14
|
+
if success then
|
|
15
|
+
return step(resultOrError)
|
|
16
|
+
end
|
|
17
|
+
return reject(nil, resultOrError)
|
|
15
18
|
end
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
function step(result)
|
|
20
|
+
if resolved then
|
|
21
|
+
return
|
|
22
|
+
end
|
|
23
|
+
if costatus(asyncCoroutine) == "dead" then
|
|
24
|
+
return resolve(nil, result)
|
|
25
|
+
end
|
|
26
|
+
return __TS__Promise.resolve(result):addCallbacks(fulfilled, reject)
|
|
20
27
|
end
|
|
21
|
-
|
|
22
|
-
|
|
28
|
+
resolved = false
|
|
29
|
+
asyncCoroutine = cocreate(generator)
|
|
30
|
+
local success, resultOrError = coresume(
|
|
31
|
+
asyncCoroutine,
|
|
32
|
+
function(____, v)
|
|
33
|
+
resolved = true
|
|
34
|
+
return __TS__Promise.resolve(v):addCallbacks(resolve, reject)
|
|
35
|
+
end
|
|
36
|
+
)
|
|
37
|
+
if success then
|
|
38
|
+
return step(resultOrError)
|
|
23
39
|
else
|
|
24
|
-
|
|
25
|
-
____self_0["then"](____self_0, fulfilled, reject)
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
resolved = false
|
|
29
|
-
asyncCoroutine = coroutine.create(generator)
|
|
30
|
-
local success, resultOrError = coroutine.resume(
|
|
31
|
-
asyncCoroutine,
|
|
32
|
-
function(____, v)
|
|
33
|
-
resolved = true
|
|
34
|
-
local ____self_1 = adopt(nil, v)
|
|
35
|
-
____self_1["then"](____self_1, resolve, reject)
|
|
40
|
+
return reject(nil, resultOrError)
|
|
36
41
|
end
|
|
37
|
-
)
|
|
38
|
-
if success then
|
|
39
|
-
step(nil, resultOrError)
|
|
40
|
-
else
|
|
41
|
-
reject(nil, resultOrError)
|
|
42
42
|
end
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
43
|
+
)
|
|
44
|
+
end
|
|
45
|
+
function __TS__Await(thing)
|
|
46
|
+
return coyield(thing)
|
|
47
|
+
end
|
|
48
48
|
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
local __TS__DescriptorGet
|
|
2
|
+
do
|
|
3
|
+
local getmetatable = _G.getmetatable
|
|
4
|
+
local ____rawget = _G.rawget
|
|
5
|
+
function __TS__DescriptorGet(self, metatable, key)
|
|
6
|
+
while metatable do
|
|
7
|
+
local rawResult = ____rawget(metatable, key)
|
|
8
|
+
if rawResult ~= nil then
|
|
9
|
+
return rawResult
|
|
10
|
+
end
|
|
11
|
+
local descriptors = ____rawget(metatable, "_descriptors")
|
|
12
|
+
if descriptors then
|
|
13
|
+
local descriptor = descriptors[key]
|
|
14
|
+
if descriptor ~= nil then
|
|
15
|
+
if descriptor.get then
|
|
16
|
+
return descriptor.get(self)
|
|
17
|
+
end
|
|
18
|
+
return descriptor.value
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
metatable = getmetatable(metatable)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
local __TS__DescriptorSet
|
|
2
|
+
do
|
|
3
|
+
local getmetatable = _G.getmetatable
|
|
4
|
+
local ____rawget = _G.rawget
|
|
5
|
+
local rawset = _G.rawset
|
|
6
|
+
function __TS__DescriptorSet(self, metatable, key, value)
|
|
7
|
+
while metatable do
|
|
8
|
+
local descriptors = ____rawget(metatable, "_descriptors")
|
|
9
|
+
if descriptors then
|
|
10
|
+
local descriptor = descriptors[key]
|
|
11
|
+
if descriptor ~= nil then
|
|
12
|
+
if descriptor.set then
|
|
13
|
+
descriptor.set(self, value)
|
|
14
|
+
else
|
|
15
|
+
if descriptor.writable == false then
|
|
16
|
+
error(
|
|
17
|
+
((("Cannot assign to read only property '" .. key) .. "' of object '") .. tostring(self)) .. "'",
|
|
18
|
+
0
|
|
19
|
+
)
|
|
20
|
+
end
|
|
21
|
+
descriptor.value = value
|
|
22
|
+
end
|
|
23
|
+
return
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
metatable = getmetatable(metatable)
|
|
27
|
+
end
|
|
28
|
+
rawset(self, key, value)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
local __TS__Promise
|
|
2
2
|
do
|
|
3
|
-
local function
|
|
3
|
+
local function makeDeferredPromiseFactory()
|
|
4
4
|
local resolve
|
|
5
5
|
local reject
|
|
6
|
-
local
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
local function executor(____, res, rej)
|
|
7
|
+
resolve = res
|
|
8
|
+
reject = rej
|
|
9
|
+
end
|
|
10
|
+
return function()
|
|
11
|
+
local promise = __TS__New(__TS__Promise, executor)
|
|
12
|
+
return promise, resolve, reject
|
|
13
|
+
end
|
|
14
14
|
end
|
|
15
|
-
local
|
|
16
|
-
|
|
15
|
+
local makeDeferredPromise = makeDeferredPromiseFactory()
|
|
16
|
+
local function isPromiseLike(value)
|
|
17
|
+
return __TS__InstanceOf(value, __TS__Promise)
|
|
17
18
|
end
|
|
19
|
+
local function doNothing(self)
|
|
20
|
+
end
|
|
21
|
+
local ____pcall = _G.pcall
|
|
18
22
|
__TS__Promise = __TS__Class()
|
|
19
23
|
__TS__Promise.name = "__TS__Promise"
|
|
20
24
|
function __TS__Promise.prototype.____constructor(self, executor)
|
|
@@ -22,155 +26,125 @@ do
|
|
|
22
26
|
self.fulfilledCallbacks = {}
|
|
23
27
|
self.rejectedCallbacks = {}
|
|
24
28
|
self.finallyCallbacks = {}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
__TS__FunctionBind(self.reject, self)
|
|
34
|
-
)
|
|
35
|
-
end)
|
|
36
|
-
if not ____try then
|
|
37
|
-
____catch(____hasReturned)
|
|
38
|
-
end
|
|
29
|
+
local success, ____error = ____pcall(
|
|
30
|
+
executor,
|
|
31
|
+
nil,
|
|
32
|
+
function(____, v) return self:resolve(v) end,
|
|
33
|
+
function(____, err) return self:reject(err) end
|
|
34
|
+
)
|
|
35
|
+
if not success then
|
|
36
|
+
self:reject(____error)
|
|
39
37
|
end
|
|
40
38
|
end
|
|
41
|
-
function __TS__Promise.resolve(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
)
|
|
39
|
+
function __TS__Promise.resolve(value)
|
|
40
|
+
if __TS__InstanceOf(value, __TS__Promise) then
|
|
41
|
+
return value
|
|
42
|
+
end
|
|
43
|
+
local promise = __TS__New(__TS__Promise, doNothing)
|
|
47
44
|
promise.state = 1
|
|
48
|
-
promise.value =
|
|
45
|
+
promise.value = value
|
|
49
46
|
return promise
|
|
50
47
|
end
|
|
51
48
|
function __TS__Promise.reject(reason)
|
|
52
|
-
local promise = __TS__New(
|
|
53
|
-
__TS__Promise,
|
|
54
|
-
function()
|
|
55
|
-
end
|
|
56
|
-
)
|
|
49
|
+
local promise = __TS__New(__TS__Promise, doNothing)
|
|
57
50
|
promise.state = 2
|
|
58
51
|
promise.rejectionReason = reason
|
|
59
52
|
return promise
|
|
60
53
|
end
|
|
61
54
|
__TS__Promise.prototype["then"] = function(self, onFulfilled, onRejected)
|
|
62
|
-
local
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if isFulfilled then
|
|
73
|
-
internalCallback(nil, self.value)
|
|
74
|
-
end
|
|
75
|
-
else
|
|
76
|
-
local ____self_fulfilledCallbacks_2 = self.fulfilledCallbacks
|
|
77
|
-
____self_fulfilledCallbacks_2[table.getn(____self_fulfilledCallbacks_2) + 1] = function(____, v) return resolve(nil, v) end
|
|
78
|
-
end
|
|
79
|
-
if onRejected then
|
|
80
|
-
local internalCallback = self:createPromiseResolvingCallback(onRejected, resolve, reject)
|
|
81
|
-
local ____self_rejectedCallbacks_3 = self.rejectedCallbacks
|
|
82
|
-
____self_rejectedCallbacks_3[table.getn(____self_rejectedCallbacks_3) + 1] = internalCallback
|
|
83
|
-
if isRejected then
|
|
84
|
-
internalCallback(nil, self.rejectionReason)
|
|
85
|
-
end
|
|
86
|
-
else
|
|
87
|
-
local ____self_rejectedCallbacks_4 = self.rejectedCallbacks
|
|
88
|
-
____self_rejectedCallbacks_4[table.getn(____self_rejectedCallbacks_4) + 1] = function(____, err) return reject(nil, err) end
|
|
89
|
-
end
|
|
90
|
-
if isFulfilled then
|
|
91
|
-
resolve(nil, self.value)
|
|
55
|
+
local promise, resolve, reject = makeDeferredPromise()
|
|
56
|
+
self:addCallbacks(
|
|
57
|
+
onFulfilled and self:createPromiseResolvingCallback(onFulfilled, resolve, reject) or resolve,
|
|
58
|
+
onRejected and self:createPromiseResolvingCallback(onRejected, resolve, reject) or reject
|
|
59
|
+
)
|
|
60
|
+
return promise
|
|
61
|
+
end
|
|
62
|
+
function __TS__Promise.prototype.addCallbacks(self, fulfilledCallback, rejectedCallback)
|
|
63
|
+
if self.state == 1 then
|
|
64
|
+
return fulfilledCallback(nil, self.value)
|
|
92
65
|
end
|
|
93
|
-
if
|
|
94
|
-
|
|
66
|
+
if self.state == 2 then
|
|
67
|
+
return rejectedCallback(nil, self.rejectionReason)
|
|
95
68
|
end
|
|
96
|
-
|
|
69
|
+
local ____self_fulfilledCallbacks_0 = self.fulfilledCallbacks
|
|
70
|
+
____self_fulfilledCallbacks_0[table.getn(____self_fulfilledCallbacks_0) + 1] = fulfilledCallback
|
|
71
|
+
local ____self_rejectedCallbacks_1 = self.rejectedCallbacks
|
|
72
|
+
____self_rejectedCallbacks_1[table.getn(____self_rejectedCallbacks_1) + 1] = rejectedCallback
|
|
97
73
|
end
|
|
98
74
|
function __TS__Promise.prototype.catch(self, onRejected)
|
|
99
75
|
return self["then"](self, nil, onRejected)
|
|
100
76
|
end
|
|
101
77
|
function __TS__Promise.prototype.finally(self, onFinally)
|
|
102
78
|
if onFinally then
|
|
103
|
-
local
|
|
104
|
-
|
|
79
|
+
local ____self_finallyCallbacks_2 = self.finallyCallbacks
|
|
80
|
+
____self_finallyCallbacks_2[table.getn(____self_finallyCallbacks_2) + 1] = onFinally
|
|
105
81
|
if self.state ~= 0 then
|
|
106
82
|
onFinally(nil)
|
|
107
83
|
end
|
|
108
84
|
end
|
|
109
85
|
return self
|
|
110
86
|
end
|
|
111
|
-
function __TS__Promise.prototype.resolve(self,
|
|
112
|
-
if
|
|
113
|
-
|
|
114
|
-
data,
|
|
87
|
+
function __TS__Promise.prototype.resolve(self, value)
|
|
88
|
+
if isPromiseLike(value) then
|
|
89
|
+
return value:addCallbacks(
|
|
115
90
|
function(____, v) return self:resolve(v) end,
|
|
116
91
|
function(____, err) return self:reject(err) end
|
|
117
92
|
)
|
|
118
|
-
return
|
|
119
93
|
end
|
|
120
94
|
if self.state == 0 then
|
|
121
95
|
self.state = 1
|
|
122
|
-
self.value =
|
|
123
|
-
|
|
124
|
-
callback(nil, data)
|
|
125
|
-
end
|
|
126
|
-
for ____, callback in ipairs(self.finallyCallbacks) do
|
|
127
|
-
callback(nil)
|
|
128
|
-
end
|
|
96
|
+
self.value = value
|
|
97
|
+
return self:invokeCallbacks(self.fulfilledCallbacks, value)
|
|
129
98
|
end
|
|
130
99
|
end
|
|
131
100
|
function __TS__Promise.prototype.reject(self, reason)
|
|
132
101
|
if self.state == 0 then
|
|
133
102
|
self.state = 2
|
|
134
103
|
self.rejectionReason = reason
|
|
135
|
-
|
|
136
|
-
|
|
104
|
+
return self:invokeCallbacks(self.rejectedCallbacks, reason)
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
function __TS__Promise.prototype.invokeCallbacks(self, callbacks, value)
|
|
108
|
+
local callbacksLength = table.getn(callbacks)
|
|
109
|
+
local finallyCallbacks = self.finallyCallbacks
|
|
110
|
+
local finallyCallbacksLength = table.getn(finallyCallbacks)
|
|
111
|
+
if callbacksLength ~= 0 then
|
|
112
|
+
for i = 1, callbacksLength - 1 do
|
|
113
|
+
callbacks[i](callbacks, value)
|
|
114
|
+
end
|
|
115
|
+
if finallyCallbacksLength == 0 then
|
|
116
|
+
return callbacks[callbacksLength](callbacks, value)
|
|
137
117
|
end
|
|
138
|
-
|
|
139
|
-
|
|
118
|
+
callbacks[callbacksLength](callbacks, value)
|
|
119
|
+
end
|
|
120
|
+
if finallyCallbacksLength ~= 0 then
|
|
121
|
+
for i = 1, finallyCallbacksLength - 1 do
|
|
122
|
+
finallyCallbacks[i](finallyCallbacks)
|
|
140
123
|
end
|
|
124
|
+
return finallyCallbacks[finallyCallbacksLength](finallyCallbacks)
|
|
141
125
|
end
|
|
142
126
|
end
|
|
143
127
|
function __TS__Promise.prototype.createPromiseResolvingCallback(self, f, resolve, reject)
|
|
144
128
|
return function(____, value)
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
end
|
|
149
|
-
local ____try, ____hasReturned = pcall(function()
|
|
150
|
-
self:handleCallbackData(
|
|
151
|
-
f(nil, value),
|
|
152
|
-
resolve,
|
|
153
|
-
reject
|
|
154
|
-
)
|
|
155
|
-
end)
|
|
156
|
-
if not ____try then
|
|
157
|
-
____catch(____hasReturned)
|
|
158
|
-
end
|
|
129
|
+
local success, resultOrError = ____pcall(f, nil, value)
|
|
130
|
+
if not success then
|
|
131
|
+
return reject(nil, resultOrError)
|
|
159
132
|
end
|
|
133
|
+
return self:handleCallbackValue(resultOrError, resolve, reject)
|
|
160
134
|
end
|
|
161
135
|
end
|
|
162
|
-
function __TS__Promise.prototype.
|
|
163
|
-
if isPromiseLike(
|
|
164
|
-
local nextpromise =
|
|
136
|
+
function __TS__Promise.prototype.handleCallbackValue(self, value, resolve, reject)
|
|
137
|
+
if isPromiseLike(value) then
|
|
138
|
+
local nextpromise = value
|
|
165
139
|
if nextpromise.state == 1 then
|
|
166
|
-
resolve(nil, nextpromise.value)
|
|
140
|
+
return resolve(nil, nextpromise.value)
|
|
167
141
|
elseif nextpromise.state == 2 then
|
|
168
|
-
reject(nil, nextpromise.rejectionReason)
|
|
142
|
+
return reject(nil, nextpromise.rejectionReason)
|
|
169
143
|
else
|
|
170
|
-
|
|
144
|
+
return nextpromise:addCallbacks(resolve, reject)
|
|
171
145
|
end
|
|
172
146
|
else
|
|
173
|
-
resolve(nil,
|
|
147
|
+
return resolve(nil, value)
|
|
174
148
|
end
|
|
175
149
|
end
|
|
176
150
|
end
|
|
@@ -1,53 +1,20 @@
|
|
|
1
1
|
local __TS__SetDescriptor
|
|
2
2
|
do
|
|
3
|
+
local getmetatable = _G.getmetatable
|
|
3
4
|
local function descriptorIndex(self, key)
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
while metatable do
|
|
10
|
-
local rawResult = rawget(metatable, key)
|
|
11
|
-
if rawResult ~= nil then
|
|
12
|
-
return rawResult
|
|
13
|
-
end
|
|
14
|
-
local descriptors = rawget(metatable, "_descriptors")
|
|
15
|
-
if descriptors then
|
|
16
|
-
local descriptor = descriptors[key]
|
|
17
|
-
if descriptor ~= nil then
|
|
18
|
-
if descriptor.get then
|
|
19
|
-
return descriptor.get(self)
|
|
20
|
-
end
|
|
21
|
-
return descriptor.value
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
metatable = getmetatable(metatable)
|
|
25
|
-
end
|
|
5
|
+
return __TS__DescriptorGet(
|
|
6
|
+
self,
|
|
7
|
+
getmetatable(self),
|
|
8
|
+
key
|
|
9
|
+
)
|
|
26
10
|
end
|
|
27
11
|
local function descriptorNewIndex(self, key, value)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
if descriptor.set then
|
|
35
|
-
descriptor.set(self, value)
|
|
36
|
-
else
|
|
37
|
-
if descriptor.writable == false then
|
|
38
|
-
error(
|
|
39
|
-
((("Cannot assign to read only property '" .. key) .. "' of object '") .. tostring(self)) .. "'",
|
|
40
|
-
0
|
|
41
|
-
)
|
|
42
|
-
end
|
|
43
|
-
descriptor.value = value
|
|
44
|
-
end
|
|
45
|
-
return
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
metatable = getmetatable(metatable)
|
|
49
|
-
end
|
|
50
|
-
rawset(self, key, value)
|
|
12
|
+
return __TS__DescriptorSet(
|
|
13
|
+
self,
|
|
14
|
+
getmetatable(self),
|
|
15
|
+
key,
|
|
16
|
+
value
|
|
17
|
+
)
|
|
51
18
|
end
|
|
52
19
|
function __TS__SetDescriptor(target, key, desc, isPrototype)
|
|
53
20
|
if isPrototype == nil then
|