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

Unified Diff: lib/runtime/dart_sdk.js

Issue 1979863002: Dont install methods if implementation superclass corresponds to an installed extension class (Closed) Base URL: https://github.com/dart-lang/dev_compiler@master
Patch Set: 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:
Download patch
Index: lib/runtime/dart_sdk.js
diff --git a/lib/runtime/dart_sdk.js b/lib/runtime/dart_sdk.js
index c6b1408d3aea204f15779a53d5c193f9ac01d212..5bd0307aed7422ca4ff038c618f7234c6288d456 100644
--- a/lib/runtime/dart_sdk.js
+++ b/lib/runtime/dart_sdk.js
@@ -202,20 +202,32 @@ dart_library.library('dart_sdk', null, /* Imports */[
};
dart._installProperties = function(jsProto, extProto) {
let coreObjProto = core.Object.prototype;
+ let installedParent = dart._installedDartPeers.get(jsProto.__proto__);
+ dart._installProperties2(jsProto, extProto, coreObjProto, installedParent);
+ dart._installedDartPeers.set(jsProto, extProto);
+ };
+ dart._installProperties2 = function(jsProto, extProto, coreObjProto, installedParent) {
if (extProto === coreObjProto) {
- let names = dart.getOwnPropertyNames(coreObjProto);
- for (let i = 0; i < names.length; ++i) {
- let name = names[i];
- let desc = dart.getOwnPropertyDescriptor(coreObjProto, name);
- dart.defineProperty(jsProto, dart.getExtensionSymbol(name), desc);
- }
+ dart._installPropertiesForObject(jsProto, coreObjProto);
return;
}
if (jsProto !== extProto) {
- dart._installProperties(jsProto, extProto.__proto__);
+ let extParent = extProto.__proto__;
+ if (installedParent !== extParent) {
+ dart._installProperties2(jsProto, extParent, coreObjProto, installedParent);
+ }
}
dart.copyTheseProperties(jsProto, extProto, dart.getOwnPropertySymbols(extProto));
};
+ dart._installPropertiesForObject = function(jsProto, coreObjProto) {
+ let names = dart.getOwnPropertyNames(coreObjProto);
+ for (let i = 0; i < names.length; ++i) {
+ let name = names[i];
+ let desc = dart.getOwnPropertyDescriptor(coreObjProto, name);
+ dart.defineProperty(jsProto, dart.getExtensionSymbol(name), desc);
+ }
+ return;
+ };
dart.registerExtension = function(jsType, dartExtType) {
if (!jsType) return;
let extProto = dartExtType.prototype;
@@ -998,6 +1010,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
dart._staticSig = Symbol("sigStatic");
dart._extensionType = Symbol("extensionType");
dart.dartx = dartx;
+ dart._installedDartPeers = new Map();
dart._jsIterator = Symbol("_jsIterator");
dart._current = Symbol("_current");
dart._AsyncStarStreamController = class _AsyncStarStreamController {
« no previous file with comments | « no previous file | tool/input_sdk/private/ddc_runtime/classes.dart » ('j') | tool/input_sdk/private/ddc_runtime/classes.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698