aboutsummaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2024-09-03 23:23:25 +0800
committerLi Jin <dragon-fly@qq.com>2024-09-03 23:23:25 +0800
commit2f8215df7288e0aac690c8e8b1ff79865f114302 (patch)
tree2fc316ec0d6ca82123dc1fbc2012d8eeb3bc8427 /spec
parent880b7eb9a427b263091f6eef5197c0285c723fd7 (diff)
downloadyuescript-2f8215df7288e0aac690c8e8b1ff79865f114302.tar.gz
yuescript-2f8215df7288e0aac690c8e8b1ff79865f114302.tar.bz2
yuescript-2f8215df7288e0aac690c8e8b1ff79865f114302.zip
fix correct evaluation order for multi-value assignments.v0.25.0
Diffstat (limited to 'spec')
-rw-r--r--spec/inputs/destructure.yue8
-rw-r--r--spec/outputs/assign.lua3
-rw-r--r--spec/outputs/destructure.lua49
-rw-r--r--spec/outputs/metatable.lua13
-rw-r--r--spec/outputs/unicode/assign.lua3
-rw-r--r--spec/outputs/unicode/destructure.lua24
-rw-r--r--spec/outputs/unicode/metatable.lua13
7 files changed, 73 insertions, 40 deletions
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
@@ -7,6 +7,14 @@ do
7 { :hello, :world } = value 7 { :hello, :world } = value
8 8
9do 9do
10 x, [a, b] = f!
11 print x, a, b
12
13do
14 list = [ [1, 2], [3, 4]]
15 {x, y}, list = lume.first(list), lume.slice list, 2
16
17do
10 { yes: no, thing } = world 18 { yes: no, thing } = world
11 19
12 {:a,:b,:c,:d} = yeah 20 {:a,:b,:c,:d} = yeah
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()
77 end 77 end
78 end 78 end
79 do 79 do
80 local a 80 local a, b
81 local b
82 if x then 81 if x then
83 local _obj_0, _obj_1 = f() 82 local _obj_0, _obj_1 = f()
84 a = _obj_0 83 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
@@ -14,6 +14,31 @@ do
14 hello, world = _obj_0.hello, _obj_0.world 14 hello, world = _obj_0.hello, _obj_0.world
15end 15end
16do 16do
17 local x, a, b
18 do
19 local _obj_0, _obj_1 = f()
20 x = _obj_0
21 a, b = _obj_1[1], _obj_1[2]
22 end
23 print(x, a, b)
24end
25do
26 local list = {
27 {
28 1,
29 2
30 },
31 {
32 3,
33 4
34 }
35 }
36 local x, y
37 local _obj_0 = lume.first(list)
38 x, y = _obj_0[1], _obj_0[2]
39 list = lume.slice(list, 2)
40end
41do
17 local no, thing 42 local no, thing
18 do 43 do
19 local _obj_0 = world 44 local _obj_0 = world
@@ -24,12 +49,12 @@ do
24 local _obj_0 = yeah 49 local _obj_0 = yeah
25 a, b, c, d = _obj_0.a, _obj_0.b, _obj_0.c, _obj_0.d 50 a, b, c, d = _obj_0.a, _obj_0.b, _obj_0.c, _obj_0.d
26 end 51 end
27 b = two
28 a = one[1] 52 a = one[1]
29 c = nil 53 b = two
30 b = one[1] 54 b = one[1]
31 local e = two 55 c = nil
32 d = one[1] 56 d = one[1]
57 local e = two
33 local x = one 58 local x = one
34 local y = two[1] 59 local y = two[1]
35 local xx, yy = 1, 2 60 local xx, yy = 1, 2
@@ -46,9 +71,9 @@ do
46 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] 71 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]
47 end 72 end
48 do 73 do
49 c = nil
50 local _obj_0 = tbl 74 local _obj_0 = tbl
51 a, b = _obj_0.a, _obj_0.b 75 a, b = _obj_0.a, _obj_0.b
76 c = nil
52 end 77 end
53 do 78 do
54 a = tbl 79 a = tbl
@@ -56,8 +81,8 @@ do
56 b, c = _obj_0.b, _obj_0.c 81 b, c = _obj_0.b, _obj_0.c
57 end 82 end
58 do 83 do
59 b = _
60 a = tbl.a 84 a = tbl.a
85 b = _
61 c = _.c 86 c = _.c
62 end 87 end
63end 88end
@@ -211,8 +236,8 @@ do
211 end 236 end
212 one, two, three = _tbl_0.one, _tbl_0.two, _tbl_0.three 237 one, two, three = _tbl_0.one, _tbl_0.two, _tbl_0.three
213 end 238 end
214 b = 123
215 a = (a["if"](a, 123) + t).a 239 a = (a["if"](a, 123) + t).a
240 b = 123
216end 241end
217do 242do
218 local name, job 243 local name, job
@@ -399,8 +424,7 @@ do
399 end 424 end
400end 425end
401do 426do
402 local x1, x2, x3, d, e 427 local x1, x2, x3, d, b, e
403 local b
404 do 428 do
405 local _obj_0, _obj_1, _obj_2, _obj_3, _obj_4 = f() 429 local _obj_0, _obj_1, _obj_2, _obj_3, _obj_4 = f()
406 do 430 do
@@ -408,14 +432,15 @@ do
408 _obj_5[#_obj_5 + 1] = _obj_0 432 _obj_5[#_obj_5 + 1] = _obj_0
409 end 433 end
410 setmetatable(c, _obj_4) 434 setmetatable(c, _obj_4)
411 x1, x2, x3, d, e = 1, 2, 3, _obj_1, _obj_3 435 x1, x2, x3, d = 1, 2, 3, _obj_1
412 b = _obj_2[1] 436 b = _obj_2[1]
437 e = _obj_3
413 end 438 end
414 local y1, y4 439 local y1, y2, y3, y4
415 local y2, y3
416 local _obj_0, _obj_1 = f2() 440 local _obj_0, _obj_1 = f2()
417 y1, y4 = f1(), _obj_1 441 y1 = f1()
418 y2, y3 = _obj_0.y2, _obj_0.y3 442 y2, y3 = _obj_0.y2, _obj_0.y3
443 y4 = _obj_1
419end 444end
420do 445do
421 local v1, v2, v3, v4 446 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
48end 48end
49do 49do
50 local x, new, var, close, closeA, num, add, sub 50 local x, new, var, close, closeA, num, add, sub
51 local _obj_0, _obj_1 51 x = 123
52 x, _obj_0, _obj_1 = 123, a.b.c, func() 52 local _obj_0 = a.b.c
53 new, var = _obj_0.new, _obj_0.var 53 new, var = _obj_0.new, _obj_0.var
54 local _obj_2 = getmetatable(_obj_0) 54 local _obj_1 = getmetatable(_obj_0)
55 close, closeA = _obj_2.__close, _obj_2.__close 55 close, closeA = _obj_1.__close, _obj_1.__close
56 _obj_1 = func()
56 num = _obj_1.num 57 num = _obj_1.num
57 local _obj_3 = getmetatable(_obj_1) 58 local _obj_2 = getmetatable(_obj_1)
58 add, sub = _obj_3.__add, _obj_3.__sub 59 add, sub = _obj_2.__add, _obj_2.__sub
59end 60end
60setmetatable(a.b, { }) 61setmetatable(a.b, { })
61x.abc = 123 62x.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()
81 end 81 end
82 end 82 end
83 do 83 do
84 local _u53d8_u91cfa 84 local _u53d8_u91cfa, _u5143_u7d20b
85 local _u5143_u7d20b
86 if x_u6761_u4ef6 then 85 if x_u6761_u4ef6 then
87 local _obj_0, _obj_1 = _u51fd_u6570() 86 local _obj_0, _obj_1 = _u51fd_u6570()
88 _u53d8_u91cfa = _obj_0 87 _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
24 local _obj_0 = _u597d 24 local _obj_0 = _u597d
25 _u5b57_u6bb5a, _u5b57_u6bb5b, _u5b57_u6bb5c, d_u5b57_u6bb5 = _obj_0["字段a"], _obj_0["字段b"], _obj_0["字段c"], _obj_0["d字段"] 25 _u5b57_u6bb5a, _u5b57_u6bb5b, _u5b57_u6bb5c, d_u5b57_u6bb5 = _obj_0["字段a"], _obj_0["字段b"], _obj_0["字段c"], _obj_0["d字段"]
26 end 26 end
27 local _u53d8_u91cfb = _u4e8c
28 local a_u5143_u7d20 = _u4e00[1] 27 local a_u5143_u7d20 = _u4e00[1]
29 local _u53d8_u91cfc = nil 28 local _u53d8_u91cfb = _u4e8c
30 local b_u5143_u7d20 = _u4e00[1] 29 local b_u5143_u7d20 = _u4e00[1]
31 local _u53d8_u91cfe = _u4e8c 30 local _u53d8_u91cfc = nil
32 local d_u5143_u7d20 = _u4e00[1] 31 local d_u5143_u7d20 = _u4e00[1]
32 local _u53d8_u91cfe = _u4e8c
33 local _u53d8_u91cfx = _u4e00 33 local _u53d8_u91cfx = _u4e00
34 local _u5143_u7d20y = _u4e8c[1] 34 local _u5143_u7d20y = _u4e8c[1]
35 local _u53d8_u91cfxx, _u53d8_u91cfyy = 1, 2 35 local _u53d8_u91cfxx, _u53d8_u91cfyy = 1, 2
@@ -47,9 +47,9 @@ do
47 _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] 47 _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]
48 end 48 end
49 do 49 do
50 _u53d8_u91cfc = nil
51 local _obj_0 = _u8868 50 local _obj_0 = _u8868
52 _u5b57_u6bb5a, _u5b57_u6bb5b = _obj_0["字段a"], _obj_0["字段b"] 51 _u5b57_u6bb5a, _u5b57_u6bb5b = _obj_0["字段a"], _obj_0["字段b"]
52 _u53d8_u91cfc = nil
53 end 53 end
54 do 54 do
55 local _u53d8_u91cfa = _u8868 55 local _u53d8_u91cfa = _u8868
@@ -57,8 +57,8 @@ do
57 _u5b57_u6bb5b, _u5b57_u6bb5c = _obj_0["字段b"], _obj_0["字段c"] 57 _u5b57_u6bb5b, _u5b57_u6bb5c = _obj_0["字段b"], _obj_0["字段c"]
58 end 58 end
59 do 59 do
60 _u53d8_u91cfb = __u65e0_u6548_u53d8_u91cf
61 _u5b57_u6bb5a = _u8868["字段a"] 60 _u5b57_u6bb5a = _u8868["字段a"]
61 _u53d8_u91cfb = __u65e0_u6548_u53d8_u91cf
62 _u5b57_u6bb5c = __u65e0_u6548_u53d8_u91cf["字段c"] 62 _u5b57_u6bb5c = __u65e0_u6548_u53d8_u91cf["字段c"]
63 end 63 end
64end 64end
@@ -212,11 +212,11 @@ do
212 end 212 end
213 _u4e00, _u4e8c, _u4e09 = _tbl_0["一"], _tbl_0["二"], _tbl_0["三"] 213 _u4e00, _u4e8c, _u4e09 = _tbl_0["一"], _tbl_0["二"], _tbl_0["三"]
214 end 214 end
215 local _u53d8_u91cfb = 123
216 _u5b57_u6bb5a = ((function() 215 _u5b57_u6bb5a = ((function()
217 local _call_0 = _u5bf9_u8c61a 216 local _call_0 = _u5bf9_u8c61a
218 return _call_0["如果"](_call_0, 123) 217 return _call_0["如果"](_call_0, 123)
219 end)() + _u53d8_u91cft)["字段a"] 218 end)() + _u53d8_u91cft)["字段a"]
219 local _u53d8_u91cfb = 123
220end 220end
221do 221do
222 local _u540d_u79f0, _u5de5_u4f5c 222 local _u540d_u79f0, _u5de5_u4f5c
@@ -386,8 +386,7 @@ do
386 end 386 end
387end 387end
388do 388do
389 local _u53d8_u91cf1, _u53d8_u91cf2, _u53d8_u91cf3, _u53d8_u91cfd, _u53d8_u91cfe 389 local _u53d8_u91cf1, _u53d8_u91cf2, _u53d8_u91cf3, _u53d8_u91cfd, _u5143_u7d20b, _u53d8_u91cfe
390 local _u5143_u7d20b
391 do 390 do
392 local _obj_0, _obj_1, _obj_2, _obj_3, _obj_4 = _u51fd_u6570() 391 local _obj_0, _obj_1, _obj_2, _obj_3, _obj_4 = _u51fd_u6570()
393 do 392 do
@@ -395,14 +394,15 @@ do
395 _obj_5[#_obj_5 + 1] = _obj_0 394 _obj_5[#_obj_5 + 1] = _obj_0
396 end 395 end
397 setmetatable(_u5bf9_u8c61c, _obj_4) 396 setmetatable(_u5bf9_u8c61c, _obj_4)
398 _u53d8_u91cf1, _u53d8_u91cf2, _u53d8_u91cf3, _u53d8_u91cfd, _u53d8_u91cfe = 1, 2, 3, _obj_1, _obj_3 397 _u53d8_u91cf1, _u53d8_u91cf2, _u53d8_u91cf3, _u53d8_u91cfd = 1, 2, 3, _obj_1
399 _u5143_u7d20b = _obj_2[1] 398 _u5143_u7d20b = _obj_2[1]
399 _u53d8_u91cfe = _obj_3
400 end 400 end
401 local _u53d8_u91cfy1, _u53d8_u91cfy4 401 local _u53d8_u91cfy1, _u5b57_u6bb5y2, _u5b57_u6bb5y3, _u53d8_u91cfy4
402 local _u5b57_u6bb5y2, _u5b57_u6bb5y3
403 local _obj_0, _obj_1 = _u51fd_u65702() 402 local _obj_0, _obj_1 = _u51fd_u65702()
404 _u53d8_u91cfy1, _u53d8_u91cfy4 = _u51fd_u65701(), _obj_1 403 _u53d8_u91cfy1 = _u51fd_u65701()
405 _u5b57_u6bb5y2, _u5b57_u6bb5y3 = _obj_0["字段y2"], _obj_0["字段y3"] 404 _u5b57_u6bb5y2, _u5b57_u6bb5y3 = _obj_0["字段y2"], _obj_0["字段y3"]
405 _u53d8_u91cfy4 = _obj_1
406end 406end
407do 407do
408 local _u53d8_u91cfv1, _u53d8_u91cfv2, _u53d8_u91cfv3, _u53d8_u91cfv4 408 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
48end 48end
49do 49do
50 local _u53d8_u91cfx, _u65b0, _u53d8_u91cf, close, _u5173_u95edA, num, add, sub 50 local _u53d8_u91cfx, _u65b0, _u53d8_u91cf, close, _u5173_u95edA, num, add, sub
51 local _obj_0, _obj_1 51 _u53d8_u91cfx = 123
52 _u53d8_u91cfx, _obj_0, _obj_1 = 123, _u53d8_u91cfa["变量b"]["变量c"], _u51fd_u6570() 52 local _obj_0 = _u53d8_u91cfa["变量b"]["变量c"]
53 _u65b0, _u53d8_u91cf = _obj_0["新"], _obj_0["变量"] 53 _u65b0, _u53d8_u91cf = _obj_0["新"], _obj_0["变量"]
54 local _obj_2 = getmetatable(_obj_0) 54 local _obj_1 = getmetatable(_obj_0)
55 close, _u5173_u95edA = _obj_2.__close, _obj_2.__close 55 close, _u5173_u95edA = _obj_1.__close, _obj_1.__close
56 _obj_1 = _u51fd_u6570()
56 num = _obj_1.num 57 num = _obj_1.num
57 local _obj_3 = getmetatable(_obj_1) 58 local _obj_2 = getmetatable(_obj_1)
58 add, sub = _obj_3.__add, _obj_3.__sub 59 add, sub = _obj_2.__add, _obj_2.__sub
59end 60end
60setmetatable(_u53d8_u91cfa["变量b"], { }) 61setmetatable(_u53d8_u91cfa["变量b"], { })
61_u53d8_u91cfx.abc = 123 62_u53d8_u91cfx.abc = 123