# HG changeset patch # User jbe # Date 1426955067 -3600 # Node ID 2ddbb44680f72d9200fa7b5cc961c630969ca0ea # Parent bac6cbdeb05507dac2ca5e401cd2aca62bd0699c Bugfix/code-cleanup regarding initializers/finalizers: correctly detect yield-values and remove finalizers upon execution diff -r bac6cbdeb055 -r 2ddbb44680f7 framework/env/execute/_initializers.lua --- a/framework/env/execute/_initializers.lua Sat Mar 21 16:38:50 2015 +0100 +++ b/framework/env/execute/_initializers.lua Sat Mar 21 17:24:27 2015 +0100 @@ -1,5 +1,6 @@ function execute._initializers(initializer_path_element) - local yieldvalue = {} + local yieldvalue1 = {} + local yieldvalue2 = {} local coro = coroutine.wrap(function() execute.multi_wrapped( execute._create_sorted_execution_list( @@ -14,14 +15,18 @@ end ), function() - coroutine.yield(yieldvalue) + coroutine.yield(yieldvalue1) end ) - return yieldvalue + return yieldvalue2 end) - local function cont() - assert(coro() == yieldvalue, "Unexpected yield") + local yieldvalue = coro() + if yieldvalue == yieldvalue2 then + error("Initializers failed to call execute.inner()") + elseif yieldvalue ~= yieldvalue1 then + error("Unexpected yield in initializers") end - cont() - execute._finalizers[#execute._finalizers+1] = cont + execute._finalizers[#execute._finalizers+1] = function() + assert(coro() == yieldvalue2, "Unexpected yield in finalizers") + end end diff -r bac6cbdeb055 -r 2ddbb44680f7 framework/env/execute/finalizers.lua --- a/framework/env/execute/finalizers.lua Sat Mar 21 16:38:50 2015 +0100 +++ b/framework/env/execute/finalizers.lua Sat Mar 21 17:24:27 2015 +0100 @@ -8,6 +8,6 @@ function execute.finalizers() for i = #execute._finalizers, 1, -1 do execute._finalizers[i]() - execute._finalizers[i] = 0 + execute._finalizers[i] = nil end end