webmcp
changeset 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 | bac6cbdeb055 |
children | b5d0c0ab3ce2 |
files | framework/env/execute/_initializers.lua framework/env/execute/finalizers.lua |
line diff
1.1 --- a/framework/env/execute/_initializers.lua Sat Mar 21 16:38:50 2015 +0100 1.2 +++ b/framework/env/execute/_initializers.lua Sat Mar 21 17:24:27 2015 +0100 1.3 @@ -1,5 +1,6 @@ 1.4 function execute._initializers(initializer_path_element) 1.5 - local yieldvalue = {} 1.6 + local yieldvalue1 = {} 1.7 + local yieldvalue2 = {} 1.8 local coro = coroutine.wrap(function() 1.9 execute.multi_wrapped( 1.10 execute._create_sorted_execution_list( 1.11 @@ -14,14 +15,18 @@ 1.12 end 1.13 ), 1.14 function() 1.15 - coroutine.yield(yieldvalue) 1.16 + coroutine.yield(yieldvalue1) 1.17 end 1.18 ) 1.19 - return yieldvalue 1.20 + return yieldvalue2 1.21 end) 1.22 - local function cont() 1.23 - assert(coro() == yieldvalue, "Unexpected yield") 1.24 + local yieldvalue = coro() 1.25 + if yieldvalue == yieldvalue2 then 1.26 + error("Initializers failed to call execute.inner()") 1.27 + elseif yieldvalue ~= yieldvalue1 then 1.28 + error("Unexpected yield in initializers") 1.29 end 1.30 - cont() 1.31 - execute._finalizers[#execute._finalizers+1] = cont 1.32 + execute._finalizers[#execute._finalizers+1] = function() 1.33 + assert(coro() == yieldvalue2, "Unexpected yield in finalizers") 1.34 + end 1.35 end
2.1 --- a/framework/env/execute/finalizers.lua Sat Mar 21 16:38:50 2015 +0100 2.2 +++ b/framework/env/execute/finalizers.lua Sat Mar 21 17:24:27 2015 +0100 2.3 @@ -8,6 +8,6 @@ 2.4 function execute.finalizers() 2.5 for i = #execute._finalizers, 1, -1 do 2.6 execute._finalizers[i]() 2.7 - execute._finalizers[i] = 0 2.8 + execute._finalizers[i] = nil 2.9 end 2.10 end