From d90857cc05cd0820a2057c547e95b02d24d15412 Mon Sep 17 00:00:00 2001 From: Li Jin Date: Tue, 26 Aug 2025 12:50:50 +0800 Subject: Added function argument destructuring. --- spec/inputs/funcs.yue | 31 ++++++++++ spec/outputs/funcs.lua | 153 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 184 insertions(+) (limited to 'spec') diff --git a/spec/inputs/funcs.yue b/spec/inputs/funcs.yue index e647edc..6b1669b 100644 --- a/spec/inputs/funcs.yue +++ b/spec/inputs/funcs.yue @@ -193,4 +193,35 @@ do func = (): -> check 123 print func! -- get nil +do + f = ({:a, :b, :c}) -> print a, b, c + f = (:a, :b, :c) -> print a, b, c + g = (x, :y) -> print x, y + i = ({a: ax = 0, b: by = 0}) -> print ax, by + j = (name, {id: uid = "n/a", :role = "guest"}) -> print name, uid, role + m = ({user: {:name, :age}, meta: {:ver = 1}}) -> print name, age, ver + m1 = ({user: {:name, :age}, :meta = {}}) -> print name, age, meta and meta.ver or "nil" + new = ({:name = "anon", :age = 0}) => + @name = name + @age = age + set = ({:name = @name, :age = @age}) => + @name = name + @age = age + logKV = ({:k, :v}, ...) -> + print "kv:", k, v + print "rest count:", select "#", ... + macro gen = (fname) -> | + #{fname} = ({:a, :b = 0}) -> print a, b + $gen foo + t1 = (:a, x) -> print a, x + t2 = (:a) -> print a + w = ( + id + {:x = 0, :y = 0} + :flag + ) -> + print id, x, y, flag + g1 = ({:a, a: ax}) -> print a, ax + g4 = ({:a, :b, ...rest}) -> print a, b + nil diff --git a/spec/outputs/funcs.lua b/spec/outputs/funcs.lua index c1735c4..db7ed67 100644 --- a/spec/outputs/funcs.lua +++ b/spec/outputs/funcs.lua @@ -283,4 +283,157 @@ do end print(func()) end +local _anon_func_0 = function(_arg_0) + local _accum_0 = { } + local _len_0 = 1 + local _max_0 = #_arg_0 + for _index_0 = 1, _max_0 do + local _item_0 = _arg_0[_index_0] + _accum_0[_len_0] = _item_0 + _len_0 = _len_0 + 1 + end + return _accum_0 +end +do + local f + f = function(_arg_0) + local a, b, c + a, b, c = _arg_0.a, _arg_0.b, _arg_0.c + return print(a, b, c) + end + f = function(_arg_0) + local a, b, c + a, b, c = _arg_0.a, _arg_0.b, _arg_0.c + return print(a, b, c) + end + local g + g = function(x, _arg_0) + local y + y = _arg_0.y + return print(x, y) + end + local i + i = function(_arg_0) + local ax, by + ax, by = _arg_0.a, _arg_0.b + if ax == nil then + ax = 0 + end + if by == nil then + by = 0 + end + return print(ax, by) + end + j = function(name, _arg_0) + local uid, role + uid, role = _arg_0.id, _arg_0.role + if uid == nil then + uid = "n/a" + end + if role == nil then + role = "guest" + end + return print(name, uid, role) + end + local m + m = function(_arg_0) + local name, age, ver + name, age, ver = _arg_0.user.name, _arg_0.user.age, _arg_0.meta.ver + if ver == nil then + ver = 1 + end + return print(name, age, ver) + end + local m1 + m1 = function(_arg_0) + local name, age, meta + name, age, meta = _arg_0.user.name, _arg_0.user.age, _arg_0.meta + if meta == nil then + meta = { } + end + return print(name, age, meta and meta.ver or "nil") + end + local new + new = function(self, _arg_0) + local name, age + name, age = _arg_0.name, _arg_0.age + if name == nil then + name = "anon" + end + if age == nil then + age = 0 + end + self.name = name + self.age = age + end + local set + set = function(self, _arg_0) + local name, age + name, age = _arg_0.name, _arg_0.age + if name == nil then + name = self.name + end + if age == nil then + age = self.age + end + self.name = name + self.age = age + end + local logKV + logKV = function(_arg_0, ...) + local k, v + k, v = _arg_0.k, _arg_0.v + print("kv:", k, v) + return print("rest count:", select("#", ...)) + end + do + local foo + foo = function(_arg_0) + local a, b + a, b = _arg_0.a, _arg_0.b + if b == nil then + b = 0 + end + return print(a, b) + end + end + local t1 + t1 = function(_arg_0, x) + local a + a = _arg_0.a + return print(a, x) + end + local t2 + t2 = function(_arg_0) + local a + a = _arg_0.a + return print(a) + end + local w + w = function(id, _arg_0, _arg_1) + local x, y + x, y = _arg_0.x, _arg_0.y + if x == nil then + x = 0 + end + if y == nil then + y = 0 + end + local flag + flag = _arg_1.flag + return print(id, x, y, flag) + end + local g1 + g1 = function(_arg_0) + local a, ax + a, ax = _arg_0.a, _arg_0.a + return print(a, ax) + end + local g4 + g4 = function(_arg_0) + local a, b, rest + a, b, rest = _arg_0.a, _arg_0.b, _anon_func_0(_arg_0) + return print(a, b) + end +end return nil -- cgit v1.2.3-55-g6feb