From 0603800a4114ed8b4c9572a7d7852995c9b9f334 Mon Sep 17 00:00:00 2001 From: Li Jin Date: Wed, 21 May 2025 11:44:54 +0800 Subject: Added break with value syntax. --- spec/inputs/loops.yue | 39 ++++++++++++++ spec/outputs/5.1/loops.lua | 104 +++++++++++++++++++++++++++++++++++-- spec/outputs/codes_from_doc.lua | 60 ++++++++++++++++++++- spec/outputs/codes_from_doc_zh.lua | 60 ++++++++++++++++++++- spec/outputs/loops.lua | 104 +++++++++++++++++++++++++++++++++++-- spec/outputs/macro.lua | 2 - spec/outputs/unicode/loops.lua | 4 +- spec/outputs/unicode/macro.lua | 2 - 8 files changed, 358 insertions(+), 17 deletions(-) (limited to 'spec') diff --git a/spec/inputs/loops.yue b/spec/inputs/loops.yue index c5b28b3..9a91b42 100644 --- a/spec/inputs/loops.yue +++ b/spec/inputs/loops.yue @@ -213,3 +213,42 @@ do do until x := func 'a', b do print "false expected" + +do + index = for i = 1, #tb + break i if tb[i] + + f for i = 1, #tb + break i if tb[i] + + f for i = 1, #tb + i if tb[i] + + i = 1 + ids = while tb[i] + i += 1 + i - 1 + + i = 1 + idx = while tb[i] + i += 1 + break i - 1 + + f1 = -> + i = 1 + f while tb[i] + i += 1 + i - 1 + + i = 1 + f while tb[i] + i += 1 + break i - 1 + + list = for item in *items + switch item + when type: "A", :value + if value > 5 + item + + diff --git a/spec/outputs/5.1/loops.lua b/spec/outputs/5.1/loops.lua index 57b19be..bc720f6 100644 --- a/spec/outputs/5.1/loops.lua +++ b/spec/outputs/5.1/loops.lua @@ -60,8 +60,8 @@ do local y = hello[_index_0] if y % 2 == 0 then _accum_0[_len_0] = y + _len_0 = _len_0 + 1 end - _len_0 = _len_0 + 1 end x = _accum_0 end @@ -132,13 +132,11 @@ do end do local _accum_0 = { } - local _len_0 = 1 local _list_2 = 3 for _index_0 = 1, #_list_2 do local thing = _list_2[_index_0] y = "hello" break - _len_0 = _len_0 + 1 end x = _accum_0 end @@ -489,3 +487,103 @@ do end until false end +local _anon_func_0 = function(i, tb) + local _accum_0 = { } + local _len_0 = 1 + while tb[i] do + i = i + 1 + _accum_0[_len_0] = i - 1 + _len_0 = _len_0 + 1 + end + return _accum_0 +end +do + local index + do + local _accum_0 + for i = 1, #tb do + if tb[i] then + _accum_0 = i + break + end + end + index = _accum_0 + end + f((function() + local _accum_0 + for i = 1, #tb do + if tb[i] then + _accum_0 = i + break + end + end + return _accum_0 + end)()) + f((function() + local _accum_0 = { } + local _len_0 = 1 + for i = 1, #tb do + if tb[i] then + _accum_0[_len_0] = i + _len_0 = _len_0 + 1 + end + end + return _accum_0 + end)()) + i = 1 + local ids + do + local _accum_0 = { } + local _len_0 = 1 + while tb[i] do + i = i + 1 + _accum_0[_len_0] = i - 1 + _len_0 = _len_0 + 1 + end + ids = _accum_0 + end + i = 1 + local idx + do + local _accum_0 + while tb[i] do + i = i + 1 + _accum_0 = i - 1 + break + end + idx = _accum_0 + end + local f1 + f1 = function() + i = 1 + return f(_anon_func_0(i, tb)) + end + i = 1 + f((function() + local _accum_0 + while tb[i] do + i = i + 1 + _accum_0 = i - 1 + break + end + return _accum_0 + end)()) + local _accum_0 = { } + local _len_0 = 1 + local _list_3 = items + for _index_0 = 1, #_list_3 do + local item = _list_3[_index_0] + local _type_0 = type(item) + local _tab_0 = "table" == _type_0 or "userdata" == _type_0 + if _tab_0 then + local value = item.value + if "A" == item.type and value ~= nil then + if value > 5 then + _accum_0[_len_0] = item + _len_0 = _len_0 + 1 + end + end + end + end + list = _accum_0 +end diff --git a/spec/outputs/codes_from_doc.lua b/spec/outputs/codes_from_doc.lua index a5412ab..644b7c3 100644 --- a/spec/outputs/codes_from_doc.lua +++ b/spec/outputs/codes_from_doc.lua @@ -20,6 +20,38 @@ local inventory = { } } } +local map +map = function(arr, action) + local _accum_0 = { } + local _len_0 = 1 + for _index_0 = 1, #arr do + local item = arr[_index_0] + _accum_0[_len_0] = action(item) + _len_0 = _len_0 + 1 + end + return _accum_0 +end +local filter +filter = function(arr, cond) + local _accum_0 = { } + local _len_0 = 1 + for _index_0 = 1, #arr do + local item = arr[_index_0] + if cond(item) then + _accum_0[_len_0] = item + _len_0 = _len_0 + 1 + end + end + return _accum_0 +end +local reduce +reduce = function(arr, init, action) + for _index_0 = 1, #arr do + local item = arr[_index_0] + init = action(init, item) + end + return init +end print(reduce(filter(map({ 1, 2, @@ -1026,12 +1058,24 @@ local _len_0 = 1 for i = 1, 20 do if i % 2 == 0 then _accum_0[_len_0] = i * 2 + _len_0 = _len_0 + 1 else _accum_0[_len_0] = i + _len_0 = _len_0 + 1 end - _len_0 = _len_0 + 1 end doubled_evens = _accum_0 +local first_large +local _accum_0 +local _list_0 = numbers +for _index_0 = 1, #_list_0 do + local n = _list_0[_index_0] + if n > 10 then + _accum_0 = n + break + end +end +first_large = _accum_0 local func_a func_a = function() for i = 1, 10 do @@ -3189,12 +3233,24 @@ local _len_0 = 1 for i = 1, 20 do if i % 2 == 0 then _accum_0[_len_0] = i * 2 + _len_0 = _len_0 + 1 else _accum_0[_len_0] = i + _len_0 = _len_0 + 1 end - _len_0 = _len_0 + 1 end doubled_evens = _accum_0 +local first_large +local _accum_0 +local _list_0 = numbers +for _index_0 = 1, #_list_0 do + local n = _list_0[_index_0] + if n > 10 then + _accum_0 = n + break + end +end +first_large = _accum_0 local func_a func_a = function() for i = 1, 10 do diff --git a/spec/outputs/codes_from_doc_zh.lua b/spec/outputs/codes_from_doc_zh.lua index d9cc4dc..2457c52 100644 --- a/spec/outputs/codes_from_doc_zh.lua +++ b/spec/outputs/codes_from_doc_zh.lua @@ -20,6 +20,38 @@ local inventory = { } } } +local map +map = function(arr, action) + local _accum_0 = { } + local _len_0 = 1 + for _index_0 = 1, #arr do + local item = arr[_index_0] + _accum_0[_len_0] = action(item) + _len_0 = _len_0 + 1 + end + return _accum_0 +end +local filter +filter = function(arr, cond) + local _accum_0 = { } + local _len_0 = 1 + for _index_0 = 1, #arr do + local item = arr[_index_0] + if cond(item) then + _accum_0[_len_0] = item + _len_0 = _len_0 + 1 + end + end + return _accum_0 +end +local reduce +reduce = function(arr, init, action) + for _index_0 = 1, #arr do + local item = arr[_index_0] + init = action(init, item) + end + return init +end print(reduce(filter(map({ 1, 2, @@ -1020,12 +1052,24 @@ local _len_0 = 1 for i = 1, 20 do if i % 2 == 0 then _accum_0[_len_0] = i * 2 + _len_0 = _len_0 + 1 else _accum_0[_len_0] = i + _len_0 = _len_0 + 1 end - _len_0 = _len_0 + 1 end doubled_evens = _accum_0 +local first_large +local _accum_0 +local _list_0 = numbers +for _index_0 = 1, #_list_0 do + local n = _list_0[_index_0] + if n > 10 then + _accum_0 = n + break + end +end +first_large = _accum_0 local func_a func_a = function() for i = 1, 10 do @@ -3177,12 +3221,24 @@ local _len_0 = 1 for i = 1, 20 do if i % 2 == 0 then _accum_0[_len_0] = i * 2 + _len_0 = _len_0 + 1 else _accum_0[_len_0] = i + _len_0 = _len_0 + 1 end - _len_0 = _len_0 + 1 end doubled_evens = _accum_0 +local first_large +local _accum_0 +local _list_0 = numbers +for _index_0 = 1, #_list_0 do + local n = _list_0[_index_0] + if n > 10 then + _accum_0 = n + break + end +end +first_large = _accum_0 local func_a func_a = function() for i = 1, 10 do diff --git a/spec/outputs/loops.lua b/spec/outputs/loops.lua index 8624d49..9a47579 100644 --- a/spec/outputs/loops.lua +++ b/spec/outputs/loops.lua @@ -60,8 +60,8 @@ do local y = hello[_index_0] if y % 2 == 0 then _accum_0[_len_0] = y + _len_0 = _len_0 + 1 end - _len_0 = _len_0 + 1 end x = _accum_0 end @@ -132,13 +132,11 @@ do end do local _accum_0 = { } - local _len_0 = 1 local _list_2 = 3 for _index_0 = 1, #_list_2 do local thing = _list_2[_index_0] y = "hello" break - _len_0 = _len_0 + 1 end x = _accum_0 end @@ -370,3 +368,103 @@ do end until false end +local _anon_func_0 = function(i, tb) + local _accum_0 = { } + local _len_0 = 1 + while tb[i] do + i = i + 1 + _accum_0[_len_0] = i - 1 + _len_0 = _len_0 + 1 + end + return _accum_0 +end +do + local index + do + local _accum_0 + for i = 1, #tb do + if tb[i] then + _accum_0 = i + break + end + end + index = _accum_0 + end + f((function() + local _accum_0 + for i = 1, #tb do + if tb[i] then + _accum_0 = i + break + end + end + return _accum_0 + end)()) + f((function() + local _accum_0 = { } + local _len_0 = 1 + for i = 1, #tb do + if tb[i] then + _accum_0[_len_0] = i + _len_0 = _len_0 + 1 + end + end + return _accum_0 + end)()) + i = 1 + local ids + do + local _accum_0 = { } + local _len_0 = 1 + while tb[i] do + i = i + 1 + _accum_0[_len_0] = i - 1 + _len_0 = _len_0 + 1 + end + ids = _accum_0 + end + i = 1 + local idx + do + local _accum_0 + while tb[i] do + i = i + 1 + _accum_0 = i - 1 + break + end + idx = _accum_0 + end + local f1 + f1 = function() + i = 1 + return f(_anon_func_0(i, tb)) + end + i = 1 + f((function() + local _accum_0 + while tb[i] do + i = i + 1 + _accum_0 = i - 1 + break + end + return _accum_0 + end)()) + local _accum_0 = { } + local _len_0 = 1 + local _list_3 = items + for _index_0 = 1, #_list_3 do + local item = _list_3[_index_0] + local _type_0 = type(item) + local _tab_0 = "table" == _type_0 or "userdata" == _type_0 + if _tab_0 then + local value = item.value + if "A" == item.type and value ~= nil then + if value > 5 then + _accum_0[_len_0] = item + _len_0 = _len_0 + 1 + end + end + end + end + list = _accum_0 +end diff --git a/spec/outputs/macro.lua b/spec/outputs/macro.lua index 4d31574..9f5507c 100644 --- a/spec/outputs/macro.lua +++ b/spec/outputs/macro.lua @@ -330,10 +330,8 @@ local _1 _1 = function() print(1) local _accum_0 = { } - local _len_0 = 1 while false do break - _len_0 = _len_0 + 1 end return _accum_0 end diff --git a/spec/outputs/unicode/loops.lua b/spec/outputs/unicode/loops.lua index 8379993..27bbe2e 100644 --- a/spec/outputs/unicode/loops.lua +++ b/spec/outputs/unicode/loops.lua @@ -60,8 +60,8 @@ do local _u53d8_u91cfy = _u4f60_u597d[_index_0] if _u53d8_u91cfy % 2 == 0 then _accum_0[_len_0] = _u53d8_u91cfy + _len_0 = _len_0 + 1 end - _len_0 = _len_0 + 1 end _u53d8_u91cfx = _accum_0 end @@ -132,13 +132,11 @@ do end do local _accum_0 = { } - local _len_0 = 1 local _list_2 = 3 for _index_0 = 1, #_list_2 do local _u4e1c_u897f = _list_2[_index_0] _u53d8_u91cfy = "你好" break - _len_0 = _len_0 + 1 end _u53d8_u91cfx = _accum_0 end diff --git a/spec/outputs/unicode/macro.lua b/spec/outputs/unicode/macro.lua index b14f571..3b9327a 100644 --- a/spec/outputs/unicode/macro.lua +++ b/spec/outputs/unicode/macro.lua @@ -365,10 +365,8 @@ local _1 _1 = function() _u6253_u5370(1) local _accum_0 = { } - local _len_0 = 1 while false do break - _len_0 = _len_0 + 1 end return _accum_0 end -- cgit v1.2.3-55-g6feb