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