13ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Copyright 2011 the V8 project authors. All rights reserved. 23ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Redistribution and use in source and binary forms, with or without 33ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// modification, are permitted provided that the following conditions are 43ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// met: 53ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// 63ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// * Redistributions of source code must retain the above copyright 73ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// notice, this list of conditions and the following disclaimer. 83ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// * Redistributions in binary form must reproduce the above 93ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// copyright notice, this list of conditions and the following 103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// disclaimer in the documentation and/or other materials provided 113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// with the distribution. 123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// * Neither the name of Google Inc. nor the names of its 133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// contributors may be used to endorse or promote products derived 143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// from this software without specific prior written permission. 153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// 163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch"use strict"; 293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar $Set = global.Set; 313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar $Map = global.Map; 323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar $WeakMap = global.WeakMap; 333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//------------------------------------------------------------------- 353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Global sentinel to be used instead of undefined keys, which are not 373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// supported internally but required for Harmony sets and maps. 383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar undefined_sentinel = {}; 393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction SetConstructor() { 423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (%_IsConstructCall()) { 433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch %SetInitialize(this); 443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } else { 453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return new $Set(); 463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction SetAdd(key) { 513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (!IS_SET(this)) { 523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch throw MakeTypeError('incompatible_method_receiver', 533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ['Set.prototype.add', this]); 543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (IS_UNDEFINED(key)) { 563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch key = undefined_sentinel; 573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return %SetAdd(this, key); 593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction SetHas(key) { 633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (!IS_SET(this)) { 643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch throw MakeTypeError('incompatible_method_receiver', 653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ['Set.prototype.has', this]); 663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (IS_UNDEFINED(key)) { 683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch key = undefined_sentinel; 693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return %SetHas(this, key); 713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction SetDelete(key) { 753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (!IS_SET(this)) { 763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch throw MakeTypeError('incompatible_method_receiver', 773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ['Set.prototype.delete', this]); 783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (IS_UNDEFINED(key)) { 803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch key = undefined_sentinel; 813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return %SetDelete(this, key); 833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction MapConstructor() { 873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (%_IsConstructCall()) { 883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch %MapInitialize(this); 893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } else { 903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return new $Map(); 913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction MapGet(key) { 963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (!IS_MAP(this)) { 973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch throw MakeTypeError('incompatible_method_receiver', 983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ['Map.prototype.get', this]); 993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (IS_UNDEFINED(key)) { 1013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch key = undefined_sentinel; 1023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return %MapGet(this, key); 1043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction MapSet(key, value) { 1083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (!IS_MAP(this)) { 1093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch throw MakeTypeError('incompatible_method_receiver', 1103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ['Map.prototype.set', this]); 1113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (IS_UNDEFINED(key)) { 1133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch key = undefined_sentinel; 1143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return %MapSet(this, key, value); 1163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction MapHas(key) { 1203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (!IS_MAP(this)) { 1213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch throw MakeTypeError('incompatible_method_receiver', 1223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ['Map.prototype.has', this]); 1233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (IS_UNDEFINED(key)) { 1253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch key = undefined_sentinel; 1263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return !IS_UNDEFINED(%MapGet(this, key)); 1283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction MapDelete(key) { 1323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (!IS_MAP(this)) { 1333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch throw MakeTypeError('incompatible_method_receiver', 1343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ['Map.prototype.delete', this]); 1353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (IS_UNDEFINED(key)) { 1373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch key = undefined_sentinel; 1383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (!IS_UNDEFINED(%MapGet(this, key))) { 1403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch %MapSet(this, key, void 0); 1413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return true; 1423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } else { 1433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return false; 1443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction WeakMapConstructor() { 1493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (%_IsConstructCall()) { 1503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch %WeakMapInitialize(this); 1513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } else { 1523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return new $WeakMap(); 1533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction WeakMapGet(key) { 1583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (!IS_WEAKMAP(this)) { 1593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch throw MakeTypeError('incompatible_method_receiver', 1603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ['WeakMap.prototype.get', this]); 1613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (!IS_SPEC_OBJECT(key)) { 1633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch throw %MakeTypeError('invalid_weakmap_key', [this, key]); 1643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return %WeakMapGet(this, key); 1663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction WeakMapSet(key, value) { 1703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (!IS_WEAKMAP(this)) { 1713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch throw MakeTypeError('incompatible_method_receiver', 1723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ['WeakMap.prototype.set', this]); 1733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (!IS_SPEC_OBJECT(key)) { 1753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch throw %MakeTypeError('invalid_weakmap_key', [this, key]); 1763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return %WeakMapSet(this, key, value); 1783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction WeakMapHas(key) { 1823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (!IS_WEAKMAP(this)) { 1833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch throw MakeTypeError('incompatible_method_receiver', 1843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ['WeakMap.prototype.has', this]); 1853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (!IS_SPEC_OBJECT(key)) { 1873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch throw %MakeTypeError('invalid_weakmap_key', [this, key]); 1883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return !IS_UNDEFINED(%WeakMapGet(this, key)); 1903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction WeakMapDelete(key) { 1943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (!IS_WEAKMAP(this)) { 1953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch throw MakeTypeError('incompatible_method_receiver', 1963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ['WeakMap.prototype.delete', this]); 1973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (!IS_SPEC_OBJECT(key)) { 1993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch throw %MakeTypeError('invalid_weakmap_key', [this, key]); 2003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 2013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (!IS_UNDEFINED(%WeakMapGet(this, key))) { 2023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch %WeakMapSet(this, key, void 0); 2033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return true; 2043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } else { 2053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return false; 2063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 2073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 2083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// ------------------------------------------------------------------- 2103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch(function () { 2123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch %CheckIsBootstrapping(); 2133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Set up the Set and Map constructor function. 2153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch %SetCode($Set, SetConstructor); 2163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch %SetCode($Map, MapConstructor); 2173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Set up the constructor property on the Set and Map prototype object. 2193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch %SetProperty($Set.prototype, "constructor", $Set, DONT_ENUM); 2203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch %SetProperty($Map.prototype, "constructor", $Map, DONT_ENUM); 2213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Set up the non-enumerable functions on the Set prototype object. 2233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch InstallFunctions($Set.prototype, DONT_ENUM, $Array( 2243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch "add", SetAdd, 2253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch "has", SetHas, 2263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch "delete", SetDelete 2273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch )); 2283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Set up the non-enumerable functions on the Map prototype object. 2303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch InstallFunctions($Map.prototype, DONT_ENUM, $Array( 2313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch "get", MapGet, 2323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch "set", MapSet, 2333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch "has", MapHas, 2343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch "delete", MapDelete 2353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch )); 2363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Set up the WeakMap constructor function. 2383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch %SetCode($WeakMap, WeakMapConstructor); 2393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Set up the constructor property on the WeakMap prototype object. 2413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch %SetProperty($WeakMap.prototype, "constructor", $WeakMap, DONT_ENUM); 2423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Set up the non-enumerable functions on the WeakMap prototype object. 2443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch InstallFunctions($WeakMap.prototype, DONT_ENUM, $Array( 2453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch "get", WeakMapGet, 2463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch "set", WeakMapSet, 2473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch "has", WeakMapHas, 2483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch "delete", WeakMapDelete 2493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch )); 2503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch})(); 251