rufus-lua-moon 0.2.0 → 0.2.2
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 -0
- data/vendor/lua/moonscript/compile.lua +317 -175
- data/vendor/lua/moonscript/compile/format.lua +0 -6
- data/vendor/lua/moonscript/compile/statement.lua +60 -28
- data/vendor/lua/moonscript/compile/value.lua +27 -48
- data/vendor/lua/moonscript/data.lua +7 -3
- data/vendor/lua/moonscript/dump.lua +5 -11
- data/vendor/lua/moonscript/errors.lua +35 -1
- data/vendor/lua/moonscript/init.lua +18 -7
- data/vendor/lua/moonscript/parse.lua +202 -63
- data/vendor/lua/moonscript/transform.lua +603 -117
- data/vendor/lua/moonscript/types.lua +42 -9
- data/vendor/lua/moonscript/util.lua +38 -1
- data/vendor/lua/moonscript/version.lua +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e343762d37d17e9fc502fa6221ed3e376cb1a1a7
|
4
|
+
data.tar.gz: 3d1b775db07fa27e42fbb475ba48bd06421b8822
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13b413ebc32760c0d5bc13ea70450957554491bb46d34fea38aea574ab2602bd6f27aedfce728c68a8fcad10410b36dd2a854163e8e793ebb06754e15771cafe
|
7
|
+
data.tar.gz: 9534f6e6fea762307abf43fb83029e7740444e013a295f8e9829f486db66cfc8f4e9f22e0415e815274fb690dcfd9a274a136a7aeecb124a32eb3ad76b9b17b5
|
data/vendor/lua/moon/init.moon
CHANGED
@@ -18,12 +18,142 @@ do
|
|
18
18
|
end
|
19
19
|
local concat, insert = table.concat, table.insert
|
20
20
|
local pos_to_line, get_closest_line, trim = util.pos_to_line, util.get_closest_line, util.trim
|
21
|
-
local
|
22
|
-
Line
|
21
|
+
local mtype = util.moon.type
|
22
|
+
local Line, Lines
|
23
|
+
do
|
23
24
|
local _parent_0 = nil
|
24
25
|
local _base_0 = {
|
26
|
+
mark_pos = function(self, pos, line)
|
27
|
+
if line == nil then
|
28
|
+
line = #self
|
29
|
+
end
|
30
|
+
if not (self.posmap[line]) then
|
31
|
+
self.posmap[line] = pos
|
32
|
+
end
|
33
|
+
end,
|
34
|
+
add = function(self, item)
|
35
|
+
local _exp_0 = mtype(item)
|
36
|
+
if Line == _exp_0 then
|
37
|
+
item:render(self)
|
38
|
+
elseif Block == _exp_0 then
|
39
|
+
item:render(self)
|
40
|
+
else
|
41
|
+
self[#self + 1] = item
|
42
|
+
end
|
43
|
+
return self
|
44
|
+
end,
|
45
|
+
flatten_posmap = function(self, line_no, out)
|
46
|
+
if line_no == nil then
|
47
|
+
line_no = 0
|
48
|
+
end
|
49
|
+
if out == nil then
|
50
|
+
out = { }
|
51
|
+
end
|
52
|
+
local posmap = self.posmap
|
53
|
+
for i, l in ipairs(self) do
|
54
|
+
local _exp_0 = type(l)
|
55
|
+
if "table" == _exp_0 then
|
56
|
+
local _
|
57
|
+
_, line_no = l:flatten_posmap(line_no, out)
|
58
|
+
elseif "string" == _exp_0 then
|
59
|
+
line_no = line_no + 1
|
60
|
+
out[line_no] = posmap[i]
|
61
|
+
end
|
62
|
+
end
|
63
|
+
return out, line_no
|
64
|
+
end,
|
65
|
+
flatten = function(self, indent, buffer)
|
66
|
+
if indent == nil then
|
67
|
+
indent = nil
|
68
|
+
end
|
69
|
+
if buffer == nil then
|
70
|
+
buffer = { }
|
71
|
+
end
|
72
|
+
for i = 1, #self do
|
73
|
+
local l = self[i]
|
74
|
+
local _exp_0 = type(l)
|
75
|
+
if "string" == _exp_0 then
|
76
|
+
if indent then
|
77
|
+
insert(buffer, indent)
|
78
|
+
end
|
79
|
+
insert(buffer, l)
|
80
|
+
if "string" == type(self[i + 1]) then
|
81
|
+
local lc = l:sub(-1)
|
82
|
+
if (lc == ")" or lc == "]") and self[i + 1]:sub(1, 1) == "(" then
|
83
|
+
insert(buffer, ";")
|
84
|
+
end
|
85
|
+
end
|
86
|
+
insert(buffer, "\n")
|
87
|
+
local last = l
|
88
|
+
elseif "table" == _exp_0 then
|
89
|
+
l:flatten(indent and indent .. indent_char or indent_char, buffer)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
return buffer
|
93
|
+
end,
|
94
|
+
__tostring = function(self)
|
95
|
+
local strip
|
96
|
+
strip = function(t)
|
97
|
+
if "table" == type(t) then
|
98
|
+
return (function()
|
99
|
+
local _accum_0 = { }
|
100
|
+
local _len_0 = 0
|
101
|
+
local _list_0 = t
|
102
|
+
for _index_0 = 1, #_list_0 do
|
103
|
+
local v = _list_0[_index_0]
|
104
|
+
_len_0 = _len_0 + 1
|
105
|
+
_accum_0[_len_0] = strip(v)
|
106
|
+
end
|
107
|
+
return _accum_0
|
108
|
+
end)()
|
109
|
+
else
|
110
|
+
return t
|
111
|
+
end
|
112
|
+
end
|
113
|
+
return "Lines<" .. tostring(util.dump(strip(self)):sub(1, -2)) .. ">"
|
114
|
+
end
|
115
|
+
}
|
116
|
+
_base_0.__index = _base_0
|
117
|
+
if _parent_0 then
|
118
|
+
setmetatable(_base_0, _parent_0.__base)
|
119
|
+
end
|
120
|
+
local _class_0 = setmetatable({
|
121
|
+
__init = function(self)
|
122
|
+
self.posmap = { }
|
123
|
+
end,
|
124
|
+
__base = _base_0,
|
125
|
+
__name = "Lines",
|
126
|
+
__parent = _parent_0
|
127
|
+
}, {
|
128
|
+
__index = function(cls, name)
|
129
|
+
local val = rawget(_base_0, name)
|
130
|
+
if val == nil and _parent_0 then
|
131
|
+
return _parent_0[name]
|
132
|
+
else
|
133
|
+
return val
|
134
|
+
end
|
135
|
+
end,
|
136
|
+
__call = function(cls, ...)
|
137
|
+
local _self_0 = setmetatable({}, _base_0)
|
138
|
+
cls.__init(_self_0, ...)
|
139
|
+
return _self_0
|
140
|
+
end
|
141
|
+
})
|
142
|
+
_base_0.__class = _class_0
|
143
|
+
if _parent_0 and _parent_0.__inherited then
|
144
|
+
_parent_0.__inherited(_parent_0, _class_0)
|
145
|
+
end
|
146
|
+
Lines = _class_0
|
147
|
+
end
|
148
|
+
do
|
149
|
+
local _parent_0 = nil
|
150
|
+
local _base_0 = {
|
151
|
+
pos = nil,
|
25
152
|
_append_single = function(self, item)
|
26
|
-
if
|
153
|
+
if Line == mtype(item) then
|
154
|
+
if not (self.pos) then
|
155
|
+
self.pos = item.pos
|
156
|
+
end
|
27
157
|
local _list_0 = item
|
28
158
|
for _index_0 = 1, #_list_0 do
|
29
159
|
value = _list_0[_index_0]
|
@@ -41,6 +171,7 @@ Line = (function()
|
|
41
171
|
insert(self, delim)
|
42
172
|
end
|
43
173
|
end
|
174
|
+
return nil
|
44
175
|
end,
|
45
176
|
append = function(self, ...)
|
46
177
|
local _list_0 = {
|
@@ -52,20 +183,40 @@ Line = (function()
|
|
52
183
|
end
|
53
184
|
return nil
|
54
185
|
end,
|
55
|
-
render = function(self)
|
56
|
-
local
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
186
|
+
render = function(self, buffer)
|
187
|
+
local current = { }
|
188
|
+
local add_current
|
189
|
+
add_current = function()
|
190
|
+
buffer:add(concat(current))
|
191
|
+
return buffer:mark_pos(self.pos)
|
192
|
+
end
|
193
|
+
local _list_0 = self
|
194
|
+
for _index_0 = 1, #_list_0 do
|
195
|
+
local chunk = _list_0[_index_0]
|
196
|
+
local _exp_0 = mtype(chunk)
|
197
|
+
if Block == _exp_0 then
|
198
|
+
local _list_1 = chunk:render(Lines())
|
199
|
+
for _index_1 = 1, #_list_1 do
|
200
|
+
local block_chunk = _list_1[_index_1]
|
201
|
+
if "string" == type(block_chunk) then
|
202
|
+
insert(current, block_chunk)
|
203
|
+
else
|
204
|
+
add_current()
|
205
|
+
buffer:add(block_chunk)
|
206
|
+
current = { }
|
207
|
+
end
|
65
208
|
end
|
66
|
-
|
209
|
+
else
|
210
|
+
insert(current, chunk)
|
211
|
+
end
|
212
|
+
end
|
213
|
+
if #current > 0 then
|
214
|
+
add_current()
|
67
215
|
end
|
68
|
-
return
|
216
|
+
return buffer
|
217
|
+
end,
|
218
|
+
__tostring = function(self)
|
219
|
+
return "Line<" .. tostring(util.dump(self):sub(1, -2)) .. ">"
|
69
220
|
end
|
70
221
|
}
|
71
222
|
_base_0.__index = _base_0
|
@@ -97,9 +248,12 @@ Line = (function()
|
|
97
248
|
end
|
98
249
|
})
|
99
250
|
_base_0.__class = _class_0
|
100
|
-
|
101
|
-
|
102
|
-
|
251
|
+
if _parent_0 and _parent_0.__inherited then
|
252
|
+
_parent_0.__inherited(_parent_0, _class_0)
|
253
|
+
end
|
254
|
+
Line = _class_0
|
255
|
+
end
|
256
|
+
do
|
103
257
|
local _parent_0 = nil
|
104
258
|
local _base_0 = {
|
105
259
|
header = "do",
|
@@ -107,17 +261,13 @@ Block = (function()
|
|
107
261
|
export_all = false,
|
108
262
|
export_proper = false,
|
109
263
|
__tostring = function(self)
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
264
|
+
local h
|
265
|
+
if "string" == type(self.header) then
|
266
|
+
h = self.header
|
267
|
+
else
|
268
|
+
h = unpack(self.header:render({ }))
|
115
269
|
end
|
116
|
-
|
117
|
-
other.has_varargs = other.has_varargs or has_varargs
|
118
|
-
end,
|
119
|
-
line_table = function(self)
|
120
|
-
return self._posmap
|
270
|
+
return "Block<" .. tostring(h) .. "> <- " .. tostring(self.parent)
|
121
271
|
end,
|
122
272
|
set = function(self, name, value)
|
123
273
|
self._state[name] = value
|
@@ -125,6 +275,20 @@ Block = (function()
|
|
125
275
|
get = function(self, name)
|
126
276
|
return self._state[name]
|
127
277
|
end,
|
278
|
+
listen = function(self, name, fn)
|
279
|
+
self._listeners[name] = fn
|
280
|
+
end,
|
281
|
+
unlisten = function(self, name)
|
282
|
+
self._listeners[name] = nil
|
283
|
+
end,
|
284
|
+
send = function(self, name, ...)
|
285
|
+
do
|
286
|
+
local fn = self._listeners[name]
|
287
|
+
if fn then
|
288
|
+
return fn(self, ...)
|
289
|
+
end
|
290
|
+
end
|
291
|
+
end,
|
128
292
|
declare = function(self, names)
|
129
293
|
local undeclared = (function()
|
130
294
|
local _accum_0 = { }
|
@@ -134,7 +298,7 @@ Block = (function()
|
|
134
298
|
local name = _list_0[_index_0]
|
135
299
|
local is_local = false
|
136
300
|
local real_name
|
137
|
-
local _exp_0 =
|
301
|
+
local _exp_0 = mtype(name)
|
138
302
|
if LocalName == _exp_0 then
|
139
303
|
is_local = true
|
140
304
|
real_name = name:get_name(self)
|
@@ -164,11 +328,15 @@ Block = (function()
|
|
164
328
|
whitelist_names = function(self, names)
|
165
329
|
self._name_whitelist = Set(names)
|
166
330
|
end,
|
167
|
-
put_name = function(self, name)
|
168
|
-
|
331
|
+
put_name = function(self, name, ...)
|
332
|
+
value = ...
|
333
|
+
if select("#", ...) == 0 then
|
334
|
+
value = true
|
335
|
+
end
|
336
|
+
if NameProxy == mtype(name) then
|
169
337
|
name = name:get_name(self)
|
170
338
|
end
|
171
|
-
self._names[name] =
|
339
|
+
self._names[name] = value
|
172
340
|
end,
|
173
341
|
has_name = function(self, name, skip_exports)
|
174
342
|
if not skip_exports then
|
@@ -219,99 +387,26 @@ Block = (function()
|
|
219
387
|
})
|
220
388
|
return name
|
221
389
|
end,
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
if not self._posmap[self.current_line] then
|
226
|
-
self._posmap[self.current_line] = self.last_pos
|
227
|
-
end
|
228
|
-
end
|
390
|
+
add = function(self, item)
|
391
|
+
self._lines:add(item)
|
392
|
+
return item
|
229
393
|
end,
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
local line = line + offset
|
237
|
-
if not self._posmap[line] then
|
238
|
-
self._posmap[line] = source
|
239
|
-
end
|
240
|
-
end
|
241
|
-
end,
|
242
|
-
add_line_tables = function(self, line)
|
243
|
-
local _list_0 = line
|
244
|
-
for _index_0 = 1, #_list_0 do
|
245
|
-
local chunk = _list_0[_index_0]
|
246
|
-
if util.moon.type(chunk) == Block then
|
247
|
-
local current = chunk
|
248
|
-
while current do
|
249
|
-
if util.moon.type(current.header) == Line then
|
250
|
-
self:add_line_tables(current.header)
|
251
|
-
end
|
252
|
-
self:append_line_table(current:line_table(), 0)
|
253
|
-
self.current_line = self.current_line + current.current_line
|
254
|
-
current = current.next
|
255
|
-
end
|
256
|
-
end
|
257
|
-
end
|
258
|
-
end,
|
259
|
-
add = function(self, line)
|
260
|
-
local t = util.moon.type(line)
|
261
|
-
if t == "string" then
|
262
|
-
self:add_line_text(line)
|
263
|
-
elseif t == Block then
|
264
|
-
self:add(self:line(line))
|
265
|
-
elseif t == Line then
|
266
|
-
self:add_line_tables(line)
|
267
|
-
self:add_line_text(line:render())
|
268
|
-
self.current_line = self.current_line + 1
|
394
|
+
render = function(self, buffer)
|
395
|
+
buffer:add(self.header)
|
396
|
+
buffer:mark_pos(self.pos)
|
397
|
+
if self.next then
|
398
|
+
buffer:add(self._lines)
|
399
|
+
self.next:render(buffer)
|
269
400
|
else
|
270
|
-
|
271
|
-
|
272
|
-
return nil
|
273
|
-
end,
|
274
|
-
_insert_breaks = function(self)
|
275
|
-
for i = 1, #self._lines - 1 do
|
276
|
-
local left, right = self._lines[i], self._lines[i + 1]
|
277
|
-
if left:sub(-1) == ")" and right:sub(1, 1) == "(" then
|
278
|
-
self._lines[i] = self._lines[i] .. ";"
|
279
|
-
end
|
280
|
-
end
|
281
|
-
end,
|
282
|
-
render = function(self)
|
283
|
-
local flatten
|
284
|
-
flatten = function(line)
|
285
|
-
if type(line) == "string" then
|
286
|
-
return line
|
401
|
+
if #self._lines == 0 and "string" == type(buffer[#buffer]) then
|
402
|
+
buffer[#buffer] = buffer[#buffer] .. (" " .. (unpack(Lines():add(self.footer))))
|
287
403
|
else
|
288
|
-
|
404
|
+
buffer:add(self._lines)
|
405
|
+
buffer:add(self.footer)
|
406
|
+
buffer:mark_pos(self.pos)
|
289
407
|
end
|
290
408
|
end
|
291
|
-
|
292
|
-
if #self._lines == 0 then
|
293
|
-
local footer = flatten(self.footer)
|
294
|
-
return concat({
|
295
|
-
header,
|
296
|
-
footer
|
297
|
-
}, " ")
|
298
|
-
end
|
299
|
-
local indent = indent_char:rep(self.indent)
|
300
|
-
if not self.delim then
|
301
|
-
self:_insert_breaks()
|
302
|
-
end
|
303
|
-
local body = indent .. concat(self._lines, (self.delim or "") .. "\n" .. indent)
|
304
|
-
return concat({
|
305
|
-
header,
|
306
|
-
body,
|
307
|
-
indent_char:rep(self.indent - 1) .. (function()
|
308
|
-
if self.next then
|
309
|
-
return self.next:render()
|
310
|
-
else
|
311
|
-
return flatten(self.footer)
|
312
|
-
end
|
313
|
-
end)()
|
314
|
-
}, "\n")
|
409
|
+
return buffer
|
315
410
|
end,
|
316
411
|
block = function(self, header, footer)
|
317
412
|
return Block(self, header, footer)
|
@@ -334,19 +429,29 @@ Block = (function()
|
|
334
429
|
return self:value(node)
|
335
430
|
end,
|
336
431
|
value = function(self, node, ...)
|
337
|
-
node = self.
|
432
|
+
node = self.transform.value(node)
|
338
433
|
local action
|
339
434
|
if type(node) ~= "table" then
|
340
435
|
action = "raw_value"
|
341
436
|
else
|
342
|
-
self:mark_pos(node)
|
343
437
|
action = node[1]
|
344
438
|
end
|
345
439
|
local fn = value_compile[action]
|
346
440
|
if not fn then
|
347
441
|
error("Failed to compile value: " .. dump.value(node))
|
348
442
|
end
|
349
|
-
|
443
|
+
local out = fn(self, node, ...)
|
444
|
+
if type(node) == "table" and node[-1] then
|
445
|
+
if type(out) == "string" then
|
446
|
+
do
|
447
|
+
local _with_0 = Line()
|
448
|
+
_with_0:append(out)
|
449
|
+
out = _with_0
|
450
|
+
end
|
451
|
+
end
|
452
|
+
out.pos = node[-1]
|
453
|
+
end
|
454
|
+
return out
|
350
455
|
end,
|
351
456
|
values = function(self, values, delim)
|
352
457
|
delim = delim or ', '
|
@@ -370,28 +475,33 @@ Block = (function()
|
|
370
475
|
if not node then
|
371
476
|
return
|
372
477
|
end
|
373
|
-
node = self.
|
374
|
-
local
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
{
|
380
|
-
"_"
|
381
|
-
},
|
382
|
-
{
|
383
|
-
node
|
384
|
-
}
|
385
|
-
})
|
478
|
+
node = self.transform.statement(node)
|
479
|
+
local result
|
480
|
+
do
|
481
|
+
local fn = line_compile[ntype(node)]
|
482
|
+
if fn then
|
483
|
+
result = fn(self, node, ...)
|
386
484
|
else
|
387
|
-
|
485
|
+
if has_value(node) then
|
486
|
+
result = self:stm({
|
487
|
+
"assign",
|
488
|
+
{
|
489
|
+
"_"
|
490
|
+
},
|
491
|
+
{
|
492
|
+
node
|
493
|
+
}
|
494
|
+
})
|
495
|
+
else
|
496
|
+
result = self:value(node)
|
497
|
+
end
|
388
498
|
end
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
self:add(out)
|
499
|
+
end
|
500
|
+
if result then
|
501
|
+
if type(node) == "table" and type(result) == "table" and node[-1] then
|
502
|
+
result.pos = node[-1]
|
394
503
|
end
|
504
|
+
self:add(result)
|
395
505
|
end
|
396
506
|
return nil
|
397
507
|
end,
|
@@ -405,6 +515,14 @@ Block = (function()
|
|
405
515
|
self:stm(stm)
|
406
516
|
end
|
407
517
|
return nil
|
518
|
+
end,
|
519
|
+
splice = function(self, fn)
|
520
|
+
local lines = {
|
521
|
+
"lines",
|
522
|
+
self._lines
|
523
|
+
}
|
524
|
+
self._lines = Lines()
|
525
|
+
return self:stms(fn(lines))
|
408
526
|
end
|
409
527
|
}
|
410
528
|
_base_0.__index = _base_0
|
@@ -414,17 +532,26 @@ Block = (function()
|
|
414
532
|
local _class_0 = setmetatable({
|
415
533
|
__init = function(self, parent, header, footer)
|
416
534
|
self.parent, self.header, self.footer = parent, header, footer
|
417
|
-
self.
|
418
|
-
self._lines = { }
|
419
|
-
self._posmap = { }
|
535
|
+
self._lines = Lines()
|
420
536
|
self._names = { }
|
421
537
|
self._state = { }
|
538
|
+
self._listeners = { }
|
539
|
+
do
|
540
|
+
local _with_0 = transform
|
541
|
+
self.transform = {
|
542
|
+
value = _with_0.Value:bind(self),
|
543
|
+
statement = _with_0.Statement:bind(self)
|
544
|
+
}
|
545
|
+
end
|
422
546
|
if self.parent then
|
423
547
|
self.root = self.parent.root
|
424
548
|
self.indent = self.parent.indent + 1
|
425
|
-
|
549
|
+
setmetatable(self._state, {
|
426
550
|
__index = self.parent._state
|
427
551
|
})
|
552
|
+
return setmetatable(self._listeners, {
|
553
|
+
__index = self.parent._listeners
|
554
|
+
})
|
428
555
|
else
|
429
556
|
self.indent = 0
|
430
557
|
end
|
@@ -448,18 +575,33 @@ Block = (function()
|
|
448
575
|
end
|
449
576
|
})
|
450
577
|
_base_0.__class = _class_0
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
578
|
+
if _parent_0 and _parent_0.__inherited then
|
579
|
+
_parent_0.__inherited(_parent_0, _class_0)
|
580
|
+
end
|
581
|
+
Block = _class_0
|
582
|
+
end
|
583
|
+
do
|
455
584
|
local _parent_0 = Block
|
456
585
|
local _base_0 = {
|
457
586
|
__tostring = function(self)
|
458
587
|
return "RootBlock<>"
|
459
588
|
end,
|
589
|
+
root_stms = function(self, stms)
|
590
|
+
if not (self.options.implicitly_return_root == false) then
|
591
|
+
stms = transform.Statement.transformers.root_stms(self, stms)
|
592
|
+
end
|
593
|
+
local _list_0 = stms
|
594
|
+
for _index_0 = 1, #_list_0 do
|
595
|
+
local s = _list_0[_index_0]
|
596
|
+
self:stm(s)
|
597
|
+
end
|
598
|
+
end,
|
460
599
|
render = function(self)
|
461
|
-
self:
|
462
|
-
|
600
|
+
local buffer = self._lines:flatten()
|
601
|
+
if buffer[#buffer] == "\n" then
|
602
|
+
buffer[#buffer] = nil
|
603
|
+
end
|
604
|
+
return table.concat(buffer)
|
463
605
|
end
|
464
606
|
}
|
465
607
|
_base_0.__index = _base_0
|
@@ -467,13 +609,10 @@ RootBlock = (function()
|
|
467
609
|
setmetatable(_base_0, _parent_0.__base)
|
468
610
|
end
|
469
611
|
local _class_0 = setmetatable({
|
470
|
-
__init = function(self,
|
612
|
+
__init = function(self, options)
|
613
|
+
self.options = options
|
471
614
|
self.root = self
|
472
|
-
self
|
473
|
-
value = transform.Value:instance(self),
|
474
|
-
statement = transform.Statement:instance(self)
|
475
|
-
}
|
476
|
-
return _parent_0.__init(self, ...)
|
615
|
+
return _parent_0.__init(self)
|
477
616
|
end,
|
478
617
|
__base = _base_0,
|
479
618
|
__name = "RootBlock",
|
@@ -494,8 +633,11 @@ RootBlock = (function()
|
|
494
633
|
end
|
495
634
|
})
|
496
635
|
_base_0.__class = _class_0
|
497
|
-
|
498
|
-
|
636
|
+
if _parent_0 and _parent_0.__inherited then
|
637
|
+
_parent_0.__inherited(_parent_0, _class_0)
|
638
|
+
end
|
639
|
+
RootBlock = _class_0
|
640
|
+
end
|
499
641
|
format_error = function(msg, pos, file_str)
|
500
642
|
local line = pos_to_line(file_str, pos)
|
501
643
|
local line_str
|
@@ -515,35 +657,35 @@ value = function(value)
|
|
515
657
|
end
|
516
658
|
return out
|
517
659
|
end
|
518
|
-
tree = function(tree)
|
519
|
-
|
660
|
+
tree = function(tree, options)
|
661
|
+
if options == nil then
|
662
|
+
options = { }
|
663
|
+
end
|
664
|
+
assert(tree, "missing tree")
|
665
|
+
local scope = (options.scope or RootBlock)(options)
|
520
666
|
local runner = coroutine.create(function()
|
521
|
-
|
522
|
-
for _index_0 = 1, #_list_0 do
|
523
|
-
local line = _list_0[_index_0]
|
524
|
-
scope:stm(line)
|
525
|
-
end
|
526
|
-
return scope:render()
|
667
|
+
return scope:root_stms(tree)
|
527
668
|
end)
|
528
|
-
local success,
|
669
|
+
local success, err = coroutine.resume(runner)
|
529
670
|
if not success then
|
530
671
|
local error_msg
|
531
|
-
if type(
|
532
|
-
local error_type =
|
672
|
+
if type(err) == "table" then
|
673
|
+
local error_type = err[1]
|
533
674
|
if error_type == "user-error" then
|
534
|
-
error_msg =
|
675
|
+
error_msg = err[2]
|
535
676
|
else
|
536
677
|
error_msg = error("Unknown error thrown", util.dump(error_msg))
|
537
678
|
end
|
538
679
|
else
|
539
680
|
error_msg = concat({
|
540
|
-
|
681
|
+
err,
|
541
682
|
debug.traceback(runner)
|
542
683
|
}, "\n")
|
543
684
|
end
|
544
685
|
return nil, error_msg, scope.last_pos
|
545
686
|
else
|
546
|
-
local
|
547
|
-
|
687
|
+
local lua_code = scope:render()
|
688
|
+
local posmap = scope._lines:flatten_posmap()
|
689
|
+
return lua_code, posmap
|
548
690
|
end
|
549
691
|
end
|