From 58cf1a70971ad37ef9260aa93851e92fd6e4c1ce Mon Sep 17 00:00:00 2001 From: Li Jin Date: Mon, 21 Nov 2022 16:56:43 +0800 Subject: fix table pattern matching. confirm fixing issue #116. --- spec/outputs/destructure.lua | 33 ++++++++++++++++++++---------- spec/outputs/switch.lua | 48 +++++++++++++++++++++++++++++--------------- 2 files changed, 54 insertions(+), 27 deletions(-) (limited to 'spec') diff --git a/spec/outputs/destructure.lua b/spec/outputs/destructure.lua index f40a658..8953a2a 100644 --- a/spec/outputs/destructure.lua +++ b/spec/outputs/destructure.lua @@ -472,7 +472,8 @@ do end do local _exp_0 = tb - local _tab_0 = "table" == type(_exp_0) + local _tab_0 = type(_exp_0) + _tab_0 = "table" == _tab_0 or "userdata" == _tab_0 if _tab_0 then local name, meta_field do @@ -531,14 +532,17 @@ do end do local _exp_0 = tb - local _tab_0 = "table" == type(_exp_0) + local _tab_0 = type(_exp_0) + _tab_0 = "table" == _tab_0 or "userdata" == _tab_0 if _tab_0 then do local _obj_0 = _exp_0.a - if _obj_0 ~= nil then + local _type_0 = type(_obj_0) + if "table" == _type_0 or "userdata" == _type_0 then do local _obj_1 = getmetatable(_obj_0) - if _obj_1 ~= nil then + local _type_1 = type(_obj_1) + if "table" == _type_1 or "userdata" == _type_1 then add = _obj_1.__add end end @@ -546,10 +550,12 @@ do end do local _obj_0 = _exp_0.b - if _obj_0 ~= nil then + local _type_0 = type(_obj_0) + if "table" == _type_0 or "userdata" == _type_0 then do local _obj_1 = getmetatable(_obj_0) - if _obj_1 ~= nil then + local _type_1 = type(_obj_1) + if "table" == _type_1 or "userdata" == _type_1 then field = _obj_1[fieldName] end end @@ -566,15 +572,18 @@ do end do local _exp_0 = tb - local _tab_0 = "table" == type(_exp_0) + local _tab_0 = type(_exp_0) + _tab_0 = "table" == _tab_0 or "userdata" == _tab_0 if _tab_0 then local _obj_0 = _exp_0 do local _obj_1 = _obj_0.c - if _obj_1 ~= nil then + local _type_0 = type(_obj_1) + if "table" == _type_0 or "userdata" == _type_0 then do local _obj_2 = getmetatable(_obj_1) - if _obj_2 ~= nil then + local _type_1 = type(_obj_2) + if "table" == _type_1 or "userdata" == _type_1 then meta_field = _obj_2["abc"] end end @@ -587,13 +596,15 @@ do local _obj_1 = getmetatable(_obj_0) do local _obj_2 = _obj_1[ [[any string]]] - if _obj_2 ~= nil then + local _type_0 = type(_obj_2) + if "table" == _type_0 or "userdata" == _type_0 then abc = _obj_2.d end end do local _obj_2 = _obj_1['str'] - if _obj_2 ~= nil then + local _type_0 = type(_obj_2) + if "table" == _type_0 or "userdata" == _type_0 then def = _obj_2.e end end diff --git a/spec/outputs/switch.lua b/spec/outputs/switch.lua index 4358027..3c48120 100644 --- a/spec/outputs/switch.lua +++ b/spec/outputs/switch.lua @@ -107,37 +107,43 @@ do } } do - local _tab_0 = "table" == type(dict) + local _tab_0 = type(dict) + _tab_0 = "table" == _tab_0 or "userdata" == _tab_0 if _tab_0 then local first = dict[1] local one do local _obj_0 = dict[2] - if _obj_0 ~= nil then + local _type_0 = type(_obj_0) + if "table" == _type_0 or "userdata" == _type_0 then one = _obj_0[1] end end local two do local _obj_0 = dict[2] - if _obj_0 ~= nil then + local _type_0 = type(_obj_0) + if "table" == _type_0 or "userdata" == _type_0 then two = _obj_0[2] end end local three do local _obj_0 = dict[2] - if _obj_0 ~= nil then + local _type_0 = type(_obj_0) + if "table" == _type_0 or "userdata" == _type_0 then three = _obj_0[3] end end local c do local _obj_0 = dict.a - if _obj_0 ~= nil then + local _type_0 = type(_obj_0) + if "table" == _type_0 or "userdata" == _type_0 then do local _obj_1 = _obj_0.b - if _obj_1 ~= nil then + local _type_1 = type(_obj_1) + if "table" == _type_1 or "userdata" == _type_1 then c = _obj_1.c end end @@ -146,10 +152,12 @@ do local z do local _obj_0 = dict.x - if _obj_0 ~= nil then + local _type_0 = type(_obj_0) + if "table" == _type_0 or "userdata" == _type_0 then do local _obj_1 = _obj_0.y - if _obj_1 ~= nil then + local _type_1 = type(_obj_1) + if "table" == _type_1 or "userdata" == _type_1 then z = _obj_1.z end end @@ -176,7 +184,8 @@ do for _index_0 = 1, #items do local item = items[_index_0] do - local _tab_0 = "table" == type(item) + local _tab_0 = type(item) + _tab_0 = "table" == _tab_0 or "userdata" == _tab_0 local _match_0 = false if _tab_0 then local x = item.x @@ -234,7 +243,8 @@ end do local tb = { } do - local _tab_0 = "table" == type(tb) + local _tab_0 = type(tb) + _tab_0 = "table" == _tab_0 or "userdata" == _tab_0 if _tab_0 then local a = tb.a local b = tb.b @@ -248,7 +258,8 @@ do end end do - local _tab_0 = "table" == type(tb) + local _tab_0 = type(tb) + _tab_0 = "table" == _tab_0 or "userdata" == _tab_0 if _tab_0 then local a = tb.a local b = tb.b @@ -261,7 +272,8 @@ do end end do - local _tab_0 = "table" == type(tb) + local _tab_0 = type(tb) + _tab_0 = "table" == _tab_0 or "userdata" == _tab_0 local _match_0 = false if _tab_0 then local a = tb.a @@ -281,7 +293,8 @@ do x = "abc" } do - local _tab_0 = "table" == type(tb) + local _tab_0 = type(tb) + _tab_0 = "table" == _tab_0 or "userdata" == _tab_0 local _match_0 = false if _tab_0 then local x = tb.x @@ -308,7 +321,8 @@ do if 1 == _exp_0 then matched = "1" else - local _tab_0 = "table" == type(_exp_0) + local _tab_0 = type(_exp_0) + _tab_0 = "table" == _tab_0 or "userdata" == _tab_0 local _match_0 = false if _tab_0 then local x = _exp_0.x @@ -333,7 +347,8 @@ do return "invalid" else do - local _tab_0 = "table" == type(_exp_0) + local _tab_0 = type(_exp_0) + _tab_0 = "table" == _tab_0 or "userdata" == _tab_0 local _match_0 = false if _tab_0 then local a = _exp_0.a @@ -367,7 +382,8 @@ end do do local _exp_0 = y - local _tab_0 = "table" == type(_exp_0) + local _tab_0 = type(_exp_0) + _tab_0 = "table" == _tab_0 or "userdata" == _tab_0 if _tab_0 then local mt = (function() local _obj_0 = _exp_0.x -- cgit v1.2.3-55-g6feb