class Event{... // --- Event custom Linked list --- var lastHandler : Bubble<HandlerSig>; function newBubble( listener, handler, next : Bubble<HandlerSig> ) { var b : Bubble<HandlerSig> = { l : listener, h : handler, n : next, p : null, enable : null, disable : null } b.enable = callback(enableBubble, b); b.disable = callback(disableBubble, b); if(next != null) next.p = b; return b; } function enableBubble( b : Bubble<HandlerSig> ) { if( b.p != null ) b.p.n = b; // Bubble.parentNode.nextNode = this Node } function disableBubble( b : Bubble<HandlerSig> ) { if( b.p == null ) b.p = untyped { n : this.n }; else b.p.n = b.n; // Bubble.parentNode.nextNode = Bubble.nextNode } }typedef Bubble<HandlerSig>{ /** Listener object **/ public var l : Dynamic; /** Handler function **/ public var h : HandlerSig; /** Next EventBubble object **/ public var n : EventBubble<HandlerSig>; /** Previous EventBubble in the chain **/ public var p : EventBubble<HandlerSig>; public var disable : Void -> Void; public var enable : Void -> Void;}