From 6f46983115ed2560e76b1f86fa4dd10ed21a3162 Mon Sep 17 00:00:00 2001 From: Matthias Richter Date: Wed, 23 Jan 2013 12:23:10 +0100 Subject: Proper tail recursion in core.save_unpack() --- core.lua | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/core.lua b/core.lua index 3bc149f..67602ac 100644 --- a/core.lua +++ b/core.lua @@ -53,10 +53,13 @@ local function save_pack(...) return {n = select('#', ...), ...} end -local function save_unpack(t, i) - i = i or 1 - if i >= t.n then return t[i] end - return t[i], save_unpack(t, i+1) +local function save_unpack_helper(t, i, ...) + if i <= 0 then return ... end + return save_unpack_helper(t, i-1, t[i], ...) +end + +local function save_unpack(t) + return save_unpack_helper(t, t.n) end -- -- cgit v1.2.3-70-g09d2