static void _chainCoreFuture(_Future source, _Future target) { D.assert(target._mayAddListener); // Not completed, not already chained. while (source._isChained) { source = source._chainSource; } if (source._isComplete) { _FutureListener listeners = target._removeListeners(); target._cloneResult(source); _propagateToListeners(target, listeners); } else { _FutureListener listeners = (_FutureListener)target._resultOrListeners; target._setChained(source); source._prependListeners(listeners); } }