diff options
| author | Li Jin <dragon-fly@qq.com> | 2025-11-14 23:31:36 +0800 |
|---|---|---|
| committer | Li Jin <dragon-fly@qq.com> | 2025-11-14 23:31:36 +0800 |
| commit | 2dc2aa85990c3e334765138e76e11b94d9ed73d1 (patch) | |
| tree | 8bfe3b64a1770c03b91e1205ca3987c73d3e31f3 | |
| parent | 69f896ca6960419133bf9a5ecc231f7aa934ac56 (diff) | |
| download | yuescript-2dc2aa85990c3e334765138e76e11b94d9ed73d1.tar.gz yuescript-2dc2aa85990c3e334765138e76e11b94d9ed73d1.tar.bz2 yuescript-2dc2aa85990c3e334765138e76e11b94d9ed73d1.zip | |
Fixed code generating.v0.29.8
| -rw-r--r-- | spec/outputs/codes_from_doc.lua | 26 | ||||
| -rw-r--r-- | spec/outputs/codes_from_doc_zh.lua | 26 | ||||
| -rw-r--r-- | spec/outputs/lists.lua | 13 | ||||
| -rw-r--r-- | src/yuescript/yue_compiler.cpp | 22 |
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 | } |
| 1110 | local flat | 1110 | local flat |
| 1111 | local _accum_0 = { } | 1111 | local _accum_0 = { } |
| 1112 | local _len_0 = 1 | ||
| 1113 | for k, v in pairs(data) do | 1112 | for 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 | ||
| 1123 | end | 1118 | end |
| 1124 | flat = _accum_0 | 1119 | flat = _accum_0 |
| 1125 | local x_coords = { | 1120 | local x_coords = { |
| @@ -3622,17 +3617,12 @@ local data = { | |||
| 3622 | } | 3617 | } |
| 3623 | local flat | 3618 | local flat |
| 3624 | local _accum_0 = { } | 3619 | local _accum_0 = { } |
| 3625 | local _len_0 = 1 | ||
| 3626 | for k, v in pairs(data) do | 3620 | for 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 | ||
| 3636 | end | 3626 | end |
| 3637 | flat = _accum_0 | 3627 | flat = _accum_0 |
| 3638 | local x_coords = { | 3628 | local 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 | } |
| 1104 | local flat | 1104 | local flat |
| 1105 | local _accum_0 = { } | 1105 | local _accum_0 = { } |
| 1106 | local _len_0 = 1 | ||
| 1107 | for k, v in pairs(data) do | 1106 | for 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 | ||
| 1117 | end | 1112 | end |
| 1118 | flat = _accum_0 | 1113 | flat = _accum_0 |
| 1119 | local x_coords = { | 1114 | local x_coords = { |
| @@ -3610,17 +3605,12 @@ local data = { | |||
| 3610 | } | 3605 | } |
| 3611 | local flat | 3606 | local flat |
| 3612 | local _accum_0 = { } | 3607 | local _accum_0 = { } |
| 3613 | local _len_0 = 1 | ||
| 3614 | for k, v in pairs(data) do | 3608 | for 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 | ||
| 3624 | end | 3614 | end |
| 3625 | flat = _accum_0 | 3615 | flat = _accum_0 |
| 3626 | local x_coords = { | 3616 | local 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 |
| 908 | end | 903 | end |
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 | } |
