Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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 #include "src/builtins/builtins-utils.h" | 5 #include "src/builtins/builtins-utils.h" |
| 6 #include "src/builtins/builtins.h" | 6 #include "src/builtins/builtins.h" |
| 7 #include "src/counters.h" | 7 #include "src/counters.h" |
| 8 #include "src/elements.h" | 8 #include "src/elements.h" |
| 9 #include "src/objects-inl.h" | 9 #include "src/objects-inl.h" |
| 10 | 10 |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 40 return relative < 0 ? std::max<int64_t>(relative + maximum, minimum) | 40 return relative < 0 ? std::max<int64_t>(relative + maximum, minimum) |
| 41 : std::min<int64_t>(relative, maximum); | 41 : std::min<int64_t>(relative, maximum); |
| 42 } | 42 } |
| 43 | 43 |
| 44 } // namespace | 44 } // namespace |
| 45 | 45 |
| 46 BUILTIN(TypedArrayPrototypeCopyWithin) { | 46 BUILTIN(TypedArrayPrototypeCopyWithin) { |
| 47 HandleScope scope(isolate); | 47 HandleScope scope(isolate); |
| 48 | 48 |
| 49 Handle<JSTypedArray> array; | 49 Handle<JSTypedArray> array; |
| 50 const char* method = "%TypedArray%.prototype.copyWithin"; | 50 const char* method = "TypedArray.prototype.copyWithin"; |
|
adamk
2017/03/27 19:48:20
Why did this change? "%TypedArray%" is the spec na
Choongwoo Han
2017/03/28 09:50:58
Done.
| |
| 51 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 51 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 52 isolate, array, JSTypedArray::Validate(isolate, args.receiver(), method)); | 52 isolate, array, JSTypedArray::Validate(isolate, args.receiver(), method)); |
| 53 | 53 |
| 54 if (V8_UNLIKELY(array->WasNeutered())) return *array; | |
| 55 | |
| 56 int64_t len = array->length_value(); | 54 int64_t len = array->length_value(); |
| 57 int64_t to = 0; | 55 int64_t to = 0; |
| 58 int64_t from = 0; | 56 int64_t from = 0; |
| 59 int64_t final = len; | 57 int64_t final = len; |
| 60 | 58 |
| 61 if (V8_LIKELY(args.length() > 1)) { | 59 if (V8_LIKELY(args.length() > 1)) { |
| 62 Handle<Object> num; | 60 Handle<Object> num; |
| 63 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 61 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 64 isolate, num, Object::ToInteger(isolate, args.at<Object>(1))); | 62 isolate, num, Object::ToInteger(isolate, args.at<Object>(1))); |
| 65 to = CapRelativeIndex(num, 0, len); | 63 to = CapRelativeIndex(num, 0, len); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 105 uint8_t* data = static_cast<uint8_t*>(elements->DataPtr()); | 103 uint8_t* data = static_cast<uint8_t*>(elements->DataPtr()); |
| 106 std::memmove(data + to, data + from, count); | 104 std::memmove(data + to, data + from, count); |
| 107 | 105 |
| 108 return *array; | 106 return *array; |
| 109 } | 107 } |
| 110 | 108 |
| 111 BUILTIN(TypedArrayPrototypeFill) { | 109 BUILTIN(TypedArrayPrototypeFill) { |
| 112 HandleScope scope(isolate); | 110 HandleScope scope(isolate); |
| 113 | 111 |
| 114 Handle<JSTypedArray> array; | 112 Handle<JSTypedArray> array; |
| 115 const char* method = "%TypedArray%.prototype.fill"; | 113 const char* method = "TypedArray.prototype.fill"; |
| 116 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 114 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 117 isolate, array, JSTypedArray::Validate(isolate, args.receiver(), method)); | 115 isolate, array, JSTypedArray::Validate(isolate, args.receiver(), method)); |
| 118 | 116 |
| 119 if (V8_UNLIKELY(array->WasNeutered())) return *array; | |
| 120 | |
| 121 int64_t len = array->length_value(); | 117 int64_t len = array->length_value(); |
| 122 int64_t start = 0; | 118 int64_t start = 0; |
| 123 int64_t end = len; | 119 int64_t end = len; |
| 124 | 120 |
| 125 if (args.length() > 2) { | 121 if (args.length() > 2) { |
| 126 Handle<Object> num = args.atOrUndefined(isolate, 2); | 122 Handle<Object> num = args.atOrUndefined(isolate, 2); |
| 127 if (!num->IsUndefined(isolate)) { | 123 if (!num->IsUndefined(isolate)) { |
| 128 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 124 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 129 isolate, num, Object::ToInteger(isolate, num)); | 125 isolate, num, Object::ToInteger(isolate, num)); |
| 130 start = CapRelativeIndex(num, 0, len); | 126 start = CapRelativeIndex(num, 0, len); |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 154 | 150 |
| 155 return array->GetElementsAccessor()->Fill(isolate, array, obj_value, | 151 return array->GetElementsAccessor()->Fill(isolate, array, obj_value, |
| 156 static_cast<uint32_t>(start), | 152 static_cast<uint32_t>(start), |
| 157 static_cast<uint32_t>(end)); | 153 static_cast<uint32_t>(end)); |
| 158 } | 154 } |
| 159 | 155 |
| 160 BUILTIN(TypedArrayPrototypeIncludes) { | 156 BUILTIN(TypedArrayPrototypeIncludes) { |
| 161 HandleScope scope(isolate); | 157 HandleScope scope(isolate); |
| 162 | 158 |
| 163 Handle<JSTypedArray> array; | 159 Handle<JSTypedArray> array; |
| 164 const char* method = "%TypedArray%.prototype.includes"; | 160 const char* method = "TypedArray.prototype.includes"; |
| 165 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 161 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 166 isolate, array, JSTypedArray::Validate(isolate, args.receiver(), method)); | 162 isolate, array, JSTypedArray::Validate(isolate, args.receiver(), method)); |
| 167 | 163 |
| 168 if (args.length() < 2) return isolate->heap()->false_value(); | 164 if (args.length() < 2) return isolate->heap()->false_value(); |
| 169 | 165 |
| 170 int64_t len = array->length_value(); | 166 int64_t len = array->length_value(); |
| 171 if (len == 0) return isolate->heap()->false_value(); | 167 if (len == 0) return isolate->heap()->false_value(); |
| 172 | 168 |
| 173 int64_t index = 0; | 169 int64_t index = 0; |
| 174 if (args.length() > 2) { | 170 if (args.length() > 2) { |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 187 static_cast<uint32_t>(index), | 183 static_cast<uint32_t>(index), |
| 188 static_cast<uint32_t>(len)); | 184 static_cast<uint32_t>(len)); |
| 189 MAYBE_RETURN(result, isolate->heap()->exception()); | 185 MAYBE_RETURN(result, isolate->heap()->exception()); |
| 190 return *isolate->factory()->ToBoolean(result.FromJust()); | 186 return *isolate->factory()->ToBoolean(result.FromJust()); |
| 191 } | 187 } |
| 192 | 188 |
| 193 BUILTIN(TypedArrayPrototypeIndexOf) { | 189 BUILTIN(TypedArrayPrototypeIndexOf) { |
| 194 HandleScope scope(isolate); | 190 HandleScope scope(isolate); |
| 195 | 191 |
| 196 Handle<JSTypedArray> array; | 192 Handle<JSTypedArray> array; |
| 197 const char* method = "%TypedArray%.prototype.indexOf"; | 193 const char* method = "TypedArray.prototype.indexOf"; |
| 198 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 194 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 199 isolate, array, JSTypedArray::Validate(isolate, args.receiver(), method)); | 195 isolate, array, JSTypedArray::Validate(isolate, args.receiver(), method)); |
| 200 | 196 |
| 201 int64_t len = array->length_value(); | 197 int64_t len = array->length_value(); |
| 202 if (len == 0) return Smi::FromInt(-1); | 198 if (len == 0) return Smi::FromInt(-1); |
| 203 | 199 |
| 204 int64_t index = 0; | 200 int64_t index = 0; |
| 205 if (args.length() > 2) { | 201 if (args.length() > 2) { |
| 206 Handle<Object> num; | 202 Handle<Object> num; |
| 207 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 203 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 218 static_cast<uint32_t>(index), | 214 static_cast<uint32_t>(index), |
| 219 static_cast<uint32_t>(len)); | 215 static_cast<uint32_t>(len)); |
| 220 MAYBE_RETURN(result, isolate->heap()->exception()); | 216 MAYBE_RETURN(result, isolate->heap()->exception()); |
| 221 return *isolate->factory()->NewNumberFromInt64(result.FromJust()); | 217 return *isolate->factory()->NewNumberFromInt64(result.FromJust()); |
| 222 } | 218 } |
| 223 | 219 |
| 224 BUILTIN(TypedArrayPrototypeLastIndexOf) { | 220 BUILTIN(TypedArrayPrototypeLastIndexOf) { |
| 225 HandleScope scope(isolate); | 221 HandleScope scope(isolate); |
| 226 | 222 |
| 227 Handle<JSTypedArray> array; | 223 Handle<JSTypedArray> array; |
| 228 const char* method = "%TypedArray%.prototype.lastIndexOf"; | 224 const char* method = "TypedArray.prototype.lastIndexOf"; |
| 229 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 225 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 230 isolate, array, JSTypedArray::Validate(isolate, args.receiver(), method)); | 226 isolate, array, JSTypedArray::Validate(isolate, args.receiver(), method)); |
| 231 | 227 |
| 232 int64_t len = array->length_value(); | 228 int64_t len = array->length_value(); |
| 233 if (len == 0) return Smi::FromInt(-1); | 229 if (len == 0) return Smi::FromInt(-1); |
| 234 | 230 |
| 235 int64_t index = len - 1; | 231 int64_t index = len - 1; |
| 236 if (args.length() > 2) { | 232 if (args.length() > 2) { |
| 237 Handle<Object> num; | 233 Handle<Object> num; |
| 238 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 234 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 252 Maybe<int64_t> result = elements->LastIndexOfValue( | 248 Maybe<int64_t> result = elements->LastIndexOfValue( |
| 253 isolate, array, search_element, static_cast<uint32_t>(index)); | 249 isolate, array, search_element, static_cast<uint32_t>(index)); |
| 254 MAYBE_RETURN(result, isolate->heap()->exception()); | 250 MAYBE_RETURN(result, isolate->heap()->exception()); |
| 255 return *isolate->factory()->NewNumberFromInt64(result.FromJust()); | 251 return *isolate->factory()->NewNumberFromInt64(result.FromJust()); |
| 256 } | 252 } |
| 257 | 253 |
| 258 BUILTIN(TypedArrayPrototypeReverse) { | 254 BUILTIN(TypedArrayPrototypeReverse) { |
| 259 HandleScope scope(isolate); | 255 HandleScope scope(isolate); |
| 260 | 256 |
| 261 Handle<JSTypedArray> array; | 257 Handle<JSTypedArray> array; |
| 262 const char* method = "%TypedArray%.prototype.reverse"; | 258 const char* method = "TypedArray.prototype.reverse"; |
| 263 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 259 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 264 isolate, array, JSTypedArray::Validate(isolate, args.receiver(), method)); | 260 isolate, array, JSTypedArray::Validate(isolate, args.receiver(), method)); |
| 265 | 261 |
| 266 if (V8_UNLIKELY(array->WasNeutered())) return *array; | |
| 267 | |
| 268 ElementsAccessor* elements = array->GetElementsAccessor(); | 262 ElementsAccessor* elements = array->GetElementsAccessor(); |
| 269 elements->Reverse(*array); | 263 elements->Reverse(*array); |
| 270 return *array; | 264 return *array; |
| 271 } | 265 } |
| 272 | 266 |
| 273 } // namespace internal | 267 } // namespace internal |
| 274 } // namespace v8 | 268 } // namespace v8 |
| OLD | NEW |