From d92132e87a48368db849f8ba8f30ff8ce5de6156 Mon Sep 17 00:00:00 2001 From: Diego Nehab Date: Thu, 1 Apr 2004 07:32:53 +0000 Subject: complicated bug in ltn12.filter.chain... --- src/ltn12.lua | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/ltn12.lua b/src/ltn12.lua index ed3449b..dac932b 100644 --- a/src/ltn12.lua +++ b/src/ltn12.lua @@ -34,8 +34,23 @@ end local function chain2(f1, f2) if type(f1) ~= 'function' then error('invalid filter', 2) end if type(f2) ~= 'function' then error('invalid filter', 2) end + local co = coroutine.create(function(chunk) + while true do + local filtered1 = f1(chunk) + local filtered2 = f2(filtered1) + local done2 = filtered1 and "" + while true do + if filtered2 == "" or filtered2 == nil then break end + coroutine.yield(filtered2) + filtered2 = f2(done2) + end + if filtered1 == "" then chunk = coroutine.yield(filtered1) + elseif filtered1 == nil then return nil + else chunk = chunk and "" end + end + end) return function(chunk) - return f2(f1(chunk)) + return shift(coroutine.resume(co, chunk)) end end -- cgit v1.2.3-55-g6feb