From aed806476fe50899c0f01750175531ac41267b9d Mon Sep 17 00:00:00 2001 From: Li Jin Date: Sun, 31 Oct 2021 17:29:45 +0800 Subject: partially fix issue #69, fix a few case the generated code leaks some temp variables. --- spec/inputs/nil_coalesing.yue | 40 ++++++++++++ spec/outputs/export.lua | 32 +++++---- spec/outputs/multiline_chain.lua | 12 ++-- spec/outputs/nil_coalesing.lua | 138 +++++++++++++++++++++++++++++++++++++++ spec/outputs/switch.lua | 110 ++++++++++++++++++------------- 5 files changed, 266 insertions(+), 66 deletions(-) create mode 100644 spec/inputs/nil_coalesing.yue create mode 100644 spec/outputs/nil_coalesing.lua (limited to 'spec') diff --git a/spec/inputs/nil_coalesing.yue b/spec/inputs/nil_coalesing.yue new file mode 100644 index 0000000..45b34f4 --- /dev/null +++ b/spec/inputs/nil_coalesing.yue @@ -0,0 +1,40 @@ +do + a = b ?? c + +do + :a = b ?? c + +do + a = func! + a ??= false + +do + a ??= func! + +do + local a, b, c, d, e + a = b ?? c ?? d ?? e + +do + a = b ?? c ?? d ?? e + +do + func x ?? "hello" + +do + with funcA! ?? funcB! + print .field + +do + a = 1 + 2 + b ?? c + 3 + 4 + +do + a = 1 + 2 + (b ?? c) + 3 + 4 + +do + :a, :b = func! + a or= 1 + b ??= c ?? 2 + +nil + diff --git a/spec/outputs/export.lua b/spec/outputs/export.lua index 02546ec..4d81cc0 100644 --- a/spec/outputs/export.lua +++ b/spec/outputs/export.lua @@ -65,22 +65,26 @@ y = function() local k = 100 end _module_0["y"] = y -local _exp_0 = h -if 100 == _exp_0 or 150 == _exp_0 then - _module_0[#_module_0 + 1] = 200 -elseif 200 == _exp_0 then - _module_0[#_module_0 + 1] = 300 -else - _module_0[#_module_0 + 1] = 0 +do + local _exp_0 = h + if 100 == _exp_0 or 150 == _exp_0 then + _module_0[#_module_0 + 1] = 200 + elseif 200 == _exp_0 then + _module_0[#_module_0 + 1] = 300 + else + _module_0[#_module_0 + 1] = 0 + end end local Constant -local _exp_1 = value -if "good" == _exp_1 then - Constant = 1 -elseif "better" == _exp_1 then - Constant = 2 -elseif "best" == _exp_1 then - Constant = 3 +do + local _exp_0 = value + if "good" == _exp_0 then + Constant = 1 + elseif "better" == _exp_0 then + Constant = 2 + elseif "best" == _exp_0 then + Constant = 3 + end end _module_0["Constant"] = Constant local item = func(123) diff --git a/spec/outputs/multiline_chain.lua b/spec/outputs/multiline_chain.lua index fea7bc6..ecd2ca8 100644 --- a/spec/outputs/multiline_chain.lua +++ b/spec/outputs/multiline_chain.lua @@ -56,11 +56,13 @@ do _with_0:callMethod():chainCall() _with_0:callMethod():chainCall() _with_0:chainCall() - local _exp_0 = _with_0.itemFieldB:getValue() - if "Valid" == _exp_0 or _with_0:getItemState() == _exp_0 then - _with_0:itemMethodA():getValue() - else - _with_0:itemMethodB():getValue() + do + local _exp_0 = _with_0.itemFieldB:getValue() + if "Valid" == _exp_0 or _with_0:getItemState() == _exp_0 then + _with_0:itemMethodA():getValue() + else + _with_0:itemMethodB():getValue() + end end local a if _with_0.itemFieldC then diff --git a/spec/outputs/nil_coalesing.lua b/spec/outputs/nil_coalesing.lua new file mode 100644 index 0000000..36a6644 --- /dev/null +++ b/spec/outputs/nil_coalesing.lua @@ -0,0 +1,138 @@ +do + local a + do + local _exp_0 = b + if _exp_0 ~= nil then + a = _exp_0 + else + a = c + end + end +end +do + local a + do + local _exp_0 = b + if _exp_0 ~= nil then + a = _exp_0.a + else + a = c.a + end + end +end +do + local a = func() + if a == nil then + a = false + end +end +do + local a + if a == nil then + a = func() + end +end +do + local a, b, c, d, e + if b ~= nil then + a = b + else + if c ~= nil then + a = c + else + if d ~= nil then + a = d + else + a = e + end + end + end +end +do + local a + do + local _exp_0 = b + if _exp_0 ~= nil then + a = _exp_0 + else + do + local _exp_1 = c + if _exp_1 ~= nil then + a = _exp_1 + else + do + local _exp_2 = d + if _exp_2 ~= nil then + a = _exp_2 + else + a = e + end + end + end + end + end + end +end +do + func((function() + local _exp_0 = x + if _exp_0 ~= nil then + return _exp_0 + else + return "hello" + end + end)()) +end +do + do + local _with_0 + do + local _exp_0 = funcA() + if _exp_0 ~= nil then + _with_0 = _exp_0 + else + _with_0 = funcB() + end + end + print(_with_0.field) + end +end +do + local a = 1 + 2 + (function() + local _exp_0 = b + if _exp_0 ~= nil then + return _exp_0 + else + return c + 3 + 4 + end + end)() +end +do + local a = 1 + 2 + ((function() + local _exp_0 = b + if _exp_0 ~= nil then + return _exp_0 + else + return c + end + end)()) + 3 + 4 +end +do + local a, b + do + local _obj_0 = func() + a, b = _obj_0.a, _obj_0.b + end + a = a or 1 + if b == nil then + do + local _exp_0 = c + if _exp_0 ~= nil then + b = _exp_0 + else + b = 2 + end + end + end +end +return nil diff --git a/spec/outputs/switch.lua b/spec/outputs/switch.lua index 1c8839f..81f6d5a 100644 --- a/spec/outputs/switch.lua +++ b/spec/outputs/switch.lua @@ -1,70 +1,86 @@ -local _exp_0 = value -if "cool" == _exp_0 then - print("hello world") +do + local _exp_0 = value + if "cool" == _exp_0 then + print("hello world") + end end -local _exp_1 = value -if "cool" == _exp_1 then - print("hello world") -else - print("okay rad") +do + local _exp_0 = value + if "cool" == _exp_0 then + print("hello world") + else + print("okay rad") + end end -local _exp_2 = value -if "cool" == _exp_2 then - print("hello world") -elseif "yeah" == _exp_2 then - local _ = [[FFFF]] + [[MMMM]] -elseif (2323 + 32434) == _exp_2 then - print("okay") -else - print("okay rad") +do + local _exp_0 = value + if "cool" == _exp_0 then + print("hello world") + elseif "yeah" == _exp_0 then + local _ = [[FFFF]] + [[MMMM]] + elseif (2323 + 32434) == _exp_0 then + print("okay") + else + print("okay rad") + end end local out -local _exp_3 = value -if "cool" == _exp_3 then - out = print("hello world") -else - out = print("okay rad") +do + local _exp_0 = value + if "cool" == _exp_0 then + out = print("hello world") + else + out = print("okay rad") + end end -local _exp_4 = value -if "cool" == _exp_4 then - out = xxxx -elseif "umm" == _exp_4 then - out = 34340 -else - out = error("this failed big time") +do + local _exp_0 = value + if "cool" == _exp_0 then + out = xxxx + elseif "umm" == _exp_0 then + out = 34340 + else + out = error("this failed big time") + end end do local _with_0 = something - local _exp_5 = _with_0:value() - if _with_0.okay == _exp_5 then - local _ = "world" - else - local _ = "yesh" + do + local _exp_0 = _with_0:value() + if _with_0.okay == _exp_0 then + local _ = "world" + else + local _ = "yesh" + end end end fix(this) call_func((function() - local _exp_5 = something - if 1 == _exp_5 then + local _exp_0 = something + if 1 == _exp_0 then return "yes" else return "no" end end)()) -local _exp_5 = hi -if (hello or world) == _exp_5 then - local _ = greene +do + local _exp_0 = hi + if (hello or world) == _exp_0 then + local _ = greene + end end -local _exp_6 = hi -if "one" == _exp_6 or "two" == _exp_6 then - print("cool") -elseif "dad" == _exp_6 then - local _ = no +do + local _exp_0 = hi + if "one" == _exp_0 or "two" == _exp_0 then + print("cool") + elseif "dad" == _exp_0 then + local _ = no + end end -local _exp_7 = hi -if (3 + 1) == _exp_7 or hello() == _exp_7 or (function() +local _exp_0 = hi +if (3 + 1) == _exp_0 or hello() == _exp_0 or (function() return 4 -end)() == _exp_7 then +end)() == _exp_0 then return yello else return print("cool") -- cgit v1.2.3-55-g6feb