From 2f8215df7288e0aac690c8e8b1ff79865f114302 Mon Sep 17 00:00:00 2001 From: Li Jin Date: Tue, 3 Sep 2024 23:23:25 +0800 Subject: fix correct evaluation order for multi-value assignments. --- spec/inputs/destructure.yue | 8 ++++++ spec/outputs/assign.lua | 3 +-- spec/outputs/destructure.lua | 49 +++++++++++++++++++++++++++--------- spec/outputs/metatable.lua | 13 +++++----- spec/outputs/unicode/assign.lua | 3 +-- spec/outputs/unicode/destructure.lua | 24 +++++++++--------- spec/outputs/unicode/metatable.lua | 13 +++++----- 7 files changed, 73 insertions(+), 40 deletions(-) (limited to 'spec') diff --git a/spec/inputs/destructure.yue b/spec/inputs/destructure.yue index 5017ee1..674dfe4 100644 --- a/spec/inputs/destructure.yue +++ b/spec/inputs/destructure.yue @@ -6,6 +6,14 @@ do { :hello, :world } = value +do + x, [a, b] = f! + print x, a, b + +do + list = [ [1, 2], [3, 4]] + {x, y}, list = lume.first(list), lume.slice list, 2 + do { yes: no, thing } = world diff --git a/spec/outputs/assign.lua b/spec/outputs/assign.lua index 5552f73..1978df1 100644 --- a/spec/outputs/assign.lua +++ b/spec/outputs/assign.lua @@ -77,8 +77,7 @@ return _(function() end end do - local a - local b + local a, b if x then local _obj_0, _obj_1 = f() a = _obj_0 diff --git a/spec/outputs/destructure.lua b/spec/outputs/destructure.lua index 2d0d46f..d8517a0 100644 --- a/spec/outputs/destructure.lua +++ b/spec/outputs/destructure.lua @@ -13,6 +13,31 @@ do local _obj_0 = value hello, world = _obj_0.hello, _obj_0.world end +do + local x, a, b + do + local _obj_0, _obj_1 = f() + x = _obj_0 + a, b = _obj_1[1], _obj_1[2] + end + print(x, a, b) +end +do + local list = { + { + 1, + 2 + }, + { + 3, + 4 + } + } + local x, y + local _obj_0 = lume.first(list) + x, y = _obj_0[1], _obj_0[2] + list = lume.slice(list, 2) +end do local no, thing do @@ -24,12 +49,12 @@ do local _obj_0 = yeah a, b, c, d = _obj_0.a, _obj_0.b, _obj_0.c, _obj_0.d end - b = two a = one[1] - c = nil + b = two b = one[1] - local e = two + c = nil d = one[1] + local e = two local x = one local y = two[1] local xx, yy = 1, 2 @@ -46,9 +71,9 @@ do a, b, c, d, e, f, g = _obj_0[1], _obj_0.b, _obj_0[2], _obj_0.d, _obj_0[3], _obj_0.f, _obj_0[4] end do - c = nil local _obj_0 = tbl a, b = _obj_0.a, _obj_0.b + c = nil end do a = tbl @@ -56,8 +81,8 @@ do b, c = _obj_0.b, _obj_0.c end do - b = _ a = tbl.a + b = _ c = _.c end end @@ -211,8 +236,8 @@ do end one, two, three = _tbl_0.one, _tbl_0.two, _tbl_0.three end - b = 123 a = (a["if"](a, 123) + t).a + b = 123 end do local name, job @@ -399,8 +424,7 @@ do end end do - local x1, x2, x3, d, e - local b + local x1, x2, x3, d, b, e do local _obj_0, _obj_1, _obj_2, _obj_3, _obj_4 = f() do @@ -408,14 +432,15 @@ do _obj_5[#_obj_5 + 1] = _obj_0 end setmetatable(c, _obj_4) - x1, x2, x3, d, e = 1, 2, 3, _obj_1, _obj_3 + x1, x2, x3, d = 1, 2, 3, _obj_1 b = _obj_2[1] + e = _obj_3 end - local y1, y4 - local y2, y3 + local y1, y2, y3, y4 local _obj_0, _obj_1 = f2() - y1, y4 = f1(), _obj_1 + y1 = f1() y2, y3 = _obj_0.y2, _obj_0.y3 + y4 = _obj_1 end do local v1, v2, v3, v4 diff --git a/spec/outputs/metatable.lua b/spec/outputs/metatable.lua index 6af10e5..0715b58 100644 --- a/spec/outputs/metatable.lua +++ b/spec/outputs/metatable.lua @@ -48,14 +48,15 @@ do end do local x, new, var, close, closeA, num, add, sub - local _obj_0, _obj_1 - x, _obj_0, _obj_1 = 123, a.b.c, func() + x = 123 + local _obj_0 = a.b.c new, var = _obj_0.new, _obj_0.var - local _obj_2 = getmetatable(_obj_0) - close, closeA = _obj_2.__close, _obj_2.__close + local _obj_1 = getmetatable(_obj_0) + close, closeA = _obj_1.__close, _obj_1.__close + _obj_1 = func() num = _obj_1.num - local _obj_3 = getmetatable(_obj_1) - add, sub = _obj_3.__add, _obj_3.__sub + local _obj_2 = getmetatable(_obj_1) + add, sub = _obj_2.__add, _obj_2.__sub end setmetatable(a.b, { }) x.abc = 123 diff --git a/spec/outputs/unicode/assign.lua b/spec/outputs/unicode/assign.lua index cb53159..e883d68 100644 --- a/spec/outputs/unicode/assign.lua +++ b/spec/outputs/unicode/assign.lua @@ -81,8 +81,7 @@ return __u65e0_u6548_u53d8_u91cf(function() end end do - local _u53d8_u91cfa - local _u5143_u7d20b + local _u53d8_u91cfa, _u5143_u7d20b if x_u6761_u4ef6 then local _obj_0, _obj_1 = _u51fd_u6570() _u53d8_u91cfa = _obj_0 diff --git a/spec/outputs/unicode/destructure.lua b/spec/outputs/unicode/destructure.lua index e1cd6ae..29697fa 100644 --- a/spec/outputs/unicode/destructure.lua +++ b/spec/outputs/unicode/destructure.lua @@ -24,12 +24,12 @@ do local _obj_0 = _u597d _u5b57_u6bb5a, _u5b57_u6bb5b, _u5b57_u6bb5c, d_u5b57_u6bb5 = _obj_0["字段a"], _obj_0["字段b"], _obj_0["字段c"], _obj_0["d字段"] end - local _u53d8_u91cfb = _u4e8c local a_u5143_u7d20 = _u4e00[1] - local _u53d8_u91cfc = nil + local _u53d8_u91cfb = _u4e8c local b_u5143_u7d20 = _u4e00[1] - local _u53d8_u91cfe = _u4e8c + local _u53d8_u91cfc = nil local d_u5143_u7d20 = _u4e00[1] + local _u53d8_u91cfe = _u4e8c local _u53d8_u91cfx = _u4e00 local _u5143_u7d20y = _u4e8c[1] local _u53d8_u91cfxx, _u53d8_u91cfyy = 1, 2 @@ -47,9 +47,9 @@ do _u5143_u7d20a, _u5b57_u6bb5b, _u5143_u7d20c, _u5b57_u6bb5d, _u5143_u7d20e, _u5b57_u6bb5f, _u5143_u7d20g = _obj_0[1], _obj_0["字段b"], _obj_0[2], _obj_0["字段d"], _obj_0[3], _obj_0["字段f"], _obj_0[4] end do - _u53d8_u91cfc = nil local _obj_0 = _u8868 _u5b57_u6bb5a, _u5b57_u6bb5b = _obj_0["字段a"], _obj_0["字段b"] + _u53d8_u91cfc = nil end do local _u53d8_u91cfa = _u8868 @@ -57,8 +57,8 @@ do _u5b57_u6bb5b, _u5b57_u6bb5c = _obj_0["字段b"], _obj_0["字段c"] end do - _u53d8_u91cfb = __u65e0_u6548_u53d8_u91cf _u5b57_u6bb5a = _u8868["字段a"] + _u53d8_u91cfb = __u65e0_u6548_u53d8_u91cf _u5b57_u6bb5c = __u65e0_u6548_u53d8_u91cf["字段c"] end end @@ -212,11 +212,11 @@ do end _u4e00, _u4e8c, _u4e09 = _tbl_0["一"], _tbl_0["二"], _tbl_0["三"] end - local _u53d8_u91cfb = 123 _u5b57_u6bb5a = ((function() local _call_0 = _u5bf9_u8c61a return _call_0["如果"](_call_0, 123) end)() + _u53d8_u91cft)["字段a"] + local _u53d8_u91cfb = 123 end do local _u540d_u79f0, _u5de5_u4f5c @@ -386,8 +386,7 @@ do end end do - local _u53d8_u91cf1, _u53d8_u91cf2, _u53d8_u91cf3, _u53d8_u91cfd, _u53d8_u91cfe - local _u5143_u7d20b + local _u53d8_u91cf1, _u53d8_u91cf2, _u53d8_u91cf3, _u53d8_u91cfd, _u5143_u7d20b, _u53d8_u91cfe do local _obj_0, _obj_1, _obj_2, _obj_3, _obj_4 = _u51fd_u6570() do @@ -395,14 +394,15 @@ do _obj_5[#_obj_5 + 1] = _obj_0 end setmetatable(_u5bf9_u8c61c, _obj_4) - _u53d8_u91cf1, _u53d8_u91cf2, _u53d8_u91cf3, _u53d8_u91cfd, _u53d8_u91cfe = 1, 2, 3, _obj_1, _obj_3 + _u53d8_u91cf1, _u53d8_u91cf2, _u53d8_u91cf3, _u53d8_u91cfd = 1, 2, 3, _obj_1 _u5143_u7d20b = _obj_2[1] + _u53d8_u91cfe = _obj_3 end - local _u53d8_u91cfy1, _u53d8_u91cfy4 - local _u5b57_u6bb5y2, _u5b57_u6bb5y3 + local _u53d8_u91cfy1, _u5b57_u6bb5y2, _u5b57_u6bb5y3, _u53d8_u91cfy4 local _obj_0, _obj_1 = _u51fd_u65702() - _u53d8_u91cfy1, _u53d8_u91cfy4 = _u51fd_u65701(), _obj_1 + _u53d8_u91cfy1 = _u51fd_u65701() _u5b57_u6bb5y2, _u5b57_u6bb5y3 = _obj_0["字段y2"], _obj_0["字段y3"] + _u53d8_u91cfy4 = _obj_1 end do local _u53d8_u91cfv1, _u53d8_u91cfv2, _u53d8_u91cfv3, _u53d8_u91cfv4 diff --git a/spec/outputs/unicode/metatable.lua b/spec/outputs/unicode/metatable.lua index ca48d0d..f948d21 100644 --- a/spec/outputs/unicode/metatable.lua +++ b/spec/outputs/unicode/metatable.lua @@ -48,14 +48,15 @@ do end do local _u53d8_u91cfx, _u65b0, _u53d8_u91cf, close, _u5173_u95edA, num, add, sub - local _obj_0, _obj_1 - _u53d8_u91cfx, _obj_0, _obj_1 = 123, _u53d8_u91cfa["变量b"]["变量c"], _u51fd_u6570() + _u53d8_u91cfx = 123 + local _obj_0 = _u53d8_u91cfa["变量b"]["变量c"] _u65b0, _u53d8_u91cf = _obj_0["新"], _obj_0["变量"] - local _obj_2 = getmetatable(_obj_0) - close, _u5173_u95edA = _obj_2.__close, _obj_2.__close + local _obj_1 = getmetatable(_obj_0) + close, _u5173_u95edA = _obj_1.__close, _obj_1.__close + _obj_1 = _u51fd_u6570() num = _obj_1.num - local _obj_3 = getmetatable(_obj_1) - add, sub = _obj_3.__add, _obj_3.__sub + local _obj_2 = getmetatable(_obj_1) + add, sub = _obj_2.__add, _obj_2.__sub end setmetatable(_u53d8_u91cfa["变量b"], { }) _u53d8_u91cfx.abc = 123 -- cgit v1.2.3-55-g6feb