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(); |