| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 'use strict'; | 5 'use strict'; |
| 6 | 6 |
| 7 // This file relies on the fact that the following declaration has been made | 7 // This file relies on the fact that the following declaration has been made |
| 8 // in runtime.js: | 8 // in runtime.js: |
| 9 // var $Array = global.Array; | 9 // var $Array = global.Array; |
| 10 | 10 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 var stepping = DEBUG_IS_ACTIVE && %DebugCallbackSupportsStepping(f); | 52 var stepping = DEBUG_IS_ACTIVE && %DebugCallbackSupportsStepping(f); |
| 53 for (var i = 0; i < length; i++) { | 53 for (var i = 0; i < length; i++) { |
| 54 var element = this[i]; | 54 var element = this[i]; |
| 55 // Prepare break slots for debugger step in. | 55 // Prepare break slots for debugger step in. |
| 56 if (stepping) %DebugPrepareStepInIfStepping(f); | 56 if (stepping) %DebugPrepareStepInIfStepping(f); |
| 57 var new_receiver = needs_wrapper ? ToObject(receiver) : receiver; | 57 var new_receiver = needs_wrapper ? ToObject(receiver) : receiver; |
| 58 %_CallFunction(new_receiver, TO_OBJECT_INLINE(element), i, this, f); | 58 %_CallFunction(new_receiver, TO_OBJECT_INLINE(element), i, this, f); |
| 59 } | 59 } |
| 60 } | 60 } |
| 61 | 61 |
| 62 // ES6 draft 11-14-14, section 22.2.3.13 |
| 63 function NAMEIndexOf(element /* fromIndex */) { // length == 1 |
| 64 if (!%IsTypedArray(this)) { |
| 65 throw MakeTypeError('not_typed_array', []); |
| 66 } |
| 67 |
| 68 // Typed arrays cannot contain undefined elements. |
| 69 if (IS_UNDEFINED(element)) { |
| 70 return -1; |
| 71 } |
| 72 |
| 73 var length = %_TypedArrayGetLength(this); |
| 74 if (length == 0) return -1; |
| 75 |
| 76 var n = (%_ArgumentsLength() > 1) ? ToInteger(%_Arguments(1)) : 0; |
| 77 if (n < 0) { |
| 78 n += length; |
| 79 if (n < 0) n = 0; |
| 80 } |
| 81 |
| 82 for (; n < length; n++) { |
| 83 if (this[n] === element) return n; |
| 84 } |
| 85 return -1; |
| 86 } |
| 87 |
| 88 // ES6 draft 11-14-14, section 22.2.3.16 |
| 89 function NAMELastIndexOf(element /* fromIndex */){ // length == 1 |
| 90 if (!%IsTypedArray(this)) { |
| 91 throw MakeTypeError('not_typed_array', []); |
| 92 } |
| 93 |
| 94 // Typed arrays cannot contain undefined elements. |
| 95 if (IS_UNDEFINED(element)) { |
| 96 return -1; |
| 97 } |
| 98 |
| 99 var length = %_TypedArrayGetLength(this); |
| 100 if (length == 0) return -1; |
| 101 |
| 102 var n = (%_ArgumentsLength() > 1) ? ToInteger(%_Arguments(1)) : length - 1; |
| 103 if (n < 0) { |
| 104 n += length; |
| 105 } else if (n >= length) { |
| 106 n = length - 1; |
| 107 } |
| 108 |
| 109 for (; n >= 0; n--) { |
| 110 if (this[n] === element) return n; |
| 111 } |
| 112 return -1; |
| 113 } |
| 114 |
| 62 // ES6 draft 08-24-14, section 22.2.2.2 | 115 // ES6 draft 08-24-14, section 22.2.2.2 |
| 63 function NAMEOf() { // length == 0 | 116 function NAMEOf() { // length == 0 |
| 64 var length = %_ArgumentsLength(); | 117 var length = %_ArgumentsLength(); |
| 65 var array = new this(length); | 118 var array = new this(length); |
| 66 for (var i = 0; i < length; i++) { | 119 for (var i = 0; i < length; i++) { |
| 67 array[i] = %_Arguments(i); | 120 array[i] = %_Arguments(i); |
| 68 } | 121 } |
| 69 return array; | 122 return array; |
| 70 } | 123 } |
| 71 | 124 |
| 72 endmacro | 125 endmacro |
| 73 | 126 |
| 74 TYPED_ARRAYS(TYPED_ARRAY_HARMONY_ADDITIONS) | 127 TYPED_ARRAYS(TYPED_ARRAY_HARMONY_ADDITIONS) |
| 75 | 128 |
| 76 | 129 |
| 77 function HarmonyTypedArrayExtendPrototypes() { | 130 function HarmonyTypedArrayExtendPrototypes() { |
| 78 macro EXTEND_TYPED_ARRAY(ARRAY_ID, NAME, ELEMENT_SIZE) | 131 macro EXTEND_TYPED_ARRAY(ARRAY_ID, NAME, ELEMENT_SIZE) |
| 79 %CheckIsBootstrapping(); | 132 %CheckIsBootstrapping(); |
| 80 | 133 |
| 81 // Set up non-enumerable functions on the object. | 134 // Set up non-enumerable functions on the object. |
| 82 InstallFunctions(global.NAME, DONT_ENUM | DONT_DELETE | READ_ONLY, $Array( | 135 InstallFunctions(global.NAME, DONT_ENUM | DONT_DELETE | READ_ONLY, $Array( |
| 83 "of", NAMEOf | 136 "of", NAMEOf |
| 84 )); | 137 )); |
| 85 | 138 |
| 86 // Set up non-enumerable functions on the prototype object. | 139 // Set up non-enumerable functions on the prototype object. |
| 87 InstallFunctions(global.NAME.prototype, DONT_ENUM, $Array( | 140 InstallFunctions(global.NAME.prototype, DONT_ENUM | DONT_DELETE | READ_ONLY, $
Array( |
| 88 "forEach", NAMEForEach | 141 "forEach", NAMEForEach, |
| 142 "indexOf", NAMEIndexOf, |
| 143 "lastIndexOf", NAMELastIndexOf |
| 89 )); | 144 )); |
| 90 endmacro | 145 endmacro |
| 91 | 146 |
| 92 TYPED_ARRAYS(EXTEND_TYPED_ARRAY) | 147 TYPED_ARRAYS(EXTEND_TYPED_ARRAY) |
| 93 } | 148 } |
| 94 | 149 |
| 95 HarmonyTypedArrayExtendPrototypes(); | 150 HarmonyTypedArrayExtendPrototypes(); |
| OLD | NEW |