From dba662758192b41648e6c1201083d83926f07783 Mon Sep 17 00:00:00 2001 From: Li Jin Date: Wed, 28 Dec 2022 15:55:15 +0800 Subject: add metamethods checking. --- spec/inputs/import.yue | 7 +++-- spec/outputs/destructure.lua | 72 +++++++++++++++++++++++--------------------- spec/outputs/import.lua | 16 ++++++---- spec/outputs/metatable.lua | 29 +++++++++--------- 4 files changed, 67 insertions(+), 57 deletions(-) (limited to 'spec') diff --git a/spec/inputs/import.yue b/spec/inputs/import.yue index af5545d..fe5caf5 100644 --- a/spec/inputs/import.yue +++ b/spec/inputs/import.yue @@ -64,8 +64,9 @@ do import "org.package.module" as function:func, if:ifVar do - import "m" as {: b} - import "m" as {e: f, : c} + import "m" as {: b} + import "m" as {:} + import "m" as {e: f, : c} import "m" as {c: d} - import "m" as {g, {: i}} + import "m" as {g, {: i}} diff --git a/spec/outputs/destructure.lua b/spec/outputs/destructure.lua index 8953a2a..cb0eb3f 100644 --- a/spec/outputs/destructure.lua +++ b/spec/outputs/destructure.lua @@ -288,28 +288,31 @@ do end) end end - local _obj_0 = tb - local mtx, y, zItem = getmetatable(_obj_0.x), _obj_0.y, _obj_0.z - if mtx == nil then - mtx = { } - end - local index = getmetatable(_obj_0).__index - if index == nil then - index = function() - return nil + local mtx, y, zItem, index + do + local _obj_0 = tb + mtx, y, zItem = getmetatable(_obj_0.x), _obj_0.y, _obj_0.z + if mtx == nil then + mtx = { } + end + index = getmetatable(_obj_0).__index + if index == nil then + index = function() + return nil + end end end do local _tmp_0 do - local _obj_1 = getmetatable(tb) - _tmp_0 = _obj_1.func + local _obj_0 = getmetatable(tb) + _tmp_0 = _obj_0.func end if _tmp_0 == nil then do - local _obj_1 = item - if _obj_1 ~= nil then - _tmp_0 = _obj_1.defVal + local _obj_0 = item + if _obj_0 ~= nil then + _tmp_0 = _obj_0.defVal end end end @@ -455,9 +458,12 @@ do end end do - local _obj_0 = tb - local value = _obj_0[name] - local value_meta = getmetatable(_obj_0)[name] + local value, value_meta + do + local _obj_0 = tb + value = _obj_0[name] + value_meta = getmetatable(_obj_0)[name] + end end do local tostring, add @@ -492,16 +498,15 @@ do end do local tb = { } - local _obj_0 = tb do local _tmp_0 = c() - local v2 = _obj_0[_tmp_0] + local v2 = tb[_tmp_0] end local v1 do - local _obj_1 = getmetatable(_obj_0) + local _obj_0 = getmetatable(tb) local _tmp_1 = a + b - v1 = _obj_1[_tmp_1] + v1 = _obj_0[_tmp_1] end end do @@ -575,16 +580,15 @@ do 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 - local _type_0 = type(_obj_1) + local _obj_0 = _exp_0.c + local _type_0 = type(_obj_0) if "table" == _type_0 or "userdata" == _type_0 then do - local _obj_2 = getmetatable(_obj_1) - local _type_1 = type(_obj_2) + local _obj_1 = getmetatable(_obj_0) + local _type_1 = type(_obj_1) if "table" == _type_1 or "userdata" == _type_1 then - meta_field = _obj_2["abc"] + meta_field = _obj_1["abc"] end end end @@ -593,19 +597,19 @@ do meta_field = "def" end do - local _obj_1 = getmetatable(_obj_0) + local _obj_0 = getmetatable(_exp_0) do - local _obj_2 = _obj_1[ [[any string]]] - local _type_0 = type(_obj_2) + local _obj_1 = _obj_0[ [[any string]]] + local _type_0 = type(_obj_1) if "table" == _type_0 or "userdata" == _type_0 then - abc = _obj_2.d + abc = _obj_1.d end end do - local _obj_2 = _obj_1['str'] - local _type_0 = type(_obj_2) + local _obj_1 = _obj_0['str'] + local _type_0 = type(_obj_1) if "table" == _type_0 or "userdata" == _type_0 then - def = _obj_2.e + def = _obj_1.e end end if abc == nil then diff --git a/spec/outputs/import.lua b/spec/outputs/import.lua index edb7c44..f8d6ef0 100644 --- a/spec/outputs/import.lua +++ b/spec/outputs/import.lua @@ -89,14 +89,18 @@ do end end do - local b = getmetatable(require("m")).__a - local _obj_0 = require("m") - local f = _obj_0.e - local c = getmetatable(_obj_0).__a + local b = getmetatable(require("m")).__gc + local index = getmetatable(require("m")).__index + local f, c + do + local _obj_0 = require("m") + f = _obj_0.e + c = getmetatable(_obj_0).__pairs + end local d = require("m").c local g, i do - local _obj_1 = require("m") - g, i = _obj_1[1], getmetatable(_obj_1[2]).__h + local _obj_0 = require("m") + g, i = _obj_0[1], getmetatable(_obj_0[2]).__close end end diff --git a/spec/outputs/metatable.lua b/spec/outputs/metatable.lua index 937136f..907a584 100644 --- a/spec/outputs/metatable.lua +++ b/spec/outputs/metatable.lua @@ -38,28 +38,29 @@ getmetatable(a).__add = function(x, y) return x + y end do - local _obj_0 = a - local new = _obj_0.new + local new = a.new local close, closeA do - local _obj_1 = getmetatable(_obj_0) - close, closeA = _obj_1.__close, _obj_1.__close + local _obj_0 = getmetatable(a) + close, closeA = _obj_0.__close, _obj_0.__close end print(new, close, closeA) end do local x, new, var, close, closeA, num, add, sub - local _obj_0, _obj_1 - x, _obj_0, _obj_1 = 123, a.b.c, func() - new, var = _obj_0.new, _obj_0.var - do - local _obj_2 = getmetatable(_obj_0) - close, closeA = _obj_2.__close, _obj_2.__close - end - num = _obj_1.num do - local _obj_2 = getmetatable(_obj_1) - add, sub = _obj_2.__add, _obj_2.__sub + local _obj_0, _obj_1 + x, _obj_0, _obj_1 = 123, a.b.c, func() + new, var = _obj_0.new, _obj_0.var + do + local _obj_2 = getmetatable(_obj_0) + close, closeA = _obj_2.__close, _obj_2.__close + end + num = _obj_1.num + do + local _obj_2 = getmetatable(_obj_1) + add, sub = _obj_2.__add, _obj_2.__sub + end end end setmetatable(a.b, { }) -- cgit v1.2.3-55-g6feb