Index: dart/sdk/lib/_internal/lib/js_rti.dart |
=================================================================== |
--- dart/sdk/lib/_internal/lib/js_rti.dart (revision 31466) |
+++ dart/sdk/lib/_internal/lib/js_rti.dart (working copy) |
@@ -523,21 +523,18 @@ |
assert(isJsObject(s)); |
assert(isJsObject(t)); |
- return JS('bool', r''' |
- function (t, s, isAssignable) { |
- for (var $name in t) { |
- if (!s.hasOwnProperty($name)) { |
- return false; |
- } |
- var tType = t[$name]; |
- var sType = s[$name]; |
- if (!isAssignable.call$2(sType, tType)) { |
- return false; |
- } |
- } |
- return true; |
- }(#, #, #) |
- ''', t, s, RAW_DART_FUNCTION_REF(isAssignable)); |
+ List names = |
+ JSArray.markFixedList(JS('', 'Object.getOwnPropertyNames(#)', t)); |
+ for (int i = 0; i < names.length; i++) { |
+ var name = names[i]; |
+ if (JS('bool', '!Object.hasOwnProperty.call(#, #)', s, name)) { |
+ return false; |
+ } |
+ var tType = JS('', '#[#]', t, name); |
+ var sType = JS('', '#[#]', s, name); |
+ if (!isAssignable(tType, sType)) return false; |
+ } |
+ return true; |
} |
bool isFunctionSubtype(var s, var t) { |