# HG changeset patch # User jbe # Date 1452625397 -3600 # Node ID beb1e7925a52f6e162cfbf8391fac5a0c3dffc27 # Parent 553a1a9dbc4c4dd2d9470ec9dad198bb76b02966 Stack traceback for "coro" (initializers/finalizers) diff -r 553a1a9dbc4c -r beb1e7925a52 framework/env/execute/_initializers.lua --- a/framework/env/execute/_initializers.lua Tue Jan 12 19:30:59 2016 +0100 +++ b/framework/env/execute/_initializers.lua Tue Jan 12 20:03:17 2016 +0100 @@ -1,7 +1,6 @@ function execute._initializers(initializer_path_element) - local yieldvalue1 = {} - local yieldvalue2 = {} - local coro = coroutine.wrap(function() + local yieldvalue_inner = {} + local coro = coroutine.create(function() execute.multi_wrapped( execute._create_sorted_execution_list( function(add_by_path) @@ -13,18 +12,25 @@ end ), function() - coroutine.yield(yieldvalue1) + coroutine.yield(yieldvalue_inner) end ) - return yieldvalue2 end) - local yieldvalue = coro() - if yieldvalue == yieldvalue2 then + local success, yieldvalue = coroutine.resume(coro) + if not success then + error(debug.traceback(coro, "Error in initializer")) + end + if coroutine.status(coro) == "dead" then error("Initializers failed to call execute.inner()") - elseif yieldvalue ~= yieldvalue1 then - error("Unexpected yield in initializers") + elseif yieldvalue ~= yieldvalue_inner then + error("Unexpected yield in initializer") end execute._finalizers[#execute._finalizers+1] = function() - assert(coro() == yieldvalue2, "Unexpected yield in finalizers") + if not coroutine.resume(coro) then + error(debug.traceback(coro, "Error in finalizer")) + end + if coroutine.status(coro) ~= "dead" then + error("Unexpected yield in finalizer") + end end end