Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Unified Diff: tool/input_sdk/lib/async/zone.dart

Issue 1953153002: Update dart:async to match the Dart repo. (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Remove unneeded calls. Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tool/input_sdk/lib/async/timer.dart ('k') | tool/input_sdk/patch/async_patch.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tool/input_sdk/lib/async/zone.dart
diff --git a/tool/input_sdk/lib/async/zone.dart b/tool/input_sdk/lib/async/zone.dart
index 43132d5d36c61428a63b69db04026371ff53d8f3..24f83f8bd8ba69a5ce7468aa031005d93a9d2266 100644
--- a/tool/input_sdk/lib/async/zone.dart
+++ b/tool/input_sdk/lib/async/zone.dart
@@ -4,27 +4,37 @@
part of dart.async;
-typedef dynamic ZoneCallback();
-typedef dynamic ZoneUnaryCallback(arg);
-typedef dynamic ZoneBinaryCallback(arg1, arg2);
-
-typedef dynamic HandleUncaughtErrorHandler(
+typedef R ZoneCallback<R>();
+typedef R ZoneUnaryCallback<R, T>(T arg);
+typedef R ZoneBinaryCallback<R, T1, T2>(T1 arg1, T2 arg2);
+
+// TODO(floitsch): we are abusing generic typedefs as typedefs for generic
+// functions.
+/*ABUSE*/
+typedef R HandleUncaughtErrorHandler<R>(
Zone self, ZoneDelegate parent, Zone zone, error, StackTrace stackTrace);
-typedef dynamic RunHandler(Zone self, ZoneDelegate parent, Zone zone, f());
-typedef dynamic RunUnaryHandler(
- Zone self, ZoneDelegate parent, Zone zone, f(arg), arg);
-typedef dynamic RunBinaryHandler(
- Zone self, ZoneDelegate parent, Zone zone, f(arg1, arg2), arg1, arg2);
-typedef ZoneCallback RegisterCallbackHandler(
- Zone self, ZoneDelegate parent, Zone zone, f());
-typedef ZoneUnaryCallback RegisterUnaryCallbackHandler(
- Zone self, ZoneDelegate parent, Zone zone, f(arg));
-typedef ZoneBinaryCallback RegisterBinaryCallbackHandler(
- Zone self, ZoneDelegate parent, Zone zone, f(arg1, arg2));
+/*ABUSE*/
+typedef R RunHandler<R>(Zone self, ZoneDelegate parent, Zone zone, R f());
+/*ABUSE*/
+typedef R RunUnaryHandler<R, T>(
+ Zone self, ZoneDelegate parent, Zone zone, R f(T arg), T arg);
+/*ABUSE*/
+typedef R RunBinaryHandler<R, T1, T2>(
+ Zone self, ZoneDelegate parent, Zone zone,
+ R f(T1 arg1, T2 arg2), T1 arg1, T2 arg2);
+/*ABUSE*/
+typedef ZoneCallback<R> RegisterCallbackHandler<R>(
+ Zone self, ZoneDelegate parent, Zone zone, R f());
+/*ABUSE*/
+typedef ZoneUnaryCallback<R, T> RegisterUnaryCallbackHandler<R, T>(
+ Zone self, ZoneDelegate parent, Zone zone, R f(T arg));
+/*ABUSE*/
+typedef ZoneBinaryCallback<R, T1, T2> RegisterBinaryCallbackHandler<R, T1, T2>(
+ Zone self, ZoneDelegate parent, Zone zone, R f(T1 arg1, T2 arg2));
typedef AsyncError ErrorCallbackHandler(Zone self, ZoneDelegate parent,
Zone zone, Object error, StackTrace stackTrace);
typedef void ScheduleMicrotaskHandler(
- Zone self, ZoneDelegate parent, Zone zone, f());
+ Zone self, ZoneDelegate parent, Zone zone, void f());
typedef Timer CreateTimerHandler(
Zone self, ZoneDelegate parent, Zone zone, Duration duration, void f());
typedef Timer CreatePeriodicTimerHandler(
@@ -38,18 +48,18 @@ typedef Zone ForkHandler(Zone self, ZoneDelegate parent, Zone zone,
/** Pair of error and stack trace. Returned by [Zone.errorCallback]. */
class AsyncError implements Error {
- final error;
+ final Object error;
final StackTrace stackTrace;
AsyncError(this.error, this.stackTrace);
- String toString() => error.toString();
+ String toString() => '$error';
}
-class _ZoneFunction {
+class _ZoneFunction<T extends Function> {
final _Zone zone;
- final Function function;
+ final T function;
const _ZoneFunction(this.zone, this.function);
}
@@ -77,30 +87,19 @@ abstract class ZoneSpecification {
* Creates a specification with the provided handlers.
*/
const factory ZoneSpecification({
- dynamic handleUncaughtError(Zone self, ZoneDelegate parent, Zone zone,
- error, StackTrace stackTrace),
- dynamic run(Zone self, ZoneDelegate parent, Zone zone, f()),
- dynamic runUnary(
- Zone self, ZoneDelegate parent, Zone zone, f(arg), arg),
- dynamic runBinary(Zone self, ZoneDelegate parent, Zone zone,
- f(arg1, arg2), arg1, arg2),
- ZoneCallback registerCallback(
- Zone self, ZoneDelegate parent, Zone zone, f()),
- ZoneUnaryCallback registerUnaryCallback(
- Zone self, ZoneDelegate parent, Zone zone, f(arg)),
- ZoneBinaryCallback registerBinaryCallback(
- Zone self, ZoneDelegate parent, Zone zone, f(arg1, arg2)),
- AsyncError errorCallback(Zone self, ZoneDelegate parent, Zone zone,
- Object error, StackTrace stackTrace),
- void scheduleMicrotask(
- Zone self, ZoneDelegate parent, Zone zone, f()),
- Timer createTimer(Zone self, ZoneDelegate parent, Zone zone,
- Duration duration, void f()),
- Timer createPeriodicTimer(Zone self, ZoneDelegate parent, Zone zone,
- Duration period, void f(Timer timer)),
- void print(Zone self, ZoneDelegate parent, Zone zone, String line),
- Zone fork(Zone self, ZoneDelegate parent, Zone zone,
- ZoneSpecification specification, Map zoneValues)
+ HandleUncaughtErrorHandler handleUncaughtError,
+ RunHandler run,
+ RunUnaryHandler runUnary,
+ RunBinaryHandler runBinary,
+ RegisterCallbackHandler registerCallback,
+ RegisterUnaryCallbackHandler registerUnaryCallback,
+ RegisterBinaryCallbackHandler registerBinaryCallback,
+ ErrorCallbackHandler errorCallback,
+ ScheduleMicrotaskHandler scheduleMicrotask,
+ CreateTimerHandler createTimer,
+ CreatePeriodicTimerHandler createPeriodicTimer,
+ PrintHandler print,
+ ForkHandler fork
}) = _ZoneSpecification;
/**
@@ -108,60 +107,36 @@ abstract class ZoneSpecification {
* the ones in [other].
*/
factory ZoneSpecification.from(ZoneSpecification other, {
- dynamic handleUncaughtError(Zone self, ZoneDelegate parent, Zone zone,
- error, StackTrace stackTrace): null,
- dynamic run(Zone self, ZoneDelegate parent, Zone zone, f()): null,
- dynamic runUnary(
- Zone self, ZoneDelegate parent, Zone zone, f(arg), arg): null,
- dynamic runBinary(Zone self, ZoneDelegate parent, Zone zone,
- f(arg1, arg2), arg1, arg2): null,
- ZoneCallback registerCallback(
- Zone self, ZoneDelegate parent, Zone zone, f()): null,
- ZoneUnaryCallback registerUnaryCallback(
- Zone self, ZoneDelegate parent, Zone zone, f(arg)): null,
- ZoneBinaryCallback registerBinaryCallback(
- Zone self, ZoneDelegate parent, Zone zone, f(arg1, arg2)): null,
- AsyncError errorCallback(Zone self, ZoneDelegate parent, Zone zone,
- Object error, StackTrace stackTrace),
- void scheduleMicrotask(
- Zone self, ZoneDelegate parent, Zone zone, f()): null,
- Timer createTimer(Zone self, ZoneDelegate parent, Zone zone,
- Duration duration, void f()): null,
- Timer createPeriodicTimer(Zone self, ZoneDelegate parent, Zone zone,
- Duration period, void f(Timer timer)): null,
- void print(Zone self, ZoneDelegate parent, Zone zone, String line): null,
- Zone fork(Zone self, ZoneDelegate parent, Zone zone,
- ZoneSpecification specification,
- Map zoneValues): null
+ HandleUncaughtErrorHandler handleUncaughtError: null,
+ RunHandler run: null,
+ RunUnaryHandler runUnary: null,
+ RunBinaryHandler runBinary: null,
+ RegisterCallbackHandler registerCallback: null,
+ RegisterUnaryCallbackHandler registerUnaryCallback: null,
+ RegisterBinaryCallbackHandler registerBinaryCallback: null,
+ ErrorCallbackHandler errorCallback: null,
+ ScheduleMicrotaskHandler scheduleMicrotask: null,
+ CreateTimerHandler createTimer: null,
+ CreatePeriodicTimerHandler createPeriodicTimer: null,
+ PrintHandler print: null,
+ ForkHandler fork: null
}) {
return new ZoneSpecification(
- handleUncaughtError: handleUncaughtError != null
- ? handleUncaughtError
- : other.handleUncaughtError,
- run: run != null ? run : other.run,
- runUnary: runUnary != null ? runUnary : other.runUnary,
- runBinary: runBinary != null ? runBinary : other.runBinary,
- registerCallback: registerCallback != null
- ? registerCallback
- : other.registerCallback,
- registerUnaryCallback: registerUnaryCallback != null
- ? registerUnaryCallback
- : other.registerUnaryCallback,
- registerBinaryCallback: registerBinaryCallback != null
- ? registerBinaryCallback
- : other.registerBinaryCallback,
- errorCallback: errorCallback != null
- ? errorCallback
- : other.errorCallback,
- scheduleMicrotask: scheduleMicrotask != null
- ? scheduleMicrotask
- : other.scheduleMicrotask,
- createTimer : createTimer != null ? createTimer : other.createTimer,
- createPeriodicTimer: createPeriodicTimer != null
- ? createPeriodicTimer
- : other.createPeriodicTimer,
- print : print != null ? print : other.print,
- fork: fork != null ? fork : other.fork);
+ handleUncaughtError: handleUncaughtError ?? other.handleUncaughtError,
+ run: run ?? other.run,
+ runUnary: runUnary ?? other.runUnary,
+ runBinary: runBinary ?? other.runBinary,
+ registerCallback: registerCallback ?? other.registerCallback,
+ registerUnaryCallback: registerUnaryCallback ??
+ other.registerUnaryCallback,
+ registerBinaryCallback: registerBinaryCallback ??
+ other.registerBinaryCallback,
+ errorCallback: errorCallback ?? other.errorCallback,
+ scheduleMicrotask: scheduleMicrotask ?? other.scheduleMicrotask,
+ createTimer : createTimer ?? other.createTimer,
+ createPeriodicTimer: createPeriodicTimer ?? other.createPeriodicTimer,
+ print : print ?? other.print,
+ fork: fork ?? other.fork);
}
HandleUncaughtErrorHandler get handleUncaughtError;
@@ -203,20 +178,19 @@ class _ZoneSpecification implements ZoneSpecification {
this.fork: null
});
- // TODO(13406): Enable types when dart2js supports it.
- final /*HandleUncaughtErrorHandler*/ handleUncaughtError;
- final /*RunHandler*/ run;
- final /*RunUnaryHandler*/ runUnary;
- final /*RunBinaryHandler*/ runBinary;
- final /*RegisterCallbackHandler*/ registerCallback;
- final /*RegisterUnaryCallbackHandler*/ registerUnaryCallback;
- final /*RegisterBinaryCallbackHandler*/ registerBinaryCallback;
- final /*ErrorCallbackHandler*/ errorCallback;
- final /*ScheduleMicrotaskHandler*/ scheduleMicrotask;
- final /*CreateTimerHandler*/ createTimer;
- final /*CreatePeriodicTimerHandler*/ createPeriodicTimer;
- final /*PrintHandler*/ print;
- final /*ForkHandler*/ fork;
+ final HandleUncaughtErrorHandler handleUncaughtError;
+ final RunHandler run;
+ final RunUnaryHandler runUnary;
+ final RunBinaryHandler runBinary;
+ final RegisterCallbackHandler registerCallback;
+ final RegisterUnaryCallbackHandler registerUnaryCallback;
+ final RegisterBinaryCallbackHandler registerBinaryCallback;
+ final ErrorCallbackHandler errorCallback;
+ final ScheduleMicrotaskHandler scheduleMicrotask;
+ final CreateTimerHandler createTimer;
+ final CreatePeriodicTimerHandler createPeriodicTimer;
+ final PrintHandler print;
+ final ForkHandler fork;
}
/**
@@ -230,15 +204,19 @@ class _ZoneSpecification implements ZoneSpecification {
* directly invoking the parent zone.
*/
abstract class ZoneDelegate {
- dynamic handleUncaughtError(Zone zone, error, StackTrace stackTrace);
- dynamic run(Zone zone, f());
- dynamic runUnary(Zone zone, f(arg), arg);
- dynamic runBinary(Zone zone, f(arg1, arg2), arg1, arg2);
- ZoneCallback registerCallback(Zone zone, f());
- ZoneUnaryCallback registerUnaryCallback(Zone zone, f(arg));
- ZoneBinaryCallback registerBinaryCallback(Zone zone, f(arg1, arg2));
+ /*=R*/ handleUncaughtError/*<R>*/(
+ Zone zone, error, StackTrace stackTrace);
+ /*=R*/ run/*<R>*/(Zone zone, /*=R*/ f());
+ /*=R*/ runUnary/*<R, T>*/(Zone zone, /*=R*/ f(/*=T*/ arg), /*=T*/ arg);
+ /*=R*/ runBinary/*<R, T1, T2>*/(Zone zone,
+ /*=R*/ f(/*=T1*/ arg1, /*=T2*/ arg2), /*=T1*/ arg1, /*=T2*/ arg2);
+ ZoneCallback/*<R>*/ registerCallback/*<R>*/(Zone zone, /*=R*/ f());
+ ZoneUnaryCallback/*<R, T>*/ registerUnaryCallback/*<R, T>*/(
+ Zone zone, /*=R*/ f(/*=T*/ arg));
+ ZoneBinaryCallback/*<R, T1, T2>*/ registerBinaryCallback/*<R, T1, T2>*/(
+ Zone zone, /*=R*/ f(/*=T1*/ arg1, /*=T2*/ arg2));
AsyncError errorCallback(Zone zone, Object error, StackTrace stackTrace);
- void scheduleMicrotask(Zone zone, f());
+ void scheduleMicrotask(Zone zone, void f());
Timer createTimer(Zone zone, Duration duration, void f());
Timer createPeriodicTimer(Zone zone, Duration period, void f(Timer timer));
void print(Zone zone, String line);
@@ -263,7 +241,7 @@ abstract class Zone {
static Zone get current => _current;
- dynamic handleUncaughtError(error, StackTrace stackTrace);
+ /*=R*/ handleUncaughtError/*<R>*/(error, StackTrace stackTrace);
/**
* Returns the parent zone.
@@ -307,18 +285,19 @@ abstract class Zone {
/**
* Executes the given function [f] in this zone.
*/
- dynamic run(f());
+ /*=R*/ run/*<R>*/(/*=R*/ f());
/**
* Executes the given callback [f] with argument [arg] in this zone.
*/
- dynamic runUnary(f(arg), var arg);
+ /*=R*/ runUnary/*<R, T>*/(/*=R*/ f(/*=T*/ arg), /*=T*/ arg);
/**
* Executes the given callback [f] with argument [arg1] and [arg2] in this
* zone.
*/
- dynamic runBinary(f(arg1, arg2), var arg1, var arg2);
+ /*=R*/ runBinary/*<R, T1, T2>*/(
+ /*=R*/ f(/*=T1*/ arg1, /*=T2*/ arg2), /*=T1*/ arg1, /*=T2*/ arg2);
/**
* Executes the given function [f] in this zone.
@@ -326,7 +305,7 @@ abstract class Zone {
* Same as [run] but catches uncaught errors and gives them to
* [handleUncaughtError].
*/
- dynamic runGuarded(f());
+ /*=R*/ runGuarded/*<R>*/(/*=R*/ f());
/**
* Executes the given callback [f] in this zone.
@@ -334,7 +313,7 @@ abstract class Zone {
* Same as [runUnary] but catches uncaught errors and gives them to
* [handleUncaughtError].
*/
- dynamic runUnaryGuarded(f(arg), var arg);
+ /*=R*/ runUnaryGuarded/*<R, T>*/(/*=R*/ f(/*=T*/ arg), /*=T*/ arg);
/**
* Executes the given callback [f] in this zone.
@@ -342,7 +321,8 @@ abstract class Zone {
* Same as [runBinary] but catches uncaught errors and gives them to
* [handleUncaughtError].
*/
- dynamic runBinaryGuarded(f(arg1, arg2), var arg1, var arg2);
+ /*=R*/ runBinaryGuarded/*<R, T1, T2>*/(
+ /*=R*/ f(/*=T1*/ arg1, /*=T2*/ arg2), /*=T1*/ arg1, /*=T2*/ arg2);
/**
* Registers the given callback in this zone.
@@ -356,21 +336,23 @@ abstract class Zone {
* Returns a potentially new callback that should be used in place of the
* given [callback].
*/
- ZoneCallback registerCallback(callback());
+ ZoneCallback/*<R>*/ registerCallback/*<R>*/(/*=R*/ callback());
/**
* Registers the given callback in this zone.
*
* Similar to [registerCallback] but with a unary callback.
*/
- ZoneUnaryCallback registerUnaryCallback(callback(arg));
+ ZoneUnaryCallback/*<R, T>*/ registerUnaryCallback/*<R, T>*/(
+ /*=R*/ callback(/*=T*/ arg));
/**
* Registers the given callback in this zone.
*
* Similar to [registerCallback] but with a unary callback.
*/
- ZoneBinaryCallback registerBinaryCallback(callback(arg1, arg2));
+ ZoneBinaryCallback/*<R, T1, T2>*/ registerBinaryCallback/*<R, T1, T2>*/(
+ /*=R*/ callback(/*=T1*/ arg1, /*=T2*/ arg2));
/**
* Equivalent to:
@@ -380,7 +362,8 @@ abstract class Zone {
* return () => this.run(registered);
*
*/
- ZoneCallback bindCallback(f(), { bool runGuarded: true });
+ ZoneCallback/*<R>*/ bindCallback/*<R>*/(
+ /*=R*/ f(), { bool runGuarded: true });
/**
* Equivalent to:
@@ -389,7 +372,8 @@ abstract class Zone {
* if (runGuarded) return (arg) => this.runUnaryGuarded(registered, arg);
* return (arg) => thin.runUnary(registered, arg);
*/
- ZoneUnaryCallback bindUnaryCallback(f(arg), { bool runGuarded: true });
+ ZoneUnaryCallback/*<R, T>*/ bindUnaryCallback/*<R, T>*/(
+ /*=R*/ f(/*=T*/ arg), { bool runGuarded: true });
/**
* Equivalent to:
@@ -400,11 +384,11 @@ abstract class Zone {
* }
* return (arg1, arg2) => thin.runBinary(registered, arg1, arg2);
*/
- ZoneBinaryCallback bindBinaryCallback(
- f(arg1, arg2), { bool runGuarded: true });
+ ZoneBinaryCallback/*<R, T1, T2>*/ bindBinaryCallback/*<R, T1, T2>*/(
+ /*=R*/ f(/*=T1*/ arg1, /*=T2*/ arg2), { bool runGuarded: true });
/**
- * Intercepts errors when added programmtically to a `Future` or `Stream`.
+ * Intercepts errors when added programmatically to a `Future` or `Stream`.
*
* When caling [Completer.completeError], [Stream.addError],
* or [Future] constructors that take an error or a callback that may throw,
@@ -488,96 +472,125 @@ class _ZoneDelegate implements ZoneDelegate {
_ZoneDelegate(this._delegationTarget);
- dynamic handleUncaughtError(Zone zone, error, StackTrace stackTrace) {
- _ZoneFunction implementation = _delegationTarget._handleUncaughtError;
+ /*=R*/ handleUncaughtError/*<R>*/(
+ Zone zone, error, StackTrace stackTrace) {
+ var implementation = _delegationTarget._handleUncaughtError;
_Zone implZone = implementation.zone;
- return (implementation.function)(
- implZone, _parentDelegate(implZone), zone, error, stackTrace);
+ HandleUncaughtErrorHandler handler = implementation.function;
+ // TODO(floitsch): make this a generic method call on '<R>' once it's
+ // supported. Remove the unnecessary cast.
+ return handler(
+ implZone, _parentDelegate(implZone), zone, error, stackTrace)
+ as Object/*=R*/;
}
- dynamic run(Zone zone, f()) {
- _ZoneFunction implementation = _delegationTarget._run;
+ /*=R*/ run/*<R>*/(Zone zone, /*=R*/ f()) {
+ var implementation = _delegationTarget._run;
_Zone implZone = implementation.zone;
- return (implementation.function)(
- implZone, _parentDelegate(implZone), zone, f);
+ RunHandler handler = implementation.function;
+ // TODO(floitsch): make this a generic method call on '<R>' once it's
+ // supported. Remove the unnecessary cast.
+ return handler(implZone, _parentDelegate(implZone), zone, f)
+ as Object/*=R*/;
}
- dynamic runUnary(Zone zone, f(arg), arg) {
- _ZoneFunction implementation = _delegationTarget._runUnary;
+ /*=R*/ runUnary/*<R, T>*/(Zone zone, /*=R*/ f(/*=T*/ arg), /*=T*/ arg) {
+ var implementation = _delegationTarget._runUnary;
_Zone implZone = implementation.zone;
- return (implementation.function)(
- implZone, _parentDelegate(implZone), zone, f, arg);
+ RunUnaryHandler handler = implementation.function;
+ // TODO(floitsch): make this a generic method call on '<R, T>' once it's
+ // supported. Remove the unnecessary cast.
+ return handler(
+ implZone, _parentDelegate(implZone), zone, f, arg) as Object/*=R*/;
}
- dynamic runBinary(Zone zone, f(arg1, arg2), arg1, arg2) {
- _ZoneFunction implementation = _delegationTarget._runBinary;
+ /*=R*/ runBinary/*<R, T1, T2>*/(Zone zone,
+ /*=R*/ f(/*=T1*/ arg1, /*=T2*/ arg2), /*=T1*/ arg1, /*=T2*/ arg2) {
+ var implementation = _delegationTarget._runBinary;
_Zone implZone = implementation.zone;
- return (implementation.function)(
- implZone, _parentDelegate(implZone), zone, f, arg1, arg2);
+ RunBinaryHandler handler = implementation.function;
+ // TODO(floitsch): make this a generic method call on '<R, T1, T2>' once
+ // it's supported. Remove the unnecessary cast.
+ return handler(
+ implZone, _parentDelegate(implZone), zone, f, arg1, arg2)
+ as Object/*=R*/;
}
- ZoneCallback registerCallback(Zone zone, f()) {
- _ZoneFunction implementation = _delegationTarget._registerCallback;
+ ZoneCallback/*<R>*/ registerCallback/*<R>*/(Zone zone, /*=R*/ f()) {
+ var implementation = _delegationTarget._registerCallback;
_Zone implZone = implementation.zone;
- return (implementation.function)(
- implZone, _parentDelegate(implZone), zone, f);
+ RegisterCallbackHandler handler = implementation.function;
+ // TODO(floitsch): make this a generic method call on '<R>' once it's
+ // supported. Remove the unnecessary cast.
+ return handler(implZone, _parentDelegate(implZone), zone, f)
+ as Object/*=ZoneCallback<R>*/;
}
- ZoneUnaryCallback registerUnaryCallback(Zone zone, f(arg)) {
- _ZoneFunction implementation = _delegationTarget._registerUnaryCallback;
+ ZoneUnaryCallback/*<R, T>*/ registerUnaryCallback/*<R, T>*/(
+ Zone zone, /*=R*/ f(/*=T*/ arg)) {
+ var implementation = _delegationTarget._registerUnaryCallback;
_Zone implZone = implementation.zone;
- return (implementation.function)(
- implZone, _parentDelegate(implZone), zone, f);
+ RegisterUnaryCallbackHandler handler = implementation.function;
+ // TODO(floitsch): make this a generic method call on '<R, T>' once it's
+ // supported. Remove the unnecessary cast.
+ return handler(implZone, _parentDelegate(implZone), zone, f)
+ as Object/*=ZoneUnaryCallback<R, T>*/;
}
- ZoneBinaryCallback registerBinaryCallback(Zone zone, f(arg1, arg2)) {
- _ZoneFunction implementation = _delegationTarget._registerBinaryCallback;
+ ZoneBinaryCallback/*<R, T1, T2>*/ registerBinaryCallback/*<R, T1, T2>*/(
+ Zone zone, /*=R*/ f(/*=T1*/ arg1, /*=T2*/ arg2)) {
+ var implementation = _delegationTarget._registerBinaryCallback;
_Zone implZone = implementation.zone;
- return (implementation.function)(
- implZone, _parentDelegate(implZone), zone, f);
+ RegisterBinaryCallbackHandler handler = implementation.function;
+ // TODO(floitsch): make this a generic method call on '<R, T1, T2>' once
+ // it's supported. Remove the unnecessary cast.
+ return handler(implZone, _parentDelegate(implZone), zone, f)
+ as Object/*=ZoneBinaryCallback<R, T1, T2>*/;
}
AsyncError errorCallback(Zone zone, Object error, StackTrace stackTrace) {
- _ZoneFunction implementation = _delegationTarget._errorCallback;
+ var implementation = _delegationTarget._errorCallback;
_Zone implZone = implementation.zone;
if (identical(implZone, _ROOT_ZONE)) return null;
- return (implementation.function)(implZone, _parentDelegate(implZone), zone,
- error, stackTrace);
+ ErrorCallbackHandler handler = implementation.function;
+ return handler(implZone, _parentDelegate(implZone), zone,
+ error, stackTrace);
}
void scheduleMicrotask(Zone zone, f()) {
- _ZoneFunction implementation = _delegationTarget._scheduleMicrotask;
+ var implementation = _delegationTarget._scheduleMicrotask;
_Zone implZone = implementation.zone;
- (implementation.function)(
- implZone, _parentDelegate(implZone), zone, f);
+ ScheduleMicrotaskHandler handler = implementation.function;
+ handler(implZone, _parentDelegate(implZone), zone, f);
}
Timer createTimer(Zone zone, Duration duration, void f()) {
- _ZoneFunction implementation = _delegationTarget._createTimer;
+ var implementation = _delegationTarget._createTimer;
_Zone implZone = implementation.zone;
- return (implementation.function)(
- implZone, _parentDelegate(implZone), zone, duration, f);
+ CreateTimerHandler handler = implementation.function;
+ return handler(implZone, _parentDelegate(implZone), zone, duration, f);
}
Timer createPeriodicTimer(Zone zone, Duration period, void f(Timer timer)) {
- _ZoneFunction implementation = _delegationTarget._createPeriodicTimer;
+ var implementation = _delegationTarget._createPeriodicTimer;
_Zone implZone = implementation.zone;
- return (implementation.function)(
- implZone, _parentDelegate(implZone), zone, period, f);
+ CreatePeriodicTimerHandler handler = implementation.function;
+ return handler(implZone, _parentDelegate(implZone), zone, period, f);
}
void print(Zone zone, String line) {
- _ZoneFunction implementation = _delegationTarget._print;
+ var implementation = _delegationTarget._print;
_Zone implZone = implementation.zone;
- (implementation.function)(
- implZone, _parentDelegate(implZone), zone, line);
+ PrintHandler handler = implementation.function;
+ handler(implZone, _parentDelegate(implZone), zone, line);
}
Zone fork(Zone zone, ZoneSpecification specification,
Map zoneValues) {
- _ZoneFunction implementation = _delegationTarget._fork;
+ var implementation = _delegationTarget._fork;
_Zone implZone = implementation.zone;
- return (implementation.function)(
+ ForkHandler handler = implementation.function;
+ return handler(
implZone, _parentDelegate(implZone), zone, specification, zoneValues);
}
}
@@ -589,19 +602,19 @@ class _ZoneDelegate implements ZoneDelegate {
abstract class _Zone implements Zone {
const _Zone();
- _ZoneFunction get _runUnary;
- _ZoneFunction get _run;
- _ZoneFunction get _runBinary;
- _ZoneFunction get _registerCallback;
- _ZoneFunction get _registerUnaryCallback;
- _ZoneFunction get _registerBinaryCallback;
- _ZoneFunction get _errorCallback;
- _ZoneFunction get _scheduleMicrotask;
- _ZoneFunction get _createTimer;
- _ZoneFunction get _createPeriodicTimer;
- _ZoneFunction get _print;
- _ZoneFunction get _fork;
- _ZoneFunction get _handleUncaughtError;
+ _ZoneFunction<RunHandler> get _run;
+ _ZoneFunction<RunUnaryHandler> get _runUnary;
+ _ZoneFunction<RunBinaryHandler> get _runBinary;
+ _ZoneFunction<RegisterCallbackHandler> get _registerCallback;
+ _ZoneFunction<RegisterUnaryCallbackHandler> get _registerUnaryCallback;
+ _ZoneFunction<RegisterBinaryCallbackHandler> get _registerBinaryCallback;
+ _ZoneFunction<ErrorCallbackHandler> get _errorCallback;
+ _ZoneFunction<ScheduleMicrotaskHandler> get _scheduleMicrotask;
+ _ZoneFunction<CreateTimerHandler> get _createTimer;
+ _ZoneFunction<CreatePeriodicTimerHandler> get _createPeriodicTimer;
+ _ZoneFunction<PrintHandler> get _print;
+ _ZoneFunction<ForkHandler> get _fork;
+ _ZoneFunction<HandleUncaughtErrorHandler> get _handleUncaughtError;
_Zone get parent;
ZoneDelegate get _delegate;
Map get _map;
@@ -615,19 +628,19 @@ abstract class _Zone implements Zone {
class _CustomZone extends _Zone {
// The actual zone and implementation of each of these
// inheritable zone functions.
- _ZoneFunction _runUnary;
- _ZoneFunction _run;
- _ZoneFunction _runBinary;
- _ZoneFunction _registerCallback;
- _ZoneFunction _registerUnaryCallback;
- _ZoneFunction _registerBinaryCallback;
- _ZoneFunction _errorCallback;
- _ZoneFunction _scheduleMicrotask;
- _ZoneFunction _createTimer;
- _ZoneFunction _createPeriodicTimer;
- _ZoneFunction _print;
- _ZoneFunction _fork;
- _ZoneFunction _handleUncaughtError;
+ _ZoneFunction<RunHandler> _run;
+ _ZoneFunction<RunUnaryHandler> _runUnary;
+ _ZoneFunction<RunBinaryHandler> _runBinary;
+ _ZoneFunction<RegisterCallbackHandler> _registerCallback;
+ _ZoneFunction<RegisterUnaryCallbackHandler> _registerUnaryCallback;
+ _ZoneFunction<RegisterBinaryCallbackHandler> _registerBinaryCallback;
+ _ZoneFunction<ErrorCallbackHandler> _errorCallback;
+ _ZoneFunction<ScheduleMicrotaskHandler> _scheduleMicrotask;
+ _ZoneFunction<CreateTimerHandler> _createTimer;
+ _ZoneFunction<CreatePeriodicTimerHandler> _createPeriodicTimer;
+ _ZoneFunction<PrintHandler> _print;
+ _ZoneFunction<ForkHandler> _fork;
+ _ZoneFunction<HandleUncaughtErrorHandler> _handleUncaughtError;
// A cached delegate to this zone.
ZoneDelegate _delegateCache;
@@ -651,43 +664,50 @@ class _CustomZone extends _Zone {
// specification, so it will never try to access the (null) parent.
// All other zones have a non-null parent.
_run = (specification.run != null)
- ? new _ZoneFunction(this, specification.run)
+ ? new _ZoneFunction<RunHandler>(this, specification.run)
: parent._run;
_runUnary = (specification.runUnary != null)
- ? new _ZoneFunction(this, specification.runUnary)
+ ? new _ZoneFunction<RunUnaryHandler>(this, specification.runUnary)
: parent._runUnary;
_runBinary = (specification.runBinary != null)
- ? new _ZoneFunction(this, specification.runBinary)
+ ? new _ZoneFunction<RunBinaryHandler>(this, specification.runBinary)
: parent._runBinary;
_registerCallback = (specification.registerCallback != null)
- ? new _ZoneFunction(this, specification.registerCallback)
+ ? new _ZoneFunction<RegisterCallbackHandler>(
+ this, specification.registerCallback)
: parent._registerCallback;
_registerUnaryCallback = (specification.registerUnaryCallback != null)
- ? new _ZoneFunction(this, specification.registerUnaryCallback)
+ ? new _ZoneFunction<RegisterUnaryCallbackHandler>(
+ this, specification.registerUnaryCallback)
: parent._registerUnaryCallback;
_registerBinaryCallback = (specification.registerBinaryCallback != null)
- ? new _ZoneFunction(this, specification.registerBinaryCallback)
+ ? new _ZoneFunction<RegisterBinaryCallbackHandler>(
+ this, specification.registerBinaryCallback)
: parent._registerBinaryCallback;
_errorCallback = (specification.errorCallback != null)
- ? new _ZoneFunction(this, specification.errorCallback)
+ ? new _ZoneFunction<ErrorCallbackHandler>(
+ this, specification.errorCallback)
: parent._errorCallback;
_scheduleMicrotask = (specification.scheduleMicrotask != null)
- ? new _ZoneFunction(this, specification.scheduleMicrotask)
+ ? new _ZoneFunction<ScheduleMicrotaskHandler>(
+ this, specification.scheduleMicrotask)
: parent._scheduleMicrotask;
_createTimer = (specification.createTimer != null)
- ? new _ZoneFunction(this, specification.createTimer)
+ ? new _ZoneFunction<CreateTimerHandler>(this, specification.createTimer)
: parent._createTimer;
_createPeriodicTimer = (specification.createPeriodicTimer != null)
- ? new _ZoneFunction(this, specification.createPeriodicTimer)
+ ? new _ZoneFunction<CreatePeriodicTimerHandler>(
+ this, specification.createPeriodicTimer)
: parent._createPeriodicTimer;
_print = (specification.print != null)
- ? new _ZoneFunction(this, specification.print)
+ ? new _ZoneFunction<PrintHandler>(this, specification.print)
: parent._print;
_fork = (specification.fork != null)
- ? new _ZoneFunction(this, specification.fork)
+ ? new _ZoneFunction<ForkHandler>(this, specification.fork)
: parent._fork;
_handleUncaughtError = (specification.handleUncaughtError != null)
- ? new _ZoneFunction(this, specification.handleUncaughtError)
+ ? new _ZoneFunction<HandleUncaughtErrorHandler>(
+ this, specification.handleUncaughtError)
: parent._handleUncaughtError;
}
@@ -699,7 +719,7 @@ class _CustomZone extends _Zone {
*/
Zone get errorZone => _handleUncaughtError.zone;
- dynamic runGuarded(f()) {
+ /*=R*/ runGuarded/*<R>*/(/*=R*/ f()) {
try {
return run(f);
} catch (e, s) {
@@ -707,7 +727,7 @@ class _CustomZone extends _Zone {
}
}
- dynamic runUnaryGuarded(f(arg), arg) {
+ /*=R*/ runUnaryGuarded/*<R, T>*/(/*=R*/ f(/*=T*/ arg), /*=T*/ arg) {
try {
return runUnary(f, arg);
} catch (e, s) {
@@ -715,7 +735,8 @@ class _CustomZone extends _Zone {
}
}
- dynamic runBinaryGuarded(f(arg1, arg2), arg1, arg2) {
+ /*=R*/ runBinaryGuarded/*<R, T1, T2>*/(
+ /*=R*/ f(/*=T1*/ arg1, /*=T2*/ arg2), /*=T1*/ arg1, /*=T2*/ arg2) {
try {
return runBinary(f, arg1, arg2);
} catch (e, s) {
@@ -723,8 +744,9 @@ class _CustomZone extends _Zone {
}
}
- ZoneCallback bindCallback(f(), { bool runGuarded: true }) {
- ZoneCallback registered = registerCallback(f);
+ ZoneCallback/*<R>*/ bindCallback/*<R>*/(
+ /*=R*/ f(), { bool runGuarded: true }) {
+ var registered = registerCallback(f);
if (runGuarded) {
return () => this.runGuarded(registered);
} else {
@@ -732,8 +754,9 @@ class _CustomZone extends _Zone {
}
}
- ZoneUnaryCallback bindUnaryCallback(f(arg), { bool runGuarded: true }) {
- ZoneUnaryCallback registered = registerUnaryCallback(f);
+ ZoneUnaryCallback/*<R, T>*/ bindUnaryCallback/*<R, T>*/(
+ /*=R*/ f(/*=T*/ arg), { bool runGuarded: true }) {
+ var registered = registerUnaryCallback(f);
if (runGuarded) {
return (arg) => this.runUnaryGuarded(registered, arg);
} else {
@@ -741,9 +764,9 @@ class _CustomZone extends _Zone {
}
}
- ZoneBinaryCallback bindBinaryCallback(
- f(arg1, arg2), { bool runGuarded: true }) {
- ZoneBinaryCallback registered = registerBinaryCallback(f);
+ ZoneBinaryCallback/*<R, T1, T2>*/ bindBinaryCallback/*<R, T1, T2>*/(
+ /*=R*/ f(/*=T1*/ arg1, /*=T2*/ arg2), { bool runGuarded: true }) {
+ var registered = registerBinaryCallback(f);
if (runGuarded) {
return (arg1, arg2) => this.runBinaryGuarded(registered, arg1, arg2);
} else {
@@ -772,122 +795,154 @@ class _CustomZone extends _Zone {
// Methods that can be customized by the zone specification.
- dynamic handleUncaughtError(error, StackTrace stackTrace) {
- _ZoneFunction implementation = this._handleUncaughtError;
+ /*=R*/ handleUncaughtError/*<R>*/(error, StackTrace stackTrace) {
+ var implementation = this._handleUncaughtError;
assert(implementation != null);
ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
- return (implementation.function)(
- implementation.zone, parentDelegate, this, error, stackTrace);
+ HandleUncaughtErrorHandler handler = implementation.function;
+ // TODO(floitsch): make this a generic method call on '<R>' once it's
+ // supported. Remove the unnecessary cast.
+ return handler(
+ implementation.zone, parentDelegate, this, error, stackTrace)
+ as Object/*=R*/;
}
Zone fork({ZoneSpecification specification, Map zoneValues}) {
- _ZoneFunction implementation = this._fork;
+ var implementation = this._fork;
assert(implementation != null);
ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
- return (implementation.function)(
- implementation.zone, parentDelegate, this,
- specification, zoneValues);
+ ForkHandler handler = implementation.function;
+ return handler(implementation.zone, parentDelegate, this,
+ specification, zoneValues);
}
- dynamic run(f()) {
- _ZoneFunction implementation = this._run;
+ /*=R*/ run/*<R>*/(/*=R*/ f()) {
+ var implementation = this._run;
assert(implementation != null);
ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
- return (implementation.function)(
- implementation.zone, parentDelegate, this, f);
+ RunHandler handler = implementation.function;
+ // TODO(floitsch): make this a generic method call on '<R>' once it's
+ // supported. Remove the unnecessary cast.
+ return handler(implementation.zone, parentDelegate, this, f)
+ as Object/*=R*/;
}
- dynamic runUnary(f(arg), arg) {
- _ZoneFunction implementation = this._runUnary;
+ /*=R*/ runUnary/*<R, T>*/(/*=R*/ f(/*=T*/ arg), /*=T*/ arg) {
+ var implementation = this._runUnary;
assert(implementation != null);
ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
- return (implementation.function)(
- implementation.zone, parentDelegate, this, f, arg);
+ RunUnaryHandler handler = implementation.function;
+ // TODO(floitsch): make this a generic method call on '<R, T>' once it's
+ // supported. Remove the unnecessary cast.
+ return handler(implementation.zone, parentDelegate, this, f, arg)
+ as Object/*=R*/;
}
- dynamic runBinary(f(arg1, arg2), arg1, arg2) {
- _ZoneFunction implementation = this._runBinary;
+ /*=R*/ runBinary/*<R, T1, T2>*/(
+ /*=R*/ f(/*=T1*/ arg1, /*=T2*/ arg2), /*=T1*/ arg1, /*=T2*/ arg2) {
+ var implementation = this._runBinary;
assert(implementation != null);
ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
- return (implementation.function)(
- implementation.zone, parentDelegate, this, f, arg1, arg2);
+ RunBinaryHandler handler = implementation.function;
+ // TODO(floitsch): make this a generic method call on '<R, T1, T2>' once
+ // it's supported. Remove the unnecessary cast.
+ return handler(
+ implementation.zone, parentDelegate, this, f, arg1, arg2)
+ as Object/*=R*/;
}
- ZoneCallback registerCallback(f()) {
- _ZoneFunction implementation = this._registerCallback;
+ ZoneCallback/*<R>*/ registerCallback/*<R>*/(/*=R*/ callback()) {
+ var implementation = this._registerCallback;
assert(implementation != null);
ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
- return (implementation.function)(
- implementation.zone, parentDelegate, this, f);
+ RegisterCallbackHandler handler = implementation.function;
+ // TODO(floitsch): make this a generic method call on '<R>' once it's
+ // supported. Remove the unnecessary cast.
+ return handler(implementation.zone, parentDelegate, this, callback)
+ as Object/*=ZoneCallback<R>*/;
}
- ZoneUnaryCallback registerUnaryCallback(f(arg)) {
- _ZoneFunction implementation = this._registerUnaryCallback;
+ ZoneUnaryCallback/*<R, T>*/ registerUnaryCallback/*<R, T>*/(
+ /*=R*/ callback(/*=T*/ arg)) {
+ var implementation = this._registerUnaryCallback;
assert(implementation != null);
ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
- return (implementation.function)(
- implementation.zone, parentDelegate, this, f);
+ RegisterUnaryCallbackHandler handler = implementation.function;
+ // TODO(floitsch): make this a generic method call on '<R, T>' once it's
+ // supported. Remove the unnecessary cast.
+ return handler(implementation.zone, parentDelegate, this, callback)
+ as Object/*=ZoneUnaryCallback<R, T>*/;
}
- ZoneBinaryCallback registerBinaryCallback(f(arg1, arg2)) {
- _ZoneFunction implementation = this._registerBinaryCallback;
+ ZoneBinaryCallback/*<R, T1, T2>*/ registerBinaryCallback/*<R, T1, T2>*/(
+ /*=R*/ callback(/*=T1*/ arg1, /*=T2*/ arg2)) {
+ var implementation = this._registerBinaryCallback;
assert(implementation != null);
ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
- return (implementation.function)(
- implementation.zone, parentDelegate, this, f);
+ RegisterBinaryCallbackHandler handler = implementation.function;
+ // TODO(floitsch): make this a generic method call on '<R, T1, T2>' once
+ // it's supported. Remove the unnecessary cast.
+ return handler(implementation.zone, parentDelegate, this, callback)
+ as Object/*=ZoneBinaryCallback<R, T1, T2>*/;
}
AsyncError errorCallback(Object error, StackTrace stackTrace) {
- final _ZoneFunction implementation = this._errorCallback;
+ var implementation = this._errorCallback;
assert(implementation != null);
final Zone implementationZone = implementation.zone;
if (identical(implementationZone, _ROOT_ZONE)) return null;
final ZoneDelegate parentDelegate = _parentDelegate(implementationZone);
- return (implementation.function)(
+ ErrorCallbackHandler handler = implementation.function;
+ return handler(
implementationZone, parentDelegate, this, error, stackTrace);
}
void scheduleMicrotask(void f()) {
- _ZoneFunction implementation = this._scheduleMicrotask;
+ var implementation = this._scheduleMicrotask;
assert(implementation != null);
ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
- return (implementation.function)(
- implementation.zone, parentDelegate, this, f);
+ ScheduleMicrotaskHandler handler = implementation.function;
+ return handler(implementation.zone, parentDelegate, this, f);
}
Timer createTimer(Duration duration, void f()) {
- _ZoneFunction implementation = this._createTimer;
+ var implementation = this._createTimer;
assert(implementation != null);
ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
- return (implementation.function)(
- implementation.zone, parentDelegate, this, duration, f);
+ CreateTimerHandler handler = implementation.function;
+ return handler(implementation.zone, parentDelegate, this, duration, f);
}
Timer createPeriodicTimer(Duration duration, void f(Timer timer)) {
- _ZoneFunction implementation = this._createPeriodicTimer;
+ var implementation = this._createPeriodicTimer;
assert(implementation != null);
ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
- return (implementation.function)(
+ CreatePeriodicTimerHandler handler = implementation.function;
+ return handler(
implementation.zone, parentDelegate, this, duration, f);
}
void print(String line) {
- _ZoneFunction implementation = this._print;
+ var implementation = this._print;
assert(implementation != null);
ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
- return (implementation.function)(
- implementation.zone, parentDelegate, this, line);
+ PrintHandler handler = implementation.function;
+ return handler(implementation.zone, parentDelegate, this, line);
}
}
-void _rootHandleUncaughtError(
+/*=R*/ _rootHandleUncaughtError/*<R>*/(
Zone self, ZoneDelegate parent, Zone zone, error, StackTrace stackTrace) {
_schedulePriorityAsyncCallback(() {
- throw new _UncaughtAsyncError(error, stackTrace);
+ if (error == null) error = new NullThrownError();
+ if (stackTrace == null) throw error;
+ _rethrow(error, stackTrace);
});
}
-dynamic _rootRun(Zone self, ZoneDelegate parent, Zone zone, f()) {
+external void _rethrow(Object error, StackTrace stackTrace);
+
+/*=R*/ _rootRun/*<R>*/(Zone self, ZoneDelegate parent, Zone zone, /*=R*/ f()) {
if (Zone._current == zone) return f();
Zone old = Zone._enter(zone);
@@ -898,7 +953,8 @@ dynamic _rootRun(Zone self, ZoneDelegate parent, Zone zone, f()) {
}
}
-dynamic _rootRunUnary(Zone self, ZoneDelegate parent, Zone zone, f(arg), arg) {
+/*=R*/ _rootRunUnary/*<R, T>*/(Zone self, ZoneDelegate parent, Zone zone,
+ /*=R*/ f(/*=T*/ arg), /*=T*/ arg) {
if (Zone._current == zone) return f(arg);
Zone old = Zone._enter(zone);
@@ -909,8 +965,8 @@ dynamic _rootRunUnary(Zone self, ZoneDelegate parent, Zone zone, f(arg), arg) {
}
}
-dynamic _rootRunBinary(Zone self, ZoneDelegate parent, Zone zone,
- f(arg1, arg2), arg1, arg2) {
+/*=R*/ _rootRunBinary/*<R, T1, T2>*/(Zone self, ZoneDelegate parent, Zone zone,
+ /*=R*/ f(/*=T1*/ arg1, /*=T2*/ arg2), /*=T1*/ arg1, /*=T2*/ arg2) {
if (Zone._current == zone) return f(arg1, arg2);
Zone old = Zone._enter(zone);
@@ -921,18 +977,19 @@ dynamic _rootRunBinary(Zone self, ZoneDelegate parent, Zone zone,
}
}
-ZoneCallback _rootRegisterCallback(
- Zone self, ZoneDelegate parent, Zone zone, f()) {
+ZoneCallback/*<R>*/ _rootRegisterCallback/*<R>*/(
+ Zone self, ZoneDelegate parent, Zone zone, /*=R*/ f()) {
return f;
}
-ZoneUnaryCallback _rootRegisterUnaryCallback(
- Zone self, ZoneDelegate parent, Zone zone, f(arg)) {
+ZoneUnaryCallback/*<R, T>*/ _rootRegisterUnaryCallback/*<R, T>*/(
+ Zone self, ZoneDelegate parent, Zone zone, /*=R*/ f(/*=T*/ arg)) {
return f;
}
-ZoneBinaryCallback _rootRegisterBinaryCallback(
- Zone self, ZoneDelegate parent, Zone zone, f(arg1, arg2)) {
+ZoneBinaryCallback/*<R, T1, T2>*/ _rootRegisterBinaryCallback/*<R, T1, T2>*/(
+ Zone self, ZoneDelegate parent, Zone zone,
+ /*=R*/ f(/*=T1*/ arg1, /*=T2*/ arg2)) {
return f;
}
@@ -943,6 +1000,8 @@ void _rootScheduleMicrotask(Zone self, ZoneDelegate parent, Zone zone, f()) {
if (!identical(_ROOT_ZONE, zone)) {
bool hasErrorHandler = !_ROOT_ZONE.inSameErrorZone(zone);
f = zone.bindCallback(f, runGuarded: hasErrorHandler);
+ // Use root zone as event zone if the function is already bound.
+ zone = _ROOT_ZONE;
}
_scheduleAsyncCallback(f);
}
@@ -959,7 +1018,8 @@ Timer _rootCreatePeriodicTimer(
Zone self, ZoneDelegate parent, Zone zone,
Duration duration, void callback(Timer timer)) {
if (!identical(_ROOT_ZONE, zone)) {
- callback = zone.bindUnaryCallback(callback);
+ // TODO(floitsch): the return type should be 'void'.
+ callback = zone.bindUnaryCallback/*<dynamic, Timer>*/(callback);
}
return Timer._createPeriodicTimer(duration, callback);
}
@@ -999,55 +1059,40 @@ Zone _rootFork(Zone self, ZoneDelegate parent, Zone zone,
return new _CustomZone(zone, specification, valueMap);
}
-class _RootZoneSpecification implements ZoneSpecification {
- HandleUncaughtErrorHandler get handleUncaughtError =>
- _rootHandleUncaughtError;
- RunHandler get run => _rootRun;
- RunUnaryHandler get runUnary => _rootRunUnary;
- RunBinaryHandler get runBinary => _rootRunBinary;
- RegisterCallbackHandler get registerCallback => _rootRegisterCallback;
- RegisterUnaryCallbackHandler get registerUnaryCallback =>
- _rootRegisterUnaryCallback;
- RegisterBinaryCallbackHandler get registerBinaryCallback =>
- _rootRegisterBinaryCallback;
- ErrorCallbackHandler get errorCallback => _rootErrorCallback;
- ScheduleMicrotaskHandler get scheduleMicrotask => _rootScheduleMicrotask;
- CreateTimerHandler get createTimer => _rootCreateTimer;
- CreatePeriodicTimerHandler get createPeriodicTimer =>
- _rootCreatePeriodicTimer;
- PrintHandler get print => _rootPrint;
- ForkHandler get fork => _rootFork;
-}
-
class _RootZone extends _Zone {
const _RootZone();
- _ZoneFunction get _run =>
- const _ZoneFunction(_ROOT_ZONE, _rootRun);
- _ZoneFunction get _runUnary =>
- const _ZoneFunction(_ROOT_ZONE, _rootRunUnary);
- _ZoneFunction get _runBinary =>
- const _ZoneFunction(_ROOT_ZONE, _rootRunBinary);
- _ZoneFunction get _registerCallback =>
- const _ZoneFunction(_ROOT_ZONE, _rootRegisterCallback);
- _ZoneFunction get _registerUnaryCallback =>
- const _ZoneFunction(_ROOT_ZONE, _rootRegisterUnaryCallback);
- _ZoneFunction get _registerBinaryCallback =>
- const _ZoneFunction(_ROOT_ZONE, _rootRegisterBinaryCallback);
- _ZoneFunction get _errorCallback =>
- const _ZoneFunction(_ROOT_ZONE, _rootErrorCallback);
- _ZoneFunction get _scheduleMicrotask =>
- const _ZoneFunction(_ROOT_ZONE, _rootScheduleMicrotask);
- _ZoneFunction get _createTimer =>
- const _ZoneFunction(_ROOT_ZONE, _rootCreateTimer);
- _ZoneFunction get _createPeriodicTimer =>
- const _ZoneFunction(_ROOT_ZONE, _rootCreatePeriodicTimer);
- _ZoneFunction get _print =>
- const _ZoneFunction(_ROOT_ZONE, _rootPrint);
- _ZoneFunction get _fork =>
- const _ZoneFunction(_ROOT_ZONE, _rootFork);
- _ZoneFunction get _handleUncaughtError =>
- const _ZoneFunction(_ROOT_ZONE, _rootHandleUncaughtError);
+ _ZoneFunction<RunHandler> get _run =>
+ const _ZoneFunction<RunHandler>(_ROOT_ZONE, _rootRun);
+ _ZoneFunction<RunUnaryHandler> get _runUnary =>
+ const _ZoneFunction<RunUnaryHandler>(_ROOT_ZONE, _rootRunUnary);
+ _ZoneFunction<RunBinaryHandler> get _runBinary =>
+ const _ZoneFunction<RunBinaryHandler>(_ROOT_ZONE, _rootRunBinary);
+ _ZoneFunction<RegisterCallbackHandler> get _registerCallback =>
+ const _ZoneFunction<RegisterCallbackHandler>(
+ _ROOT_ZONE, _rootRegisterCallback);
+ _ZoneFunction<RegisterUnaryCallbackHandler> get _registerUnaryCallback =>
+ const _ZoneFunction<RegisterUnaryCallbackHandler>(
+ _ROOT_ZONE, _rootRegisterUnaryCallback);
+ _ZoneFunction<RegisterBinaryCallbackHandler> get _registerBinaryCallback =>
+ const _ZoneFunction<RegisterBinaryCallbackHandler>(
+ _ROOT_ZONE, _rootRegisterBinaryCallback);
+ _ZoneFunction<ErrorCallbackHandler> get _errorCallback =>
+ const _ZoneFunction<ErrorCallbackHandler>(_ROOT_ZONE, _rootErrorCallback);
+ _ZoneFunction<ScheduleMicrotaskHandler> get _scheduleMicrotask =>
+ const _ZoneFunction<ScheduleMicrotaskHandler>(
+ _ROOT_ZONE, _rootScheduleMicrotask);
+ _ZoneFunction<CreateTimerHandler> get _createTimer =>
+ const _ZoneFunction<CreateTimerHandler>(_ROOT_ZONE, _rootCreateTimer);
+ _ZoneFunction<CreatePeriodicTimerHandler> get _createPeriodicTimer =>
+ const _ZoneFunction<CreatePeriodicTimerHandler>(_ROOT_ZONE, _rootCreatePeriodicTimer);
+ _ZoneFunction<PrintHandler> get _print =>
+ const _ZoneFunction<PrintHandler>(_ROOT_ZONE, _rootPrint);
+ _ZoneFunction<ForkHandler> get _fork =>
+ const _ZoneFunction<ForkHandler>(_ROOT_ZONE, _rootFork);
+ _ZoneFunction<HandleUncaughtErrorHandler> get _handleUncaughtError =>
+ const _ZoneFunction<HandleUncaughtErrorHandler>(
+ _ROOT_ZONE, _rootHandleUncaughtError);
// The parent zone.
_Zone get parent => null;
@@ -1076,61 +1121,65 @@ class _RootZone extends _Zone {
// Zone interface.
- dynamic runGuarded(f()) {
+ /*=R*/ runGuarded/*<R>*/(/*=R*/ f()) {
try {
if (identical(_ROOT_ZONE, Zone._current)) {
return f();
}
- return _rootRun(null, null, this, f);
+ return _rootRun/*<R>*/(null, null, this, f);
} catch (e, s) {
- return handleUncaughtError(e, s);
+ return handleUncaughtError/*<R>*/(e, s);
}
}
- dynamic runUnaryGuarded(f(arg), arg) {
+ /*=R*/ runUnaryGuarded/*<R, T>*/(/*=R*/ f(/*=T*/ arg), /*=T*/ arg) {
try {
if (identical(_ROOT_ZONE, Zone._current)) {
return f(arg);
}
- return _rootRunUnary(null, null, this, f, arg);
+ return _rootRunUnary/*<R, T>*/(null, null, this, f, arg);
} catch (e, s) {
- return handleUncaughtError(e, s);
+ return handleUncaughtError/*<R>*/(e, s);
}
}
- dynamic runBinaryGuarded(f(arg1, arg2), arg1, arg2) {
+ /*=R*/ runBinaryGuarded/*<R, T1, T2>*/(
+ /*=R*/ f(/*=T1*/ arg1, /*=T2*/ arg2), /*=T1*/ arg1, /*=T2*/ arg2) {
try {
if (identical(_ROOT_ZONE, Zone._current)) {
return f(arg1, arg2);
}
- return _rootRunBinary(null, null, this, f, arg1, arg2);
+ return _rootRunBinary/*<R, T1, T2>*/(null, null, this, f, arg1, arg2);
} catch (e, s) {
- return handleUncaughtError(e, s);
+ return handleUncaughtError/*<R>*/(e, s);
}
}
- ZoneCallback bindCallback(f(), { bool runGuarded: true }) {
+ ZoneCallback/*<R>*/ bindCallback/*<R>*/(
+ /*=R*/ f(), { bool runGuarded: true }) {
if (runGuarded) {
- return () => this.runGuarded(f);
+ return () => this.runGuarded/*<R>*/(f);
} else {
- return () => this.run(f);
+ return () => this.run/*<R>*/(f);
}
}
- ZoneUnaryCallback bindUnaryCallback(f(arg), { bool runGuarded: true }) {
+ ZoneUnaryCallback/*<R, T>*/ bindUnaryCallback/*<R, T>*/(
+ /*=R*/ f(/*=T*/ arg), { bool runGuarded: true }) {
if (runGuarded) {
- return (arg) => this.runUnaryGuarded(f, arg);
+ return (arg) => this.runUnaryGuarded/*<R, T>*/(f, arg);
} else {
- return (arg) => this.runUnary(f, arg);
+ return (arg) => this.runUnary/*<R, T>*/(f, arg);
}
}
- ZoneBinaryCallback bindBinaryCallback(
- f(arg1, arg2), { bool runGuarded: true }) {
+ ZoneBinaryCallback/*<R, T1, T2>*/ bindBinaryCallback/*<R, T1, T2>*/(
+ /*=R*/ f(/*=T1*/ arg1, /*=T2*/ arg2), { bool runGuarded: true }) {
if (runGuarded) {
- return (arg1, arg2) => this.runBinaryGuarded(f, arg1, arg2);
+ return (arg1, arg2) =>
+ this.runBinaryGuarded/*<R, T1, T2>*/(f, arg1, arg2);
} else {
- return (arg1, arg2) => this.runBinary(f, arg1, arg2);
+ return (arg1, arg2) => this.runBinary/*<R, T1, T2>*/(f, arg1, arg2);
}
}
@@ -1138,7 +1187,7 @@ class _RootZone extends _Zone {
// Methods that can be customized by the zone specification.
- dynamic handleUncaughtError(error, StackTrace stackTrace) {
+ /*=R*/ handleUncaughtError/*<R>*/(error, StackTrace stackTrace) {
return _rootHandleUncaughtError(null, null, this, error, stackTrace);
}
@@ -1146,26 +1195,29 @@ class _RootZone extends _Zone {
return _rootFork(null, null, this, specification, zoneValues);
}
- dynamic run(f()) {
+ /*=R*/ run/*<R>*/(/*=R*/ f()) {
if (identical(Zone._current, _ROOT_ZONE)) return f();
return _rootRun(null, null, this, f);
}
- dynamic runUnary(f(arg), arg) {
+ /*=R*/ runUnary/*<R, T>*/(/*=R*/ f(/*=T*/ arg), /*=T*/ arg) {
if (identical(Zone._current, _ROOT_ZONE)) return f(arg);
return _rootRunUnary(null, null, this, f, arg);
}
- dynamic runBinary(f(arg1, arg2), arg1, arg2) {
+ /*=R*/ runBinary/*<R, T1, T2>*/(
+ /*=R*/ f(/*=T1*/ arg1, /*=T2*/ arg2), /*=T1*/ arg1, /*=T2*/ arg2) {
if (identical(Zone._current, _ROOT_ZONE)) return f(arg1, arg2);
return _rootRunBinary(null, null, this, f, arg1, arg2);
}
- ZoneCallback registerCallback(f()) => f;
+ ZoneCallback/*<R>*/ registerCallback/*<R>*/(/*=R*/ f()) => f;
- ZoneUnaryCallback registerUnaryCallback(f(arg)) => f;
+ ZoneUnaryCallback/*<R, T>*/ registerUnaryCallback/*<R, T>*/(
+ /*=R*/ f(/*=T*/ arg)) => f;
- ZoneBinaryCallback registerBinaryCallback(f(arg1, arg2)) => f;
+ ZoneBinaryCallback/*<R, T1, T2>*/ registerBinaryCallback/*<R, T1, T2>*/(
+ /*=R*/ f(/*=T1*/ arg1, /*=T2*/ arg2)) => f;
AsyncError errorCallback(Object error, StackTrace stackTrace) => null;
@@ -1213,7 +1265,7 @@ const _ROOT_ZONE = const _RootZone();
* new Future(() { throw "asynchronous error"; });
* }, onError: print); // Will print "asynchronous error".
*/
-dynamic runZoned(body(),
+/*=R*/ runZoned/*<R>*/(/*=R*/ body(),
{ Map zoneValues,
ZoneSpecification zoneSpecification,
Function onError }) {
@@ -1222,7 +1274,7 @@ dynamic runZoned(body(),
errorHandler = (Zone self, ZoneDelegate parent, Zone zone,
error, StackTrace stackTrace) {
try {
- if (onError is ZoneBinaryCallback) {
+ if (onError is ZoneBinaryCallback<dynamic/*=R*/, dynamic, StackTrace>) {
return self.parent.runBinary(onError, error, stackTrace);
}
return self.parent.runUnary(onError, error);
« no previous file with comments | « tool/input_sdk/lib/async/timer.dart ('k') | tool/input_sdk/patch/async_patch.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698