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

Impressum / About Us