Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 var $arrayValues; | 5 var $arrayValues; |
| 6 | 6 |
| 7 (function(global, utils) { | 7 (function(global, utils) { |
| 8 | 8 |
| 9 "use strict"; | 9 "use strict"; |
| 10 | 10 |
| 11 %CheckIsBootstrapping(); | 11 %CheckIsBootstrapping(); |
| 12 | 12 |
| 13 // ----------------------------------------------------------------------- | |
| 14 // Imports | |
| 15 | |
| 16 var ArrayIterationKindSymbol = | |
|
rossberg
2015/08/20 12:50:12
I don't feel too strongly, but don't we typically
| |
| 17 utils.GetPrivateSymbol("array_iteration_kind_symbol"); | |
| 18 var ArrayIteratorNextIndexSymbol = | |
| 19 utils.GetPrivateSymbol("array_iterator_next_symbol"); | |
| 20 var ArrayIteratorObjectSymbol = | |
| 21 utils.GetPrivateSymbol("array_iterator_object_symbol"); | |
| 13 var GlobalArray = global.Array; | 22 var GlobalArray = global.Array; |
| 14 | 23 |
| 15 macro TYPED_ARRAYS(FUNCTION) | 24 macro TYPED_ARRAYS(FUNCTION) |
| 16 FUNCTION(Uint8Array) | 25 FUNCTION(Uint8Array) |
| 17 FUNCTION(Int8Array) | 26 FUNCTION(Int8Array) |
| 18 FUNCTION(Uint16Array) | 27 FUNCTION(Uint16Array) |
| 19 FUNCTION(Int16Array) | 28 FUNCTION(Int16Array) |
| 20 FUNCTION(Uint32Array) | 29 FUNCTION(Uint32Array) |
| 21 FUNCTION(Int32Array) | 30 FUNCTION(Int32Array) |
| 22 FUNCTION(Float32Array) | 31 FUNCTION(Float32Array) |
| 23 FUNCTION(Float64Array) | 32 FUNCTION(Float64Array) |
| 24 FUNCTION(Uint8ClampedArray) | 33 FUNCTION(Uint8ClampedArray) |
| 25 endmacro | 34 endmacro |
| 26 | 35 |
| 27 macro COPY_FROM_GLOBAL(NAME) | 36 macro COPY_FROM_GLOBAL(NAME) |
| 28 var GlobalNAME = global.NAME; | 37 var GlobalNAME = global.NAME; |
| 29 endmacro | 38 endmacro |
| 30 | 39 |
| 31 TYPED_ARRAYS(COPY_FROM_GLOBAL) | 40 TYPED_ARRAYS(COPY_FROM_GLOBAL) |
| 32 | 41 |
| 33 var arrayIteratorObjectSymbol = GLOBAL_PRIVATE("ArrayIterator#object"); | 42 // ----------------------------------------------------------------------- |
| 34 var arrayIteratorNextIndexSymbol = GLOBAL_PRIVATE("ArrayIterator#next"); | |
| 35 var arrayIterationKindSymbol = GLOBAL_PRIVATE("ArrayIterator#kind"); | |
| 36 | |
| 37 | 43 |
| 38 function ArrayIterator() {} | 44 function ArrayIterator() {} |
| 39 | 45 |
| 40 | 46 |
| 41 // TODO(wingo): Update section numbers when ES6 has stabilized. The | 47 // TODO(wingo): Update section numbers when ES6 has stabilized. The |
| 42 // section numbers below are already out of date as of the May 2014 | 48 // section numbers below are already out of date as of the May 2014 |
| 43 // draft. | 49 // draft. |
| 44 | 50 |
| 45 | 51 |
| 46 // 15.4.5.1 CreateArrayIterator Abstract Operation | 52 // 15.4.5.1 CreateArrayIterator Abstract Operation |
| 47 function CreateArrayIterator(array, kind) { | 53 function CreateArrayIterator(array, kind) { |
| 48 var object = TO_OBJECT(array); | 54 var object = TO_OBJECT(array); |
| 49 var iterator = new ArrayIterator; | 55 var iterator = new ArrayIterator; |
| 50 SET_PRIVATE(iterator, arrayIteratorObjectSymbol, object); | 56 SET_PRIVATE(iterator, ArrayIteratorObjectSymbol, object); |
| 51 SET_PRIVATE(iterator, arrayIteratorNextIndexSymbol, 0); | 57 SET_PRIVATE(iterator, ArrayIteratorNextIndexSymbol, 0); |
| 52 SET_PRIVATE(iterator, arrayIterationKindSymbol, kind); | 58 SET_PRIVATE(iterator, ArrayIterationKindSymbol, kind); |
| 53 return iterator; | 59 return iterator; |
| 54 } | 60 } |
| 55 | 61 |
| 56 | 62 |
| 57 // 15.19.4.3.4 CreateItrResultObject | 63 // 15.19.4.3.4 CreateItrResultObject |
| 58 function CreateIteratorResultObject(value, done) { | 64 function CreateIteratorResultObject(value, done) { |
| 59 return {value: value, done: done}; | 65 return {value: value, done: done}; |
| 60 } | 66 } |
| 61 | 67 |
| 62 | 68 |
| 63 // 22.1.5.2.2 %ArrayIteratorPrototype%[@@iterator] | 69 // 22.1.5.2.2 %ArrayIteratorPrototype%[@@iterator] |
| 64 function ArrayIteratorIterator() { | 70 function ArrayIteratorIterator() { |
| 65 return this; | 71 return this; |
| 66 } | 72 } |
| 67 | 73 |
| 68 | 74 |
| 69 // 15.4.5.2.2 ArrayIterator.prototype.next( ) | 75 // 15.4.5.2.2 ArrayIterator.prototype.next( ) |
| 70 function ArrayIteratorNext() { | 76 function ArrayIteratorNext() { |
| 71 var iterator = TO_OBJECT(this); | 77 var iterator = TO_OBJECT(this); |
| 72 | 78 |
| 73 if (!HAS_DEFINED_PRIVATE(iterator, arrayIteratorNextIndexSymbol)) { | 79 if (!HAS_DEFINED_PRIVATE(iterator, ArrayIteratorNextIndexSymbol)) { |
| 74 throw MakeTypeError(kIncompatibleMethodReceiver, | 80 throw MakeTypeError(kIncompatibleMethodReceiver, |
| 75 'Array Iterator.prototype.next', this); | 81 'Array Iterator.prototype.next', this); |
| 76 } | 82 } |
| 77 | 83 |
| 78 var array = GET_PRIVATE(iterator, arrayIteratorObjectSymbol); | 84 var array = GET_PRIVATE(iterator, ArrayIteratorObjectSymbol); |
| 79 if (IS_UNDEFINED(array)) { | 85 if (IS_UNDEFINED(array)) { |
| 80 return CreateIteratorResultObject(UNDEFINED, true); | 86 return CreateIteratorResultObject(UNDEFINED, true); |
| 81 } | 87 } |
| 82 | 88 |
| 83 var index = GET_PRIVATE(iterator, arrayIteratorNextIndexSymbol); | 89 var index = GET_PRIVATE(iterator, ArrayIteratorNextIndexSymbol); |
| 84 var itemKind = GET_PRIVATE(iterator, arrayIterationKindSymbol); | 90 var itemKind = GET_PRIVATE(iterator, ArrayIterationKindSymbol); |
| 85 var length = TO_UINT32(array.length); | 91 var length = TO_UINT32(array.length); |
| 86 | 92 |
| 87 // "sparse" is never used. | 93 // "sparse" is never used. |
| 88 | 94 |
| 89 if (index >= length) { | 95 if (index >= length) { |
| 90 SET_PRIVATE(iterator, arrayIteratorObjectSymbol, UNDEFINED); | 96 SET_PRIVATE(iterator, ArrayIteratorObjectSymbol, UNDEFINED); |
| 91 return CreateIteratorResultObject(UNDEFINED, true); | 97 return CreateIteratorResultObject(UNDEFINED, true); |
| 92 } | 98 } |
| 93 | 99 |
| 94 SET_PRIVATE(iterator, arrayIteratorNextIndexSymbol, index + 1); | 100 SET_PRIVATE(iterator, ArrayIteratorNextIndexSymbol, index + 1); |
| 95 | 101 |
| 96 if (itemKind == ITERATOR_KIND_VALUES) { | 102 if (itemKind == ITERATOR_KIND_VALUES) { |
| 97 return CreateIteratorResultObject(array[index], false); | 103 return CreateIteratorResultObject(array[index], false); |
| 98 } | 104 } |
| 99 | 105 |
| 100 if (itemKind == ITERATOR_KIND_ENTRIES) { | 106 if (itemKind == ITERATOR_KIND_ENTRIES) { |
| 101 return CreateIteratorResultObject([index, array[index]], false); | 107 return CreateIteratorResultObject([index, array[index]], false); |
| 102 } | 108 } |
| 103 | 109 |
| 104 return CreateIteratorResultObject(index, false); | 110 return CreateIteratorResultObject(index, false); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 162 to.ArrayIteratorCreateResultObject = CreateIteratorResultObject; | 168 to.ArrayIteratorCreateResultObject = CreateIteratorResultObject; |
| 163 }); | 169 }); |
| 164 | 170 |
| 165 $arrayValues = ArrayValues; | 171 $arrayValues = ArrayValues; |
| 166 | 172 |
| 167 utils.ExportToRuntime(function(to) { | 173 utils.ExportToRuntime(function(to) { |
| 168 to.ArrayValues = ArrayValues; | 174 to.ArrayValues = ArrayValues; |
| 169 }); | 175 }); |
| 170 | 176 |
| 171 }) | 177 }) |
| OLD | NEW |