| OLD | NEW |
| 1 part of dart.async; | 1 part of dart.async; |
| 2 | 2 typedef void _AsyncCallback(); |
| 3 typedef void _AsyncCallback(); | 3 class _AsyncCallbackEntry {final _AsyncCallback callback; |
| 4 class _AsyncCallbackEntry { | 4 _AsyncCallbackEntry next; |
| 5 final _AsyncCallback callback; | 5 _AsyncCallbackEntry(this.callback); |
| 6 _AsyncCallbackEntry next; | |
| 7 _AsyncCallbackEntry(this.callback); | |
| 8 } | 6 } |
| 9 _AsyncCallbackEntry _nextCallback; | 7 _AsyncCallbackEntry _nextCallback; |
| 10 _AsyncCallbackEntry _lastCallback; | 8 _AsyncCallbackEntry _lastCallback; |
| 11 _AsyncCallbackEntry _lastPriorityCallback; | 9 _AsyncCallbackEntry _lastPriorityCallback; |
| 12 bool _isInCallbackLoop = false; | 10 bool _isInCallbackLoop = false; |
| 13 void _asyncRunCallbackLoop() { | 11 void _asyncRunCallbackLoop() { |
| 14 while (_nextCallback != null) { | 12 while (_nextCallback != null) { |
| 15 _lastPriorityCallback = null; | 13 _lastPriorityCallback = null; |
| 16 _AsyncCallbackEntry entry = _nextCallback; | 14 _AsyncCallbackEntry entry = _nextCallback; |
| 17 _nextCallback = entry.next; | 15 _nextCallback = entry.next; |
| 18 if (_nextCallback == null) _lastCallback = null; | 16 if (_nextCallback == null) _lastCallback = null; |
| 19 entry.callback(); | 17 entry.callback(); |
| 20 } | 18 } |
| 21 } | 19 } |
| 22 void _asyncRunCallback() { | 20 void _asyncRunCallback() { |
| 23 _isInCallbackLoop = true; | 21 _isInCallbackLoop = true; |
| 24 try { | 22 try { |
| 25 _asyncRunCallbackLoop(); | 23 _asyncRunCallbackLoop(); |
| 26 } finally { | 24 } |
| 27 _lastPriorityCallback = null; | 25 finally { |
| 28 _isInCallbackLoop = false; | 26 _lastPriorityCallback = null; |
| 29 if (_nextCallback != null) _AsyncRun._scheduleImmediate(_asyncRunCallback); | 27 _isInCallbackLoop = false; |
| 28 if (_nextCallback != null) _AsyncRun._scheduleImmediate(_asyncRunCallback); |
| 30 } | 29 } |
| 31 } | 30 } |
| 32 void _scheduleAsyncCallback(callback) { | 31 void _scheduleAsyncCallback(callback) { |
| 33 if (_nextCallback == null) { | 32 if (_nextCallback == null) { |
| 34 _nextCallback = _lastCallback = new _AsyncCallbackEntry(callback); | 33 _nextCallback = _lastCallback = new _AsyncCallbackEntry(callback); |
| 35 if (!_isInCallbackLoop) { | 34 if (!_isInCallbackLoop) { |
| 36 _AsyncRun._scheduleImmediate(_asyncRunCallback); | 35 _AsyncRun._scheduleImmediate(_asyncRunCallback); |
| 37 } | 36 } |
| 38 } else { | 37 } |
| 39 _AsyncCallbackEntry newEntry = new _AsyncCallbackEntry(callback); | 38 else { |
| 40 _lastCallback.next = newEntry; | 39 _AsyncCallbackEntry newEntry = new _AsyncCallbackEntry(callback); |
| 41 _lastCallback = newEntry; | 40 _lastCallback.next = newEntry; |
| 41 _lastCallback = newEntry; |
| 42 } | 42 } |
| 43 } | 43 } |
| 44 void _schedulePriorityAsyncCallback(callback) { | 44 void _schedulePriorityAsyncCallback(callback) { |
| 45 _AsyncCallbackEntry entry = new _AsyncCallbackEntry(callback); | 45 _AsyncCallbackEntry entry = new _AsyncCallbackEntry(callback); |
| 46 if (_nextCallback == null) { | 46 if (_nextCallback == null) { |
| 47 _scheduleAsyncCallback(callback); | 47 _scheduleAsyncCallback(callback); |
| 48 _lastPriorityCallback = _lastCallback; | 48 _lastPriorityCallback = _lastCallback; |
| 49 } else if (_lastPriorityCallback == null) { | 49 } |
| 50 entry.next = _nextCallback; | 50 else if (_lastPriorityCallback == null) { |
| 51 _nextCallback = _lastPriorityCallback = entry; | 51 entry.next = _nextCallback; |
| 52 } else { | 52 _nextCallback = _lastPriorityCallback = entry; |
| 53 entry.next = _lastPriorityCallback.next; | 53 } |
| 54 _lastPriorityCallback.next = entry; | 54 else { |
| 55 _lastPriorityCallback = entry; | 55 entry.next = _lastPriorityCallback.next; |
| 56 if (entry.next == null) { | 56 _lastPriorityCallback.next = entry; |
| 57 _lastCallback = entry; | 57 _lastPriorityCallback = entry; |
| 58 if (entry.next == null) { |
| 59 _lastCallback = entry; |
| 58 } | 60 } |
| 59 } | 61 } |
| 60 } | 62 } |
| 61 void scheduleMicrotask(void callback()) { | 63 void scheduleMicrotask(void callback()) { |
| 62 if (identical(_ROOT_ZONE, Zone.current)) { | 64 if (identical(_ROOT_ZONE, Zone.current)) { |
| 63 _rootScheduleMicrotask(null, null, DDC$RT.cast(_ROOT_ZONE, dynamic, Zone, | 65 _rootScheduleMicrotask(null, null, DDC$RT.cast(_ROOT_ZONE, dynamic, Zone, "Cas
tGeneral", """line 130, column 40 of dart:async/schedule_microtask.dart: """, _R
OOT_ZONE is Zone, true), callback); |
| 64 "CastGeneral", | 66 return;} |
| 65 """line 130, column 40 of dart:async/schedule_microtask.dart: """, | 67 Zone.current.scheduleMicrotask(Zone.current.bindCallback(callback, runGuarded:
true)); |
| 66 _ROOT_ZONE is Zone, true), callback); | |
| 67 return; | |
| 68 } | |
| 69 Zone.current | |
| 70 .scheduleMicrotask(Zone.current.bindCallback(callback, runGuarded: true)); | |
| 71 } | 68 } |
| 72 class _AsyncRun { | 69 class _AsyncRun {static void _scheduleImmediate(void callback()) { |
| 73 static void _scheduleImmediate(void callback()) { | 70 scheduleImmediateClosure(callback); |
| 74 scheduleImmediateClosure(callback); | |
| 75 } | |
| 76 } | 71 } |
| 72 } |
| OLD | NEW |