aboutsummaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
Diffstat (limited to 'spec')
-rw-r--r--spec/outputs/5.1/loops.lua36
-rw-r--r--spec/outputs/codes_from_doc_de.lua8
-rw-r--r--spec/outputs/codes_from_doc_en.lua8
-rw-r--r--spec/outputs/codes_from_doc_id-id.lua8
-rw-r--r--spec/outputs/codes_from_doc_pt-br.lua8
-rw-r--r--spec/outputs/codes_from_doc_zh.lua8
-rw-r--r--spec/outputs/loops.lua36
-rw-r--r--spec/outputs/test/config_spec.lua12
-rw-r--r--spec/outputs/test/do_statement_spec.lua4
-rw-r--r--spec/outputs/test/with_statement_spec.lua98
-rw-r--r--spec/outputs/with.lua50
11 files changed, 101 insertions, 175 deletions
diff --git a/spec/outputs/5.1/loops.lua b/spec/outputs/5.1/loops.lua
index e4f2871..019cd60 100644
--- a/spec/outputs/5.1/loops.lua
+++ b/spec/outputs/5.1/loops.lua
@@ -499,25 +499,21 @@ local _anon_func_0 = function(i, tb)
499end 499end
500do 500do
501 local index 501 local index
502 do 502 for i = 1, #tb do
503 local _accum_0 503 if tb[i] then
504 for i = 1, #tb do 504 index = i
505 if tb[i] then 505 break
506 _accum_0 = i
507 break
508 end
509 end 506 end
510 index = _accum_0
511 end 507 end
512 f((function() 508 f((function()
513 local _accum_0 509 local _val_0
514 for i = 1, #tb do 510 for i = 1, #tb do
515 if tb[i] then 511 if tb[i] then
516 _accum_0 = i 512 _val_0 = i
517 break 513 break
518 end 514 end
519 end 515 end
520 return _accum_0 516 return _val_0
521 end)()) 517 end)())
522 f((function() 518 f((function()
523 local _accum_0 = { } 519 local _accum_0 = { }
@@ -545,13 +541,13 @@ do
545 i = 1 541 i = 1
546 local idx 542 local idx
547 do 543 do
548 local _accum_0 544 local _val_0
549 while tb[i] do 545 while tb[i] do
550 i = i + 1 546 i = i + 1
551 _accum_0 = i - 1 547 _val_0 = i - 1
552 break 548 break
553 end 549 end
554 idx = _accum_0 550 idx = _val_0
555 end 551 end
556 local f1 552 local f1
557 f1 = function() 553 f1 = function()
@@ -560,13 +556,13 @@ do
560 end 556 end
561 i = 1 557 i = 1
562 f((function() 558 f((function()
563 local _accum_0 559 local _val_0
564 while tb[i] do 560 while tb[i] do
565 i = i + 1 561 i = i + 1
566 _accum_0 = i - 1 562 _val_0 = i - 1
567 break 563 break
568 end 564 end
569 return _accum_0 565 return _val_0
570 end)()) 566 end)())
571 local _accum_0 = { } 567 local _accum_0 = { }
572 local _len_0 = 1 568 local _len_0 = 1
@@ -592,13 +588,13 @@ do
592 print(1) 588 print(1)
593 until true 589 until true
594 do 590 do
595 local _accum_0 591 local _val_0
596 repeat 592 repeat
597 a = func() 593 a = func()
598 _accum_0 = a.x 594 _val_0 = a.x
599 break 595 break
600 until a.v 596 until a.v
601 x = _accum_0 597 x = _val_0
602 end 598 end
603 local items 599 local items
604 local _accum_0 = { } 600 local _accum_0 = { }
diff --git a/spec/outputs/codes_from_doc_de.lua b/spec/outputs/codes_from_doc_de.lua
index 44fc28a..7de1a35 100644
--- a/spec/outputs/codes_from_doc_de.lua
+++ b/spec/outputs/codes_from_doc_de.lua
@@ -3260,16 +3260,14 @@ for i = 1, 20 do
3260end 3260end
3261doubled_evens = _accum_0 3261doubled_evens = _accum_0
3262local first_large 3262local first_large
3263local _accum_0
3264local _list_0 = numbers 3263local _list_0 = numbers
3265for _index_0 = 1, #_list_0 do 3264for _index_0 = 1, #_list_0 do
3266 local n = _list_0[_index_0] 3265 local n = _list_0[_index_0]
3267 if n > 10 then 3266 if n > 10 then
3268 _accum_0 = n 3267 first_large = n
3269 break 3268 break
3270 end 3269 end
3271end 3270end
3272first_large = _accum_0
3273local func_a 3271local func_a
3274func_a = function() 3272func_a = function()
3275 for i = 1, 10 do 3273 for i = 1, 10 do
@@ -3324,16 +3322,14 @@ for i = 1, 20 do
3324end 3322end
3325doubled_evens = _accum_0 3323doubled_evens = _accum_0
3326local first_large 3324local first_large
3327local _accum_0
3328local _list_0 = numbers 3325local _list_0 = numbers
3329for _index_0 = 1, #_list_0 do 3326for _index_0 = 1, #_list_0 do
3330 local n = _list_0[_index_0] 3327 local n = _list_0[_index_0]
3331 if n > 10 then 3328 if n > 10 then
3332 _accum_0 = n 3329 first_large = n
3333 break 3330 break
3334 end 3331 end
3335end 3332end
3336first_large = _accum_0
3337local func_a 3333local func_a
3338func_a = function() 3334func_a = function()
3339 for i = 1, 10 do 3335 for i = 1, 10 do
diff --git a/spec/outputs/codes_from_doc_en.lua b/spec/outputs/codes_from_doc_en.lua
index 5320961..cd83bbf 100644
--- a/spec/outputs/codes_from_doc_en.lua
+++ b/spec/outputs/codes_from_doc_en.lua
@@ -3260,16 +3260,14 @@ for i = 1, 20 do
3260end 3260end
3261doubled_evens = _accum_0 3261doubled_evens = _accum_0
3262local first_large 3262local first_large
3263local _accum_0
3264local _list_0 = numbers 3263local _list_0 = numbers
3265for _index_0 = 1, #_list_0 do 3264for _index_0 = 1, #_list_0 do
3266 local n = _list_0[_index_0] 3265 local n = _list_0[_index_0]
3267 if n > 10 then 3266 if n > 10 then
3268 _accum_0 = n 3267 first_large = n
3269 break 3268 break
3270 end 3269 end
3271end 3270end
3272first_large = _accum_0
3273local func_a 3271local func_a
3274func_a = function() 3272func_a = function()
3275 for i = 1, 10 do 3273 for i = 1, 10 do
@@ -3324,16 +3322,14 @@ for i = 1, 20 do
3324end 3322end
3325doubled_evens = _accum_0 3323doubled_evens = _accum_0
3326local first_large 3324local first_large
3327local _accum_0
3328local _list_0 = numbers 3325local _list_0 = numbers
3329for _index_0 = 1, #_list_0 do 3326for _index_0 = 1, #_list_0 do
3330 local n = _list_0[_index_0] 3327 local n = _list_0[_index_0]
3331 if n > 10 then 3328 if n > 10 then
3332 _accum_0 = n 3329 first_large = n
3333 break 3330 break
3334 end 3331 end
3335end 3332end
3336first_large = _accum_0
3337local func_a 3333local func_a
3338func_a = function() 3334func_a = function()
3339 for i = 1, 10 do 3335 for i = 1, 10 do
diff --git a/spec/outputs/codes_from_doc_id-id.lua b/spec/outputs/codes_from_doc_id-id.lua
index e952434..b024989 100644
--- a/spec/outputs/codes_from_doc_id-id.lua
+++ b/spec/outputs/codes_from_doc_id-id.lua
@@ -3260,16 +3260,14 @@ for i = 1, 20 do
3260end 3260end
3261doubled_evens = _accum_0 3261doubled_evens = _accum_0
3262local first_large 3262local first_large
3263local _accum_0
3264local _list_0 = numbers 3263local _list_0 = numbers
3265for _index_0 = 1, #_list_0 do 3264for _index_0 = 1, #_list_0 do
3266 local n = _list_0[_index_0] 3265 local n = _list_0[_index_0]
3267 if n > 10 then 3266 if n > 10 then
3268 _accum_0 = n 3267 first_large = n
3269 break 3268 break
3270 end 3269 end
3271end 3270end
3272first_large = _accum_0
3273local func_a 3271local func_a
3274func_a = function() 3272func_a = function()
3275 for i = 1, 10 do 3273 for i = 1, 10 do
@@ -3324,16 +3322,14 @@ for i = 1, 20 do
3324end 3322end
3325doubled_evens = _accum_0 3323doubled_evens = _accum_0
3326local first_large 3324local first_large
3327local _accum_0
3328local _list_0 = numbers 3325local _list_0 = numbers
3329for _index_0 = 1, #_list_0 do 3326for _index_0 = 1, #_list_0 do
3330 local n = _list_0[_index_0] 3327 local n = _list_0[_index_0]
3331 if n > 10 then 3328 if n > 10 then
3332 _accum_0 = n 3329 first_large = n
3333 break 3330 break
3334 end 3331 end
3335end 3332end
3336first_large = _accum_0
3337local func_a 3333local func_a
3338func_a = function() 3334func_a = function()
3339 for i = 1, 10 do 3335 for i = 1, 10 do
diff --git a/spec/outputs/codes_from_doc_pt-br.lua b/spec/outputs/codes_from_doc_pt-br.lua
index 0c9affb..f5643c8 100644
--- a/spec/outputs/codes_from_doc_pt-br.lua
+++ b/spec/outputs/codes_from_doc_pt-br.lua
@@ -3260,16 +3260,14 @@ for i = 1, 20 do
3260end 3260end
3261doubled_evens = _accum_0 3261doubled_evens = _accum_0
3262local first_large 3262local first_large
3263local _accum_0
3264local _list_0 = numbers 3263local _list_0 = numbers
3265for _index_0 = 1, #_list_0 do 3264for _index_0 = 1, #_list_0 do
3266 local n = _list_0[_index_0] 3265 local n = _list_0[_index_0]
3267 if n > 10 then 3266 if n > 10 then
3268 _accum_0 = n 3267 first_large = n
3269 break 3268 break
3270 end 3269 end
3271end 3270end
3272first_large = _accum_0
3273local func_a 3271local func_a
3274func_a = function() 3272func_a = function()
3275 for i = 1, 10 do 3273 for i = 1, 10 do
@@ -3324,16 +3322,14 @@ for i = 1, 20 do
3324end 3322end
3325doubled_evens = _accum_0 3323doubled_evens = _accum_0
3326local first_large 3324local first_large
3327local _accum_0
3328local _list_0 = numbers 3325local _list_0 = numbers
3329for _index_0 = 1, #_list_0 do 3326for _index_0 = 1, #_list_0 do
3330 local n = _list_0[_index_0] 3327 local n = _list_0[_index_0]
3331 if n > 10 then 3328 if n > 10 then
3332 _accum_0 = n 3329 first_large = n
3333 break 3330 break
3334 end 3331 end
3335end 3332end
3336first_large = _accum_0
3337local func_a 3333local func_a
3338func_a = function() 3334func_a = function()
3339 for i = 1, 10 do 3335 for i = 1, 10 do
diff --git a/spec/outputs/codes_from_doc_zh.lua b/spec/outputs/codes_from_doc_zh.lua
index fa985e2..087782e 100644
--- a/spec/outputs/codes_from_doc_zh.lua
+++ b/spec/outputs/codes_from_doc_zh.lua
@@ -3260,16 +3260,14 @@ for i = 1, 20 do
3260end 3260end
3261doubled_evens = _accum_0 3261doubled_evens = _accum_0
3262local first_large 3262local first_large
3263local _accum_0
3264local _list_0 = numbers 3263local _list_0 = numbers
3265for _index_0 = 1, #_list_0 do 3264for _index_0 = 1, #_list_0 do
3266 local n = _list_0[_index_0] 3265 local n = _list_0[_index_0]
3267 if n > 10 then 3266 if n > 10 then
3268 _accum_0 = n 3267 first_large = n
3269 break 3268 break
3270 end 3269 end
3271end 3270end
3272first_large = _accum_0
3273local func_a 3271local func_a
3274func_a = function() 3272func_a = function()
3275 for i = 1, 10 do 3273 for i = 1, 10 do
@@ -3324,16 +3322,14 @@ for i = 1, 20 do
3324end 3322end
3325doubled_evens = _accum_0 3323doubled_evens = _accum_0
3326local first_large 3324local first_large
3327local _accum_0
3328local _list_0 = numbers 3325local _list_0 = numbers
3329for _index_0 = 1, #_list_0 do 3326for _index_0 = 1, #_list_0 do
3330 local n = _list_0[_index_0] 3327 local n = _list_0[_index_0]
3331 if n > 10 then 3328 if n > 10 then
3332 _accum_0 = n 3329 first_large = n
3333 break 3330 break
3334 end 3331 end
3335end 3332end
3336first_large = _accum_0
3337local func_a 3333local func_a
3338func_a = function() 3334func_a = function()
3339 for i = 1, 10 do 3335 for i = 1, 10 do
diff --git a/spec/outputs/loops.lua b/spec/outputs/loops.lua
index 6ab4bbb..4fb4187 100644
--- a/spec/outputs/loops.lua
+++ b/spec/outputs/loops.lua
@@ -380,25 +380,21 @@ local _anon_func_0 = function(i, tb)
380end 380end
381do 381do
382 local index 382 local index
383 do 383 for i = 1, #tb do
384 local _accum_0 384 if tb[i] then
385 for i = 1, #tb do 385 index = i
386 if tb[i] then 386 break
387 _accum_0 = i
388 break
389 end
390 end 387 end
391 index = _accum_0
392 end 388 end
393 f((function() 389 f((function()
394 local _accum_0 390 local _val_0
395 for i = 1, #tb do 391 for i = 1, #tb do
396 if tb[i] then 392 if tb[i] then
397 _accum_0 = i 393 _val_0 = i
398 break 394 break
399 end 395 end
400 end 396 end
401 return _accum_0 397 return _val_0
402 end)()) 398 end)())
403 f((function() 399 f((function()
404 local _accum_0 = { } 400 local _accum_0 = { }
@@ -426,13 +422,13 @@ do
426 i = 1 422 i = 1
427 local idx 423 local idx
428 do 424 do
429 local _accum_0 425 local _val_0
430 while tb[i] do 426 while tb[i] do
431 i = i + 1 427 i = i + 1
432 _accum_0 = i - 1 428 _val_0 = i - 1
433 break 429 break
434 end 430 end
435 idx = _accum_0 431 idx = _val_0
436 end 432 end
437 local f1 433 local f1
438 f1 = function() 434 f1 = function()
@@ -441,13 +437,13 @@ do
441 end 437 end
442 i = 1 438 i = 1
443 f((function() 439 f((function()
444 local _accum_0 440 local _val_0
445 while tb[i] do 441 while tb[i] do
446 i = i + 1 442 i = i + 1
447 _accum_0 = i - 1 443 _val_0 = i - 1
448 break 444 break
449 end 445 end
450 return _accum_0 446 return _val_0
451 end)()) 447 end)())
452 local _accum_0 = { } 448 local _accum_0 = { }
453 local _len_0 = 1 449 local _len_0 = 1
@@ -473,13 +469,13 @@ do
473 print(1) 469 print(1)
474 until true 470 until true
475 do 471 do
476 local _accum_0 472 local _val_0
477 repeat 473 repeat
478 a = func() 474 a = func()
479 _accum_0 = a.x 475 _val_0 = a.x
480 break 476 break
481 until a.v 477 until a.v
482 x = _accum_0 478 x = _val_0
483 end 479 end
484 local items 480 local items
485 local _accum_0 = { } 481 local _accum_0 = { }
diff --git a/spec/outputs/test/config_spec.lua b/spec/outputs/test/config_spec.lua
index 410bacc..dc98760 100644
--- a/spec/outputs/test/config_spec.lua
+++ b/spec/outputs/test/config_spec.lua
@@ -114,14 +114,10 @@ return describe("config", function()
114 y = 20 114 y = 20
115 } 115 }
116 local result 116 local result
117 do 117 repeat
118 local _accum_0 118 result = obj.x + obj.y
119 repeat 119 break
120 _accum_0 = obj.x + obj.y 120 until true
121 break
122 until true
123 result = _accum_0
124 end
125 return assert.same(result, 30) 121 return assert.same(result, 30)
126 end) 122 end)
127 it("should handle existential operators", function() 123 it("should handle existential operators", function()
diff --git a/spec/outputs/test/do_statement_spec.lua b/spec/outputs/test/do_statement_spec.lua
index fb93fa0..7c491a0 100644
--- a/spec/outputs/test/do_statement_spec.lua
+++ b/spec/outputs/test/do_statement_spec.lua
@@ -104,12 +104,10 @@ return describe("do statement", function()
104 } 104 }
105 local result 105 local result
106 do 106 do
107 local _accum_0
108 repeat 107 repeat
109 _accum_0 = obj:double() 108 result = obj:double()
110 break 109 break
111 until true 110 until true
112 result = _accum_0
113 end 111 end
114 return assert.same(result, 20) 112 return assert.same(result, 20)
115 end) 113 end)
diff --git a/spec/outputs/test/with_statement_spec.lua b/spec/outputs/test/with_statement_spec.lua
index dcd2aa1..e6f64e8 100644
--- a/spec/outputs/test/with_statement_spec.lua
+++ b/spec/outputs/test/with_statement_spec.lua
@@ -53,14 +53,10 @@ return describe("with statement", function()
53 value = 5 53 value = 5
54 } 54 }
55 local result 55 local result
56 do 56 repeat
57 local _accum_0 57 result = obj.value * 2
58 repeat 58 break
59 _accum_0 = obj.value * 2 59 until true
60 break
61 until true
62 result = _accum_0
63 end
64 return assert.same(result, 10) 60 return assert.same(result, 10)
65 end) 61 end)
66 it("should support multiple statements", function() 62 it("should support multiple statements", function()
@@ -125,27 +121,19 @@ return describe("with statement", function()
125 y = 10 121 y = 10
126 } 122 }
127 local result 123 local result
128 do 124 repeat
129 local _accum_0 125 result = obj.x + obj.y
130 repeat 126 break
131 _accum_0 = obj.x + obj.y 127 until true
132 break
133 until true
134 result = _accum_0
135 end
136 return assert.same(result, 15) 128 return assert.same(result, 15)
137 end) 129 end)
138 it("should work with string methods", function() 130 it("should work with string methods", function()
139 local s = "hello" 131 local s = "hello"
140 local result 132 local result
141 do 133 repeat
142 local _accum_0 134 result = s:upper()
143 repeat 135 break
144 _accum_0 = s:upper() 136 until true
145 break
146 until true
147 result = _accum_0
148 end
149 return assert.same(result, "HELLO") 137 return assert.same(result, "HELLO")
150 end) 138 end)
151 it("should handle metatable access", function() 139 it("should handle metatable access", function()
@@ -169,12 +157,10 @@ return describe("with statement", function()
169 x = 10 157 x = 10
170 } 158 }
171 local _val_0 159 local _val_0
172 local _accum_0
173 repeat 160 repeat
174 _accum_0 = obj.x * 2 161 _val_0 = obj.x * 2
175 break 162 break
176 until true 163 until true
177 _val_0 = _accum_0
178 return _val_0 164 return _val_0
179 end 165 end
180 local result = fn() 166 local result = fn()
@@ -187,12 +173,10 @@ return describe("with statement", function()
187 value = 42 173 value = 42
188 } 174 }
189 local _val_0 175 local _val_0
190 local _accum_0
191 repeat 176 repeat
192 _accum_0 = obj.value 177 _val_0 = obj.value
193 break 178 break
194 until true 179 until true
195 _val_0 = _accum_0
196 return _val_0 180 return _val_0
197 end 181 end
198 return assert.same(get_value(), 42) 182 return assert.same(get_value(), 42)
@@ -202,19 +186,15 @@ return describe("with statement", function()
202 value = 10 186 value = 10
203 } 187 }
204 local result 188 local result
205 do 189 repeat
206 local _accum_0 190 local _exp_0 = obj.value
207 repeat 191 if _exp_0 ~= nil then
208 local _exp_0 = obj.value 192 result = _exp_0
209 if _exp_0 ~= nil then 193 else
210 _accum_0 = _exp_0 194 result = 0
211 else 195 end
212 _accum_0 = 0 196 break
213 end 197 until true
214 break
215 until true
216 result = _accum_0
217 end
218 return assert.same(result, 10) 198 return assert.same(result, 10)
219 end) 199 end)
220 it("should handle nil object safely", function() 200 it("should handle nil object safely", function()
@@ -222,10 +202,10 @@ return describe("with statement", function()
222 do 202 do
223 local _with_0 = nil 203 local _with_0 = nil
224 do 204 do
225 local _accum_0 205 local _accum_0 = { }
226 repeat 206 repeat
227 if _with_0 ~= nil then 207 if _with_0 ~= nil then
228 _accum_0 = _with_0.value 208 result = _with_0.value
229 break 209 break
230 end 210 end
231 until true 211 until true
@@ -245,16 +225,12 @@ return describe("with statement", function()
245 end 225 end
246 } 226 }
247 local result 227 local result
248 do 228 repeat
249 local _accum_0 229 obj:add(10)
250 repeat 230 obj:add(5)
251 obj:add(10) 231 result = obj:get()
252 obj:add(5) 232 break
253 _accum_0 = obj:get() 233 until true
254 break
255 until true
256 result = _accum_0
257 end
258 return assert.same(result, 20) 234 return assert.same(result, 20)
259 end) 235 end)
260 return it("should support nested property access", function() 236 return it("should support nested property access", function()
@@ -266,14 +242,10 @@ return describe("with statement", function()
266 } 242 }
267 } 243 }
268 local result 244 local result
269 do 245 repeat
270 local _accum_0 246 result = obj.level1.level2.level3
271 repeat 247 break
272 _accum_0 = obj.level1.level2.level3 248 until true
273 break
274 until true
275 result = _accum_0
276 end
277 return assert.same(result, "deep") 249 return assert.same(result, "deep")
278 end) 250 end)
279end) 251end)
diff --git a/spec/outputs/with.lua b/spec/outputs/with.lua
index 3cd8aab..ce0e495 100644
--- a/spec/outputs/with.lua
+++ b/spec/outputs/with.lua
@@ -191,62 +191,52 @@ do
191 f((function() 191 f((function()
192 local _with_0 = item 192 local _with_0 = item
193 local _val_0 193 local _val_0
194 do 194 repeat
195 local _accum_0 195 if _with_0.id > 0 then
196 repeat 196 _val_0 = _with_0.content
197 if _with_0.id > 0 then 197 break
198 _accum_0 = _with_0.content 198 end
199 break 199 until true
200 end
201 until true
202 _val_0 = _accum_0
203 end
204 return _val_0 200 return _val_0
205 end)()) 201 end)())
206 local a 202 local a
207 do 203 do
208 local _with_0 = tb 204 local _with_0 = tb
209 do 205 repeat
210 local _accum_0 206 if _with_0.v then
211 repeat 207 a = _with_0.a
212 if _with_0.v then 208 break
213 _accum_0 = _with_0.a 209 end
214 break 210 until true
215 end
216 until true
217 a = _accum_0
218 end
219 end 211 end
220 local _accum_0 212 local _val_0
221 while true do 213 while true do
222 local _with_0 = tb 214 local _with_0 = tb
223 local _accum_1 215 local _accum_0 = { }
224 repeat 216 repeat
225 if _with_0 ~= nil then 217 if _with_0 ~= nil then
226 _accum_1 = 1 218 _val_0 = 1
227 break 219 break
228 end 220 end
229 until true 221 until true
230 _accum_0 = _accum_1 222 _val_0 = _accum_0
231 break 223 break
232 end 224 end
233 a = _accum_0 225 a = _val_0
234end 226end
235do 227do
236 local a 228 local a
237 local _accum_0
238 for i = 1, 100 do 229 for i = 1, 100 do
239 local x = tb[i] 230 local x = tb[i]
240 if x ~= nil then 231 if x ~= nil then
241 local _des_0 = 1 232 local _des_0 = 1
242 if _des_0 then 233 if _des_0 then
243 x.id = _des_0 234 x.id = _des_0
244 _accum_0 = x 235 a = x
245 break 236 break
246 end 237 end
247 end 238 end
248 end 239 end
249 a = _accum_0
250end 240end
251do 241do
252 local tb = { 242 local tb = {
@@ -254,11 +244,9 @@ do
254 y = 2 244 y = 2
255 } 245 }
256 local a 246 local a
257 local _accum_0
258 repeat 247 repeat
259 _accum_0 = tb.x + tb.y 248 a = tb.x + tb.y
260 break 249 break
261 until true 250 until true
262 a = _accum_0
263end 251end
264return nil 252return nil