Index: runtime/lib/timer_patch.dart |
diff --git a/runtime/lib/timer_patch.dart b/runtime/lib/timer_patch.dart |
index d27e4e88994504df4b199b2a7e9d973dfb1d58de..10249155da61ce0dff3c0c4a5f3f0b5630cf1965 100644 |
--- a/runtime/lib/timer_patch.dart |
+++ b/runtime/lib/timer_patch.dart |
@@ -2,23 +2,40 @@ |
// for details. All rights reserved. Use of this source code is governed by a |
// BSD-style license that can be found in the LICENSE file. |
+typedef void _TimerCallback0(); |
+typedef void _TimerCallback1(Timer timer); |
+ |
patch class Timer { |
- /* patch */ factory Timer(int milliseconds, void callback(Timer timer)) { |
+ /* patch */ factory Timer(var duration, Function callback) { |
+ // TODO(floitsch): remove these checks when we remove the deprecated |
+ // millisecond argument and the 1-argument callback. Also remove |
+ // the int-test below. |
+ if (callback is! _TimerCallback0 && callback is! _TimerCallback1) { |
+ throw new ArgumentError(callback); |
+ } |
+ int milliseconds = duration is int ? duration : duration.inMilliseconds; |
+ if (milliseconds < 0) milliseconds = 0; |
+ _TimerCallback1 oneArgumentCallback = |
+ callback is _TimerCallback1 ? callback : (_) { callback(); }; |
if (_TimerFactory._factory == null) { |
throw new UnsupportedError("Timer interface not supported."); |
} |
- return _TimerFactory._factory(milliseconds, callback, false); |
+ return _TimerFactory._factory(milliseconds, oneArgumentCallback, false); |
} |
/** |
* Creates a new repeating timer. The [callback] is invoked every |
* [milliseconds] millisecond until cancelled. |
*/ |
- /* patch */ factory Timer.repeating(int milliseconds, |
+ /* patch */ factory Timer.repeating(var duration, |
void callback(Timer timer)) { |
if (_TimerFactory._factory == null) { |
throw new UnsupportedError("Timer interface not supported."); |
} |
+ // TODO(floitsch): remove this check when we remove the deprecated |
+ // millisecond argument. |
+ int milliseconds = duration is int ? duration : duration.inMilliseconds; |
+ if (milliseconds < 0) milliseconds = 0; |
return _TimerFactory._factory(milliseconds, callback, true); |
} |
} |