| Index: src/weak_collection.js
|
| diff --git a/src/collection.js b/src/weak_collection.js
|
| similarity index 58%
|
| copy from src/collection.js
|
| copy to src/weak_collection.js
|
| index 1f7aef4f0da6b02cf88974dd551992afe07105fc..81d4ab536e68b3184d2d386df6a192ba591d3fae 100644
|
| --- a/src/collection.js
|
| +++ b/src/weak_collection.js
|
| @@ -31,206 +31,9 @@
|
| // in runtime.js:
|
| // var $Array = global.Array;
|
|
|
| -var $Set = global.Set;
|
| -var $Map = global.Map;
|
| var $WeakMap = global.WeakMap;
|
| var $WeakSet = global.WeakSet;
|
|
|
| -// Global sentinel to be used instead of undefined keys, which are not
|
| -// supported internally but required for Harmony sets and maps.
|
| -var undefined_sentinel = {};
|
| -
|
| -
|
| -// Map and Set uses SameValueZero which means that +0 and -0 should be treated
|
| -// as the same value.
|
| -function NormalizeKey(key) {
|
| - if (IS_UNDEFINED(key)) {
|
| - return undefined_sentinel;
|
| - }
|
| -
|
| - if (key === 0) {
|
| - return 0;
|
| - }
|
| -
|
| - return key;
|
| -}
|
| -
|
| -
|
| -// -------------------------------------------------------------------
|
| -// Harmony Set
|
| -
|
| -function SetConstructor() {
|
| - if (%_IsConstructCall()) {
|
| - %SetInitialize(this);
|
| - } else {
|
| - throw MakeTypeError('constructor_not_function', ['Set']);
|
| - }
|
| -}
|
| -
|
| -
|
| -function SetAdd(key) {
|
| - if (!IS_SET(this)) {
|
| - throw MakeTypeError('incompatible_method_receiver',
|
| - ['Set.prototype.add', this]);
|
| - }
|
| - return %SetAdd(this, NormalizeKey(key));
|
| -}
|
| -
|
| -
|
| -function SetHas(key) {
|
| - if (!IS_SET(this)) {
|
| - throw MakeTypeError('incompatible_method_receiver',
|
| - ['Set.prototype.has', this]);
|
| - }
|
| - return %SetHas(this, NormalizeKey(key));
|
| -}
|
| -
|
| -
|
| -function SetDelete(key) {
|
| - if (!IS_SET(this)) {
|
| - throw MakeTypeError('incompatible_method_receiver',
|
| - ['Set.prototype.delete', this]);
|
| - }
|
| - key = NormalizeKey(key);
|
| - if (%SetHas(this, key)) {
|
| - %SetDelete(this, key);
|
| - return true;
|
| - } else {
|
| - return false;
|
| - }
|
| -}
|
| -
|
| -
|
| -function SetGetSize() {
|
| - if (!IS_SET(this)) {
|
| - throw MakeTypeError('incompatible_method_receiver',
|
| - ['Set.prototype.size', this]);
|
| - }
|
| - return %SetGetSize(this);
|
| -}
|
| -
|
| -
|
| -function SetClear() {
|
| - if (!IS_SET(this)) {
|
| - throw MakeTypeError('incompatible_method_receiver',
|
| - ['Set.prototype.clear', this]);
|
| - }
|
| - // Replace the internal table with a new empty table.
|
| - %SetInitialize(this);
|
| -}
|
| -
|
| -
|
| -// -------------------------------------------------------------------
|
| -
|
| -function SetUpSet() {
|
| - %CheckIsBootstrapping();
|
| -
|
| - %SetCode($Set, SetConstructor);
|
| - %FunctionSetPrototype($Set, new $Object());
|
| - %SetProperty($Set.prototype, "constructor", $Set, DONT_ENUM);
|
| -
|
| - // Set up the non-enumerable functions on the Set prototype object.
|
| - InstallGetter($Set.prototype, "size", SetGetSize);
|
| - InstallFunctions($Set.prototype, DONT_ENUM, $Array(
|
| - "add", SetAdd,
|
| - "has", SetHas,
|
| - "delete", SetDelete,
|
| - "clear", SetClear
|
| - ));
|
| -}
|
| -
|
| -SetUpSet();
|
| -
|
| -
|
| -// -------------------------------------------------------------------
|
| -// Harmony Map
|
| -
|
| -function MapConstructor() {
|
| - if (%_IsConstructCall()) {
|
| - %MapInitialize(this);
|
| - } else {
|
| - throw MakeTypeError('constructor_not_function', ['Map']);
|
| - }
|
| -}
|
| -
|
| -
|
| -function MapGet(key) {
|
| - if (!IS_MAP(this)) {
|
| - throw MakeTypeError('incompatible_method_receiver',
|
| - ['Map.prototype.get', this]);
|
| - }
|
| - return %MapGet(this, NormalizeKey(key));
|
| -}
|
| -
|
| -
|
| -function MapSet(key, value) {
|
| - if (!IS_MAP(this)) {
|
| - throw MakeTypeError('incompatible_method_receiver',
|
| - ['Map.prototype.set', this]);
|
| - }
|
| - return %MapSet(this, NormalizeKey(key), value);
|
| -}
|
| -
|
| -
|
| -function MapHas(key) {
|
| - if (!IS_MAP(this)) {
|
| - throw MakeTypeError('incompatible_method_receiver',
|
| - ['Map.prototype.has', this]);
|
| - }
|
| - return %MapHas(this, NormalizeKey(key));
|
| -}
|
| -
|
| -
|
| -function MapDelete(key) {
|
| - if (!IS_MAP(this)) {
|
| - throw MakeTypeError('incompatible_method_receiver',
|
| - ['Map.prototype.delete', this]);
|
| - }
|
| - return %MapDelete(this, NormalizeKey(key));
|
| -}
|
| -
|
| -
|
| -function MapGetSize() {
|
| - if (!IS_MAP(this)) {
|
| - throw MakeTypeError('incompatible_method_receiver',
|
| - ['Map.prototype.size', this]);
|
| - }
|
| - return %MapGetSize(this);
|
| -}
|
| -
|
| -
|
| -function MapClear() {
|
| - if (!IS_MAP(this)) {
|
| - throw MakeTypeError('incompatible_method_receiver',
|
| - ['Map.prototype.clear', this]);
|
| - }
|
| - // Replace the internal table with a new empty table.
|
| - %MapInitialize(this);
|
| -}
|
| -
|
| -
|
| -// -------------------------------------------------------------------
|
| -
|
| -function SetUpMap() {
|
| - %CheckIsBootstrapping();
|
| -
|
| - %SetCode($Map, MapConstructor);
|
| - %FunctionSetPrototype($Map, new $Object());
|
| - %SetProperty($Map.prototype, "constructor", $Map, DONT_ENUM);
|
| -
|
| - // Set up the non-enumerable functions on the Map prototype object.
|
| - InstallGetter($Map.prototype, "size", MapGetSize);
|
| - InstallFunctions($Map.prototype, DONT_ENUM, $Array(
|
| - "get", MapGet,
|
| - "set", MapSet,
|
| - "has", MapHas,
|
| - "delete", MapDelete,
|
| - "clear", MapClear
|
| - ));
|
| -}
|
| -
|
| -SetUpMap();
|
| -
|
|
|
| // -------------------------------------------------------------------
|
| // Harmony WeakMap
|
|
|