rufus-lua-moon 0.2.6.0 → 0.3.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.
- checksums.yaml +4 -4
- data/.gitmodules +3 -0
- data/.travis.yml +9 -0
- data/FarMenu.ini +16 -0
- data/README.md +10 -4
- data/Rakefile +13 -0
- data/lib/rufus/lua/moon/version.rb +2 -2
- data/rufus-lua-moon.gemspec +5 -1
- data/test/chain.rb +6 -0
- data/test/compile.rb +12 -0
- data/test/path.rb +15 -0
- data/test/path27.moon +3 -0
- data/test/req.rb +17 -0
- data/test/ver.rb +23 -0
- data/vendor/{lua → leafo}/moon/all.moon +0 -0
- data/vendor/{lua → leafo}/moon/init.moon +0 -0
- data/vendor/{lua → leafo}/moonscript/base.lua +0 -0
- data/vendor/{lua → leafo}/moonscript/cmd/coverage.lua +0 -0
- data/vendor/{lua → leafo}/moonscript/cmd/lint.lua +118 -13
- data/vendor/{lua → leafo}/moonscript/cmd/moonc.lua +5 -12
- data/vendor/{lua → leafo}/moonscript/compile/statement.lua +1 -4
- data/vendor/{lua → leafo}/moonscript/compile/value.lua +2 -8
- data/vendor/{lua → leafo}/moonscript/compile.lua +21 -19
- data/vendor/{lua → leafo}/moonscript/data.lua +0 -0
- data/vendor/{lua → leafo}/moonscript/dump.lua +0 -0
- data/vendor/{lua → leafo}/moonscript/errors.lua +1 -1
- data/vendor/{lua → leafo}/moonscript/init.lua +0 -0
- data/vendor/{lua → leafo}/moonscript/line_tables.lua +0 -0
- data/vendor/leafo/moonscript/parse/env.lua +69 -0
- data/vendor/leafo/moonscript/parse/literals.lua +34 -0
- data/vendor/leafo/moonscript/parse/util.lua +267 -0
- data/vendor/leafo/moonscript/parse.lua +235 -0
- data/vendor/{lua → leafo}/moonscript/transform/destructure.lua +12 -18
- data/vendor/{lua → leafo}/moonscript/transform/names.lua +2 -8
- data/vendor/{lua → leafo}/moonscript/transform.lua +1 -4
- data/vendor/{lua → leafo}/moonscript/types.lua +2 -8
- data/vendor/{lua → leafo}/moonscript/util.lua +11 -5
- data/vendor/{lua → leafo}/moonscript/version.lua +1 -1
- metadata +71 -25
- data/vendor/lua/moonscript/parse.lua +0 -639
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c10815a43366dd3f11d5f5f3c008ae1e795f8f27
|
4
|
+
data.tar.gz: 07f58017264a9722f153d68b050c6a29a5cebba3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b52737e4a0908426294696826e1fe411c1e2685d0ec6369f0d00bc6328a305c0ac754394a4bf31e7b5e8921e908d8893bee91428b7e6afef25de734d05c65e64
|
7
|
+
data.tar.gz: 86a05962373f5d4fc9111a144cc20ba5e660ce84e091cb915d4b42ec477d7d64ca11062cd79b681fd8085738dbce1ee61a7430fe254cfa8a91558a981084ce72
|
data/.gitmodules
ADDED
data/.travis.yml
ADDED
data/FarMenu.ini
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
I: Install dependencies
|
2
|
+
bundle install
|
3
|
+
--:
|
4
|
+
B: Build gem
|
5
|
+
bundle exec rake build
|
6
|
+
L: Install gem locally
|
7
|
+
bundle exec rake install
|
8
|
+
U: Uninstall gem
|
9
|
+
gem uninstall -a rufus-lua-moon
|
10
|
+
P: Publish gem
|
11
|
+
bundle exec rake release
|
12
|
+
--:
|
13
|
+
T: Run tests
|
14
|
+
bundle exec rake
|
15
|
+
C: Open console
|
16
|
+
bundle console -new_console:c
|
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# Rufus::Lua::Moon
|
2
2
|
|
3
|
+
[](https://travis-ci.org/ukoloff/rufus-lua-moon)
|
3
4
|
[](http://badge.fury.io/rb/rufus-lua-moon)
|
4
5
|
|
5
6
|
Provides MoonScript for Rufus::Lua interpreter
|
@@ -40,12 +41,17 @@ s.eval <<EOL
|
|
40
41
|
EOL
|
41
42
|
```
|
42
43
|
|
44
|
+
## Dependencies
|
45
|
+
|
46
|
+
On Linux you should have Lua and Lpeg installed
|
47
|
+
(eg. for [Ubuntu](.travis.yml)).
|
48
|
+
|
49
|
+
On Windows simply use
|
50
|
+
[Rufus::Lua::Win](https://github.com/ukoloff/rufus-lua-win).
|
51
|
+
|
43
52
|
## Credits
|
44
53
|
|
45
54
|
* [Lua](http://www.lua.org/)
|
46
55
|
* [MoonScript](http://moonscript.org/)
|
47
56
|
* [Rufus::Lua](https://github.com/jmettraux/rufus-lua)
|
48
|
-
|
49
|
-
## See also
|
50
|
-
|
51
|
-
* [Rufus::Lua::Win](https://github.com/ukoloff/rufus-lua-win) if you run Rufus::Lua on Windows
|
57
|
+
* [Travis CI](https://travis-ci.org/)
|
data/Rakefile
CHANGED
@@ -1 +1,14 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
+
|
3
|
+
desc 'Run tests'
|
4
|
+
task :test do
|
5
|
+
require "minitest/autorun"
|
6
|
+
|
7
|
+
require 'rufus/lua/win' if Gem.win_platform?
|
8
|
+
require 'rufus/lua'
|
9
|
+
require 'rufus/lua/moon'
|
10
|
+
|
11
|
+
Dir.glob('./test/*.rb'){|f| require f}
|
12
|
+
end
|
13
|
+
|
14
|
+
task default: :test
|
@@ -4,9 +4,9 @@ module Rufus
|
|
4
4
|
root=File.expand_path '../../../../..', __FILE__
|
5
5
|
subV=File.read(File.expand_path '.subversion', root).strip rescue ''
|
6
6
|
subV="."+subV.gsub(/\W+/, '.') if subV.length>0
|
7
|
-
Path=File.expand_path 'vendor/
|
7
|
+
Path=File.expand_path 'vendor/leafo', root
|
8
8
|
m=/(["'])(\d+(\.\d+){1,3}(-(?!0)[\da-z])*)\1/i.match File.read File.expand_path 'moonscript/version.lua', Path
|
9
|
-
VERSION = m ? m[2].gsub('-', '.')+subV : '0.0.?'
|
9
|
+
VERSION = m ? (Version=m[2]).gsub('-', '.')+subV : '0.0.?'
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
data/rufus-lua-moon.gemspec
CHANGED
@@ -13,13 +13,17 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.homepage = "https://github.com/ukoloff/rufus-lua-moon"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
|
-
spec.files = `git ls-files`.split($/)
|
16
|
+
spec.files = `git ls-files`.split($/) +
|
17
|
+
Dir.glob('vendor/leafo/moon/*.moon')+
|
18
|
+
Dir.glob('vendor/leafo/moonscript/**/*.lua')
|
17
19
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
20
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
21
|
spec.require_paths = ["lib"]
|
20
22
|
|
21
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
24
|
spec.add_development_dependency "rake"
|
25
|
+
spec.add_development_dependency "minitest"
|
26
|
+
spec.add_development_dependency "rufus-lua-win" if Gem.win_platform?
|
23
27
|
|
24
28
|
spec.add_dependency "rufus-lua"
|
25
29
|
end
|
data/test/chain.rb
ADDED
data/test/compile.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
class TestC < Minitest::Test
|
2
|
+
def test_compile
|
3
|
+
s=Rufus::Lua::State.new.moon!
|
4
|
+
assert s.eval("return require('moonscript').to_lua('x = a b c')")[0]
|
5
|
+
.gsub(/\s+/, '')['=a(b(c))']
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_fail
|
9
|
+
s=Rufus::Lua::State.new.moon!
|
10
|
+
refute s.eval("return require('moonscript').to_lua 'a=b:'")[0] rescue nil
|
11
|
+
end
|
12
|
+
end
|
data/test/path.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
class TestC < Minitest::Test
|
2
|
+
def test_path
|
3
|
+
skip if '0.2.3'==Rufus::Lua::Moon::Version
|
4
|
+
s=Rufus::Lua::State.new.moon!
|
5
|
+
s['package']['moonpath']=File.expand_path '../?.moon', __FILE__
|
6
|
+
assert_equal 3.0, s.eval("return require 'path27'")
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_fail
|
10
|
+
s=Rufus::Lua::State.new.moon!
|
11
|
+
assert_raises(Rufus::Lua::LuaError) do
|
12
|
+
s.eval "require 'path27'"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/test/path27.moon
ADDED
data/test/req.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
class TestV < Minitest::Test
|
2
|
+
def test_require
|
3
|
+
s=Rufus::Lua::State.new.moon!
|
4
|
+
{
|
5
|
+
moonscript: %w(util version),
|
6
|
+
moon: %w(all),
|
7
|
+
}.map{|k, v|([nil]+v).map{|i| [k, i].compact*'.'}}
|
8
|
+
.flatten.each {|f| s.eval "require '#{f}'"}
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_missing
|
12
|
+
assert_raises(Rufus::Lua::LuaError) do
|
13
|
+
s=Rufus::Lua::State.new.moon!
|
14
|
+
s.eval "require 'moonscript.oops'"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/test/ver.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
class TestV < Minitest::Test
|
2
|
+
def test_ver
|
3
|
+
s=Rufus::Lua::State.new.moon!
|
4
|
+
luav=s.eval 'return _VERSION'
|
5
|
+
rufv=Rufus::Lua::VERSION
|
6
|
+
moonv=s.eval 'return require("moonscript.version").version'
|
7
|
+
gemv=Rufus::Lua::Moon::VERSION
|
8
|
+
|
9
|
+
len=moonv.length
|
10
|
+
|
11
|
+
assert_equal gemv[0...len], moonv.gsub('-', '.')
|
12
|
+
c=gemv[len]
|
13
|
+
assert(c.nil? || '.'==c)
|
14
|
+
|
15
|
+
at_exit do
|
16
|
+
puts
|
17
|
+
puts "Lua version #{luav}"
|
18
|
+
puts "Rufus::Lua version #{rufv}"
|
19
|
+
puts "MoonScript version #{moonv}"
|
20
|
+
puts "Rufus::Lua::Moon version #{gemv}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,18 +1,11 @@
|
|
1
1
|
local insert
|
2
|
-
|
3
|
-
local _obj_0 = table
|
4
|
-
insert = _obj_0.insert
|
5
|
-
end
|
2
|
+
insert = table.insert
|
6
3
|
local Set
|
7
|
-
|
8
|
-
local _obj_0 = require("moonscript.data")
|
9
|
-
Set = _obj_0.Set
|
10
|
-
end
|
4
|
+
Set = require("moonscript.data").Set
|
11
5
|
local Block
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
end
|
6
|
+
Block = require("moonscript.compile").Block
|
7
|
+
local mtype
|
8
|
+
mtype = require("moonscript.util").moon.type
|
16
9
|
local default_whitelist = Set({
|
17
10
|
'_G',
|
18
11
|
'_VERSION',
|
@@ -61,11 +54,84 @@ local LinterBlock
|
|
61
54
|
do
|
62
55
|
local _parent_0 = Block
|
63
56
|
local _base_0 = {
|
57
|
+
lint_mark_used = function(self, name)
|
58
|
+
if self.lint_unused_names and self.lint_unused_names[name] then
|
59
|
+
self.lint_unused_names[name] = false
|
60
|
+
return
|
61
|
+
end
|
62
|
+
if self.parent then
|
63
|
+
return self.parent:lint_mark_used(name)
|
64
|
+
end
|
65
|
+
end,
|
66
|
+
lint_check_unused = function(self)
|
67
|
+
if not (self.lint_unused_names and next(self.lint_unused_names)) then
|
68
|
+
return
|
69
|
+
end
|
70
|
+
local names_by_position = { }
|
71
|
+
for name, pos in pairs(self.lint_unused_names) do
|
72
|
+
local _continue_0 = false
|
73
|
+
repeat
|
74
|
+
if not (pos) then
|
75
|
+
_continue_0 = true
|
76
|
+
break
|
77
|
+
end
|
78
|
+
names_by_position[pos] = names_by_position[pos] or { }
|
79
|
+
insert(names_by_position[pos], name)
|
80
|
+
_continue_0 = true
|
81
|
+
until true
|
82
|
+
if not _continue_0 then
|
83
|
+
break
|
84
|
+
end
|
85
|
+
end
|
86
|
+
local tuples
|
87
|
+
do
|
88
|
+
local _accum_0 = { }
|
89
|
+
local _len_0 = 1
|
90
|
+
for pos, names in pairs(names_by_position) do
|
91
|
+
_accum_0[_len_0] = {
|
92
|
+
pos,
|
93
|
+
names
|
94
|
+
}
|
95
|
+
_len_0 = _len_0 + 1
|
96
|
+
end
|
97
|
+
tuples = _accum_0
|
98
|
+
end
|
99
|
+
table.sort(tuples, function(a, b)
|
100
|
+
return a[1] < b[1]
|
101
|
+
end)
|
102
|
+
for _index_0 = 1, #tuples do
|
103
|
+
local _des_0 = tuples[_index_0]
|
104
|
+
local pos, names
|
105
|
+
pos, names = _des_0[1], _des_0[2]
|
106
|
+
insert(self:get_root_block().lint_errors, {
|
107
|
+
"assigned but unused " .. tostring(table.concat((function()
|
108
|
+
local _accum_0 = { }
|
109
|
+
local _len_0 = 1
|
110
|
+
for _index_1 = 1, #names do
|
111
|
+
local n = names[_index_1]
|
112
|
+
_accum_0[_len_0] = "`" .. tostring(n) .. "`"
|
113
|
+
_len_0 = _len_0 + 1
|
114
|
+
end
|
115
|
+
return _accum_0
|
116
|
+
end)(), ", ")),
|
117
|
+
pos
|
118
|
+
})
|
119
|
+
end
|
120
|
+
end,
|
121
|
+
render = function(self, ...)
|
122
|
+
self:lint_check_unused()
|
123
|
+
return _parent_0.render(self, ...)
|
124
|
+
end,
|
64
125
|
block = function(self, ...)
|
65
126
|
do
|
66
127
|
local _with_0 = _parent_0.block(self, ...)
|
67
128
|
_with_0.block = self.block
|
129
|
+
_with_0.render = self.render
|
130
|
+
_with_0.get_root_block = self.get_root_block
|
131
|
+
_with_0.lint_check_unused = self.lint_check_unused
|
132
|
+
_with_0.lint_mark_used = self.lint_mark_used
|
68
133
|
_with_0.value_compilers = self.value_compilers
|
134
|
+
_with_0.statement_compilers = self.statement_compilers
|
69
135
|
return _with_0
|
70
136
|
end
|
71
137
|
end
|
@@ -78,6 +144,9 @@ do
|
|
78
144
|
whitelist_globals = default_whitelist
|
79
145
|
end
|
80
146
|
_parent_0.__init(self, ...)
|
147
|
+
self.get_root_block = function()
|
148
|
+
return self
|
149
|
+
end
|
81
150
|
self.lint_errors = { }
|
82
151
|
local vc = self.value_compilers
|
83
152
|
self.value_compilers = setmetatable({
|
@@ -85,15 +154,50 @@ do
|
|
85
154
|
local name = val[2]
|
86
155
|
if not (block:has_name(name) or whitelist_globals[name] or name:match("%.")) then
|
87
156
|
insert(self.lint_errors, {
|
88
|
-
"accessing global " .. tostring(name),
|
157
|
+
"accessing global `" .. tostring(name) .. "`",
|
89
158
|
val[-1]
|
90
159
|
})
|
91
160
|
end
|
161
|
+
block:lint_mark_used(name)
|
92
162
|
return vc.ref(block, val)
|
93
163
|
end
|
94
164
|
}, {
|
95
165
|
__index = vc
|
96
166
|
})
|
167
|
+
local sc = self.statement_compilers
|
168
|
+
self.statement_compilers = setmetatable({
|
169
|
+
assign = function(block, node)
|
170
|
+
local names = node[2]
|
171
|
+
for _index_0 = 1, #names do
|
172
|
+
local _continue_0 = false
|
173
|
+
repeat
|
174
|
+
local name = names[_index_0]
|
175
|
+
if type(name) == "table" and name[1] == "temp_name" then
|
176
|
+
_continue_0 = true
|
177
|
+
break
|
178
|
+
end
|
179
|
+
local real_name, is_local = block:extract_assign_name(name)
|
180
|
+
if not (is_local or real_name and not block:has_name(real_name, true)) then
|
181
|
+
_continue_0 = true
|
182
|
+
break
|
183
|
+
end
|
184
|
+
if real_name == "_" then
|
185
|
+
_continue_0 = true
|
186
|
+
break
|
187
|
+
end
|
188
|
+
block.lint_unused_names = block.lint_unused_names or { }
|
189
|
+
block.lint_unused_names[real_name] = node[-1] or 0
|
190
|
+
_continue_0 = true
|
191
|
+
until true
|
192
|
+
if not _continue_0 then
|
193
|
+
break
|
194
|
+
end
|
195
|
+
end
|
196
|
+
return sc.assign(block, node)
|
197
|
+
end
|
198
|
+
}, {
|
199
|
+
__index = sc
|
200
|
+
})
|
97
201
|
end,
|
98
202
|
__base = _base_0,
|
99
203
|
__name = "LinterBlock",
|
@@ -198,6 +302,7 @@ lint_code = function(code, name, whitelist_globals)
|
|
198
302
|
end
|
199
303
|
local scope = LinterBlock(whitelist_globals)
|
200
304
|
scope:stms(tree)
|
305
|
+
scope:lint_check_unused()
|
201
306
|
return format_lint(scope.lint_errors, code, name)
|
202
307
|
end
|
203
308
|
local lint_file
|
@@ -1,9 +1,6 @@
|
|
1
1
|
local lfs = require("lfs")
|
2
2
|
local split
|
3
|
-
|
4
|
-
local _obj_0 = require("moonscript.util")
|
5
|
-
split = _obj_0.split
|
6
|
-
end
|
3
|
+
split = require("moonscript.util").split
|
7
4
|
local dirsep, dirsep_chars, mkdir, normalize_dir, parse_dir, parse_file, convert_path, format_time, gettime, compile_file_text, write_file, compile_and_write, is_abs_path, path_to_target
|
8
5
|
dirsep = package.config:sub(1, 1)
|
9
6
|
if dirsep == "\\" then
|
@@ -58,7 +55,7 @@ do
|
|
58
55
|
end
|
59
56
|
end
|
60
57
|
end
|
61
|
-
compile_file_text = function(text,
|
58
|
+
compile_file_text = function(text, opts)
|
62
59
|
if opts == nil then
|
63
60
|
opts = { }
|
64
61
|
end
|
@@ -93,17 +90,14 @@ compile_file_text = function(text, fname, opts)
|
|
93
90
|
end
|
94
91
|
if opts.show_posmap then
|
95
92
|
local debug_posmap
|
96
|
-
|
97
|
-
local _obj_0 = require("moonscript.util")
|
98
|
-
debug_posmap = _obj_0.debug_posmap
|
99
|
-
end
|
93
|
+
debug_posmap = require("moonscript.util").debug_posmap
|
100
94
|
print("Pos", "Lua", ">>", "Moon")
|
101
95
|
print(debug_posmap(posmap_or_err, text, code))
|
102
96
|
return true
|
103
97
|
end
|
104
98
|
if opts.benchmark then
|
105
99
|
print(table.concat({
|
106
|
-
fname,
|
100
|
+
opts.fname or "stdin",
|
107
101
|
"Parse time \t" .. format_time(parse_time),
|
108
102
|
"Compile time\t" .. format_time(compile_time),
|
109
103
|
""
|
@@ -141,7 +135,7 @@ compile_and_write = function(src, dest, opts)
|
|
141
135
|
return true
|
142
136
|
end
|
143
137
|
if opts.print then
|
144
|
-
print(
|
138
|
+
print(code)
|
145
139
|
return true
|
146
140
|
end
|
147
141
|
return write_file(dest, code)
|
@@ -188,7 +182,6 @@ return {
|
|
188
182
|
normalize_dir = normalize_dir,
|
189
183
|
parse_dir = parse_dir,
|
190
184
|
parse_file = parse_file,
|
191
|
-
new_path = new_path,
|
192
185
|
convert_path = convert_path,
|
193
186
|
gettime = gettime,
|
194
187
|
format_time = format_time,
|
@@ -2,10 +2,7 @@ local util = require("moonscript.util")
|
|
2
2
|
local reversed, unpack
|
3
3
|
reversed, unpack = util.reversed, util.unpack
|
4
4
|
local ntype
|
5
|
-
|
6
|
-
local _obj_0 = require("moonscript.types")
|
7
|
-
ntype = _obj_0.ntype
|
8
|
-
end
|
5
|
+
ntype = require("moonscript.types").ntype
|
9
6
|
local concat, insert
|
10
7
|
do
|
11
8
|
local _obj_0 = table
|
@@ -1,15 +1,9 @@
|
|
1
1
|
local util = require("moonscript.util")
|
2
2
|
local data = require("moonscript.data")
|
3
3
|
local ntype
|
4
|
-
|
5
|
-
local _obj_0 = require("moonscript.types")
|
6
|
-
ntype = _obj_0.ntype
|
7
|
-
end
|
4
|
+
ntype = require("moonscript.types").ntype
|
8
5
|
local user_error
|
9
|
-
|
10
|
-
local _obj_0 = require("moonscript.errors")
|
11
|
-
user_error = _obj_0.user_error
|
12
|
-
end
|
6
|
+
user_error = require("moonscript.errors").user_error
|
13
7
|
local concat, insert
|
14
8
|
do
|
15
9
|
local _obj_0 = table
|
@@ -7,10 +7,7 @@ do
|
|
7
7
|
NameProxy, LocalName = _obj_0.NameProxy, _obj_0.LocalName
|
8
8
|
end
|
9
9
|
local Set
|
10
|
-
|
11
|
-
local _obj_0 = require("moonscript.data")
|
12
|
-
Set = _obj_0.Set
|
13
|
-
end
|
10
|
+
Set = require("moonscript.data").Set
|
14
11
|
local ntype, has_value
|
15
12
|
do
|
16
13
|
local _obj_0 = require("moonscript.types")
|
@@ -259,6 +256,7 @@ do
|
|
259
256
|
export_all = false,
|
260
257
|
export_proper = false,
|
261
258
|
value_compilers = value_compilers,
|
259
|
+
statement_compilers = statement_compilers,
|
262
260
|
__tostring = function(self)
|
263
261
|
local h
|
264
262
|
if "string" == type(self.header) then
|
@@ -291,6 +289,22 @@ do
|
|
291
289
|
end
|
292
290
|
end
|
293
291
|
end,
|
292
|
+
extract_assign_name = function(self, node)
|
293
|
+
local is_local = false
|
294
|
+
local real_name
|
295
|
+
local _exp_0 = mtype(node)
|
296
|
+
if LocalName == _exp_0 then
|
297
|
+
is_local = true
|
298
|
+
real_name = node:get_name(self)
|
299
|
+
elseif NameProxy == _exp_0 then
|
300
|
+
real_name = node:get_name(self)
|
301
|
+
elseif "table" == _exp_0 then
|
302
|
+
real_name = node[1] == "ref" and node[2]
|
303
|
+
elseif "string" == _exp_0 then
|
304
|
+
real_name = node
|
305
|
+
end
|
306
|
+
return real_name, is_local
|
307
|
+
end,
|
294
308
|
declare = function(self, names)
|
295
309
|
local undeclared
|
296
310
|
do
|
@@ -300,19 +314,7 @@ do
|
|
300
314
|
local _continue_0 = false
|
301
315
|
repeat
|
302
316
|
local name = names[_index_0]
|
303
|
-
local is_local =
|
304
|
-
local real_name
|
305
|
-
local _exp_0 = mtype(name)
|
306
|
-
if LocalName == _exp_0 then
|
307
|
-
is_local = true
|
308
|
-
real_name = name:get_name(self)
|
309
|
-
elseif NameProxy == _exp_0 then
|
310
|
-
real_name = name:get_name(self)
|
311
|
-
elseif "table" == _exp_0 then
|
312
|
-
real_name = name[1] == "ref" and name[2]
|
313
|
-
elseif "string" == _exp_0 then
|
314
|
-
real_name = name
|
315
|
-
end
|
317
|
+
local real_name, is_local = self:extract_assign_name(name)
|
316
318
|
if not (is_local or real_name and not self:has_name(real_name, true)) then
|
317
319
|
_continue_0 = true
|
318
320
|
break
|
@@ -453,7 +455,7 @@ do
|
|
453
455
|
end
|
454
456
|
end,
|
455
457
|
is_stm = function(self, node)
|
456
|
-
return statement_compilers[ntype(node)] ~= nil
|
458
|
+
return self.statement_compilers[ntype(node)] ~= nil
|
457
459
|
end,
|
458
460
|
is_value = function(self, node)
|
459
461
|
local t = ntype(node)
|
@@ -519,7 +521,7 @@ do
|
|
519
521
|
node = self.transform.statement(node)
|
520
522
|
local result
|
521
523
|
do
|
522
|
-
local fn = statement_compilers[ntype(node)]
|
524
|
+
local fn = self.statement_compilers[ntype(node)]
|
523
525
|
if fn then
|
524
526
|
result = fn(self, node, ...)
|
525
527
|
else
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,69 @@
|
|
1
|
+
local getfenv, setfenv
|
2
|
+
do
|
3
|
+
local _obj_0 = require("moonscript.util")
|
4
|
+
getfenv, setfenv = _obj_0.getfenv, _obj_0.setfenv
|
5
|
+
end
|
6
|
+
local wrap_env
|
7
|
+
wrap_env = function(debug, fn)
|
8
|
+
local V, Cmt
|
9
|
+
do
|
10
|
+
local _obj_0 = require("lpeg")
|
11
|
+
V, Cmt = _obj_0.V, _obj_0.Cmt
|
12
|
+
end
|
13
|
+
local env = getfenv(fn)
|
14
|
+
local wrap_name = V
|
15
|
+
if debug then
|
16
|
+
local indent = 0
|
17
|
+
local indent_char = " "
|
18
|
+
local iprint
|
19
|
+
iprint = function(...)
|
20
|
+
local args = table.concat((function(...)
|
21
|
+
local _accum_0 = { }
|
22
|
+
local _len_0 = 1
|
23
|
+
local _list_0 = {
|
24
|
+
...
|
25
|
+
}
|
26
|
+
for _index_0 = 1, #_list_0 do
|
27
|
+
local a = _list_0[_index_0]
|
28
|
+
_accum_0[_len_0] = tostring(a)
|
29
|
+
_len_0 = _len_0 + 1
|
30
|
+
end
|
31
|
+
return _accum_0
|
32
|
+
end)(...), ", ")
|
33
|
+
return io.stderr:write(tostring(indent_char:rep(indent)) .. tostring(args) .. "\n")
|
34
|
+
end
|
35
|
+
wrap_name = function(name)
|
36
|
+
local v = V(name)
|
37
|
+
v = Cmt("", function()
|
38
|
+
iprint("* " .. name)
|
39
|
+
indent = indent + 1
|
40
|
+
return true
|
41
|
+
end) * Cmt(v, function(str, pos, ...)
|
42
|
+
iprint(name, true)
|
43
|
+
indent = indent - 1
|
44
|
+
return true, ...
|
45
|
+
end) + Cmt("", function()
|
46
|
+
iprint(name, false)
|
47
|
+
indent = indent - 1
|
48
|
+
return false
|
49
|
+
end)
|
50
|
+
return v
|
51
|
+
end
|
52
|
+
end
|
53
|
+
return setfenv(fn, setmetatable({ }, {
|
54
|
+
__index = function(self, name)
|
55
|
+
local value = env[name]
|
56
|
+
if value ~= nil then
|
57
|
+
return value
|
58
|
+
end
|
59
|
+
if name:match("^[A-Z][A-Za-z0-9]*$") then
|
60
|
+
local v = wrap_name(name)
|
61
|
+
return v
|
62
|
+
end
|
63
|
+
return error("unknown variable referenced: " .. tostring(name))
|
64
|
+
end
|
65
|
+
}))
|
66
|
+
end
|
67
|
+
return {
|
68
|
+
wrap_env = wrap_env
|
69
|
+
}
|