Index: tool/input_sdk/private/ddc_runtime/classes.dart |
diff --git a/tool/input_sdk/private/ddc_runtime/classes.dart b/tool/input_sdk/private/ddc_runtime/classes.dart |
index 9359acea9e367fcaf83aaec2caa6efa36612ef1e..d8b06e6cd72ca795d814f50db976806ffe237678 100644 |
--- a/tool/input_sdk/private/ddc_runtime/classes.dart |
+++ b/tool/input_sdk/private/ddc_runtime/classes.dart |
@@ -427,11 +427,14 @@ list(obj, elementType) => |
/// Link the extension to the type it's extending as a base class. |
setBaseClass(derived, base) { |
JS('', '#.prototype.__proto__ = #.prototype', derived, base); |
+ // We use __proto__ to track the superclass hierarchy (see isSubtype). |
+ JS('', '#.__proto__ = #', derived, base); |
} |
/// Like [setBaseClass] but for generic extension types, e.g. `JSArray<E>` |
setExtensionBaseClass(derived, base) { |
// Mark the generic type as an extension type. |
JS('', '#.prototype[#] = #', derived, _extensionType, derived); |
- setBaseClass(derived, base); |
+ // Link the prototype objects |
+ JS('', '#.prototype.__proto__ = #.prototype', derived, base); |
} |