Chromium Code Reviews| Index: src/collection-iterator.js |
| diff --git a/src/collection-iterator.js b/src/collection-iterator.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..4d2e4073f7446b743646f7914dabfa10e6c7bffb |
| --- /dev/null |
| +++ b/src/collection-iterator.js |
| @@ -0,0 +1,160 @@ |
| +// Copyright 2014 the V8 project authors. All rights reserved. |
|
adamk
2014/05/29 00:07:14
Nit: I think you can use a short license header fo
|
| +// 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. |
| + |
| +'use strict'; |
| + |
| + |
| +// This file relies on the fact that the following declaration has been made |
| +// in runtime.js: |
| +// var $Set = global.Set; |
| +// var $Map = global.Map; |
| + |
| + |
| +function SetIteratorConstructor(set, kind) { |
| + %SetIteratorInitialize(this, set, kind); |
| +} |
| + |
| + |
| +function SetIteratorNextJS() { |
| + if (!IS_SET_ITERATOR(this)) { |
| + throw MakeTypeError('incompatible_method_receiver', |
| + ['Set Iterator.prototype.next', this]); |
| + } |
| + return %SetIteratorNext(this); |
| +} |
| + |
| + |
| +function SetEntries() { |
| + if (!IS_SET(this)) { |
| + throw MakeTypeError('incompatible_method_receiver', |
| + ['Set.prototype.entries', this]); |
| + } |
| + return new SetIterator(this, ITERATOR_KIND_ENTRIES); |
| +} |
| + |
| + |
| +function SetValues() { |
| + if (!IS_SET(this)) { |
| + throw MakeTypeError('incompatible_method_receiver', |
| + ['Set.prototype.values', this]); |
| + } |
| + return new SetIterator(this, ITERATOR_KIND_VALUES); |
| +} |
| + |
| + |
| +function SetUpSetIterator() { |
| + %CheckIsBootstrapping(); |
| + |
| + %SetCode(SetIterator, SetIteratorConstructor); |
| + %FunctionSetPrototype(SetIterator, new $Object()); |
| + %FunctionSetInstanceClassName(SetIterator, 'Set Iterator'); |
| + InstallFunctions(SetIterator.prototype, DONT_ENUM, $Array( |
| + 'next', SetIteratorNextJS |
| + )); |
| +} |
| + |
| +SetUpSetIterator(); |
| + |
| + |
| +function ExtendSetPrototype() { |
| + %CheckIsBootstrapping(); |
| + |
| + InstallFunctions($Set.prototype, DONT_ENUM, $Array( |
| + 'entries', SetEntries, |
| + 'values', SetValues |
| + )); |
| +} |
| + |
| +ExtendSetPrototype(); |
| + |
| + |
| +function MapIteratorConstructor(map, kind) { |
| + %MapIteratorInitialize(this, map, kind); |
| +} |
| + |
| + |
| +function MapIteratorNextJS() { |
| + if (!IS_MAP_ITERATOR(this)) { |
| + throw MakeTypeError('incompatible_method_receiver', |
| + ['Map Iterator.prototype.next', this]); |
| + } |
| + return %MapIteratorNext(this); |
| +} |
| + |
| + |
| +function MapEntries() { |
| + if (!IS_MAP(this)) { |
| + throw MakeTypeError('incompatible_method_receiver', |
| + ['Map.prototype.entries', this]); |
| + } |
| + return new MapIterator(this, ITERATOR_KIND_ENTRIES); |
| +} |
| + |
| + |
| +function MapKeys() { |
| + if (!IS_MAP(this)) { |
| + throw MakeTypeError('incompatible_method_receiver', |
| + ['Map.prototype.keys', this]); |
| + } |
| + return new MapIterator(this, ITERATOR_KIND_KEYS); |
| +} |
| + |
| + |
| +function MapValues() { |
| + if (!IS_MAP(this)) { |
| + throw MakeTypeError('incompatible_method_receiver', |
| + ['Map.prototype.values', this]); |
| + } |
| + return new MapIterator(this, ITERATOR_KIND_VALUES); |
| +} |
| + |
| + |
| +function SetUpMapIterator() { |
| + %CheckIsBootstrapping(); |
| + |
| + %SetCode(MapIterator, MapIteratorConstructor); |
| + %FunctionSetPrototype(MapIterator, new $Object()); |
| + %FunctionSetInstanceClassName(MapIterator, 'Map Iterator'); |
| + InstallFunctions(MapIterator.prototype, DONT_ENUM, $Array( |
| + 'next', MapIteratorNextJS |
| + )); |
| +} |
| + |
| +SetUpMapIterator(); |
| + |
| + |
| +function ExtendMapPrototype() { |
| + %CheckIsBootstrapping(); |
| + |
| + InstallFunctions($Map.prototype, DONT_ENUM, $Array( |
| + 'entries', MapEntries, |
| + 'keys', MapKeys, |
| + 'values', MapValues |
| + )); |
| +} |
| + |
| +ExtendMapPrototype(); |