| Index: src/object-observe.js
|
| diff --git a/src/object-observe.js b/src/object-observe.js
|
| index dcf98d84aed1e66359b2c71d8f648733f7479922..e21ab9c1e126b80566ba4cdbc68961d389f26a34 100644
|
| --- a/src/object-observe.js
|
| +++ b/src/object-observe.js
|
| @@ -30,21 +30,32 @@
|
| var InternalObjectIsFrozen = $Object.isFrozen;
|
| var InternalObjectFreeze = $Object.freeze;
|
|
|
| -var InternalWeakMapProto = {
|
| - __proto__: null,
|
| - set: $WeakMap.prototype.set,
|
| - get: $WeakMap.prototype.get,
|
| - has: $WeakMap.prototype.has
|
| +var objectObservationState = %GetObjectObservationState();
|
| +if (IS_UNDEFINED(objectObservationState.observerInfoMap)) {
|
| + objectObservationState.observerInfoMap = %CreateObjectHashTable();
|
| + objectObservationState.objectInfoMap = %CreateObjectHashTable();
|
| }
|
|
|
| -function createInternalWeakMap() {
|
| - var map = new $WeakMap;
|
| - map.__proto__ = InternalWeakMapProto;
|
| - return map;
|
| +function InternalObjectHashTable(table) {
|
| + this.table = table;
|
| }
|
|
|
| -var observerInfoMap = createInternalWeakMap();
|
| -var objectInfoMap = createInternalWeakMap();
|
| +InternalObjectHashTable.prototype = {
|
| + get: function(key) {
|
| + return %ObjectHashTableGet(this.table, key);
|
| + },
|
| + set: function(key, value) {
|
| + return %ObjectHashTableSet(this.table, key, value);
|
| + },
|
| + has: function(key) {
|
| + return %ObjectHashTableHas(this.table, key);
|
| + }
|
| +};
|
| +
|
| +var observerInfoMap = new InternalObjectHashTable(
|
| + objectObservationState.observerInfoMap);
|
| +var objectInfoMap = new InternalObjectHashTable(
|
| + objectObservationState.observerInfoMap);
|
|
|
| function ObjectObserve(object, callback) {
|
| if (!IS_SPEC_OBJECT(object))
|
| @@ -161,4 +172,4 @@ function SetupObjectObserve() {
|
| ));
|
| }
|
|
|
| -SetupObjectObserve();
|
| +SetupObjectObserve();
|
|
|