rufus-lua-moon 0.2.2 → 0.2.3
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.
- checksums.yaml +4 -4
- data/vendor/lua/moon/init.moon +1 -1
- data/vendor/lua/moonscript/compile/statement.lua +26 -26
- data/vendor/lua/moonscript/compile/value.lua +24 -22
- data/vendor/lua/moonscript/compile.lua +165 -68
- data/vendor/lua/moonscript/data.lua +11 -6
- data/vendor/lua/moonscript/dump.lua +8 -3
- data/vendor/lua/moonscript/errors.lua +18 -6
- data/vendor/lua/moonscript/init.lua +37 -21
- data/vendor/lua/moonscript/line_tables.lua +1 -0
- data/vendor/lua/moonscript/parse.lua +34 -20
- data/vendor/lua/moonscript/transform/destructure.lua +234 -0
- data/vendor/lua/moonscript/transform/names.lua +144 -0
- data/vendor/lua/moonscript/transform.lua +230 -263
- data/vendor/lua/moonscript/types.lua +75 -31
- data/vendor/lua/moonscript/util.lua +102 -28
- data/vendor/lua/moonscript/version.lua +1 -1
- metadata +4 -2
- data/vendor/lua/moonscript/compile/format.lua +0 -49
@@ -1,142 +1,17 @@
|
|
1
|
-
module("moonscript.transform", package.seeall)
|
2
1
|
local types = require("moonscript.types")
|
3
2
|
local util = require("moonscript.util")
|
4
3
|
local data = require("moonscript.data")
|
5
|
-
local reversed = util.reversed
|
6
|
-
local ntype, build, smart_node, is_slice, value_is_singular = types.ntype, types.build, types.smart_node, types.is_slice, types.value_is_singular
|
4
|
+
local reversed, unpack = util.reversed, util.unpack
|
5
|
+
local ntype, mtype, build, smart_node, is_slice, value_is_singular = types.ntype, types.mtype, types.build, types.smart_node, types.is_slice, types.value_is_singular
|
7
6
|
local insert = table.insert
|
8
|
-
local
|
9
|
-
local implicitly_return
|
7
|
+
local NameProxy, LocalName
|
10
8
|
do
|
11
|
-
local
|
12
|
-
|
13
|
-
get_name = function(self)
|
14
|
-
return self.name
|
15
|
-
end
|
16
|
-
}
|
17
|
-
_base_0.__index = _base_0
|
18
|
-
if _parent_0 then
|
19
|
-
setmetatable(_base_0, _parent_0.__base)
|
20
|
-
end
|
21
|
-
local _class_0 = setmetatable({
|
22
|
-
__init = function(self, name)
|
23
|
-
self.name = name
|
24
|
-
self[1] = "temp_name"
|
25
|
-
end,
|
26
|
-
__base = _base_0,
|
27
|
-
__name = "LocalName",
|
28
|
-
__parent = _parent_0
|
29
|
-
}, {
|
30
|
-
__index = function(cls, name)
|
31
|
-
local val = rawget(_base_0, name)
|
32
|
-
if val == nil and _parent_0 then
|
33
|
-
return _parent_0[name]
|
34
|
-
else
|
35
|
-
return val
|
36
|
-
end
|
37
|
-
end,
|
38
|
-
__call = function(cls, ...)
|
39
|
-
local _self_0 = setmetatable({}, _base_0)
|
40
|
-
cls.__init(_self_0, ...)
|
41
|
-
return _self_0
|
42
|
-
end
|
43
|
-
})
|
44
|
-
_base_0.__class = _class_0
|
45
|
-
if _parent_0 and _parent_0.__inherited then
|
46
|
-
_parent_0.__inherited(_parent_0, _class_0)
|
47
|
-
end
|
48
|
-
LocalName = _class_0
|
49
|
-
end
|
50
|
-
do
|
51
|
-
local _parent_0 = nil
|
52
|
-
local _base_0 = {
|
53
|
-
get_name = function(self, scope)
|
54
|
-
if not self.name then
|
55
|
-
self.name = scope:free_name(self.prefix, true)
|
56
|
-
end
|
57
|
-
return self.name
|
58
|
-
end,
|
59
|
-
chain = function(self, ...)
|
60
|
-
local items = {
|
61
|
-
...
|
62
|
-
}
|
63
|
-
items = (function()
|
64
|
-
local _accum_0 = { }
|
65
|
-
local _len_0 = 0
|
66
|
-
local _list_0 = items
|
67
|
-
for _index_0 = 1, #_list_0 do
|
68
|
-
local i = _list_0[_index_0]
|
69
|
-
local _value_0
|
70
|
-
if type(i) == "string" then
|
71
|
-
_value_0 = {
|
72
|
-
"dot",
|
73
|
-
i
|
74
|
-
}
|
75
|
-
else
|
76
|
-
_value_0 = i
|
77
|
-
end
|
78
|
-
if _value_0 ~= nil then
|
79
|
-
_len_0 = _len_0 + 1
|
80
|
-
_accum_0[_len_0] = _value_0
|
81
|
-
end
|
82
|
-
end
|
83
|
-
return _accum_0
|
84
|
-
end)()
|
85
|
-
return build.chain({
|
86
|
-
base = self,
|
87
|
-
unpack(items)
|
88
|
-
})
|
89
|
-
end,
|
90
|
-
index = function(self, key)
|
91
|
-
return build.chain({
|
92
|
-
base = self,
|
93
|
-
{
|
94
|
-
"index",
|
95
|
-
key
|
96
|
-
}
|
97
|
-
})
|
98
|
-
end,
|
99
|
-
__tostring = function(self)
|
100
|
-
if self.name then
|
101
|
-
return ("name<%s>"):format(self.name)
|
102
|
-
else
|
103
|
-
return ("name<prefix(%s)>"):format(self.prefix)
|
104
|
-
end
|
105
|
-
end
|
106
|
-
}
|
107
|
-
_base_0.__index = _base_0
|
108
|
-
if _parent_0 then
|
109
|
-
setmetatable(_base_0, _parent_0.__base)
|
110
|
-
end
|
111
|
-
local _class_0 = setmetatable({
|
112
|
-
__init = function(self, prefix)
|
113
|
-
self.prefix = prefix
|
114
|
-
self[1] = "temp_name"
|
115
|
-
end,
|
116
|
-
__base = _base_0,
|
117
|
-
__name = "NameProxy",
|
118
|
-
__parent = _parent_0
|
119
|
-
}, {
|
120
|
-
__index = function(cls, name)
|
121
|
-
local val = rawget(_base_0, name)
|
122
|
-
if val == nil and _parent_0 then
|
123
|
-
return _parent_0[name]
|
124
|
-
else
|
125
|
-
return val
|
126
|
-
end
|
127
|
-
end,
|
128
|
-
__call = function(cls, ...)
|
129
|
-
local _self_0 = setmetatable({}, _base_0)
|
130
|
-
cls.__init(_self_0, ...)
|
131
|
-
return _self_0
|
132
|
-
end
|
133
|
-
})
|
134
|
-
_base_0.__class = _class_0
|
135
|
-
if _parent_0 and _parent_0.__inherited then
|
136
|
-
_parent_0.__inherited(_parent_0, _class_0)
|
137
|
-
end
|
138
|
-
NameProxy = _class_0
|
9
|
+
local _table_0 = require("moonscript.transform.names")
|
10
|
+
NameProxy, LocalName = _table_0.NameProxy, _table_0.LocalName
|
139
11
|
end
|
12
|
+
local destructure = require("moonscript.transform.destructure")
|
13
|
+
local implicitly_return
|
14
|
+
local Run
|
140
15
|
do
|
141
16
|
local _parent_0 = nil
|
142
17
|
local _base_0 = {
|
@@ -182,25 +57,21 @@ apply_to_last = function(stms, fn)
|
|
182
57
|
local last_exp_id = 0
|
183
58
|
for i = #stms, 1, -1 do
|
184
59
|
local stm = stms[i]
|
185
|
-
if stm and
|
60
|
+
if stm and mtype(stm) ~= Run then
|
186
61
|
last_exp_id = i
|
187
62
|
break
|
188
63
|
end
|
189
64
|
end
|
190
65
|
return (function()
|
191
66
|
local _accum_0 = { }
|
192
|
-
local _len_0 =
|
67
|
+
local _len_0 = 1
|
193
68
|
for i, stm in ipairs(stms) do
|
194
|
-
local _value_0
|
195
69
|
if i == last_exp_id then
|
196
|
-
|
70
|
+
_accum_0[_len_0] = fn(stm)
|
197
71
|
else
|
198
|
-
|
199
|
-
end
|
200
|
-
if _value_0 ~= nil then
|
201
|
-
_len_0 = _len_0 + 1
|
202
|
-
_accum_0[_len_0] = _value_0
|
72
|
+
_accum_0[_len_0] = stm
|
203
73
|
end
|
74
|
+
_len_0 = _len_0 + 1
|
204
75
|
end
|
205
76
|
return _accum_0
|
206
77
|
end)()
|
@@ -213,48 +84,49 @@ is_singular = function(body)
|
|
213
84
|
if "group" == ntype(body) then
|
214
85
|
return is_singular(body[2])
|
215
86
|
else
|
216
|
-
return
|
87
|
+
return body[1]
|
217
88
|
end
|
218
89
|
end
|
219
|
-
local
|
220
|
-
|
90
|
+
local extract_declarations
|
91
|
+
extract_declarations = function(self, body, start, out)
|
92
|
+
if body == nil then
|
93
|
+
body = self.current_stms
|
94
|
+
end
|
95
|
+
if start == nil then
|
96
|
+
start = self.current_stm_i + 1
|
97
|
+
end
|
221
98
|
if out == nil then
|
222
99
|
out = { }
|
223
100
|
end
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
local
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
if type(name) == "string" then
|
246
|
-
table.insert(assigns, name)
|
101
|
+
for i = start, #body do
|
102
|
+
local _continue_0 = false
|
103
|
+
repeat
|
104
|
+
local stm = body[i]
|
105
|
+
if stm == nil then
|
106
|
+
_continue_0 = true
|
107
|
+
break
|
108
|
+
end
|
109
|
+
stm = self.transform.statement(stm)
|
110
|
+
body[i] = stm
|
111
|
+
local _exp_0 = stm[1]
|
112
|
+
if "assign" == _exp_0 or "declare" == _exp_0 then
|
113
|
+
local _list_0 = stm[2]
|
114
|
+
for _index_0 = 1, #_list_0 do
|
115
|
+
local name = _list_0[_index_0]
|
116
|
+
if type(name) == "string" then
|
117
|
+
insert(out, name)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
elseif "group" == _exp_0 then
|
121
|
+
extract_declarations(self, stm[2], 1, out)
|
247
122
|
end
|
123
|
+
_continue_0 = true
|
124
|
+
until true
|
125
|
+
if not _continue_0 then
|
126
|
+
break
|
248
127
|
end
|
249
128
|
end
|
250
|
-
|
251
|
-
while mtype(body[idx]) == Run do
|
252
|
-
idx = idx + 1
|
253
|
-
end
|
254
|
-
return table.insert(body, idx, {
|
255
|
-
"declare",
|
256
|
-
assigns
|
257
|
-
})
|
129
|
+
return out
|
258
130
|
end
|
259
131
|
local expand_elseif_assign
|
260
132
|
expand_elseif_assign = function(ifstm)
|
@@ -420,9 +292,25 @@ construct_comprehension = function(inner, clauses)
|
|
420
292
|
local current_stms = inner
|
421
293
|
for _, clause in reversed(clauses) do
|
422
294
|
local t = clause[1]
|
423
|
-
|
295
|
+
local _exp_0 = t
|
296
|
+
if "for" == _exp_0 then
|
297
|
+
local name, bounds
|
298
|
+
do
|
299
|
+
local _obj_0 = clause
|
300
|
+
_, name, bounds = _obj_0[1], _obj_0[2], _obj_0[3]
|
301
|
+
end
|
302
|
+
current_stms = {
|
303
|
+
"for",
|
304
|
+
name,
|
305
|
+
bounds,
|
306
|
+
current_stms
|
307
|
+
}
|
308
|
+
elseif "foreach" == _exp_0 then
|
424
309
|
local names, iter
|
425
|
-
|
310
|
+
do
|
311
|
+
local _obj_0 = clause
|
312
|
+
_, names, iter = _obj_0[1], _obj_0[2], _obj_0[3]
|
313
|
+
end
|
426
314
|
current_stms = {
|
427
315
|
"foreach",
|
428
316
|
names,
|
@@ -431,9 +319,12 @@ construct_comprehension = function(inner, clauses)
|
|
431
319
|
},
|
432
320
|
current_stms
|
433
321
|
}
|
434
|
-
elseif
|
322
|
+
elseif "when" == _exp_0 then
|
435
323
|
local cond
|
436
|
-
|
324
|
+
do
|
325
|
+
local _obj_0 = clause
|
326
|
+
_, cond = _obj_0[1], _obj_0[2]
|
327
|
+
end
|
437
328
|
current_stms = {
|
438
329
|
"if",
|
439
330
|
cond,
|
@@ -448,10 +339,42 @@ construct_comprehension = function(inner, clauses)
|
|
448
339
|
end
|
449
340
|
return current_stms[1]
|
450
341
|
end
|
451
|
-
Statement = Transformer({
|
342
|
+
local Statement = Transformer({
|
452
343
|
root_stms = function(self, body)
|
453
344
|
return apply_to_last(body, implicitly_return(self))
|
454
345
|
end,
|
346
|
+
declare_glob = function(self, node)
|
347
|
+
local names = extract_declarations(self)
|
348
|
+
if node[2] == "^" then
|
349
|
+
names = (function()
|
350
|
+
local _accum_0 = { }
|
351
|
+
local _len_0 = 1
|
352
|
+
local _list_0 = names
|
353
|
+
for _index_0 = 1, #_list_0 do
|
354
|
+
local _continue_0 = false
|
355
|
+
repeat
|
356
|
+
local name = _list_0[_index_0]
|
357
|
+
if not (name:match("^%u")) then
|
358
|
+
_continue_0 = true
|
359
|
+
break
|
360
|
+
end
|
361
|
+
local _value_0 = name
|
362
|
+
_accum_0[_len_0] = _value_0
|
363
|
+
_len_0 = _len_0 + 1
|
364
|
+
_continue_0 = true
|
365
|
+
until true
|
366
|
+
if not _continue_0 then
|
367
|
+
break
|
368
|
+
end
|
369
|
+
end
|
370
|
+
return _accum_0
|
371
|
+
end)()
|
372
|
+
end
|
373
|
+
return {
|
374
|
+
"declare",
|
375
|
+
names
|
376
|
+
}
|
377
|
+
end,
|
455
378
|
assign = function(self, node)
|
456
379
|
local names, values = unpack(node, 2)
|
457
380
|
local transformed
|
@@ -486,7 +409,11 @@ Statement = Transformer({
|
|
486
409
|
})
|
487
410
|
end
|
488
411
|
end
|
489
|
-
|
412
|
+
node = transformed or node
|
413
|
+
if destructure.has_destructure(names) then
|
414
|
+
return destructure.split_assign(node)
|
415
|
+
end
|
416
|
+
return node
|
490
417
|
end,
|
491
418
|
continue = function(self, node)
|
492
419
|
local continue_name = self:send("continue")
|
@@ -549,37 +476,30 @@ Statement = Transformer({
|
|
549
476
|
local _, names, source = unpack(node)
|
550
477
|
local stubs = (function()
|
551
478
|
local _accum_0 = { }
|
552
|
-
local _len_0 =
|
479
|
+
local _len_0 = 1
|
553
480
|
local _list_0 = names
|
554
481
|
for _index_0 = 1, #_list_0 do
|
555
482
|
local name = _list_0[_index_0]
|
556
|
-
local _value_0
|
557
483
|
if type(name) == "table" then
|
558
|
-
|
484
|
+
_accum_0[_len_0] = name
|
559
485
|
else
|
560
|
-
|
486
|
+
_accum_0[_len_0] = {
|
561
487
|
"dot",
|
562
488
|
name
|
563
489
|
}
|
564
490
|
end
|
565
|
-
|
566
|
-
_len_0 = _len_0 + 1
|
567
|
-
_accum_0[_len_0] = _value_0
|
568
|
-
end
|
491
|
+
_len_0 = _len_0 + 1
|
569
492
|
end
|
570
493
|
return _accum_0
|
571
494
|
end)()
|
572
495
|
local real_names = (function()
|
573
496
|
local _accum_0 = { }
|
574
|
-
local _len_0 =
|
497
|
+
local _len_0 = 1
|
575
498
|
local _list_0 = names
|
576
499
|
for _index_0 = 1, #_list_0 do
|
577
500
|
local name = _list_0[_index_0]
|
578
|
-
|
579
|
-
|
580
|
-
_len_0 = _len_0 + 1
|
581
|
-
_accum_0[_len_0] = _value_0
|
582
|
-
end
|
501
|
+
_accum_0[_len_0] = type(name) == "table" and name[2] or name
|
502
|
+
_len_0 = _len_0 + 1
|
583
503
|
end
|
584
504
|
return _accum_0
|
585
505
|
end)()
|
@@ -588,15 +508,15 @@ Statement = Transformer({
|
|
588
508
|
names = real_names,
|
589
509
|
values = (function()
|
590
510
|
local _accum_0 = { }
|
591
|
-
local _len_0 =
|
511
|
+
local _len_0 = 1
|
592
512
|
local _list_0 = stubs
|
593
513
|
for _index_0 = 1, #_list_0 do
|
594
514
|
local stub = _list_0[_index_0]
|
595
|
-
_len_0 = _len_0 + 1
|
596
515
|
_accum_0[_len_0] = build.chain({
|
597
516
|
base = source,
|
598
517
|
stub
|
599
518
|
})
|
519
|
+
_len_0 = _len_0 + 1
|
600
520
|
end
|
601
521
|
return _accum_0
|
602
522
|
end)()
|
@@ -614,15 +534,15 @@ Statement = Transformer({
|
|
614
534
|
names = real_names,
|
615
535
|
values = (function()
|
616
536
|
local _accum_0 = { }
|
617
|
-
local _len_0 =
|
537
|
+
local _len_0 = 1
|
618
538
|
local _list_0 = stubs
|
619
539
|
for _index_0 = 1, #_list_0 do
|
620
540
|
local stub = _list_0[_index_0]
|
621
|
-
_len_0 = _len_0 + 1
|
622
541
|
_accum_0[_len_0] = build.chain({
|
623
542
|
base = source_name,
|
624
543
|
stub
|
625
544
|
})
|
545
|
+
_len_0 = _len_0 + 1
|
626
546
|
end
|
627
547
|
return _accum_0
|
628
548
|
end)()
|
@@ -690,13 +610,13 @@ Statement = Transformer({
|
|
690
610
|
build.declare({
|
691
611
|
names = (function()
|
692
612
|
local _accum_0 = { }
|
693
|
-
local _len_0 =
|
613
|
+
local _len_0 = 1
|
694
614
|
local _list_0 = stm[2]
|
695
615
|
for _index_0 = 1, #_list_0 do
|
696
616
|
local name = _list_0[_index_0]
|
697
617
|
if type(name) == "string" then
|
698
|
-
_len_0 = _len_0 + 1
|
699
618
|
_accum_0[_len_0] = name
|
619
|
+
_len_0 = _len_0 + 1
|
700
620
|
end
|
701
621
|
end
|
702
622
|
return _accum_0
|
@@ -723,15 +643,32 @@ Statement = Transformer({
|
|
723
643
|
["if"] = function(self, node, ret)
|
724
644
|
if ntype(node[2]) == "assign" then
|
725
645
|
local _, assign, body = unpack(node)
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
name,
|
732
|
-
unpack(node, 3)
|
646
|
+
if destructure.has_destructure(assign[2]) then
|
647
|
+
local name = NameProxy("des")
|
648
|
+
body = {
|
649
|
+
destructure.build_assign(assign[2][1], name),
|
650
|
+
build.group(node[3])
|
733
651
|
}
|
734
|
-
|
652
|
+
return build["do"]({
|
653
|
+
build.assign_one(name, assign[3][1]),
|
654
|
+
{
|
655
|
+
"if",
|
656
|
+
name,
|
657
|
+
body,
|
658
|
+
unpack(node, 4)
|
659
|
+
}
|
660
|
+
})
|
661
|
+
else
|
662
|
+
local name = assign[2][1]
|
663
|
+
return build["do"]({
|
664
|
+
assign,
|
665
|
+
{
|
666
|
+
"if",
|
667
|
+
name,
|
668
|
+
unpack(node, 3)
|
669
|
+
}
|
670
|
+
})
|
671
|
+
end
|
735
672
|
end
|
736
673
|
node = expand_elseif_assign(node)
|
737
674
|
if ret then
|
@@ -779,6 +716,29 @@ Statement = Transformer({
|
|
779
716
|
foreach = function(self, node)
|
780
717
|
smart_node(node)
|
781
718
|
local source = unpack(node.iter)
|
719
|
+
local destructures = { }
|
720
|
+
node.names = (function()
|
721
|
+
local _accum_0 = { }
|
722
|
+
local _len_0 = 1
|
723
|
+
for i, name in ipairs(node.names) do
|
724
|
+
if ntype(name) == "table" then
|
725
|
+
do
|
726
|
+
local _with_0 = NameProxy("des")
|
727
|
+
local proxy = _with_0
|
728
|
+
insert(destructures, destructure.build_assign(name, proxy))
|
729
|
+
_accum_0[_len_0] = _with_0
|
730
|
+
end
|
731
|
+
else
|
732
|
+
_accum_0[_len_0] = name
|
733
|
+
end
|
734
|
+
_len_0 = _len_0 + 1
|
735
|
+
end
|
736
|
+
return _accum_0
|
737
|
+
end)()
|
738
|
+
if next(destructures) then
|
739
|
+
insert(destructures, build.group(node.body))
|
740
|
+
node.body = destructures
|
741
|
+
end
|
782
742
|
if ntype(source) == "unpack" then
|
783
743
|
local list = source[2]
|
784
744
|
local index_name = NameProxy("index")
|
@@ -857,20 +817,33 @@ Statement = Transformer({
|
|
857
817
|
local exp_name = NameProxy("exp")
|
858
818
|
local convert_cond
|
859
819
|
convert_cond = function(cond)
|
860
|
-
local t,
|
820
|
+
local t, case_exps, body = unpack(cond)
|
861
821
|
local out = { }
|
862
822
|
insert(out, t == "case" and "elseif" or "else")
|
863
823
|
if t ~= "else" then
|
864
|
-
|
865
|
-
|
824
|
+
local cond_exp = { }
|
825
|
+
for i, case in ipairs(case_exps) do
|
826
|
+
if i == 1 then
|
827
|
+
insert(cond_exp, "exp")
|
828
|
+
else
|
829
|
+
insert(cond_exp, "or")
|
830
|
+
end
|
831
|
+
if not (value_is_singular(case)) then
|
832
|
+
case = {
|
833
|
+
"parens",
|
834
|
+
case
|
835
|
+
}
|
836
|
+
end
|
837
|
+
insert(cond_exp, {
|
866
838
|
"exp",
|
867
|
-
|
839
|
+
case,
|
868
840
|
"==",
|
869
841
|
exp_name
|
870
842
|
})
|
871
843
|
end
|
844
|
+
insert(out, cond_exp)
|
872
845
|
else
|
873
|
-
body =
|
846
|
+
body = case_exps
|
874
847
|
end
|
875
848
|
if ret then
|
876
849
|
body = apply_to_last(body, ret)
|
@@ -921,24 +894,30 @@ Statement = Transformer({
|
|
921
894
|
end
|
922
895
|
end
|
923
896
|
end
|
924
|
-
local constructor
|
897
|
+
local constructor
|
925
898
|
properties = (function()
|
926
899
|
local _accum_0 = { }
|
927
|
-
local _len_0 =
|
900
|
+
local _len_0 = 1
|
928
901
|
local _list_1 = properties
|
929
902
|
for _index_0 = 1, #_list_1 do
|
930
|
-
local
|
931
|
-
|
932
|
-
|
933
|
-
|
934
|
-
|
935
|
-
|
936
|
-
|
937
|
-
|
938
|
-
|
939
|
-
|
940
|
-
|
903
|
+
local _continue_0 = false
|
904
|
+
repeat
|
905
|
+
local tuple = _list_1[_index_0]
|
906
|
+
local key = tuple[1]
|
907
|
+
local _value_0
|
908
|
+
if key[1] == "key_literal" and key[2] == constructor_name then
|
909
|
+
constructor = tuple[2]
|
910
|
+
_continue_0 = true
|
911
|
+
break
|
912
|
+
else
|
913
|
+
_value_0 = tuple
|
914
|
+
end
|
941
915
|
_accum_0[_len_0] = _value_0
|
916
|
+
_len_0 = _len_0 + 1
|
917
|
+
_continue_0 = true
|
918
|
+
until true
|
919
|
+
if not _continue_0 then
|
920
|
+
break
|
942
921
|
end
|
943
922
|
end
|
944
923
|
return _accum_0
|
@@ -947,7 +926,7 @@ Statement = Transformer({
|
|
947
926
|
local base_name = NameProxy("base")
|
948
927
|
local self_name = NameProxy("self")
|
949
928
|
local cls_name = NameProxy("class")
|
950
|
-
if not constructor then
|
929
|
+
if not (constructor) then
|
951
930
|
constructor = build.fndef({
|
952
931
|
args = {
|
953
932
|
{
|
@@ -972,9 +951,6 @@ Statement = Transformer({
|
|
972
951
|
})
|
973
952
|
}
|
974
953
|
})
|
975
|
-
else
|
976
|
-
smart_node(constructor)
|
977
|
-
constructor.arrow = "fat"
|
978
954
|
end
|
979
955
|
local real_name = name or parent_assign and parent_assign[2][1]
|
980
956
|
local _exp_0 = ntype(real_name)
|
@@ -1124,12 +1100,12 @@ Statement = Transformer({
|
|
1124
1100
|
if chain then
|
1125
1101
|
local slice = (function()
|
1126
1102
|
local _accum_0 = { }
|
1127
|
-
local _len_0 =
|
1103
|
+
local _len_0 = 1
|
1128
1104
|
local _list_1 = chain
|
1129
1105
|
for _index_0 = 3, #_list_1 do
|
1130
1106
|
local item = _list_1[_index_0]
|
1131
|
-
_len_0 = _len_0 + 1
|
1132
1107
|
_accum_0[_len_0] = item
|
1108
|
+
_len_0 = _len_0 + 1
|
1133
1109
|
end
|
1134
1110
|
return _accum_0
|
1135
1111
|
end)()
|
@@ -1187,6 +1163,10 @@ Statement = Transformer({
|
|
1187
1163
|
end
|
1188
1164
|
end)
|
1189
1165
|
end),
|
1166
|
+
{
|
1167
|
+
"declare_glob",
|
1168
|
+
"*"
|
1169
|
+
},
|
1190
1170
|
_with_0.assign_one(parent_cls_name, parent_val == "" and "nil" or parent_val),
|
1191
1171
|
_with_0.assign_one(base_name, {
|
1192
1172
|
"table",
|
@@ -1254,7 +1234,6 @@ Statement = Transformer({
|
|
1254
1234
|
end
|
1255
1235
|
end)()
|
1256
1236
|
}
|
1257
|
-
hoist_declarations(out_body)
|
1258
1237
|
value = _with_0.group({
|
1259
1238
|
_with_0.group((function()
|
1260
1239
|
if ntype(name) == "value" then
|
@@ -1290,22 +1269,17 @@ do
|
|
1290
1269
|
wrap = function(self, node)
|
1291
1270
|
return build.block_exp({
|
1292
1271
|
build.assign_one(self.accum_name, build.table()),
|
1293
|
-
build.assign_one(self.len_name,
|
1272
|
+
build.assign_one(self.len_name, 1),
|
1294
1273
|
node,
|
1295
1274
|
self.accum_name
|
1296
1275
|
})
|
1297
1276
|
end,
|
1298
|
-
mutate_body = function(self, body
|
1299
|
-
|
1300
|
-
skip_nil = true
|
1301
|
-
end
|
1277
|
+
mutate_body = function(self, body)
|
1278
|
+
local single_stm = is_singular(body)
|
1302
1279
|
local val
|
1303
|
-
if
|
1304
|
-
|
1305
|
-
|
1306
|
-
body = { }
|
1307
|
-
val = _with_0
|
1308
|
-
end
|
1280
|
+
if single_stm and types.is_value(single_stm) then
|
1281
|
+
body = { }
|
1282
|
+
val = single_stm
|
1309
1283
|
else
|
1310
1284
|
body = apply_to_last(body, function(n)
|
1311
1285
|
if types.is_value(n) then
|
@@ -1325,27 +1299,15 @@ do
|
|
1325
1299
|
val = self.value_name
|
1326
1300
|
end
|
1327
1301
|
local update = {
|
1302
|
+
build.assign_one(self.accum_name:index(self.len_name), val),
|
1328
1303
|
{
|
1329
1304
|
"update",
|
1330
1305
|
self.len_name,
|
1331
1306
|
"+=",
|
1332
1307
|
1
|
1333
|
-
}
|
1334
|
-
build.assign_one(self.accum_name:index(self.len_name), val)
|
1308
|
+
}
|
1335
1309
|
}
|
1336
|
-
|
1337
|
-
table.insert(body, build["if"]({
|
1338
|
-
cond = {
|
1339
|
-
"exp",
|
1340
|
-
self.value_name,
|
1341
|
-
"!=",
|
1342
|
-
"nil"
|
1343
|
-
},
|
1344
|
-
["then"] = update
|
1345
|
-
}))
|
1346
|
-
else
|
1347
|
-
table.insert(body, build.group(update))
|
1348
|
-
end
|
1310
|
+
insert(body, build.group(update))
|
1349
1311
|
return body
|
1350
1312
|
end
|
1351
1313
|
}
|
@@ -1418,7 +1380,7 @@ implicitly_return = function(scope)
|
|
1418
1380
|
end
|
1419
1381
|
return fn
|
1420
1382
|
end
|
1421
|
-
Value = Transformer({
|
1383
|
+
local Value = Transformer({
|
1422
1384
|
["for"] = default_accumulator,
|
1423
1385
|
["while"] = default_accumulator,
|
1424
1386
|
foreach = default_accumulator,
|
@@ -1479,7 +1441,7 @@ Value = Transformer({
|
|
1479
1441
|
node = self.transform.statement(node, function(exp)
|
1480
1442
|
return a:mutate_body({
|
1481
1443
|
exp
|
1482
|
-
}
|
1444
|
+
})
|
1483
1445
|
end)
|
1484
1446
|
return a:wrap(node)
|
1485
1447
|
end,
|
@@ -1658,3 +1620,8 @@ Value = Transformer({
|
|
1658
1620
|
})
|
1659
1621
|
end
|
1660
1622
|
})
|
1623
|
+
return {
|
1624
|
+
Statement = Statement,
|
1625
|
+
Value = Value,
|
1626
|
+
Run = Run
|
1627
|
+
}
|