webmcp

annotate framework/env/execute/_initializers.lua @ 277:2ddbb44680f7

Bugfix/code-cleanup regarding initializers/finalizers: correctly detect yield-values and remove finalizers upon execution
author jbe
date Sat Mar 21 17:24:27 2015 +0100 (2015-03-21)
parents f66037207da8
children a2c733535b8e
rev   line source
jbe@214 1 function execute._initializers(initializer_path_element)
jbe@277 2 local yieldvalue1 = {}
jbe@277 3 local yieldvalue2 = {}
jbe@214 4 local coro = coroutine.wrap(function()
jbe@214 5 execute.multi_wrapped(
jbe@214 6 execute._create_sorted_execution_list(
jbe@214 7 function(add_by_path)
jbe@214 8 add_by_path(initializer_path_element)
jbe@242 9 if WEBMCP_APP_NAME then -- allow for interactive mode
jbe@242 10 add_by_path(WEBMCP_APP_NAME, initializer_path_element)
jbe@242 11 end
jbe@214 12 end,
jbe@214 13 function(full_path, relative_path)
jbe@214 14 execute.file_path{ file_path = full_path }
jbe@214 15 end
jbe@214 16 ),
jbe@214 17 function()
jbe@277 18 coroutine.yield(yieldvalue1)
jbe@214 19 end
jbe@214 20 )
jbe@277 21 return yieldvalue2
jbe@214 22 end)
jbe@277 23 local yieldvalue = coro()
jbe@277 24 if yieldvalue == yieldvalue2 then
jbe@277 25 error("Initializers failed to call execute.inner()")
jbe@277 26 elseif yieldvalue ~= yieldvalue1 then
jbe@277 27 error("Unexpected yield in initializers")
jbe@214 28 end
jbe@277 29 execute._finalizers[#execute._finalizers+1] = function()
jbe@277 30 assert(coro() == yieldvalue2, "Unexpected yield in finalizers")
jbe@277 31 end
jbe@214 32 end

Impressum / About Us