Chromium Code Reviews| Index: src/collection.js |
| diff --git a/src/collection.js b/src/collection.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..388f3edc963f1366c2f33723ea646ae39c53f91d |
| --- /dev/null |
| +++ b/src/collection.js |
| @@ -0,0 +1,121 @@ |
| +// Copyright 2011 the V8 project authors. All rights reserved. |
| +// Redistribution and use in source and binary forms, with or without |
| +// modification, are permitted provided that the following conditions are |
| +// met: |
| +// |
| +// * Redistributions of source code must retain the above copyright |
| +// notice, this list of conditions and the following disclaimer. |
| +// * Redistributions in binary form must reproduce the above |
| +// copyright notice, this list of conditions and the following |
| +// disclaimer in the documentation and/or other materials provided |
| +// with the distribution. |
| +// * Neither the name of Google Inc. nor the names of its |
| +// contributors may be used to endorse or promote products derived |
| +// from this software without specific prior written permission. |
| +// |
| +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| + |
| + |
| +// This file relies on the fact that the following declaration has been made |
| +// in runtime.js: |
| +// const $Object = global.Object; |
|
rossberg
2011/10/24 15:44:11
Not needed?
Michael Starzinger
2011/10/25 11:17:26
Done.
|
| +const $Set = global.Set; |
| +const $Map = global.Map; |
| + |
| +//------------------------------------------------------------------- |
| + |
| +function SetConstructor() { |
| + if (%_IsConstructCall()) { |
| + %SetInitialize(this); |
| + } else { |
| + return new $Set(); |
| + } |
| +} |
| + |
| + |
| +function SetAdd(key) { |
| + return %SetAccess(this, key, SET_ACCESS_ADD); |
| +} |
| + |
| + |
| +function SetHas(key) { |
| + return %SetAccess(this, key, SET_ACCESS_HAS); |
| +} |
| + |
| + |
| +function SetDelete(key) { |
| + return %SetAccess(this, key, SET_ACCESS_DELETE); |
| +} |
| + |
| + |
| +function MapConstructor() { |
| + if (%_IsConstructCall()) { |
| + %MapInitialize(this); |
| + } else { |
| + return new $Map(); |
| + } |
| +} |
| + |
| + |
| +function MapGet(key) { |
| + return %MapGet(this, key); |
| +} |
| + |
| + |
| +function MapSet(key, value) { |
| + return %MapSet(this, key, value); |
| +} |
| + |
| + |
| +function MapHas(key) { |
| + return !IS_UNDEFINED(%MapGet(this, key)); |
| +} |
| + |
| + |
| +function MapDelete(key) { |
| + if (!IS_UNDEFINED(%MapGet(this, key))) { |
| + %MapSet(this, key, void 0); |
| + return true; |
| + } else { |
| + return false; |
| + } |
| +} |
| + |
| +// ------------------------------------------------------------------- |
| + |
| +(function () { |
| + %CheckIsBootstrapping(); |
| + |
| + // Set up the Set and Map constructor function. |
| + %SetCode($Set, SetConstructor); |
| + %SetCode($Map, MapConstructor); |
| + |
| + // Set up the constructor property on the Set and Map prototype object. |
| + %SetProperty($Set.prototype, "constructor", $Set, DONT_ENUM); |
| + %SetProperty($Map.prototype, "constructor", $Map, DONT_ENUM); |
| + |
| + // Set up the non-enumerable functions on the Set prototype object. |
| + InstallFunctionsOnHiddenPrototype($Set.prototype, DONT_ENUM, $Array( |
| + "add", SetAdd, |
| + "has", SetHas, |
| + "delete", SetDelete |
| + )); |
| + |
| + // Set up the non-enumerable functions on the Map prototype object. |
| + InstallFunctionsOnHiddenPrototype($Map.prototype, DONT_ENUM, $Array( |
| + "get", MapGet, |
| + "set", MapSet, |
| + "has", MapHas, |
| + "delete", MapDelete |
| + )); |
| +})(); |