Index: /as3/BetweenAS3/trunk/CHANGES.ja =================================================================== --- /as3/BetweenAS3/trunk/CHANGES.ja (リビジョン 3021) +++ /as3/BetweenAS3/trunk/CHANGES.ja (リビジョン 3077) @@ -2,5 +2,10 @@ ======================================== -Alpha r2505 -> HEAD +Alpha r3022 -> HEAD +-------------------- + + * [r3021] 修正: 特定の条件下で EnterFrameTicker 内で ReferenceError が発生する (#108) + +Alpha r2505 -> Alpha r3022 -------------------- Index: /as3/BetweenAS3/trunk/tests/fp10/org/libspark/betweenas3/tickers/EnterFrameTickerTest.as =================================================================== --- /as3/BetweenAS3/trunk/tests/fp10/org/libspark/betweenas3/tickers/EnterFrameTickerTest.as (リビジョン 3019) +++ /as3/BetweenAS3/trunk/tests/fp10/org/libspark/betweenas3/tickers/EnterFrameTickerTest.as (リビジョン 3077) @@ -161,4 +161,44 @@ assertEquals(1, l3.c); } + + // http://www.libspark.org/ticket/108 + test function issue108():void + { + var ticker:EnterFrameTicker = new EnterFrameTicker(); + + var l8:MockTickerListener = new MockTickerListener(2); + var l7:MockTickerListener = new MockTickerListener(2); + var l6:MockTickerListener = new MockTickerListener(2); + var l5:MockTickerListener = new MockTickerListener(2); + var l4:MockTickerListener = new MockTickerListener(2); + var l3:MockTickerListener = new MockTickerListener(2); + var l2_2:MockTickerListener = new MockTickerListener(2); + var l2_1:AddingListenerTickerListener = new AddingListenerTickerListener(1, ticker, l2_2); + var l1:MockTickerListener = new MockTickerListener(1); + + ticker.addTickerListener(l8); + ticker.addTickerListener(l7); + ticker.addTickerListener(l6); + ticker.addTickerListener(l5); + ticker.addTickerListener(l4); + ticker.addTickerListener(l3); + ticker.addTickerListener(l2_1); + ticker.addTickerListener(l1); + + ticker.update(null); + ticker.update(null); + ticker.update(null); + ticker.update(null); + + assertEquals(1, l1.c); + assertEquals(1, l2_1.c); + assertEquals(2, l2_2.c); + assertEquals(2, l3.c); + assertEquals(2, l4.c); + assertEquals(2, l5.c); + assertEquals(2, l6.c); + assertEquals(2, l7.c); + assertEquals(2, l8.c); + } } } Index: /as3/BetweenAS3/trunk/src/fp10/org/libspark/betweenas3/tickers/EnterFrameTicker.as =================================================================== --- /as3/BetweenAS3/trunk/src/fp10/org/libspark/betweenas3/tickers/EnterFrameTicker.as (リビジョン 3019) +++ /as3/BetweenAS3/trunk/src/fp10/org/libspark/betweenas3/tickers/EnterFrameTicker.as (リビジョン 3077) @@ -165,94 +165,118 @@ listener.nextListener.prevListener = listener.prevListener; } - ll = listener.prevListener; - listener.nextListener = null; - listener.prevListener = null; - listener = ll; - --_numListeners; - } - if ((listener = listener.nextListener).tick(t)) { - if (listener.prevListener != null) { - listener.prevListener.nextListener = listener.nextListener; - } - if (listener.nextListener != null) { - listener.nextListener.prevListener = listener.prevListener; - } - ll = listener.prevListener; - listener.nextListener = null; - listener.prevListener = null; - listener = ll; - --_numListeners; - } - if ((listener = listener.nextListener).tick(t)) { - if (listener.prevListener != null) { - listener.prevListener.nextListener = listener.nextListener; - } - if (listener.nextListener != null) { - listener.nextListener.prevListener = listener.prevListener; - } - ll = listener.prevListener; - listener.nextListener = null; - listener.prevListener = null; - listener = ll; - --_numListeners; - } - if ((listener = listener.nextListener).tick(t)) { - if (listener.prevListener != null) { - listener.prevListener.nextListener = listener.nextListener; - } - if (listener.nextListener != null) { - listener.nextListener.prevListener = listener.prevListener; - } - ll = listener.prevListener; - listener.nextListener = null; - listener.prevListener = null; - listener = ll; - --_numListeners; - } - if ((listener = listener.nextListener).tick(t)) { - if (listener.prevListener != null) { - listener.prevListener.nextListener = listener.nextListener; - } - if (listener.nextListener != null) { - listener.nextListener.prevListener = listener.prevListener; - } - ll = listener.prevListener; - listener.nextListener = null; - listener.prevListener = null; - listener = ll; - --_numListeners; - } - if ((listener = listener.nextListener).tick(t)) { - if (listener.prevListener != null) { - listener.prevListener.nextListener = listener.nextListener; - } - if (listener.nextListener != null) { - listener.nextListener.prevListener = listener.prevListener; - } - ll = listener.prevListener; - listener.nextListener = null; - listener.prevListener = null; - listener = ll; - --_numListeners; - } - if ((listener = listener.nextListener).tick(t)) { - if (listener.prevListener != null) { - listener.prevListener.nextListener = listener.nextListener; - } - if (listener.nextListener != null) { - listener.nextListener.prevListener = listener.prevListener; - } - ll = listener.prevListener; - listener.nextListener = null; - listener.prevListener = null; - listener = ll; - --_numListeners; - } - if ((listener = listener.nextListener).tick(t)) { - if (listener.prevListener != null) { - listener.prevListener.nextListener = listener.nextListener; - } - if (listener.nextListener != null) { - listener.nextListener.prevListener = listener.prevListener; + if (listener == _first) { + _first = listener.nextListener; + } + ll = listener.prevListener; + listener.nextListener = null; + listener.prevListener = null; + listener = ll; + --_numListeners; + } + if ((listener = listener.nextListener).tick(t)) { + if (listener.prevListener != null) { + listener.prevListener.nextListener = listener.nextListener; + } + if (listener.nextListener != null) { + listener.nextListener.prevListener = listener.prevListener; + } + if (listener == _first) { + _first = listener.nextListener; + } + ll = listener.prevListener; + listener.nextListener = null; + listener.prevListener = null; + listener = ll; + --_numListeners; + } + if ((listener = listener.nextListener).tick(t)) { + if (listener.prevListener != null) { + listener.prevListener.nextListener = listener.nextListener; + } + if (listener.nextListener != null) { + listener.nextListener.prevListener = listener.prevListener; + } + if (listener == _first) { + _first = listener.nextListener; + } + ll = listener.prevListener; + listener.nextListener = null; + listener.prevListener = null; + listener = ll; + --_numListeners; + } + if ((listener = listener.nextListener).tick(t)) { + if (listener.prevListener != null) { + listener.prevListener.nextListener = listener.nextListener; + } + if (listener.nextListener != null) { + listener.nextListener.prevListener = listener.prevListener; + } + if (listener == _first) { + _first = listener.nextListener; + } + ll = listener.prevListener; + listener.nextListener = null; + listener.prevListener = null; + listener = ll; + --_numListeners; + } + if ((listener = listener.nextListener).tick(t)) { + if (listener.prevListener != null) { + listener.prevListener.nextListener = listener.nextListener; + } + if (listener.nextListener != null) { + listener.nextListener.prevListener = listener.prevListener; + } + if (listener == _first) { + _first = listener.nextListener; + } + ll = listener.prevListener; + listener.nextListener = null; + listener.prevListener = null; + listener = ll; + --_numListeners; + } + if ((listener = listener.nextListener).tick(t)) { + if (listener.prevListener != null) { + listener.prevListener.nextListener = listener.nextListener; + } + if (listener.nextListener != null) { + listener.nextListener.prevListener = listener.prevListener; + } + if (listener == _first) { + _first = listener.nextListener; + } + ll = listener.prevListener; + listener.nextListener = null; + listener.prevListener = null; + listener = ll; + --_numListeners; + } + if ((listener = listener.nextListener).tick(t)) { + if (listener.prevListener != null) { + listener.prevListener.nextListener = listener.nextListener; + } + if (listener.nextListener != null) { + listener.nextListener.prevListener = listener.prevListener; + } + if (listener == _first) { + _first = listener.nextListener; + } + ll = listener.prevListener; + listener.nextListener = null; + listener.prevListener = null; + listener = ll; + --_numListeners; + } + if ((listener = listener.nextListener).tick(t)) { + if (listener.prevListener != null) { + listener.prevListener.nextListener = listener.nextListener; + } + if (listener.nextListener != null) { + listener.nextListener.prevListener = listener.prevListener; + } + if (listener == _first) { + _first = listener.nextListener; } ll = listener.prevListener; Index: /as3/BetweenAS3/trunk/CHANGES =================================================================== --- /as3/BetweenAS3/trunk/CHANGES (リビジョン 3021) +++ /as3/BetweenAS3/trunk/CHANGES (リビジョン 3077) @@ -2,5 +2,10 @@ ======================================== -Alpha r2505 -> HEAD +Alpha r3022 -> HEAD +-------------------- + + * [r3021] Fix: Sometimes ReferenceError has occurred in EnterFrameTicker. (#108) + +Alpha r2505 -> Alpha r3022 --------------------