rufus-lua-moon 0.2.0 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -32,9 +32,6 @@ moonlib = {
32
32
  })
33
33
  end
34
34
  }
35
- non_atomic = Set({
36
- "update"
37
- })
38
35
  has_value = function(node)
39
36
  if ntype(node) == "chain" then
40
37
  local ctype = ntype(node[#node])
@@ -43,9 +40,6 @@ has_value = function(node)
43
40
  return true
44
41
  end
45
42
  end
46
- is_non_atomic = function(node)
47
- return non_atomic[ntype(node)]
48
- end
49
43
  count_lines = function(str)
50
44
  local count = 1
51
45
  for _ in str:gmatch("\n") do
@@ -2,6 +2,7 @@ module("moonscript.compile", package.seeall)
2
2
  local util = require("moonscript.util")
3
3
  require("moonscript.compile.format")
4
4
  local dump = require("moonscript.dump")
5
+ local transform = require("moonscript.transform")
5
6
  local reversed = util.reversed
6
7
  local ntype
7
8
  do
@@ -11,11 +12,17 @@ end
11
12
  local concat, insert = table.concat, table.insert
12
13
  line_compile = {
13
14
  raw = function(self, node)
14
- local _, text = unpack(node)
15
- return self:add(text)
15
+ return self:add(node[2])
16
+ end,
17
+ lines = function(self, node)
18
+ local _list_0 = node[2]
19
+ for _index_0 = 1, #_list_0 do
20
+ local line = _list_0[_index_0]
21
+ self:add(line)
22
+ end
16
23
  end,
17
24
  declare = function(self, node)
18
- local _, names = unpack(node)
25
+ local names = node[2]
19
26
  local undeclared = self:declare(names)
20
27
  if #undeclared > 0 then
21
28
  do
@@ -23,7 +30,7 @@ line_compile = {
23
30
  _with_0:append_list((function()
24
31
  local _accum_0 = { }
25
32
  local _len_0 = 0
26
- local _list_0 = names
33
+ local _list_0 = undeclared
27
34
  for _index_0 = 1, #_list_0 do
28
35
  local name = _list_0[_index_0]
29
36
  _len_0 = _len_0 + 1
@@ -35,6 +42,25 @@ line_compile = {
35
42
  end
36
43
  end
37
44
  end,
45
+ declare_with_shadows = function(self, node)
46
+ local names = node[2]
47
+ self:declare(names)
48
+ do
49
+ local _with_0 = self:line("local ")
50
+ _with_0:append_list((function()
51
+ local _accum_0 = { }
52
+ local _len_0 = 0
53
+ local _list_0 = names
54
+ for _index_0 = 1, #_list_0 do
55
+ local name = _list_0[_index_0]
56
+ _len_0 = _len_0 + 1
57
+ _accum_0[_len_0] = self:name(name)
58
+ end
59
+ return _accum_0
60
+ end)(), ", ")
61
+ return _with_0
62
+ end
63
+ end,
38
64
  assign = function(self, node)
39
65
  local _, names, values = unpack(node)
40
66
  local undeclared = self:declare(names)
@@ -123,31 +149,21 @@ line_compile = {
123
149
  end
124
150
  return root
125
151
  end,
152
+ ["repeat"] = function(self, node)
153
+ local cond, block = unpack(node, 2)
154
+ do
155
+ local _with_0 = self:block("repeat", self:line("until ", self:value(cond)))
156
+ _with_0:stms(block)
157
+ return _with_0
158
+ end
159
+ end,
126
160
  ["while"] = function(self, node)
127
161
  local _, cond, block = unpack(node)
128
- local out
129
- if is_non_atomic(cond) then
130
- do
131
- local _with_0 = self:block("while true do")
132
- _with_0:stm({
133
- "if",
134
- {
135
- "not",
136
- cond
137
- },
138
- {
139
- {
140
- "break"
141
- }
142
- }
143
- })
144
- out = _with_0
145
- end
146
- else
147
- out = self:block(self:line("while ", self:value(cond), " do"))
162
+ do
163
+ local _with_0 = self:block(self:line("while ", self:value(cond), " do"))
164
+ _with_0:stms(block)
165
+ return _with_0
148
166
  end
149
- out:stms(block)
150
- return out
151
167
  end,
152
168
  ["for"] = function(self, node)
153
169
  local _, name, bounds, block = unpack(node)
@@ -157,12 +173,15 @@ line_compile = {
157
173
  }), " do")
158
174
  do
159
175
  local _with_0 = self:block(loop)
176
+ _with_0:declare({
177
+ name
178
+ })
160
179
  _with_0:stms(block)
161
180
  return _with_0
162
181
  end
163
182
  end,
164
183
  foreach = function(self, node)
165
- local _, names, exp, block = unpack(node)
184
+ local _, names, exps, block = unpack(node)
166
185
  local loop
167
186
  do
168
187
  local _with_0 = self:line()
@@ -178,11 +197,24 @@ line_compile = {
178
197
  end
179
198
  return _accum_0
180
199
  end)(), ", ")
181
- _with_0:append(" in ", self:value(exp), " do")
200
+ _with_0:append(" in ")
201
+ _with_0:append_list((function()
202
+ local _accum_0 = { }
203
+ local _len_0 = 0
204
+ local _list_0 = exps
205
+ for _index_0 = 1, #_list_0 do
206
+ local exp = _list_0[_index_0]
207
+ _len_0 = _len_0 + 1
208
+ _accum_0[_len_0] = self:value(exp)
209
+ end
210
+ return _accum_0
211
+ end)(), ",")
212
+ _with_0:append(" do")
182
213
  loop = _with_0
183
214
  end
184
215
  do
185
216
  local _with_0 = self:block(loop)
217
+ _with_0:declare(names)
186
218
  _with_0:stms(block)
187
219
  return _with_0
188
220
  end
@@ -8,33 +8,7 @@ do
8
8
  ntype = _table_0.ntype
9
9
  end
10
10
  local concat, insert = table.concat, table.insert
11
- local table_append
12
- table_append = function(name, len, value)
13
- return {
14
- {
15
- "update",
16
- len,
17
- "+=",
18
- 1
19
- },
20
- {
21
- "assign",
22
- {
23
- {
24
- "chain",
25
- name,
26
- {
27
- "index",
28
- len
29
- }
30
- }
31
- },
32
- {
33
- value
34
- }
35
- }
36
- }
37
- end
11
+ local table_delim = ","
38
12
  value_compile = {
39
13
  exp = function(self, node)
40
14
  local _comp
@@ -60,11 +34,6 @@ value_compile = {
60
34
  return _with_0
61
35
  end
62
36
  end,
63
- update = function(self, node)
64
- local _, name = unpack(node)
65
- self:stm(node)
66
- return self:name(name)
67
- end,
68
37
  explist = function(self, node)
69
38
  do
70
39
  local _with_0 = self:line()
@@ -86,8 +55,9 @@ value_compile = {
86
55
  return self:line("(", self:value(node[2]), ")")
87
56
  end,
88
57
  string = function(self, node)
89
- local _, delim, inner, delim_end = unpack(node)
90
- return delim .. inner .. (delim_end or delim)
58
+ local _, delim, inner = unpack(node)
59
+ local end_delim = delim:gsub("%[", "]")
60
+ return delim .. inner .. end_delim
91
61
  end,
92
62
  chain = function(self, node)
93
63
  local callee = node[2]
@@ -118,8 +88,9 @@ value_compile = {
118
88
  return error("Unknown chain action: " .. t)
119
89
  end
120
90
  end
121
- if ntype(callee) == "self" and node[3] and ntype(node[3]) == "call" then
122
- callee[1] = "self_colon"
91
+ local t = ntype(callee)
92
+ if (t == "self" or t == "self_class") and node[3] and ntype(node[3]) == "call" then
93
+ callee[1] = t .. "_colon"
123
94
  end
124
95
  local callee_value = self:value(callee)
125
96
  if ntype(callee) == "exp" then
@@ -151,7 +122,7 @@ value_compile = {
151
122
  if type(name) == "string" then
152
123
  name = name
153
124
  else
154
- if name[1] == "self" then
125
+ if name[1] == "self" or name[1] == "self_class" then
155
126
  insert(self_args, name)
156
127
  end
157
128
  name = name[2]
@@ -251,23 +222,22 @@ value_compile = {
251
222
  local _, items = unpack(node)
252
223
  do
253
224
  local _with_0 = self:block("{", "}")
254
- _with_0.delim = ","
255
225
  local format_line
256
226
  format_line = function(tuple)
257
227
  if #tuple == 2 then
258
228
  local key, value = unpack(tuple)
259
- if type(key) == "string" and data.lua_keywords[key] then
229
+ if ntype(key) == "key_literal" and data.lua_keywords[key[2]] then
260
230
  key = {
261
231
  "string",
262
232
  '"',
263
- key
233
+ key[2]
264
234
  }
265
235
  end
266
236
  local assign
267
- if type(key) ~= "string" then
268
- assign = self:line("[", _with_0:value(key), "]")
237
+ if ntype(key) == "key_literal" then
238
+ assign = key[2]
269
239
  else
270
- assign = key
240
+ assign = self:line("[", _with_0:value(key), "]")
271
241
  end
272
242
  _with_0:set("current_block", key)
273
243
  local out = self:line(assign, " = ", _with_0:value(value))
@@ -278,10 +248,13 @@ value_compile = {
278
248
  end
279
249
  end
280
250
  if items then
281
- local _list_0 = items
282
- for _index_0 = 1, #_list_0 do
283
- local line = _list_0[_index_0]
284
- _with_0:add(format_line(line))
251
+ local count = #items
252
+ for i, tuple in ipairs(items) do
253
+ local line = format_line(tuple)
254
+ if not (count == i) then
255
+ line:append(table_delim)
256
+ end
257
+ _with_0:add(line)
285
258
  end
286
259
  end
287
260
  return _with_0
@@ -305,16 +278,22 @@ value_compile = {
305
278
  self = function(self, node)
306
279
  return "self." .. self:value(node[2])
307
280
  end,
281
+ self_class = function(self, node)
282
+ return "self.__class." .. self:value(node[2])
283
+ end,
308
284
  self_colon = function(self, node)
309
285
  return "self:" .. self:value(node[2])
310
286
  end,
287
+ self_class_colon = function(self, node)
288
+ return "self.__class:" .. self:value(node[2])
289
+ end,
311
290
  raw_value = function(self, value)
312
291
  local sup = self:get("super")
313
292
  if value == "super" and sup then
314
293
  return self:value(sup(self))
315
294
  end
316
295
  if value == "..." then
317
- self.has_varargs = true
296
+ self:send("varargs")
318
297
  end
319
298
  return tostring(value)
320
299
  end
@@ -9,7 +9,7 @@ Set = function(items)
9
9
  end
10
10
  return self
11
11
  end
12
- Stack = (function()
12
+ do
13
13
  local _parent_0 = nil
14
14
  local _base_0 = {
15
15
  __tostring = function(self)
@@ -60,8 +60,11 @@ Stack = (function()
60
60
  end
61
61
  })
62
62
  _base_0.__class = _class_0
63
- return _class_0
64
- end)()
63
+ if _parent_0 and _parent_0.__inherited then
64
+ _parent_0.__inherited(_parent_0, _class_0)
65
+ end
66
+ Stack = _class_0
67
+ end
65
68
  lua_keywords = Set({
66
69
  'and',
67
70
  'break',
@@ -85,3 +88,4 @@ lua_keywords = Set({
85
88
  'until',
86
89
  'while'
87
90
  })
91
+ return nil
@@ -28,15 +28,9 @@ value = function(op)
28
28
  return flat_value(op)
29
29
  end
30
30
  tree = function(block)
31
- return (function()
32
- local _accum_0 = { }
33
- local _len_0 = 0
34
- local _list_0 = block
35
- for _index_0 = 1, #_list_0 do
36
- value = _list_0[_index_0]
37
- _len_0 = _len_0 + 1
38
- _accum_0[_len_0] = print(flat_value(value))
39
- end
40
- return _accum_0
41
- end)()
31
+ local _list_0 = block
32
+ for _index_0 = 1, #_list_0 do
33
+ value = _list_0[_index_0]
34
+ print(flat_value(value))
35
+ end
42
36
  end
@@ -24,6 +24,34 @@ reverse_line_number = function(fname, line_table, line_num, cache)
24
24
  end
25
25
  return "unknown"
26
26
  end
27
+ truncate_traceback = function(traceback, chunk_func)
28
+ if chunk_func == nil then
29
+ chunk_func = "moonscript_chunk"
30
+ end
31
+ traceback = split(traceback, "\n")
32
+ local stop = #traceback
33
+ while stop > 1 do
34
+ if traceback[stop]:match(chunk_func) then
35
+ break
36
+ end
37
+ stop = stop - 1
38
+ end
39
+ traceback = (function()
40
+ local _accum_0 = { }
41
+ local _len_0 = 0
42
+ local _list_0 = traceback
43
+ local _max_0 = stop
44
+ for _index_0 = 1, _max_0 < 0 and #_list_0 + _max_0 or _max_0 do
45
+ local t = _list_0[_index_0]
46
+ _len_0 = _len_0 + 1
47
+ _accum_0[_len_0] = t
48
+ end
49
+ return _accum_0
50
+ end)()
51
+ local rep = "function '" .. chunk_func .. "'"
52
+ traceback[#traceback] = traceback[#traceback]:gsub(rep, "main chunk")
53
+ return concat(traceback, "\n")
54
+ end
27
55
  rewrite_traceback = function(text, err)
28
56
  local line_tables = moon.line_tables
29
57
  local V, S, Ct, C = lpeg.V, lpeg.S, lpeg.Ct, lpeg.C
@@ -45,6 +73,9 @@ rewrite_traceback = function(text, err)
45
73
  fname,
46
74
  ":",
47
75
  reverse_line_number(fname, tbl, line, cache),
76
+ "(",
77
+ line,
78
+ ")",
48
79
  ": ",
49
80
  msg
50
81
  })
@@ -54,11 +85,14 @@ rewrite_traceback = function(text, err)
54
85
  end
55
86
  err = rewrite_single(err)
56
87
  local match = g:match(text)
88
+ if not (match) then
89
+ return nil
90
+ end
57
91
  for i, trace in ipairs(match) do
58
92
  match[i] = rewrite_single(trace)
59
93
  end
60
94
  return concat({
61
- "moon:" .. err,
95
+ "moon: " .. err,
62
96
  header_text,
63
97
  "\t" .. concat(match, "\n\t")
64
98
  }, "\n")
@@ -20,7 +20,10 @@ create_moonpath = function(package_path)
20
20
  end
21
21
  return concat(paths, ";")
22
22
  end
23
- to_lua = function(text)
23
+ to_lua = function(text, options)
24
+ if options == nil then
25
+ options = { }
26
+ end
24
27
  if "string" ~= type(text) then
25
28
  local t = type(text)
26
29
  error("expecting string (got " .. t .. ")", 2)
@@ -29,7 +32,7 @@ to_lua = function(text)
29
32
  if not tree then
30
33
  error(err, 2)
31
34
  end
32
- local code, ltable, pos = compile.tree(tree)
35
+ local code, ltable, pos = compile.tree(tree, options)
33
36
  if not code then
34
37
  error(compile.format_error(ltable, pos, text), 2)
35
38
  end
@@ -49,6 +52,7 @@ moon_loader = function(name)
49
52
  end
50
53
  if file then
51
54
  local text = file:read("*a")
55
+ file:close()
52
56
  return loadstring(text, file_path)
53
57
  else
54
58
  return nil, "Could not find moon file"
@@ -64,9 +68,12 @@ end
64
68
  if not _G.moon_no_loader then
65
69
  init_loader()
66
70
  end
67
- loadstring = function(str, chunk_name)
71
+ loadstring = function(str, chunk_name, options)
72
+ if options == nil then
73
+ options = nil
74
+ end
68
75
  local passed, code, ltable = pcall(function()
69
- return to_lua(str)
76
+ return to_lua(str, options)
70
77
  end)
71
78
  if not passed then
72
79
  error(chunk_name .. ": " .. code, 2)
@@ -76,15 +83,19 @@ loadstring = function(str, chunk_name)
76
83
  end
77
84
  return lua.loadstring(code, chunk_name or "=(moonscript.loadstring)")
78
85
  end
79
- loadfile = function(fname)
86
+ loadfile = function(fname, options)
87
+ if options == nil then
88
+ options = nil
89
+ end
80
90
  local file, err = io.open(fname)
81
91
  if not file then
82
92
  return nil, err
83
93
  end
84
94
  local text = assert(file:read("*a"))
85
- return loadstring(text, fname)
95
+ file:close()
96
+ return loadstring(text, fname, options)
86
97
  end
87
- dofile = function(fname)
98
+ dofile = function(fname, options)
88
99
  local f = assert(loadfile(fname))
89
100
  return f()
90
101
  end