webmcp
diff framework/env/execute/_initializers.lua @ 425:beb1e7925a52
Stack traceback for "coro" (initializers/finalizers)
author | jbe |
---|---|
date | Tue Jan 12 20:03:17 2016 +0100 (2016-01-12) |
parents | a2c733535b8e |
children | c37d4bf50a4b |
line diff
1.1 --- a/framework/env/execute/_initializers.lua Tue Jan 12 19:30:59 2016 +0100 1.2 +++ b/framework/env/execute/_initializers.lua Tue Jan 12 20:03:17 2016 +0100 1.3 @@ -1,7 +1,6 @@ 1.4 function execute._initializers(initializer_path_element) 1.5 - local yieldvalue1 = {} 1.6 - local yieldvalue2 = {} 1.7 - local coro = coroutine.wrap(function() 1.8 + local yieldvalue_inner = {} 1.9 + local coro = coroutine.create(function() 1.10 execute.multi_wrapped( 1.11 execute._create_sorted_execution_list( 1.12 function(add_by_path) 1.13 @@ -13,18 +12,25 @@ 1.14 end 1.15 ), 1.16 function() 1.17 - coroutine.yield(yieldvalue1) 1.18 + coroutine.yield(yieldvalue_inner) 1.19 end 1.20 ) 1.21 - return yieldvalue2 1.22 end) 1.23 - local yieldvalue = coro() 1.24 - if yieldvalue == yieldvalue2 then 1.25 + local success, yieldvalue = coroutine.resume(coro) 1.26 + if not success then 1.27 + error(debug.traceback(coro, "Error in initializer")) 1.28 + end 1.29 + if coroutine.status(coro) == "dead" then 1.30 error("Initializers failed to call execute.inner()") 1.31 - elseif yieldvalue ~= yieldvalue1 then 1.32 - error("Unexpected yield in initializers") 1.33 + elseif yieldvalue ~= yieldvalue_inner then 1.34 + error("Unexpected yield in initializer") 1.35 end 1.36 execute._finalizers[#execute._finalizers+1] = function() 1.37 - assert(coro() == yieldvalue2, "Unexpected yield in finalizers") 1.38 + if not coroutine.resume(coro) then 1.39 + error(debug.traceback(coro, "Error in finalizer")) 1.40 + end 1.41 + if coroutine.status(coro) ~= "dead" then 1.42 + error("Unexpected yield in finalizer") 1.43 + end 1.44 end 1.45 end