rufus-lua-moon 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- 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,14 +1,14 @@
|
|
1
|
-
module("moonscript.types", package.seeall)
|
2
1
|
local util = require("moonscript.util")
|
3
2
|
local data = require("moonscript.data")
|
4
3
|
local insert = table.insert
|
5
|
-
|
4
|
+
local unpack = util.unpack
|
5
|
+
local manual_return = data.Set({
|
6
6
|
"foreach",
|
7
7
|
"for",
|
8
8
|
"while",
|
9
9
|
"return"
|
10
10
|
})
|
11
|
-
cascading = data.Set({
|
11
|
+
local cascading = data.Set({
|
12
12
|
"if",
|
13
13
|
"unless",
|
14
14
|
"with",
|
@@ -16,13 +16,7 @@ cascading = data.Set({
|
|
16
16
|
"class",
|
17
17
|
"do"
|
18
18
|
})
|
19
|
-
|
20
|
-
local compile, transform = moonscript.compile, moonscript.transform
|
21
|
-
return compile.Block:is_value(stm) or transform.Value:can_transform(stm)
|
22
|
-
end
|
23
|
-
comprehension_has_value = function(comp)
|
24
|
-
return is_value(comp[2])
|
25
|
-
end
|
19
|
+
local ntype
|
26
20
|
ntype = function(node)
|
27
21
|
local _exp_0 = type(node)
|
28
22
|
if "nil" == _exp_0 then
|
@@ -33,9 +27,41 @@ ntype = function(node)
|
|
33
27
|
return "value"
|
34
28
|
end
|
35
29
|
end
|
30
|
+
local mtype
|
31
|
+
do
|
32
|
+
local moon_type = util.moon.type
|
33
|
+
mtype = function(val)
|
34
|
+
local mt = getmetatable(val)
|
35
|
+
if mt and mt.smart_node then
|
36
|
+
return "table"
|
37
|
+
end
|
38
|
+
return moon_type(val)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
local has_value
|
42
|
+
has_value = function(node)
|
43
|
+
if ntype(node) == "chain" then
|
44
|
+
local ctype = ntype(node[#node])
|
45
|
+
return ctype ~= "call" and ctype ~= "colon"
|
46
|
+
else
|
47
|
+
return true
|
48
|
+
end
|
49
|
+
end
|
50
|
+
local is_value
|
51
|
+
is_value = function(stm)
|
52
|
+
local compile = require("moonscript.compile")
|
53
|
+
local transform = require("moonscript.transform")
|
54
|
+
return compile.Block:is_value(stm) or transform.Value:can_transform(stm)
|
55
|
+
end
|
56
|
+
local comprehension_has_value
|
57
|
+
comprehension_has_value = function(comp)
|
58
|
+
return is_value(comp[2])
|
59
|
+
end
|
60
|
+
local value_is_singular
|
36
61
|
value_is_singular = function(node)
|
37
62
|
return type(node) ~= "table" or node[1] ~= "exp" or #node == 2
|
38
63
|
end
|
64
|
+
local is_slice
|
39
65
|
is_slice = function(node)
|
40
66
|
return ntype(node) == "chain" and ntype(node[#node]) == "slice"
|
41
67
|
end
|
@@ -175,7 +201,7 @@ make_builder = function(name)
|
|
175
201
|
return node
|
176
202
|
end
|
177
203
|
end
|
178
|
-
build = nil
|
204
|
+
local build = nil
|
179
205
|
build = setmetatable({
|
180
206
|
group = function(body)
|
181
207
|
if body == nil then
|
@@ -246,25 +272,43 @@ build = setmetatable({
|
|
246
272
|
return rawget(self, name)
|
247
273
|
end
|
248
274
|
})
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
275
|
+
local smart_node_mt = setmetatable({ }, {
|
276
|
+
__index = function(self, node_type)
|
277
|
+
local index = key_table[node_type]
|
278
|
+
local mt = {
|
279
|
+
smart_node = true,
|
280
|
+
__index = function(node, key)
|
281
|
+
if index[key] then
|
282
|
+
return rawget(node, index[key])
|
283
|
+
elseif type(key) == "string" then
|
284
|
+
return error("unknown key: `" .. key .. "` on node type: `" .. ntype(node) .. "`")
|
285
|
+
end
|
286
|
+
end,
|
287
|
+
__newindex = function(node, key, value)
|
288
|
+
if index[key] then
|
289
|
+
key = index[key]
|
290
|
+
end
|
291
|
+
return rawset(node, key, value)
|
260
292
|
end
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
293
|
+
}
|
294
|
+
self[node_type] = mt
|
295
|
+
return mt
|
296
|
+
end
|
297
|
+
})
|
298
|
+
local smart_node
|
299
|
+
smart_node = function(node)
|
300
|
+
return setmetatable(node, smart_node_mt[ntype(node)])
|
269
301
|
end
|
270
|
-
return
|
302
|
+
return {
|
303
|
+
ntype = ntype,
|
304
|
+
smart_node = smart_node,
|
305
|
+
build = build,
|
306
|
+
is_value = is_value,
|
307
|
+
is_slice = is_slice,
|
308
|
+
manual_return = manual_return,
|
309
|
+
cascading = cascading,
|
310
|
+
value_is_singular = value_is_singular,
|
311
|
+
comprehension_has_value = comprehension_has_value,
|
312
|
+
has_value = has_value,
|
313
|
+
mtype = mtype
|
314
|
+
}
|
@@ -1,9 +1,23 @@
|
|
1
|
-
module("moonscript.util", package.seeall)
|
2
1
|
local concat = table.concat
|
3
|
-
|
2
|
+
local unpack = unpack or table.unpack
|
3
|
+
local type = type
|
4
|
+
local moon = {
|
4
5
|
is_object = function(value)
|
5
6
|
return type(value) == "table" and value.__class
|
6
7
|
end,
|
8
|
+
is_a = function(thing, t)
|
9
|
+
if not (type(thing) == "table") then
|
10
|
+
return false
|
11
|
+
end
|
12
|
+
local cls = thing.__class
|
13
|
+
while cls do
|
14
|
+
if cls == t then
|
15
|
+
return true
|
16
|
+
end
|
17
|
+
cls = cls.__parent
|
18
|
+
end
|
19
|
+
return false
|
20
|
+
end,
|
7
21
|
type = function(value)
|
8
22
|
local base_type = type(value)
|
9
23
|
if base_type == "table" then
|
@@ -15,6 +29,7 @@ moon = {
|
|
15
29
|
return base_type
|
16
30
|
end
|
17
31
|
}
|
32
|
+
local pos_to_line
|
18
33
|
pos_to_line = function(str, pos)
|
19
34
|
local line = 1
|
20
35
|
for _ in str:sub(1, pos):gmatch("\n") do
|
@@ -22,14 +37,11 @@ pos_to_line = function(str, pos)
|
|
22
37
|
end
|
23
38
|
return line
|
24
39
|
end
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
return get_closest_line(str, line_num - 1)
|
29
|
-
else
|
30
|
-
return line, line_num
|
31
|
-
end
|
40
|
+
local trim
|
41
|
+
trim = function(str)
|
42
|
+
return str:match("^%s*(.-)%s*$")
|
32
43
|
end
|
44
|
+
local get_line
|
33
45
|
get_line = function(str, line_num)
|
34
46
|
for line in str:gmatch("([^\n]*)\n?") do
|
35
47
|
if line_num == 1 then
|
@@ -38,6 +50,16 @@ get_line = function(str, line_num)
|
|
38
50
|
line_num = line_num - 1
|
39
51
|
end
|
40
52
|
end
|
53
|
+
local get_closest_line
|
54
|
+
get_closest_line = function(str, line_num)
|
55
|
+
local line = get_line(str, line_num)
|
56
|
+
if (not line or trim(line) == "") and line_num > 1 then
|
57
|
+
return get_closest_line(str, line_num - 1)
|
58
|
+
else
|
59
|
+
return line, line_num
|
60
|
+
end
|
61
|
+
end
|
62
|
+
local reversed
|
41
63
|
reversed = function(seq)
|
42
64
|
return coroutine.wrap(function()
|
43
65
|
for i = #seq, 1, -1 do
|
@@ -45,9 +67,7 @@ reversed = function(seq)
|
|
45
67
|
end
|
46
68
|
end)
|
47
69
|
end
|
48
|
-
|
49
|
-
return str:match("^%s*(.-)%s*$")
|
50
|
-
end
|
70
|
+
local split
|
51
71
|
split = function(str, delim)
|
52
72
|
if str == "" then
|
53
73
|
return { }
|
@@ -55,14 +75,15 @@ split = function(str, delim)
|
|
55
75
|
str = str .. delim
|
56
76
|
return (function()
|
57
77
|
local _accum_0 = { }
|
58
|
-
local _len_0 =
|
78
|
+
local _len_0 = 1
|
59
79
|
for m in str:gmatch("(.-)" .. delim) do
|
60
|
-
_len_0 = _len_0 + 1
|
61
80
|
_accum_0[_len_0] = m
|
81
|
+
_len_0 = _len_0 + 1
|
62
82
|
end
|
63
83
|
return _accum_0
|
64
84
|
end)()
|
65
85
|
end
|
86
|
+
local dump
|
66
87
|
dump = function(what)
|
67
88
|
local seen = { }
|
68
89
|
local _dump
|
@@ -81,13 +102,10 @@ dump = function(what)
|
|
81
102
|
depth = depth + 1
|
82
103
|
local lines = (function()
|
83
104
|
local _accum_0 = { }
|
84
|
-
local _len_0 =
|
105
|
+
local _len_0 = 1
|
85
106
|
for k, v in pairs(what) do
|
86
|
-
|
87
|
-
|
88
|
-
_len_0 = _len_0 + 1
|
89
|
-
_accum_0[_len_0] = _value_0
|
90
|
-
end
|
107
|
+
_accum_0[_len_0] = (" "):rep(depth * 4) .. "[" .. tostring(k) .. "] = " .. _dump(v, depth)
|
108
|
+
_len_0 = _len_0 + 1
|
91
109
|
end
|
92
110
|
return _accum_0
|
93
111
|
end)()
|
@@ -99,16 +117,17 @@ dump = function(what)
|
|
99
117
|
end
|
100
118
|
return _dump(what)
|
101
119
|
end
|
120
|
+
local debug_posmap
|
102
121
|
debug_posmap = function(posmap, moon_code, lua_code)
|
103
122
|
local tuples = (function()
|
104
123
|
local _accum_0 = { }
|
105
|
-
local _len_0 =
|
124
|
+
local _len_0 = 1
|
106
125
|
for k, v in pairs(posmap) do
|
107
|
-
_len_0 = _len_0 + 1
|
108
126
|
_accum_0[_len_0] = {
|
109
127
|
k,
|
110
128
|
v
|
111
129
|
}
|
130
|
+
_len_0 = _len_0 + 1
|
112
131
|
end
|
113
132
|
return _accum_0
|
114
133
|
end)()
|
@@ -117,7 +136,7 @@ debug_posmap = function(posmap, moon_code, lua_code)
|
|
117
136
|
end)
|
118
137
|
local lines = (function()
|
119
138
|
local _accum_0 = { }
|
120
|
-
local _len_0 =
|
139
|
+
local _len_0 = 1
|
121
140
|
local _list_0 = tuples
|
122
141
|
for _index_0 = 1, #_list_0 do
|
123
142
|
local pair = _list_0[_index_0]
|
@@ -126,13 +145,68 @@ debug_posmap = function(posmap, moon_code, lua_code)
|
|
126
145
|
local lua_text = get_line(lua_code, lua_line)
|
127
146
|
local moon_text = get_closest_line(moon_code, moon_line)
|
128
147
|
local _value_0 = tostring(pos) .. "\t " .. tostring(lua_line) .. ":[ " .. tostring(trim(lua_text)) .. " ] >> " .. tostring(moon_line) .. ":[ " .. tostring(trim(moon_text)) .. " ]"
|
129
|
-
|
130
|
-
|
131
|
-
_accum_0[_len_0] = _value_0
|
132
|
-
end
|
148
|
+
_accum_0[_len_0] = _value_0
|
149
|
+
_len_0 = _len_0 + 1
|
133
150
|
end
|
134
151
|
return _accum_0
|
135
152
|
end)()
|
136
153
|
return concat(lines, "\n")
|
137
154
|
end
|
138
|
-
|
155
|
+
local setfenv = setfenv or function(fn, env)
|
156
|
+
local name
|
157
|
+
local i = 1
|
158
|
+
while true do
|
159
|
+
name = debug.getupvalue(fn, i)
|
160
|
+
if not name or name == "_ENV" then
|
161
|
+
break
|
162
|
+
end
|
163
|
+
i = i + 1
|
164
|
+
end
|
165
|
+
if name then
|
166
|
+
debug.upvaluejoin(fn, i, (function()
|
167
|
+
return env
|
168
|
+
end), 1)
|
169
|
+
end
|
170
|
+
return fn
|
171
|
+
end
|
172
|
+
local getfenv = getfenv or function(fn)
|
173
|
+
local i = 1
|
174
|
+
while true do
|
175
|
+
local name, val = debug.getupvalue(fn, i)
|
176
|
+
if not (name) then
|
177
|
+
break
|
178
|
+
end
|
179
|
+
if name == "_ENV" then
|
180
|
+
return val
|
181
|
+
end
|
182
|
+
i = i + 1
|
183
|
+
end
|
184
|
+
return nil
|
185
|
+
end
|
186
|
+
local get_options
|
187
|
+
get_options = function(...)
|
188
|
+
local count = select("#", ...)
|
189
|
+
local opts = select(count, ...)
|
190
|
+
if type(opts) == "table" then
|
191
|
+
return opts, unpack({
|
192
|
+
...
|
193
|
+
}, nil, count - 1)
|
194
|
+
else
|
195
|
+
return { }, ...
|
196
|
+
end
|
197
|
+
end
|
198
|
+
return {
|
199
|
+
moon = moon,
|
200
|
+
pos_to_line = pos_to_line,
|
201
|
+
get_closest_line = get_closest_line,
|
202
|
+
get_line = get_line,
|
203
|
+
reversed = reversed,
|
204
|
+
trim = trim,
|
205
|
+
split = split,
|
206
|
+
dump = dump,
|
207
|
+
debug_posmap = debug_posmap,
|
208
|
+
getfenv = getfenv,
|
209
|
+
setfenv = setfenv,
|
210
|
+
get_options = get_options,
|
211
|
+
unpack = unpack
|
212
|
+
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rufus-lua-moon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stas Ukolov
|
@@ -70,15 +70,17 @@ files:
|
|
70
70
|
- vendor/lua/moon/all.moon
|
71
71
|
- vendor/lua/moon/init.moon
|
72
72
|
- vendor/lua/moonscript/compile.lua
|
73
|
-
- vendor/lua/moonscript/compile/format.lua
|
74
73
|
- vendor/lua/moonscript/compile/statement.lua
|
75
74
|
- vendor/lua/moonscript/compile/value.lua
|
76
75
|
- vendor/lua/moonscript/data.lua
|
77
76
|
- vendor/lua/moonscript/dump.lua
|
78
77
|
- vendor/lua/moonscript/errors.lua
|
79
78
|
- vendor/lua/moonscript/init.lua
|
79
|
+
- vendor/lua/moonscript/line_tables.lua
|
80
80
|
- vendor/lua/moonscript/parse.lua
|
81
81
|
- vendor/lua/moonscript/transform.lua
|
82
|
+
- vendor/lua/moonscript/transform/destructure.lua
|
83
|
+
- vendor/lua/moonscript/transform/names.lua
|
82
84
|
- vendor/lua/moonscript/types.lua
|
83
85
|
- vendor/lua/moonscript/util.lua
|
84
86
|
- vendor/lua/moonscript/version.lua
|
@@ -1,49 +0,0 @@
|
|
1
|
-
module("moonscript.compile", package.seeall)
|
2
|
-
local util = require("moonscript.util")
|
3
|
-
local data = require("moonscript.data")
|
4
|
-
local Set
|
5
|
-
do
|
6
|
-
local _table_0 = require("moonscript.data")
|
7
|
-
Set = _table_0.Set
|
8
|
-
end
|
9
|
-
local ntype
|
10
|
-
do
|
11
|
-
local _table_0 = require("moonscript.types")
|
12
|
-
ntype = _table_0.ntype
|
13
|
-
end
|
14
|
-
local concat, insert = table.concat, table.insert
|
15
|
-
indent_char = " "
|
16
|
-
user_error = function(...)
|
17
|
-
return error({
|
18
|
-
"user-error",
|
19
|
-
...
|
20
|
-
})
|
21
|
-
end
|
22
|
-
moonlib = {
|
23
|
-
bind = function(tbl, name)
|
24
|
-
return concat({
|
25
|
-
"moon.bind(",
|
26
|
-
tbl,
|
27
|
-
".",
|
28
|
-
name,
|
29
|
-
", ",
|
30
|
-
tbl,
|
31
|
-
")"
|
32
|
-
})
|
33
|
-
end
|
34
|
-
}
|
35
|
-
has_value = function(node)
|
36
|
-
if ntype(node) == "chain" then
|
37
|
-
local ctype = ntype(node[#node])
|
38
|
-
return ctype ~= "call" and ctype ~= "colon"
|
39
|
-
else
|
40
|
-
return true
|
41
|
-
end
|
42
|
-
end
|
43
|
-
count_lines = function(str)
|
44
|
-
local count = 1
|
45
|
-
for _ in str:gmatch("\n") do
|
46
|
-
count = count + 1
|
47
|
-
end
|
48
|
-
return count
|
49
|
-
end
|