51 end; |
51 end; |
52 local function _create_dispatcher(event) -- FIXME duplicate code in fire_event |
52 local function _create_dispatcher(event) -- FIXME duplicate code in fire_event |
53 local h = handlers[event]; |
53 local h = handlers[event]; |
54 if not h then h = {}; handlers[event] = h; end |
54 if not h then h = {}; handlers[event] = h; end |
55 local dispatcher = function(...) |
55 local dispatcher = function(...) |
56 for _, handler in ipairs(h) do |
56 for i=1,#h do |
57 local ret = handler(...); |
57 local ret = h[i](...); |
58 if ret ~= nil then return ret; end |
58 if ret ~= nil then return ret; end |
59 end |
59 end |
60 end; |
60 end; |
61 dispatchers[event] = dispatcher; |
61 dispatchers[event] = dispatcher; |
62 return dispatcher; |
62 return dispatcher; |
65 return dispatchers[event] or _create_dispatcher(event); |
65 return dispatchers[event] or _create_dispatcher(event); |
66 end; |
66 end; |
67 local function fire_event(event, ...) -- FIXME duplicates dispatcher code |
67 local function fire_event(event, ...) -- FIXME duplicates dispatcher code |
68 local h = handlers[event]; |
68 local h = handlers[event]; |
69 if h then |
69 if h then |
70 for _, handler in ipairs(h) do |
70 for i=1,#h do |
71 local ret = handler(...); |
71 local ret = h[i](...); |
72 if ret ~= nil then return ret; end |
72 if ret ~= nil then return ret; end |
73 end |
73 end |
74 end |
74 end |
75 end; |
75 end; |
76 local function get_named_arg_dispatcher(event, ...) |
76 local function get_named_arg_dispatcher(event, ...) |