From 60f8f00a022ac08701792b2897b72d8c99b50f52 Mon Sep 17 00:00:00 2001 From: Li Jin Date: Fri, 11 Nov 2022 17:19:24 +0800 Subject: fix default value issue when doing metatable destructuring. --- spec/inputs/destructure.yue | 10 +++++ spec/outputs/destructure.lua | 105 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+) (limited to 'spec') diff --git a/spec/inputs/destructure.yue b/spec/inputs/destructure.yue index 403923a..d161fd8 100644 --- a/spec/inputs/destructure.yue +++ b/spec/inputs/destructure.yue @@ -214,5 +214,15 @@ do tb = {} <[a + b]>: v1, [c!]: v2 = tb +do + {a: {: = addFunc}, b: {<[fieldName]>: field = 123}} = tb + {<"abc">: meta_field = "def", <[[any string]]>: abc = 123, <'str'>: def = {}} = tb + + switch tb + when {a: {: = addFunc}, b: {<[fieldName]>: field = 123}} + print add, field + switch tb + when {c: {<"abc">: meta_field = "def"}, <[[any string]]>: {d: abc = 123}, <'str'>: {e: def = {}}} + print meta_field, abc, def nil diff --git a/spec/outputs/destructure.lua b/spec/outputs/destructure.lua index 10ad2d0..f40a658 100644 --- a/spec/outputs/destructure.lua +++ b/spec/outputs/destructure.lua @@ -503,4 +503,109 @@ do v1 = _obj_1[_tmp_1] end end +do + local add, field + do + local _obj_0 = tb + add, field = getmetatable(_obj_0.a).__add, getmetatable(_obj_0.b)[fieldName] + if add == nil then + add = addFunc + end + if field == nil then + field = 123 + end + end + local meta_field, abc, def + do + local _obj_0 = getmetatable(tb) + meta_field, abc, def = _obj_0["abc"], _obj_0[ [[any string]]], _obj_0['str'] + if meta_field == nil then + meta_field = "def" + end + if abc == nil then + abc = 123 + end + if def == nil then + def = { } + end + end + do + local _exp_0 = tb + local _tab_0 = "table" == type(_exp_0) + if _tab_0 then + do + local _obj_0 = _exp_0.a + if _obj_0 ~= nil then + do + local _obj_1 = getmetatable(_obj_0) + if _obj_1 ~= nil then + add = _obj_1.__add + end + end + end + end + do + local _obj_0 = _exp_0.b + if _obj_0 ~= nil then + do + local _obj_1 = getmetatable(_obj_0) + if _obj_1 ~= nil then + field = _obj_1[fieldName] + end + end + end + end + if add == nil then + add = addFunc + end + if field == nil then + field = 123 + end + print(add, field) + end + end + do + local _exp_0 = tb + local _tab_0 = "table" == type(_exp_0) + if _tab_0 then + local _obj_0 = _exp_0 + do + local _obj_1 = _obj_0.c + if _obj_1 ~= nil then + do + local _obj_2 = getmetatable(_obj_1) + if _obj_2 ~= nil then + meta_field = _obj_2["abc"] + end + end + end + end + if meta_field == nil then + meta_field = "def" + end + do + local _obj_1 = getmetatable(_obj_0) + do + local _obj_2 = _obj_1[ [[any string]]] + if _obj_2 ~= nil then + abc = _obj_2.d + end + end + do + local _obj_2 = _obj_1['str'] + if _obj_2 ~= nil then + def = _obj_2.e + end + end + if abc == nil then + abc = 123 + end + if def == nil then + def = { } + end + end + print(meta_field, abc, def) + end + end +end return nil -- cgit v1.2.3-55-g6feb