Sprinkle some types on the SDK like the static typing fairy.

When I'm looking at the dynamic call profiles of an internal app test,
I see a bunch coming from the SDK itself. In fact, the top five most
common dynamic call sites are in the SDK.

This fixes four of them. (The fifth is in runUnary() in Zone, and I
don't think can be made typed yet.)

R=vsm@google.com

Review URL: https://codereview.chromium.org/2542723003 .
This commit is contained in:
Bob Nystrom 2016-11-30 17:04:54 -08:00
parent ece7725d90
commit aa749dbd8d
9 changed files with 55 additions and 48 deletions

View file

@ -643,7 +643,6 @@ define([], function() {
let dynamic__Todynamic = () => (dynamic__Todynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic], [dart.dynamic])))();
let dynamicTo_Future = () => (dynamicTo_Future = dart.constFn(dart.definiteFunctionType(async._Future, [dart.dynamic])))();
let _AsyncCallbackTovoid = () => (_AsyncCallbackTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [async._AsyncCallback])))();
let FnTodynamic = () => (FnTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [VoidTovoid()])))();
let _NotificationHandlerToFuture = () => (_NotificationHandlerToFuture = dart.constFn(dart.definiteFunctionType(async.Future, [async._NotificationHandler])))();
let dynamicAndStackTraceTodynamic = () => (dynamicAndStackTraceTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.StackTrace])))();
let dynamic__Tovoid = () => (dynamic__Tovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic], [core.StackTrace])))();
@ -1190,7 +1189,7 @@ define([], function() {
};
const _wrappedType = Symbol('_wrappedType');
dart.unwrapType = function(obj) {
return dart.dload(obj, _wrappedType);
return obj[_wrappedType];
};
dart._getRuntimeType = function(value) {
return value[dart._runtimeType];
@ -17280,6 +17279,8 @@ define([], function() {
return end;
};
dart.fn(_native_typed_data._checkValidRange, intAndintAndintToint());
async._Callback = dart.typedef('_Callback', () => dart.functionType(dart.void, []));
async._TakeCallback = dart.typedef('_TakeCallback', () => dart.functionType(dart.void, [async._Callback]));
async._invokeErrorHandler = function(errorHandler, error, stackTrace) {
if (async.ZoneBinaryCallback.is(errorHandler)) {
return dart.dcall(errorHandler, error, stackTrace);
@ -17717,7 +17718,7 @@ define([], function() {
dart.assert(!dart.test(this[_inCallback]));
let wasInputPaused = this[_isInputPaused];
this[_state] = (dart.notNull(this[_state]) | async._BufferingStreamSubscription._STATE_IN_CALLBACK) >>> 0;
dart.dcall(callback);
callback();
this[_state] = (dart.notNull(this[_state]) & ~async._BufferingStreamSubscription._STATE_IN_CALLBACK) >>> 0;
this[_checkState](wasInputPaused);
}
@ -17798,7 +17799,7 @@ define([], function() {
[_sendData]: dart.definiteFunctionType(dart.void, [T]),
[_sendError]: dart.definiteFunctionType(dart.void, [core.Object, core.StackTrace]),
[_sendDone]: dart.definiteFunctionType(dart.void, []),
[_guardCallback]: dart.definiteFunctionType(dart.void, [dart.dynamic]),
[_guardCallback]: dart.definiteFunctionType(dart.void, [VoidTovoid()]),
[_checkState]: dart.definiteFunctionType(dart.void, [core.bool])
}),
sfields: () => ({
@ -19617,7 +19618,7 @@ define([], function() {
dart.fn(async.scheduleMicrotask, _AsyncCallbackTovoid());
async._AsyncRun = class _AsyncRun extends core.Object {
static _scheduleImmediate(callback) {
dart.dcall(async._AsyncRun._scheduleImmediateClosure, callback);
async._AsyncRun._scheduleImmediateClosure(callback);
}
static _initializeScheduleImmediate() {
if (self.scheduleImmediate != null) {
@ -19631,7 +19632,7 @@ define([], function() {
_isolate_helper.leaveJsAsync();
let f = storedCallback;
storedCallback = null;
dart.dcall(f);
f();
}
dart.fn(internalCallback, dynamicTodynamic$());
;
@ -19642,7 +19643,7 @@ define([], function() {
_isolate_helper.enterJsAsync();
storedCallback = callback;
div.firstChild ? div.removeChild(span) : div.appendChild(span);
}, FnTodynamic());
}, _AsyncCallbackTovoid());
} else if (self.setImmediate != null) {
return async._AsyncRun._scheduleImmediateWithSetImmediate;
}
@ -19673,10 +19674,10 @@ define([], function() {
}
};
dart.setSignature(async._AsyncRun, {
sfields: () => ({_scheduleImmediateClosure: core.Function}),
sfields: () => ({_scheduleImmediateClosure: async._TakeCallback}),
statics: () => ({
_scheduleImmediate: dart.definiteFunctionType(dart.void, [VoidTovoid()]),
_initializeScheduleImmediate: dart.definiteFunctionType(core.Function, []),
_initializeScheduleImmediate: dart.definiteFunctionType(async._TakeCallback, []),
_scheduleImmediateJsOverride: dart.definiteFunctionType(dart.void, [VoidTovoid()]),
_scheduleImmediateWithSetImmediate: dart.definiteFunctionType(dart.void, [VoidTovoid()]),
_scheduleImmediateWithTimer: dart.definiteFunctionType(dart.void, [VoidTovoid()])
@ -20080,7 +20081,7 @@ define([], function() {
subscription[_setPendingEvents](pendingEvents);
subscription[_guardCallback](dart.fn(() => {
async._runGuarded(this.onListen);
}, VoidTodynamic$()));
}, VoidTovoid$()));
return subscription;
}
[_recordCancel](subscription) {

View file

@ -643,7 +643,6 @@
let dynamic__Todynamic = () => (dynamic__Todynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic], [dart.dynamic])))();
let dynamicTo_Future = () => (dynamicTo_Future = dart.constFn(dart.definiteFunctionType(async._Future, [dart.dynamic])))();
let _AsyncCallbackTovoid = () => (_AsyncCallbackTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [async._AsyncCallback])))();
let FnTodynamic = () => (FnTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [VoidTovoid()])))();
let _NotificationHandlerToFuture = () => (_NotificationHandlerToFuture = dart.constFn(dart.definiteFunctionType(async.Future, [async._NotificationHandler])))();
let dynamicAndStackTraceTodynamic = () => (dynamicAndStackTraceTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.StackTrace])))();
let dynamic__Tovoid = () => (dynamic__Tovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic], [core.StackTrace])))();
@ -1190,7 +1189,7 @@
};
const _wrappedType = Symbol('_wrappedType');
dart.unwrapType = function(obj) {
return dart.dload(obj, _wrappedType);
return obj[_wrappedType];
};
dart._getRuntimeType = function(value) {
return value[dart._runtimeType];
@ -17280,6 +17279,8 @@
return end;
};
dart.fn(_native_typed_data._checkValidRange, intAndintAndintToint());
async._Callback = dart.typedef('_Callback', () => dart.functionType(dart.void, []));
async._TakeCallback = dart.typedef('_TakeCallback', () => dart.functionType(dart.void, [async._Callback]));
async._invokeErrorHandler = function(errorHandler, error, stackTrace) {
if (async.ZoneBinaryCallback.is(errorHandler)) {
return dart.dcall(errorHandler, error, stackTrace);
@ -17717,7 +17718,7 @@
dart.assert(!dart.test(this[_inCallback]));
let wasInputPaused = this[_isInputPaused];
this[_state] = (dart.notNull(this[_state]) | async._BufferingStreamSubscription._STATE_IN_CALLBACK) >>> 0;
dart.dcall(callback);
callback();
this[_state] = (dart.notNull(this[_state]) & ~async._BufferingStreamSubscription._STATE_IN_CALLBACK) >>> 0;
this[_checkState](wasInputPaused);
}
@ -17798,7 +17799,7 @@
[_sendData]: dart.definiteFunctionType(dart.void, [T]),
[_sendError]: dart.definiteFunctionType(dart.void, [core.Object, core.StackTrace]),
[_sendDone]: dart.definiteFunctionType(dart.void, []),
[_guardCallback]: dart.definiteFunctionType(dart.void, [dart.dynamic]),
[_guardCallback]: dart.definiteFunctionType(dart.void, [VoidTovoid()]),
[_checkState]: dart.definiteFunctionType(dart.void, [core.bool])
}),
sfields: () => ({
@ -19617,7 +19618,7 @@
dart.fn(async.scheduleMicrotask, _AsyncCallbackTovoid());
async._AsyncRun = class _AsyncRun extends core.Object {
static _scheduleImmediate(callback) {
dart.dcall(async._AsyncRun._scheduleImmediateClosure, callback);
async._AsyncRun._scheduleImmediateClosure(callback);
}
static _initializeScheduleImmediate() {
if (self.scheduleImmediate != null) {
@ -19631,7 +19632,7 @@
_isolate_helper.leaveJsAsync();
let f = storedCallback;
storedCallback = null;
dart.dcall(f);
f();
}
dart.fn(internalCallback, dynamicTodynamic$());
;
@ -19642,7 +19643,7 @@
_isolate_helper.enterJsAsync();
storedCallback = callback;
div.firstChild ? div.removeChild(span) : div.appendChild(span);
}, FnTodynamic());
}, _AsyncCallbackTovoid());
} else if (self.setImmediate != null) {
return async._AsyncRun._scheduleImmediateWithSetImmediate;
}
@ -19673,10 +19674,10 @@
}
};
dart.setSignature(async._AsyncRun, {
sfields: () => ({_scheduleImmediateClosure: core.Function}),
sfields: () => ({_scheduleImmediateClosure: async._TakeCallback}),
statics: () => ({
_scheduleImmediate: dart.definiteFunctionType(dart.void, [VoidTovoid()]),
_initializeScheduleImmediate: dart.definiteFunctionType(core.Function, []),
_initializeScheduleImmediate: dart.definiteFunctionType(async._TakeCallback, []),
_scheduleImmediateJsOverride: dart.definiteFunctionType(dart.void, [VoidTovoid()]),
_scheduleImmediateWithSetImmediate: dart.definiteFunctionType(dart.void, [VoidTovoid()]),
_scheduleImmediateWithTimer: dart.definiteFunctionType(dart.void, [VoidTovoid()])
@ -20080,7 +20081,7 @@
subscription[_setPendingEvents](pendingEvents);
subscription[_guardCallback](dart.fn(() => {
async._runGuarded(this.onListen);
}, VoidTodynamic$()));
}, VoidTovoid$()));
return subscription;
}
[_recordCancel](subscription) {

View file

@ -641,7 +641,6 @@ let ObjectToObject = () => (ObjectToObject = dart.constFn(dart.definiteFunctionT
let dynamic__Todynamic = () => (dynamic__Todynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic], [dart.dynamic])))();
let dynamicTo_Future = () => (dynamicTo_Future = dart.constFn(dart.definiteFunctionType(async._Future, [dart.dynamic])))();
let _AsyncCallbackTovoid = () => (_AsyncCallbackTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [async._AsyncCallback])))();
let FnTodynamic = () => (FnTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [VoidTovoid()])))();
let _NotificationHandlerToFuture = () => (_NotificationHandlerToFuture = dart.constFn(dart.definiteFunctionType(async.Future, [async._NotificationHandler])))();
let dynamicAndStackTraceTodynamic = () => (dynamicAndStackTraceTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.StackTrace])))();
let dynamic__Tovoid = () => (dynamic__Tovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic], [core.StackTrace])))();
@ -1188,7 +1187,7 @@ dart.lazyAnonymousJSType = function(name) {
};
const _wrappedType = Symbol('_wrappedType');
dart.unwrapType = function(obj) {
return dart.dload(obj, _wrappedType);
return obj[_wrappedType];
};
dart._getRuntimeType = function(value) {
return value[dart._runtimeType];
@ -17278,6 +17277,8 @@ _native_typed_data._checkValidRange = function(start, end, length) {
return end;
};
dart.fn(_native_typed_data._checkValidRange, intAndintAndintToint());
async._Callback = dart.typedef('_Callback', () => dart.functionType(dart.void, []));
async._TakeCallback = dart.typedef('_TakeCallback', () => dart.functionType(dart.void, [async._Callback]));
async._invokeErrorHandler = function(errorHandler, error, stackTrace) {
if (async.ZoneBinaryCallback.is(errorHandler)) {
return dart.dcall(errorHandler, error, stackTrace);
@ -17715,7 +17716,7 @@ async._BufferingStreamSubscription$ = dart.generic(T => {
dart.assert(!dart.test(this[_inCallback]));
let wasInputPaused = this[_isInputPaused];
this[_state] = (dart.notNull(this[_state]) | async._BufferingStreamSubscription._STATE_IN_CALLBACK) >>> 0;
dart.dcall(callback);
callback();
this[_state] = (dart.notNull(this[_state]) & ~async._BufferingStreamSubscription._STATE_IN_CALLBACK) >>> 0;
this[_checkState](wasInputPaused);
}
@ -17796,7 +17797,7 @@ async._BufferingStreamSubscription$ = dart.generic(T => {
[_sendData]: dart.definiteFunctionType(dart.void, [T]),
[_sendError]: dart.definiteFunctionType(dart.void, [core.Object, core.StackTrace]),
[_sendDone]: dart.definiteFunctionType(dart.void, []),
[_guardCallback]: dart.definiteFunctionType(dart.void, [dart.dynamic]),
[_guardCallback]: dart.definiteFunctionType(dart.void, [VoidTovoid()]),
[_checkState]: dart.definiteFunctionType(dart.void, [core.bool])
}),
sfields: () => ({
@ -19615,7 +19616,7 @@ async.scheduleMicrotask = function(callback) {
dart.fn(async.scheduleMicrotask, _AsyncCallbackTovoid());
async._AsyncRun = class _AsyncRun extends core.Object {
static _scheduleImmediate(callback) {
dart.dcall(async._AsyncRun._scheduleImmediateClosure, callback);
async._AsyncRun._scheduleImmediateClosure(callback);
}
static _initializeScheduleImmediate() {
if (self.scheduleImmediate != null) {
@ -19629,7 +19630,7 @@ async._AsyncRun = class _AsyncRun extends core.Object {
_isolate_helper.leaveJsAsync();
let f = storedCallback;
storedCallback = null;
dart.dcall(f);
f();
}
dart.fn(internalCallback, dynamicTodynamic());
;
@ -19640,7 +19641,7 @@ async._AsyncRun = class _AsyncRun extends core.Object {
_isolate_helper.enterJsAsync();
storedCallback = callback;
div.firstChild ? div.removeChild(span) : div.appendChild(span);
}, FnTodynamic());
}, _AsyncCallbackTovoid());
} else if (self.setImmediate != null) {
return async._AsyncRun._scheduleImmediateWithSetImmediate;
}
@ -19671,10 +19672,10 @@ async._AsyncRun = class _AsyncRun extends core.Object {
}
};
dart.setSignature(async._AsyncRun, {
sfields: () => ({_scheduleImmediateClosure: core.Function}),
sfields: () => ({_scheduleImmediateClosure: async._TakeCallback}),
statics: () => ({
_scheduleImmediate: dart.definiteFunctionType(dart.void, [VoidTovoid()]),
_initializeScheduleImmediate: dart.definiteFunctionType(core.Function, []),
_initializeScheduleImmediate: dart.definiteFunctionType(async._TakeCallback, []),
_scheduleImmediateJsOverride: dart.definiteFunctionType(dart.void, [VoidTovoid()]),
_scheduleImmediateWithSetImmediate: dart.definiteFunctionType(dart.void, [VoidTovoid()]),
_scheduleImmediateWithTimer: dart.definiteFunctionType(dart.void, [VoidTovoid()])
@ -20078,7 +20079,7 @@ async._StreamController$ = dart.generic(T => {
subscription[_setPendingEvents](pendingEvents);
subscription[_guardCallback](dart.fn(() => {
async._runGuarded(this.onListen);
}, VoidTodynamic()));
}, VoidTovoid()));
return subscription;
}
[_recordCancel](subscription) {

View file

@ -644,7 +644,6 @@ dart_library.library('dart_sdk', null, /* Imports */[
let dynamic__Todynamic = () => (dynamic__Todynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic], [dart.dynamic])))();
let dynamicTo_Future = () => (dynamicTo_Future = dart.constFn(dart.definiteFunctionType(async._Future, [dart.dynamic])))();
let _AsyncCallbackTovoid = () => (_AsyncCallbackTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [async._AsyncCallback])))();
let FnTodynamic = () => (FnTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [VoidTovoid()])))();
let _NotificationHandlerToFuture = () => (_NotificationHandlerToFuture = dart.constFn(dart.definiteFunctionType(async.Future, [async._NotificationHandler])))();
let dynamicAndStackTraceTodynamic = () => (dynamicAndStackTraceTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.StackTrace])))();
let dynamic__Tovoid = () => (dynamic__Tovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic], [core.StackTrace])))();
@ -1191,7 +1190,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
};
const _wrappedType = Symbol('_wrappedType');
dart.unwrapType = function(obj) {
return dart.dload(obj, _wrappedType);
return obj[_wrappedType];
};
dart._getRuntimeType = function(value) {
return value[dart._runtimeType];
@ -17281,6 +17280,8 @@ dart_library.library('dart_sdk', null, /* Imports */[
return end;
};
dart.fn(_native_typed_data._checkValidRange, intAndintAndintToint());
async._Callback = dart.typedef('_Callback', () => dart.functionType(dart.void, []));
async._TakeCallback = dart.typedef('_TakeCallback', () => dart.functionType(dart.void, [async._Callback]));
async._invokeErrorHandler = function(errorHandler, error, stackTrace) {
if (async.ZoneBinaryCallback.is(errorHandler)) {
return dart.dcall(errorHandler, error, stackTrace);
@ -17718,7 +17719,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
dart.assert(!dart.test(this[_inCallback]));
let wasInputPaused = this[_isInputPaused];
this[_state] = (dart.notNull(this[_state]) | async._BufferingStreamSubscription._STATE_IN_CALLBACK) >>> 0;
dart.dcall(callback);
callback();
this[_state] = (dart.notNull(this[_state]) & ~async._BufferingStreamSubscription._STATE_IN_CALLBACK) >>> 0;
this[_checkState](wasInputPaused);
}
@ -17799,7 +17800,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
[_sendData]: dart.definiteFunctionType(dart.void, [T]),
[_sendError]: dart.definiteFunctionType(dart.void, [core.Object, core.StackTrace]),
[_sendDone]: dart.definiteFunctionType(dart.void, []),
[_guardCallback]: dart.definiteFunctionType(dart.void, [dart.dynamic]),
[_guardCallback]: dart.definiteFunctionType(dart.void, [VoidTovoid()]),
[_checkState]: dart.definiteFunctionType(dart.void, [core.bool])
}),
sfields: () => ({
@ -19618,7 +19619,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
dart.fn(async.scheduleMicrotask, _AsyncCallbackTovoid());
async._AsyncRun = class _AsyncRun extends core.Object {
static _scheduleImmediate(callback) {
dart.dcall(async._AsyncRun._scheduleImmediateClosure, callback);
async._AsyncRun._scheduleImmediateClosure(callback);
}
static _initializeScheduleImmediate() {
if (self.scheduleImmediate != null) {
@ -19632,7 +19633,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
_isolate_helper.leaveJsAsync();
let f = storedCallback;
storedCallback = null;
dart.dcall(f);
f();
}
dart.fn(internalCallback, dynamicTodynamic$());
;
@ -19643,7 +19644,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
_isolate_helper.enterJsAsync();
storedCallback = callback;
div.firstChild ? div.removeChild(span) : div.appendChild(span);
}, FnTodynamic());
}, _AsyncCallbackTovoid());
} else if (self.setImmediate != null) {
return async._AsyncRun._scheduleImmediateWithSetImmediate;
}
@ -19674,10 +19675,10 @@ dart_library.library('dart_sdk', null, /* Imports */[
}
};
dart.setSignature(async._AsyncRun, {
sfields: () => ({_scheduleImmediateClosure: core.Function}),
sfields: () => ({_scheduleImmediateClosure: async._TakeCallback}),
statics: () => ({
_scheduleImmediate: dart.definiteFunctionType(dart.void, [VoidTovoid()]),
_initializeScheduleImmediate: dart.definiteFunctionType(core.Function, []),
_initializeScheduleImmediate: dart.definiteFunctionType(async._TakeCallback, []),
_scheduleImmediateJsOverride: dart.definiteFunctionType(dart.void, [VoidTovoid()]),
_scheduleImmediateWithSetImmediate: dart.definiteFunctionType(dart.void, [VoidTovoid()]),
_scheduleImmediateWithTimer: dart.definiteFunctionType(dart.void, [VoidTovoid()])
@ -20081,7 +20082,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
subscription[_setPendingEvents](pendingEvents);
subscription[_guardCallback](dart.fn(() => {
async._runGuarded(this.onListen);
}, VoidTodynamic$()));
}, VoidTovoid$()));
return subscription;
}
[_recordCancel](subscription) {

Binary file not shown.

View file

@ -1314,7 +1314,7 @@ class CodeGenerator extends GeneralizingAstVisitor
jsMethods.add(new JS.Method(
_propertyName('constructor'),
js.call('function(...args) { return this.new.apply(this, args); }')
as JS.Fun));
as JS.Fun));
} else if (ctors.isEmpty) {
jsMethods.add(_emitImplicitConstructor(node, fields, virtualFields));
}
@ -3967,7 +3967,7 @@ class CodeGenerator extends GeneralizingAstVisitor
new JS.Method(
access,
js.call('function() { return #; }', _visitInitializer(node))
as JS.Fun,
as JS.Fun,
isGetter: true),
node,
_findAccessor(element, getter: true)));
@ -4527,7 +4527,7 @@ class CodeGenerator extends GeneralizingAstVisitor
}
result = new PrefixedIdentifier(
_bindValue(scope, 'o', ident.prefix, context: context)
as SimpleIdentifier,
as SimpleIdentifier,
ident.period,
ident.identifier);
} else {

View file

@ -401,7 +401,7 @@ class _BufferingStreamSubscription<T> implements StreamSubscription<T>,
* during the call, and it checks for state changes after the call
* that should cause further callbacks.
*/
void _guardCallback(callback) {
void _guardCallback(void callback()) {
assert(!_inCallback);
bool wasInputPaused = _isInputPaused;
_state |= _STATE_IN_CALLBACK;

View file

@ -16,6 +16,9 @@ import 'dart:_isolate_helper' show
import 'dart:_foreign_helper' show JS;
typedef void _Callback();
typedef void _TakeCallback(_Callback callback);
@patch
class _AsyncRun {
@patch
@ -24,10 +27,10 @@ class _AsyncRun {
}
// Lazily initialized.
static final Function _scheduleImmediateClosure =
static final _TakeCallback _scheduleImmediateClosure =
_initializeScheduleImmediate();
static Function _initializeScheduleImmediate() {
static _TakeCallback _initializeScheduleImmediate() {
// TODO(rnystrom): Not needed by dev_compiler.
// requiresPreamble();
if (JS('', 'self.scheduleImmediate') != null) {
@ -38,7 +41,7 @@ class _AsyncRun {
// Use mutationObservers.
var div = JS('', 'self.document.createElement("div")');
var span = JS('', 'self.document.createElement("span")');
var storedCallback;
_Callback storedCallback;
internalCallback(_) {
leaveJsAsync();

View file

@ -183,7 +183,7 @@ lazyAnonymousJSType(name) {
}
/// Given a WrappedType, return the internal runtime type object.
unwrapType(obj) => obj._wrappedType;
unwrapType(WrappedType obj) => obj._wrappedType;
_getRuntimeType(value) => JS('', '#[#]', value, _runtimeType);
getIsNamedConstructor(value) => JS('', '#[#]', value, isNamedConstructor);