aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2025-11-14 23:31:36 +0800
committerLi Jin <dragon-fly@qq.com>2025-11-14 23:31:36 +0800
commit2dc2aa85990c3e334765138e76e11b94d9ed73d1 (patch)
tree8bfe3b64a1770c03b91e1205ca3987c73d3e31f3
parent69f896ca6960419133bf9a5ecc231f7aa934ac56 (diff)
downloadyuescript-2dc2aa85990c3e334765138e76e11b94d9ed73d1.tar.gz
yuescript-2dc2aa85990c3e334765138e76e11b94d9ed73d1.tar.bz2
yuescript-2dc2aa85990c3e334765138e76e11b94d9ed73d1.zip
Fixed code generating.v0.29.8
-rw-r--r--spec/outputs/codes_from_doc.lua26
-rw-r--r--spec/outputs/codes_from_doc_zh.lua26
-rw-r--r--spec/outputs/lists.lua13
-rw-r--r--src/yuescript/yue_compiler.cpp22
4 files changed, 35 insertions, 52 deletions
diff --git a/spec/outputs/codes_from_doc.lua b/spec/outputs/codes_from_doc.lua
index 00b3b8b..d6617a9 100644
--- a/spec/outputs/codes_from_doc.lua
+++ b/spec/outputs/codes_from_doc.lua
@@ -1109,17 +1109,12 @@ local data = {
1109} 1109}
1110local flat 1110local flat
1111local _accum_0 = { } 1111local _accum_0 = { }
1112local _len_0 = 1
1113for k, v in pairs(data) do 1112for k, v in pairs(data) do
1114 do 1113 local _len_0 = #_accum_0 + 1
1115 local _obj_0 = _accum_0[_len_0] 1114 for _index_0 = 1, #v do
1116 local _len_1 = #_obj_0 + 1 1115 local _elm_0 = v[_index_0]
1117 for _index_0 = 1, #v do 1116 _accum_0[_len_0], _len_0 = _elm_0, _len_0 + 1
1118 local _elm_0 = v[_index_0]
1119 _obj_0[_len_1], _len_1 = _elm_0, _len_1 + 1
1120 end
1121 end 1117 end
1122 _len_0 = _len_0 + 1
1123end 1118end
1124flat = _accum_0 1119flat = _accum_0
1125local x_coords = { 1120local x_coords = {
@@ -3622,17 +3617,12 @@ local data = {
3622} 3617}
3623local flat 3618local flat
3624local _accum_0 = { } 3619local _accum_0 = { }
3625local _len_0 = 1
3626for k, v in pairs(data) do 3620for k, v in pairs(data) do
3627 do 3621 local _len_0 = #_accum_0 + 1
3628 local _obj_0 = _accum_0[_len_0] 3622 for _index_0 = 1, #v do
3629 local _len_1 = #_obj_0 + 1 3623 local _elm_0 = v[_index_0]
3630 for _index_0 = 1, #v do 3624 _accum_0[_len_0], _len_0 = _elm_0, _len_0 + 1
3631 local _elm_0 = v[_index_0]
3632 _obj_0[_len_1], _len_1 = _elm_0, _len_1 + 1
3633 end
3634 end 3625 end
3635 _len_0 = _len_0 + 1
3636end 3626end
3637flat = _accum_0 3627flat = _accum_0
3638local x_coords = { 3628local x_coords = {
diff --git a/spec/outputs/codes_from_doc_zh.lua b/spec/outputs/codes_from_doc_zh.lua
index c382bca..ec84112 100644
--- a/spec/outputs/codes_from_doc_zh.lua
+++ b/spec/outputs/codes_from_doc_zh.lua
@@ -1103,17 +1103,12 @@ local data = {
1103} 1103}
1104local flat 1104local flat
1105local _accum_0 = { } 1105local _accum_0 = { }
1106local _len_0 = 1
1107for k, v in pairs(data) do 1106for k, v in pairs(data) do
1108 do 1107 local _len_0 = #_accum_0 + 1
1109 local _obj_0 = _accum_0[_len_0] 1108 for _index_0 = 1, #v do
1110 local _len_1 = #_obj_0 + 1 1109 local _elm_0 = v[_index_0]
1111 for _index_0 = 1, #v do 1110 _accum_0[_len_0], _len_0 = _elm_0, _len_0 + 1
1112 local _elm_0 = v[_index_0]
1113 _obj_0[_len_1], _len_1 = _elm_0, _len_1 + 1
1114 end
1115 end 1111 end
1116 _len_0 = _len_0 + 1
1117end 1112end
1118flat = _accum_0 1113flat = _accum_0
1119local x_coords = { 1114local x_coords = {
@@ -3610,17 +3605,12 @@ local data = {
3610} 3605}
3611local flat 3606local flat
3612local _accum_0 = { } 3607local _accum_0 = { }
3613local _len_0 = 1
3614for k, v in pairs(data) do 3608for k, v in pairs(data) do
3615 do 3609 local _len_0 = #_accum_0 + 1
3616 local _obj_0 = _accum_0[_len_0] 3610 for _index_0 = 1, #v do
3617 local _len_1 = #_obj_0 + 1 3611 local _elm_0 = v[_index_0]
3618 for _index_0 = 1, #v do 3612 _accum_0[_len_0], _len_0 = _elm_0, _len_0 + 1
3619 local _elm_0 = v[_index_0]
3620 _obj_0[_len_1], _len_1 = _elm_0, _len_1 + 1
3621 end
3622 end 3613 end
3623 _len_0 = _len_0 + 1
3624end 3614end
3625flat = _accum_0 3615flat = _accum_0
3626local x_coords = { 3616local x_coords = {
diff --git a/spec/outputs/lists.lua b/spec/outputs/lists.lua
index 6115700..75f04fa 100644
--- a/spec/outputs/lists.lua
+++ b/spec/outputs/lists.lua
@@ -892,17 +892,12 @@ do
892 } 892 }
893 local flat 893 local flat
894 local _accum_0 = { } 894 local _accum_0 = { }
895 local _len_0 = 1
896 for k, v in pairs(data) do 895 for k, v in pairs(data) do
897 do 896 local _len_0 = #_accum_0 + 1
898 local _obj_0 = _accum_0[_len_0] 897 for _index_0 = 1, #v do
899 local _len_1 = #_obj_0 + 1 898 local _elm_0 = v[_index_0]
900 for _index_0 = 1, #v do 899 _accum_0[_len_0], _len_0 = _elm_0, _len_0 + 1
901 local _elm_0 = v[_index_0]
902 _obj_0[_len_1], _len_1 = _elm_0, _len_1 + 1
903 end
904 end 900 end
905 _len_0 = _len_0 + 1
906 end 901 end
907 flat = _accum_0 902 flat = _accum_0
908end 903end
diff --git a/src/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp
index 8c28e61..d6db3fc 100644
--- a/src/yuescript/yue_compiler.cpp
+++ b/src/yuescript/yue_compiler.cpp
@@ -8317,9 +8317,12 @@ private:
8317 auto compInner = static_cast<CompInner_t*>(comp->items.back()); 8317 auto compInner = static_cast<CompInner_t*>(comp->items.back());
8318 str_list temp; 8318 str_list temp;
8319 std::string accumVar = getUnusedName("_accum_"sv); 8319 std::string accumVar = getUnusedName("_accum_"sv);
8320 std::string lenVar = getUnusedName("_len_"sv);
8321 addToScope(accumVar); 8320 addToScope(accumVar);
8322 addToScope(lenVar); 8321 std::string lenVar;
8322 if (!isSpread) {
8323 lenVar = getUnusedName("_len_"sv);
8324 addToScope(lenVar);
8325 }
8323 for (auto item : compInner->items.objects()) { 8326 for (auto item : compInner->items.objects()) {
8324 switch (item->get_id()) { 8327 switch (item->get_id()) {
8325 case id<CompForEach_t>(): 8328 case id<CompForEach_t>():
@@ -8337,7 +8340,7 @@ private:
8337 } 8340 }
8338 } 8341 }
8339 { 8342 {
8340 auto assignLeft = toAst<ExpList_t>(accumVar + '[' + lenVar + (isSpread ? "][]"s : "]"s), x); 8343 auto assignLeft = toAst<ExpList_t>(accumVar + '[' + (isSpread ? "]"s : lenVar + ']'), x);
8341 auto assign = x->new_ptr<Assign_t>(); 8344 auto assign = x->new_ptr<Assign_t>();
8342 assign->values.push_back(value); 8345 assign->values.push_back(value);
8343 auto assignment = x->new_ptr<ExpListAssign_t>(); 8346 auto assignment = x->new_ptr<ExpListAssign_t>();
@@ -8351,10 +8354,15 @@ private:
8351 popScope(); 8354 popScope();
8352 } 8355 }
8353 _buf << indent() << "local "sv << accumVar << " = { }"sv << nll(comp); 8356 _buf << indent() << "local "sv << accumVar << " = { }"sv << nll(comp);
8354 _buf << indent() << "local "sv << lenVar << " = 1"sv << nll(comp); 8357 if (isSpread) {
8355 _buf << join(temp); 8358 _buf << join(temp);
8356 _buf << assignStr; 8359 _buf << assignStr;
8357 _buf << indent(int(temp.size())) << lenVar << " = "sv << lenVar << " + 1"sv << nll(comp); 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 }
8358 for (int ind = int(temp.size()) - 1; ind > -1; --ind) { 8366 for (int ind = int(temp.size()) - 1; ind > -1; --ind) {
8359 _buf << indent(ind) << "end"sv << nll(comp); 8367 _buf << indent(ind) << "end"sv << nll(comp);
8360 } 8368 }