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 |