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

Unified Diff: pkg/browser/lib/interop.js

Issue 26742008: Revert "Maintain referential integrity of proxy instances in dart:js" (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 2 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:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | sdk/lib/js/dart2js/js_dart2js.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/browser/lib/interop.js
diff --git a/pkg/browser/lib/interop.js b/pkg/browser/lib/interop.js
index 99556fa864252c8a1abca879d9ca9ed853d82d99..8577e4f28b8c30aa67270ff78727da5789d0bea0 100644
--- a/pkg/browser/lib/interop.js
+++ b/pkg/browser/lib/interop.js
@@ -14,7 +14,7 @@ function ReceivePortSync() {
}
// Type for remote proxies to Dart objects with dart2js.
-function DartObject(o) {
+function DartProxy(o) {
this.o = o;
}
@@ -250,27 +250,17 @@ function DartObject(o) {
return Object.keys(this.map).length;
}
- var _dartRefPropertyName = "_$dart_ref";
-
// Adds an object to the table and return an ID for serialization.
- ProxiedObjectTable.prototype.add = function (obj, id) {
- if (id != null) {
- this.map[id] = obj;
- return id;
- } else {
- var ref = obj[_dartRefPropertyName];
- if (ref == null) {
- ref = this.name + '-' + this._nextId++;
- this.map[ref] = obj;
- Object.defineProperty(obj, _dartRefPropertyName, { value: ref });
+ ProxiedObjectTable.prototype.add = function (obj) {
+ for (var ref in this.map) {
+ var o = this.map[ref];
+ if (o === obj) {
+ return ref;
}
- return ref;
}
- }
-
- // Gets the object or function corresponding to this ID.
- ProxiedObjectTable.prototype.contains = function (id) {
- return this.map.hasOwnProperty(id);
+ var ref = this.name + '-' + this._nextId++;
+ this.map[ref] = obj;
+ return ref;
}
// Gets the object or function corresponding to this ID.
@@ -338,7 +328,7 @@ function DartObject(o) {
proxiedObjectTable._initialize()
// Type for remote proxies to Dart objects.
- function DartObject(id, sendPort) {
+ function DartProxy(id, sendPort) {
this.id = id;
this.port = sendPort;
}
@@ -371,7 +361,7 @@ function DartObject(o) {
proxiedObjectTable.add(message),
proxiedObjectTable.sendPort ];
}
- } else if (message instanceof DartObject) {
+ } else if (message instanceof DartProxy) {
// Remote object proxy.
return [ 'objref', message.id, message.port ];
} else {
@@ -412,9 +402,6 @@ function DartObject(o) {
return proxiedObjectTable.get(id);
} else {
// Remote function. Forward to its port.
- if (proxiedObjectTable.contains(id)) {
- return proxiedObjectTable.get(id);
- }
var f = function () {
var args = Array.prototype.slice.apply(arguments);
args.splice(0, 0, this);
@@ -426,12 +413,11 @@ function DartObject(o) {
// Cache the remote id and port.
f._dart_id = id;
f._dart_port = port;
- proxiedObjectTable.add(f, id);
return f;
}
}
- // Creates a DartObject to forwards to the remote object.
+ // Creates a DartProxy to forwards to the remote object.
function deserializeObject(message) {
var id = message[1];
var port = message[2];
@@ -441,12 +427,7 @@ function DartObject(o) {
return proxiedObjectTable.get(id);
} else {
// Remote object.
- if (proxiedObjectTable.contains(id)) {
- return proxiedObjectTable.get(id);
- }
- proxy = new DartObject(id, port);
- proxiedObjectTable.add(proxy, id);
- return proxy;
+ return new DartProxy(id, port);
}
}
« no previous file with comments | « no previous file | sdk/lib/js/dart2js/js_dart2js.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698