Skip to content

Commit 2dc2aa8

Browse files
committed
Fixed code generating.
1 parent 69f896c commit 2dc2aa8

4 files changed

Lines changed: 35 additions & 52 deletions

File tree

spec/outputs/codes_from_doc.lua

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1109,17 +1109,12 @@ local data = {
11091109
}
11101110
local flat
11111111
local _accum_0 = { }
1112-
local _len_0 = 1
11131112
for k, v in pairs(data) do
1114-
do
1115-
local _obj_0 = _accum_0[_len_0]
1116-
local _len_1 = #_obj_0 + 1
1117-
for _index_0 = 1, #v do
1118-
local _elm_0 = v[_index_0]
1119-
_obj_0[_len_1], _len_1 = _elm_0, _len_1 + 1
1120-
end
1113+
local _len_0 = #_accum_0 + 1
1114+
for _index_0 = 1, #v do
1115+
local _elm_0 = v[_index_0]
1116+
_accum_0[_len_0], _len_0 = _elm_0, _len_0 + 1
11211117
end
1122-
_len_0 = _len_0 + 1
11231118
end
11241119
flat = _accum_0
11251120
local x_coords = {
@@ -3622,17 +3617,12 @@ local data = {
36223617
}
36233618
local flat
36243619
local _accum_0 = { }
3625-
local _len_0 = 1
36263620
for k, v in pairs(data) do
3627-
do
3628-
local _obj_0 = _accum_0[_len_0]
3629-
local _len_1 = #_obj_0 + 1
3630-
for _index_0 = 1, #v do
3631-
local _elm_0 = v[_index_0]
3632-
_obj_0[_len_1], _len_1 = _elm_0, _len_1 + 1
3633-
end
3621+
local _len_0 = #_accum_0 + 1
3622+
for _index_0 = 1, #v do
3623+
local _elm_0 = v[_index_0]
3624+
_accum_0[_len_0], _len_0 = _elm_0, _len_0 + 1
36343625
end
3635-
_len_0 = _len_0 + 1
36363626
end
36373627
flat = _accum_0
36383628
local x_coords = {

spec/outputs/codes_from_doc_zh.lua

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1103,17 +1103,12 @@ local data = {
11031103
}
11041104
local flat
11051105
local _accum_0 = { }
1106-
local _len_0 = 1
11071106
for k, v in pairs(data) do
1108-
do
1109-
local _obj_0 = _accum_0[_len_0]
1110-
local _len_1 = #_obj_0 + 1
1111-
for _index_0 = 1, #v do
1112-
local _elm_0 = v[_index_0]
1113-
_obj_0[_len_1], _len_1 = _elm_0, _len_1 + 1
1114-
end
1107+
local _len_0 = #_accum_0 + 1
1108+
for _index_0 = 1, #v do
1109+
local _elm_0 = v[_index_0]
1110+
_accum_0[_len_0], _len_0 = _elm_0, _len_0 + 1
11151111
end
1116-
_len_0 = _len_0 + 1
11171112
end
11181113
flat = _accum_0
11191114
local x_coords = {
@@ -3610,17 +3605,12 @@ local data = {
36103605
}
36113606
local flat
36123607
local _accum_0 = { }
3613-
local _len_0 = 1
36143608
for k, v in pairs(data) do
3615-
do
3616-
local _obj_0 = _accum_0[_len_0]
3617-
local _len_1 = #_obj_0 + 1
3618-
for _index_0 = 1, #v do
3619-
local _elm_0 = v[_index_0]
3620-
_obj_0[_len_1], _len_1 = _elm_0, _len_1 + 1
3621-
end
3609+
local _len_0 = #_accum_0 + 1
3610+
for _index_0 = 1, #v do
3611+
local _elm_0 = v[_index_0]
3612+
_accum_0[_len_0], _len_0 = _elm_0, _len_0 + 1
36223613
end
3623-
_len_0 = _len_0 + 1
36243614
end
36253615
flat = _accum_0
36263616
local x_coords = {

spec/outputs/lists.lua

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -892,17 +892,12 @@ do
892892
}
893893
local flat
894894
local _accum_0 = { }
895-
local _len_0 = 1
896895
for k, v in pairs(data) do
897-
do
898-
local _obj_0 = _accum_0[_len_0]
899-
local _len_1 = #_obj_0 + 1
900-
for _index_0 = 1, #v do
901-
local _elm_0 = v[_index_0]
902-
_obj_0[_len_1], _len_1 = _elm_0, _len_1 + 1
903-
end
896+
local _len_0 = #_accum_0 + 1
897+
for _index_0 = 1, #v do
898+
local _elm_0 = v[_index_0]
899+
_accum_0[_len_0], _len_0 = _elm_0, _len_0 + 1
904900
end
905-
_len_0 = _len_0 + 1
906901
end
907902
flat = _accum_0
908903
end

src/yuescript/yue_compiler.cpp

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8317,9 +8317,12 @@ class YueCompilerImpl {
83178317
auto compInner = static_cast<CompInner_t*>(comp->items.back());
83188318
str_list temp;
83198319
std::string accumVar = getUnusedName("_accum_"sv);
8320-
std::string lenVar = getUnusedName("_len_"sv);
83218320
addToScope(accumVar);
8322-
addToScope(lenVar);
8321+
std::string lenVar;
8322+
if (!isSpread) {
8323+
lenVar = getUnusedName("_len_"sv);
8324+
addToScope(lenVar);
8325+
}
83238326
for (auto item : compInner->items.objects()) {
83248327
switch (item->get_id()) {
83258328
case id<CompForEach_t>():
@@ -8337,7 +8340,7 @@ class YueCompilerImpl {
83378340
}
83388341
}
83398342
{
8340-
auto assignLeft = toAst<ExpList_t>(accumVar + '[' + lenVar + (isSpread ? "][]"s : "]"s), x);
8343+
auto assignLeft = toAst<ExpList_t>(accumVar + '[' + (isSpread ? "]"s : lenVar + ']'), x);
83418344
auto assign = x->new_ptr<Assign_t>();
83428345
assign->values.push_back(value);
83438346
auto assignment = x->new_ptr<ExpListAssign_t>();
@@ -8351,10 +8354,15 @@ class YueCompilerImpl {
83518354
popScope();
83528355
}
83538356
_buf << indent() << "local "sv << accumVar << " = { }"sv << nll(comp);
8354-
_buf << indent() << "local "sv << lenVar << " = 1"sv << nll(comp);
8355-
_buf << join(temp);
8356-
_buf << assignStr;
8357-
_buf << indent(int(temp.size())) << lenVar << " = "sv << lenVar << " + 1"sv << nll(comp);
8357+
if (isSpread) {
8358+
_buf << join(temp);
8359+
_buf << assignStr;
8360+
} else {
8361+
_buf << indent() << "local "sv << lenVar << " = 1"sv << nll(comp);
8362+
_buf << join(temp);
8363+
_buf << assignStr;
8364+
_buf << indent(int(temp.size())) << lenVar << " = "sv << lenVar << " + 1"sv << nll(comp);
8365+
}
83588366
for (int ind = int(temp.size()) - 1; ind > -1; --ind) {
83598367
_buf << indent(ind) << "end"sv << nll(comp);
83608368
}

0 commit comments

Comments
 (0)