aboutsummaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2024-09-04 12:16:10 +0800
committerLi Jin <dragon-fly@qq.com>2024-09-04 12:16:25 +0800
commit461bf7c32408553125d71b23e04e21fed690c4f5 (patch)
tree4442efd0fc2524e82be63e12e3e046a0532b26dd /spec
parent2f8215df7288e0aac690c8e8b1ff79865f114302 (diff)
downloadyuescript-461bf7c32408553125d71b23e04e21fed690c4f5.tar.gz
yuescript-461bf7c32408553125d71b23e04e21fed690c4f5.tar.bz2
yuescript-461bf7c32408553125d71b23e04e21fed690c4f5.zip
fix more cases for evaluation order of multi-value assignments.v0.25.1
Diffstat (limited to 'spec')
-rw-r--r--spec/inputs/assign.yue20
-rw-r--r--spec/outputs/assign.lua97
-rw-r--r--spec/outputs/destructure.lua5
-rw-r--r--spec/outputs/metatable.lua5
-rw-r--r--spec/outputs/unicode/assign.lua37
-rw-r--r--spec/outputs/unicode/destructure.lua5
-rw-r--r--spec/outputs/unicode/metatable.lua5
7 files changed, 120 insertions, 54 deletions
diff --git a/spec/inputs/assign.yue b/spec/inputs/assign.yue
index 2c89a99..514aeed 100644
--- a/spec/inputs/assign.yue
+++ b/spec/inputs/assign.yue
@@ -63,6 +63,20 @@ do
63 123, tb 63 123, tb
64 64
65do 65do
66 a, b[] = if x
67 switch y
68 when 1
69 f!
70 print a, b
71
72do
73 a, {b} = if x
74 f!
75 else
76 123, tb
77 print a, b
78
79do
66 a, b[], c, d.<add> = if x 80 a, b[], c, d.<add> = if x
67 switch y 81 switch y
68 when 1 82 when 1
@@ -75,6 +89,12 @@ do
75 do 89 do
76 print 123 90 print 123
77 1, f2! 91 1, f2!
92 print a, b, c, d
93
94do
95 x, [a, b], tb.<>, c[] = 1, if cond
96 f!
97 print x, a, b
78 98
79do 99do
80 a = b = c = d = 0 100 a = b = c = d = 0
diff --git a/spec/outputs/assign.lua b/spec/outputs/assign.lua
index 1978df1..162a563 100644
--- a/spec/outputs/assign.lua
+++ b/spec/outputs/assign.lua
@@ -67,50 +67,95 @@ return _(function()
67 end 67 end
68 do 68 do
69 local a 69 local a
70 local _obj_0, _obj_1
70 if x then 71 if x then
71 local _exp_0 = y 72 local _exp_0 = y
72 if 1 == _exp_0 then 73 if 1 == _exp_0 then
73 local _obj_0, _obj_1 = f() 74 _obj_0, _obj_1 = f()
74 b[#b + 1] = _obj_1
75 a = _obj_0
76 end 75 end
77 end 76 end
77 a = _obj_0
78 b[#b + 1] = _obj_1
78 end 79 end
79 do 80 do
80 local a, b 81 local a, b
82 local _obj_0, _obj_1
81 if x then 83 if x then
82 local _obj_0, _obj_1 = f() 84 _obj_0, _obj_1 = f()
85 else
86 _obj_0, _obj_1 = 123, tb
87 end
88 a = _obj_0
89 b = _obj_1[1]
90 end
91 do
92 local a
93 do
94 local _obj_0, _obj_1
95 if x then
96 local _exp_0 = y
97 if 1 == _exp_0 then
98 _obj_0, _obj_1 = f()
99 end
100 end
101 a = _obj_0
102 b[#b + 1] = _obj_1
103 end
104 print(a, b)
105 end
106 do
107 local a, b
108 do
109 local _obj_0, _obj_1
110 if x then
111 _obj_0, _obj_1 = f()
112 else
113 _obj_0, _obj_1 = 123, tb
114 end
83 a = _obj_0 115 a = _obj_0
84 b = _obj_1[1] 116 b = _obj_1[1]
85 else
86 a = 123
87 b = tb[1]
88 end 117 end
118 print(a, b)
89 end 119 end
90 do 120 do
91 local a, c 121 local a, c
92 if x then 122 do
93 local _exp_0 = y 123 local _obj_0, _obj_1, _obj_2, _obj_3
94 if 1 == _exp_0 then 124 if x then
95 local _obj_0, _obj_1, _obj_2, _obj_3 = f() 125 local _exp_0 = y
96 b[#b + 1] = _obj_1 126 if 1 == _exp_0 then
97 a, c, getmetatable(d).__add = _obj_0, _obj_2, _obj_3 127 _obj_0, _obj_1, _obj_2, _obj_3 = f()
98 end 128 end
99 elseif x2 then 129 elseif x2 then
100 if y2 then 130 if y2 then
101 local _obj_0, _obj_1, _obj_2, _obj_3 = f1() 131 _obj_0, _obj_1, _obj_2, _obj_3 = f1()
102 b[#b + 1] = _obj_1 132 end
103 a, c, getmetatable(d).__add = _obj_0, _obj_2, _obj_3 133 else
134 print("hello")
135 do
136 print(123)
137 _obj_0, _obj_1, _obj_2, _obj_3 = 1, f2()
138 end
104 end 139 end
105 else 140 a = _obj_0
106 print("hello") 141 b[#b + 1] = _obj_1
107 do 142 c, getmetatable(d).__add = _obj_2, _obj_3
108 print(123) 143 end
109 local _obj_0, _obj_1, _obj_2 = f2() 144 print(a, b, c, d)
110 b[#b + 1] = _obj_0 145 end
111 a, c, getmetatable(d).__add = 1, _obj_1, _obj_2 146 do
147 local x, a, b
148 do
149 local _obj_0, _obj_1, _obj_2
150 if cond then
151 _obj_0, _obj_1, _obj_2 = f()
112 end 152 end
153 x = 1
154 a, b = _obj_0[1], _obj_0[2]
155 setmetatable(tb, _obj_1)
156 c[#c + 1] = _obj_2
113 end 157 end
158 print(x, a, b)
114 end 159 end
115 do 160 do
116 local a = 0 161 local a = 0
diff --git a/spec/outputs/destructure.lua b/spec/outputs/destructure.lua
index d8517a0..44da58b 100644
--- a/spec/outputs/destructure.lua
+++ b/spec/outputs/destructure.lua
@@ -427,14 +427,15 @@ do
427 local x1, x2, x3, d, b, e 427 local x1, x2, x3, d, b, e
428 do 428 do
429 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()
430 x1, x2, x3 = 1, 2, 3
430 do 431 do
431 local _obj_5 = a 432 local _obj_5 = a
432 _obj_5[#_obj_5 + 1] = _obj_0 433 _obj_5[#_obj_5 + 1] = _obj_0
433 end 434 end
434 setmetatable(c, _obj_4) 435 d = _obj_1
435 x1, x2, x3, d = 1, 2, 3, _obj_1
436 b = _obj_2[1] 436 b = _obj_2[1]
437 e = _obj_3 437 e = _obj_3
438 setmetatable(c, _obj_4)
438 end 439 end
439 local y1, y2, y3, y4 440 local y1, y2, y3, y4
440 local _obj_0, _obj_1 = f2() 441 local _obj_0, _obj_1 = f2()
diff --git a/spec/outputs/metatable.lua b/spec/outputs/metatable.lua
index 0715b58..974a6e4 100644
--- a/spec/outputs/metatable.lua
+++ b/spec/outputs/metatable.lua
@@ -58,11 +58,12 @@ do
58 local _obj_2 = getmetatable(_obj_1) 58 local _obj_2 = getmetatable(_obj_1)
59 add, sub = _obj_2.__add, _obj_2.__sub 59 add, sub = _obj_2.__add, _obj_2.__sub
60end 60end
61setmetatable(a.b, { })
62x.abc = 123 61x.abc = 123
62setmetatable(a.b, { })
63setmetatable(func(), mt) 63setmetatable(func(), mt)
64a = 1
64setmetatable(b.c, mt) 65setmetatable(b.c, mt)
65a, d, e = 1, "abc", nil 66d, e = "abc", nil
66local is_same = getmetatable(a).__index == getmetatable(a).__index 67local is_same = getmetatable(a).__index == getmetatable(a).__index
67setmetatable(a, { 68setmetatable(a, {
68 __index = tb 69 __index = tb
diff --git a/spec/outputs/unicode/assign.lua b/spec/outputs/unicode/assign.lua
index e883d68..bf43953 100644
--- a/spec/outputs/unicode/assign.lua
+++ b/spec/outputs/unicode/assign.lua
@@ -71,53 +71,50 @@ return __u65e0_u6548_u53d8_u91cf(function()
71 end 71 end
72 do 72 do
73 local _u53d8_u91cfa 73 local _u53d8_u91cfa
74 local _obj_0, _obj_1
74 if x_u6761_u4ef6 then 75 if x_u6761_u4ef6 then
75 local _exp_0 = _u5bf9_u8c61y 76 local _exp_0 = _u5bf9_u8c61y
76 if 1 == _exp_0 then 77 if 1 == _exp_0 then
77 local _obj_0, _obj_1 = _u51fd_u6570() 78 _obj_0, _obj_1 = _u51fd_u6570()
78 _u53d8_u91cfb[#_u53d8_u91cfb + 1] = _obj_1
79 _u53d8_u91cfa = _obj_0
80 end 79 end
81 end 80 end
81 _u53d8_u91cfa = _obj_0
82 _u53d8_u91cfb[#_u53d8_u91cfb + 1] = _obj_1
82 end 83 end
83 do 84 do
84 local _u53d8_u91cfa, _u5143_u7d20b 85 local _u53d8_u91cfa, _u5143_u7d20b
86 local _obj_0, _obj_1
85 if x_u6761_u4ef6 then 87 if x_u6761_u4ef6 then
86 local _obj_0, _obj_1 = _u51fd_u6570() 88 _obj_0, _obj_1 = _u51fd_u6570()
87 _u53d8_u91cfa = _obj_0
88 _u5143_u7d20b = _obj_1[1]
89 else 89 else
90 _u53d8_u91cfa = 123 90 _obj_0, _obj_1 = 123, _u8868
91 _u5143_u7d20b = _u8868[1]
92 end 91 end
92 _u53d8_u91cfa = _obj_0
93 _u5143_u7d20b = _obj_1[1]
93 end 94 end
94 do 95 do
95 local _u53d8_u91cfa, _u5bf9_u8c61c 96 local _u53d8_u91cfa, _u5bf9_u8c61c
97 local _obj_0, _obj_1, _obj_2, _obj_3
96 if _u6761_u4ef6x then 98 if _u6761_u4ef6x then
97 local _exp_0 = _u5bf9_u8c61y 99 local _exp_0 = _u5bf9_u8c61y
98 if 1 == _exp_0 then 100 if 1 == _exp_0 then
99 local _obj_0, _obj_1, _obj_2, _obj_3 = _u51fd_u6570() 101 _obj_0, _obj_1, _obj_2, _obj_3 = _u51fd_u6570()
100 local _obj_4 = _u6570_u7ec4b
101 _obj_4[#_obj_4 + 1] = _obj_1
102 _u53d8_u91cfa, _u5bf9_u8c61c, getmetatable(_u5bf9_u8c61d).__add = _obj_0, _obj_2, _obj_3
103 end 102 end
104 elseif _u6761_u4ef6x2 then 103 elseif _u6761_u4ef6x2 then
105 if _u6761_u4ef6y2 then 104 if _u6761_u4ef6y2 then
106 local _obj_0, _obj_1, _obj_2, _obj_3 = _u51fd_u65701() 105 _obj_0, _obj_1, _obj_2, _obj_3 = _u51fd_u65701()
107 local _obj_4 = _u6570_u7ec4b
108 _obj_4[#_obj_4 + 1] = _obj_1
109 _u53d8_u91cfa, _u5bf9_u8c61c, getmetatable(_u5bf9_u8c61d).__add = _obj_0, _obj_2, _obj_3
110 end 106 end
111 else 107 else
112 _u6253_u5370("hello") 108 _u6253_u5370("hello")
113 do 109 do
114 _u6253_u5370(123) 110 _u6253_u5370(123)
115 local _obj_0, _obj_1, _obj_2 = _u51fd_u65702() 111 _obj_0, _obj_1, _obj_2, _obj_3 = 1, _u51fd_u65702()
116 local _obj_3 = _u6570_u7ec4b
117 _obj_3[#_obj_3 + 1] = _obj_0
118 _u53d8_u91cfa, _u5bf9_u8c61c, getmetatable(_u5bf9_u8c61d).__add = 1, _obj_1, _obj_2
119 end 112 end
120 end 113 end
114 _u53d8_u91cfa = _obj_0
115 local _obj_4 = _u6570_u7ec4b
116 _obj_4[#_obj_4 + 1] = _obj_1
117 _u5bf9_u8c61c, getmetatable(_u5bf9_u8c61d).__add = _obj_2, _obj_3
121 end 118 end
122 do 119 do
123 local _u53d8_u91cfa = 0 120 local _u53d8_u91cfa = 0
diff --git a/spec/outputs/unicode/destructure.lua b/spec/outputs/unicode/destructure.lua
index 29697fa..27c4d47 100644
--- a/spec/outputs/unicode/destructure.lua
+++ b/spec/outputs/unicode/destructure.lua
@@ -389,14 +389,15 @@ do
389 local _u53d8_u91cf1, _u53d8_u91cf2, _u53d8_u91cf3, _u53d8_u91cfd, _u5143_u7d20b, _u53d8_u91cfe 389 local _u53d8_u91cf1, _u53d8_u91cf2, _u53d8_u91cf3, _u53d8_u91cfd, _u5143_u7d20b, _u53d8_u91cfe
390 do 390 do
391 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()
392 _u53d8_u91cf1, _u53d8_u91cf2, _u53d8_u91cf3 = 1, 2, 3
392 do 393 do
393 local _obj_5 = _u6570_u7ec4a 394 local _obj_5 = _u6570_u7ec4a
394 _obj_5[#_obj_5 + 1] = _obj_0 395 _obj_5[#_obj_5 + 1] = _obj_0
395 end 396 end
396 setmetatable(_u5bf9_u8c61c, _obj_4) 397 _u53d8_u91cfd = _obj_1
397 _u53d8_u91cf1, _u53d8_u91cf2, _u53d8_u91cf3, _u53d8_u91cfd = 1, 2, 3, _obj_1
398 _u5143_u7d20b = _obj_2[1] 398 _u5143_u7d20b = _obj_2[1]
399 _u53d8_u91cfe = _obj_3 399 _u53d8_u91cfe = _obj_3
400 setmetatable(_u5bf9_u8c61c, _obj_4)
400 end 401 end
401 local _u53d8_u91cfy1, _u5b57_u6bb5y2, _u5b57_u6bb5y3, _u53d8_u91cfy4 402 local _u53d8_u91cfy1, _u5b57_u6bb5y2, _u5b57_u6bb5y3, _u53d8_u91cfy4
402 local _obj_0, _obj_1 = _u51fd_u65702() 403 local _obj_0, _obj_1 = _u51fd_u65702()
diff --git a/spec/outputs/unicode/metatable.lua b/spec/outputs/unicode/metatable.lua
index f948d21..970e52c 100644
--- a/spec/outputs/unicode/metatable.lua
+++ b/spec/outputs/unicode/metatable.lua
@@ -58,11 +58,12 @@ do
58 local _obj_2 = getmetatable(_obj_1) 58 local _obj_2 = getmetatable(_obj_1)
59 add, sub = _obj_2.__add, _obj_2.__sub 59 add, sub = _obj_2.__add, _obj_2.__sub
60end 60end
61setmetatable(_u53d8_u91cfa["变量b"], { })
62_u53d8_u91cfx.abc = 123 61_u53d8_u91cfx.abc = 123
62setmetatable(_u53d8_u91cfa["变量b"], { })
63setmetatable(_u51fd_u6570(), mt) 63setmetatable(_u51fd_u6570(), mt)
64_u53d8_u91cfa = 1
64setmetatable(_u53d8_u91cfb["变量c"], mt) 65setmetatable(_u53d8_u91cfb["变量c"], mt)
65_u53d8_u91cfa, _u53d8_u91cfd, _u53d8_u91cfe = 1, "abc", nil 66_u53d8_u91cfd, _u53d8_u91cfe = "abc", nil
66local _u76f8_u540c = getmetatable(_u53d8_u91cfa).__index == getmetatable(_u53d8_u91cfa).__index 67local _u76f8_u540c = getmetatable(_u53d8_u91cfa).__index == getmetatable(_u53d8_u91cfa).__index
67setmetatable(_u53d8_u91cfa, { 68setmetatable(_u53d8_u91cfa, {
68 __index = _u8868 69 __index = _u8868