Index: pkg/dev_compiler/lib/js/es6/dart_sdk.js |
diff --git a/pkg/dev_compiler/lib/js/es6/dart_sdk.js b/pkg/dev_compiler/lib/js/es6/dart_sdk.js |
index 21ad7a734a533771dfe684d5d057b20325905923..3a457f0743c67f68e023a3f5e97730529bd326bf 100644 |
--- a/pkg/dev_compiler/lib/js/es6/dart_sdk.js |
+++ b/pkg/dev_compiler/lib/js/es6/dart_sdk.js |
@@ -1712,10 +1712,7 @@ dart.isFunctionSubtype = function(ft1, ft2, isCovariant) { |
return null; |
} |
} |
- if (ret2 === dart.void) return true; |
- if (ret1 === dart.void) { |
- return ret2 === dart.dynamic || ret2 === async.FutureOr; |
- } |
+ if (ret1 === dart.void) return dart._isTop(ret2); |
if (!dart._isSubtype(ret1, ret2, isCovariant)) return null; |
return true; |
}; |
@@ -1736,13 +1733,13 @@ dart._subtypeMemo = function(f) { |
}; |
}; |
dart._isBottom = function(type) { |
- return type == dart.bottom; |
+ return type == dart.bottom || type == core.Null; |
}; |
dart._isTop = function(type) { |
if (dart.getGenericClass(type) === dart.getGenericClass(async.FutureOr)) { |
return dart._isTop(dart.getGenericArgs(type)[0]); |
} |
- return type == core.Object || type == dart.dynamic; |
+ return type == core.Object || type == dart.dynamic || type == dart.void; |
}; |
dart._isSubtype = function(t1, t2, isCovariant) { |
if (t1 === t2) return true; |
@@ -2221,6 +2218,9 @@ dart.instanceOfOrNull = function(obj, type) { |
return false; |
}; |
dart.is = function(obj, type) { |
+ if (obj == null) { |
+ return type == core.Null || dart._isTop(type); |
+ } |
let result = dart.strongInstanceOf(obj, type); |
if (result !== null) return result; |
let actual = dart.getReifiedType(obj); |