moonscript
moonscript copied to clipboard
destructing assignment works wrong with for generator
Code like this
{a, b} = for i in *{2, 3} do i*i
print a, b
Compiles to
do
local _accum_0 = { }
local _len_0 = 1
local _list_0 = {
2,
3
}
for _index_0 = 1, #_list_0 do
local i = _list_0[_index_0]
_accum_0[_len_0] = i * i
_len_0 = _len_0 + 1
end
local a, b
a, b = _accum_0[1], _accum_0[2]
end
return print(a, b)
There variables a and b are local, so execution result is nil nil instead of 4 9
This bug affects list comprehensions too:
f = ->
{x} = [x for x in *{42}]
print x
f!
which emits
local f
f = function()
do
local _accum_0 = { }
local _len_0 = 1
local _list_0 = {
42
}
for _index_0 = 1, #_list_0 do
local x = _list_0[_index_0]
_accum_0[_len_0] = x
_len_0 = _len_0 + 1
end
local x
x = _accum_0[1]
end
return print(x)
end
return f()