Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(277)

Side by Side Diff: src/runtime/runtime-array.cc

Issue 2613723002: [runtime] Use DCHECK_EQ instead of DCHECK for number of args. (Closed)
Patch Set: Rebase. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/runtime/runtime-atomics.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "src/runtime/runtime-utils.h" 5 #include "src/runtime/runtime-utils.h"
6 6
7 #include "src/arguments.h" 7 #include "src/arguments.h"
8 #include "src/code-stubs.h" 8 #include "src/code-stubs.h"
9 #include "src/conversions-inl.h" 9 #include "src/conversions-inl.h"
10 #include "src/elements.h" 10 #include "src/elements.h"
11 #include "src/factory.h" 11 #include "src/factory.h"
12 #include "src/isolate-inl.h" 12 #include "src/isolate-inl.h"
13 #include "src/keys.h" 13 #include "src/keys.h"
14 #include "src/messages.h" 14 #include "src/messages.h"
15 #include "src/prototype.h" 15 #include "src/prototype.h"
16 16
17 namespace v8 { 17 namespace v8 {
18 namespace internal { 18 namespace internal {
19 19
20 RUNTIME_FUNCTION(Runtime_FinishArrayPrototypeSetup) { 20 RUNTIME_FUNCTION(Runtime_FinishArrayPrototypeSetup) {
21 HandleScope scope(isolate); 21 HandleScope scope(isolate);
22 DCHECK(args.length() == 1); 22 DCHECK_EQ(1, args.length());
23 CONVERT_ARG_HANDLE_CHECKED(JSArray, prototype, 0); 23 CONVERT_ARG_HANDLE_CHECKED(JSArray, prototype, 0);
24 Object* length = prototype->length(); 24 Object* length = prototype->length();
25 CHECK(length->IsSmi()); 25 CHECK(length->IsSmi());
26 CHECK(Smi::cast(length)->value() == 0); 26 CHECK(Smi::cast(length)->value() == 0);
27 CHECK(prototype->HasFastSmiOrObjectElements()); 27 CHECK(prototype->HasFastSmiOrObjectElements());
28 // This is necessary to enable fast checks for absence of elements 28 // This is necessary to enable fast checks for absence of elements
29 // on Array.prototype and below. 29 // on Array.prototype and below.
30 prototype->set_elements(isolate->heap()->empty_fixed_array()); 30 prototype->set_elements(isolate->heap()->empty_fixed_array());
31 return Smi::kZero; 31 return Smi::kZero;
32 } 32 }
(...skipping 20 matching lines...) Expand all
53 Isolate* isolate, Handle<JSObject> holder, const char* name, 53 Isolate* isolate, Handle<JSObject> holder, const char* name,
54 Builtins::Name builtin_name, int argc = -1, 54 Builtins::Name builtin_name, int argc = -1,
55 BuiltinFunctionId id = static_cast<BuiltinFunctionId>(-1)) { 55 BuiltinFunctionId id = static_cast<BuiltinFunctionId>(-1)) {
56 InstallCode(isolate, holder, name, 56 InstallCode(isolate, holder, name,
57 handle(isolate->builtins()->builtin(builtin_name), isolate), argc, 57 handle(isolate->builtins()->builtin(builtin_name), isolate), argc,
58 id); 58 id);
59 } 59 }
60 60
61 RUNTIME_FUNCTION(Runtime_SpecialArrayFunctions) { 61 RUNTIME_FUNCTION(Runtime_SpecialArrayFunctions) {
62 HandleScope scope(isolate); 62 HandleScope scope(isolate);
63 DCHECK(args.length() == 0); 63 DCHECK_EQ(0, args.length());
64 Handle<JSObject> holder = 64 Handle<JSObject> holder =
65 isolate->factory()->NewJSObject(isolate->object_function()); 65 isolate->factory()->NewJSObject(isolate->object_function());
66 66
67 InstallBuiltin(isolate, holder, "pop", Builtins::kArrayPop); 67 InstallBuiltin(isolate, holder, "pop", Builtins::kArrayPop);
68 InstallBuiltin(isolate, holder, "push", Builtins::kFastArrayPush); 68 InstallBuiltin(isolate, holder, "push", Builtins::kFastArrayPush);
69 InstallBuiltin(isolate, holder, "shift", Builtins::kArrayShift); 69 InstallBuiltin(isolate, holder, "shift", Builtins::kArrayShift);
70 InstallBuiltin(isolate, holder, "unshift", Builtins::kArrayUnshift); 70 InstallBuiltin(isolate, holder, "unshift", Builtins::kArrayUnshift);
71 InstallBuiltin(isolate, holder, "slice", Builtins::kArraySlice); 71 InstallBuiltin(isolate, holder, "slice", Builtins::kArraySlice);
72 InstallBuiltin(isolate, holder, "splice", Builtins::kArraySplice); 72 InstallBuiltin(isolate, holder, "splice", Builtins::kArraySplice);
73 InstallBuiltin(isolate, holder, "includes", Builtins::kArrayIncludes, 2); 73 InstallBuiltin(isolate, holder, "includes", Builtins::kArrayIncludes, 2);
74 InstallBuiltin(isolate, holder, "indexOf", Builtins::kArrayIndexOf, 2); 74 InstallBuiltin(isolate, holder, "indexOf", Builtins::kArrayIndexOf, 2);
75 InstallBuiltin(isolate, holder, "keys", Builtins::kArrayPrototypeKeys, 0, 75 InstallBuiltin(isolate, holder, "keys", Builtins::kArrayPrototypeKeys, 0,
76 kArrayKeys); 76 kArrayKeys);
77 InstallBuiltin(isolate, holder, "values", Builtins::kArrayPrototypeValues, 0, 77 InstallBuiltin(isolate, holder, "values", Builtins::kArrayPrototypeValues, 0,
78 kArrayValues); 78 kArrayValues);
79 InstallBuiltin(isolate, holder, "entries", Builtins::kArrayPrototypeEntries, 79 InstallBuiltin(isolate, holder, "entries", Builtins::kArrayPrototypeEntries,
80 0, kArrayEntries); 80 0, kArrayEntries);
81 81
82 return *holder; 82 return *holder;
83 } 83 }
84 84
85 85
86 RUNTIME_FUNCTION(Runtime_FixedArrayGet) { 86 RUNTIME_FUNCTION(Runtime_FixedArrayGet) {
87 SealHandleScope shs(isolate); 87 SealHandleScope shs(isolate);
88 DCHECK(args.length() == 2); 88 DCHECK_EQ(2, args.length());
89 CONVERT_ARG_CHECKED(FixedArray, object, 0); 89 CONVERT_ARG_CHECKED(FixedArray, object, 0);
90 CONVERT_SMI_ARG_CHECKED(index, 1); 90 CONVERT_SMI_ARG_CHECKED(index, 1);
91 return object->get(index); 91 return object->get(index);
92 } 92 }
93 93
94 94
95 RUNTIME_FUNCTION(Runtime_FixedArraySet) { 95 RUNTIME_FUNCTION(Runtime_FixedArraySet) {
96 SealHandleScope shs(isolate); 96 SealHandleScope shs(isolate);
97 DCHECK(args.length() == 3); 97 DCHECK_EQ(3, args.length());
98 CONVERT_ARG_CHECKED(FixedArray, object, 0); 98 CONVERT_ARG_CHECKED(FixedArray, object, 0);
99 CONVERT_SMI_ARG_CHECKED(index, 1); 99 CONVERT_SMI_ARG_CHECKED(index, 1);
100 CONVERT_ARG_CHECKED(Object, value, 2); 100 CONVERT_ARG_CHECKED(Object, value, 2);
101 object->set(index, value); 101 object->set(index, value);
102 return isolate->heap()->undefined_value(); 102 return isolate->heap()->undefined_value();
103 } 103 }
104 104
105 105
106 RUNTIME_FUNCTION(Runtime_TransitionElementsKind) { 106 RUNTIME_FUNCTION(Runtime_TransitionElementsKind) {
107 HandleScope scope(isolate); 107 HandleScope scope(isolate);
108 DCHECK_EQ(2, args.length()); 108 DCHECK_EQ(2, args.length());
109 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); 109 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0);
110 CONVERT_ARG_HANDLE_CHECKED(Map, to_map, 1); 110 CONVERT_ARG_HANDLE_CHECKED(Map, to_map, 1);
111 ElementsKind to_kind = to_map->elements_kind(); 111 ElementsKind to_kind = to_map->elements_kind();
112 ElementsAccessor::ForKind(to_kind)->TransitionElementsKind(object, to_map); 112 ElementsAccessor::ForKind(to_kind)->TransitionElementsKind(object, to_map);
113 return *object; 113 return *object;
114 } 114 }
115 115
116 116
117 // Moves all own elements of an object, that are below a limit, to positions 117 // Moves all own elements of an object, that are below a limit, to positions
118 // starting at zero. All undefined values are placed after non-undefined values, 118 // starting at zero. All undefined values are placed after non-undefined values,
119 // and are followed by non-existing element. Does not change the length 119 // and are followed by non-existing element. Does not change the length
120 // property. 120 // property.
121 // Returns the number of non-undefined elements collected. 121 // Returns the number of non-undefined elements collected.
122 // Returns -1 if hole removal is not supported by this method. 122 // Returns -1 if hole removal is not supported by this method.
123 RUNTIME_FUNCTION(Runtime_RemoveArrayHoles) { 123 RUNTIME_FUNCTION(Runtime_RemoveArrayHoles) {
124 HandleScope scope(isolate); 124 HandleScope scope(isolate);
125 DCHECK(args.length() == 2); 125 DCHECK_EQ(2, args.length());
126 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, object, 0); 126 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, object, 0);
127 CONVERT_NUMBER_CHECKED(uint32_t, limit, Uint32, args[1]); 127 CONVERT_NUMBER_CHECKED(uint32_t, limit, Uint32, args[1]);
128 if (object->IsJSProxy()) return Smi::FromInt(-1); 128 if (object->IsJSProxy()) return Smi::FromInt(-1);
129 return *JSObject::PrepareElementsForSort(Handle<JSObject>::cast(object), 129 return *JSObject::PrepareElementsForSort(Handle<JSObject>::cast(object),
130 limit); 130 limit);
131 } 131 }
132 132
133 133
134 // Move contents of argument 0 (an array) to argument 1 (an array) 134 // Move contents of argument 0 (an array) to argument 1 (an array)
135 RUNTIME_FUNCTION(Runtime_MoveArrayContents) { 135 RUNTIME_FUNCTION(Runtime_MoveArrayContents) {
136 HandleScope scope(isolate); 136 HandleScope scope(isolate);
137 DCHECK(args.length() == 2); 137 DCHECK_EQ(2, args.length());
138 CONVERT_ARG_HANDLE_CHECKED(JSArray, from, 0); 138 CONVERT_ARG_HANDLE_CHECKED(JSArray, from, 0);
139 CONVERT_ARG_HANDLE_CHECKED(JSArray, to, 1); 139 CONVERT_ARG_HANDLE_CHECKED(JSArray, to, 1);
140 JSObject::ValidateElements(from); 140 JSObject::ValidateElements(from);
141 JSObject::ValidateElements(to); 141 JSObject::ValidateElements(to);
142 142
143 Handle<FixedArrayBase> new_elements(from->elements()); 143 Handle<FixedArrayBase> new_elements(from->elements());
144 ElementsKind from_kind = from->GetElementsKind(); 144 ElementsKind from_kind = from->GetElementsKind();
145 Handle<Map> new_map = JSObject::GetElementsTransitionMap(to, from_kind); 145 Handle<Map> new_map = JSObject::GetElementsTransitionMap(to, from_kind);
146 JSObject::SetMapAndElements(to, new_map, new_elements); 146 JSObject::SetMapAndElements(to, new_map, new_elements);
147 to->set_length(from->length()); 147 to->set_length(from->length());
148 148
149 JSObject::ResetElements(from); 149 JSObject::ResetElements(from);
150 from->set_length(Smi::kZero); 150 from->set_length(Smi::kZero);
151 151
152 JSObject::ValidateElements(to); 152 JSObject::ValidateElements(to);
153 return *to; 153 return *to;
154 } 154 }
155 155
156 156
157 // How many elements does this object/array have? 157 // How many elements does this object/array have?
158 RUNTIME_FUNCTION(Runtime_EstimateNumberOfElements) { 158 RUNTIME_FUNCTION(Runtime_EstimateNumberOfElements) {
159 HandleScope scope(isolate); 159 HandleScope scope(isolate);
160 DCHECK(args.length() == 1); 160 DCHECK_EQ(1, args.length());
161 CONVERT_ARG_HANDLE_CHECKED(JSArray, array, 0); 161 CONVERT_ARG_HANDLE_CHECKED(JSArray, array, 0);
162 Handle<FixedArrayBase> elements(array->elements(), isolate); 162 Handle<FixedArrayBase> elements(array->elements(), isolate);
163 SealHandleScope shs(isolate); 163 SealHandleScope shs(isolate);
164 if (elements->IsDictionary()) { 164 if (elements->IsDictionary()) {
165 int result = 165 int result =
166 Handle<SeededNumberDictionary>::cast(elements)->NumberOfElements(); 166 Handle<SeededNumberDictionary>::cast(elements)->NumberOfElements();
167 return Smi::FromInt(result); 167 return Smi::FromInt(result);
168 } else { 168 } else {
169 DCHECK(array->length()->IsSmi()); 169 DCHECK(array->length()->IsSmi());
170 // For packed elements, we know the exact number of elements 170 // For packed elements, we know the exact number of elements
(...skipping 22 matching lines...) Expand all
193 } 193 }
194 194
195 195
196 // Returns an array that tells you where in the [0, length) interval an array 196 // Returns an array that tells you where in the [0, length) interval an array
197 // might have elements. Can either return an array of keys (positive integers 197 // might have elements. Can either return an array of keys (positive integers
198 // or undefined) or a number representing the positive length of an interval 198 // or undefined) or a number representing the positive length of an interval
199 // starting at index 0. 199 // starting at index 0.
200 // Intervals can span over some keys that are not in the object. 200 // Intervals can span over some keys that are not in the object.
201 RUNTIME_FUNCTION(Runtime_GetArrayKeys) { 201 RUNTIME_FUNCTION(Runtime_GetArrayKeys) {
202 HandleScope scope(isolate); 202 HandleScope scope(isolate);
203 DCHECK(args.length() == 2); 203 DCHECK_EQ(2, args.length());
204 CONVERT_ARG_HANDLE_CHECKED(JSObject, array, 0); 204 CONVERT_ARG_HANDLE_CHECKED(JSObject, array, 0);
205 CONVERT_NUMBER_CHECKED(uint32_t, length, Uint32, args[1]); 205 CONVERT_NUMBER_CHECKED(uint32_t, length, Uint32, args[1]);
206 ElementsKind kind = array->GetElementsKind(); 206 ElementsKind kind = array->GetElementsKind();
207 207
208 if (IsFastElementsKind(kind) || IsFixedTypedArrayElementsKind(kind)) { 208 if (IsFastElementsKind(kind) || IsFixedTypedArrayElementsKind(kind)) {
209 uint32_t actual_length = static_cast<uint32_t>(array->elements()->length()); 209 uint32_t actual_length = static_cast<uint32_t>(array->elements()->length());
210 return *isolate->factory()->NewNumberFromUint(Min(actual_length, length)); 210 return *isolate->factory()->NewNumberFromUint(Min(actual_length, length));
211 } 211 }
212 212
213 if (kind == FAST_STRING_WRAPPER_ELEMENTS) { 213 if (kind == FAST_STRING_WRAPPER_ELEMENTS) {
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 CONVERT_ARG_HANDLE_CHECKED(HeapObject, type_info, argc + 2); 350 CONVERT_ARG_HANDLE_CHECKED(HeapObject, type_info, argc + 2);
351 // TODO(bmeurer): Use MaybeHandle to pass around the AllocationSite. 351 // TODO(bmeurer): Use MaybeHandle to pass around the AllocationSite.
352 Handle<AllocationSite> site = type_info->IsAllocationSite() 352 Handle<AllocationSite> site = type_info->IsAllocationSite()
353 ? Handle<AllocationSite>::cast(type_info) 353 ? Handle<AllocationSite>::cast(type_info)
354 : Handle<AllocationSite>::null(); 354 : Handle<AllocationSite>::null();
355 return ArrayConstructorCommon(isolate, constructor, new_target, site, &argv); 355 return ArrayConstructorCommon(isolate, constructor, new_target, site, &argv);
356 } 356 }
357 357
358 RUNTIME_FUNCTION(Runtime_NormalizeElements) { 358 RUNTIME_FUNCTION(Runtime_NormalizeElements) {
359 HandleScope scope(isolate); 359 HandleScope scope(isolate);
360 DCHECK(args.length() == 1); 360 DCHECK_EQ(1, args.length());
361 CONVERT_ARG_HANDLE_CHECKED(JSObject, array, 0); 361 CONVERT_ARG_HANDLE_CHECKED(JSObject, array, 0);
362 CHECK(!array->HasFixedTypedArrayElements()); 362 CHECK(!array->HasFixedTypedArrayElements());
363 CHECK(!array->IsJSGlobalProxy()); 363 CHECK(!array->IsJSGlobalProxy());
364 JSObject::NormalizeElements(array); 364 JSObject::NormalizeElements(array);
365 return *array; 365 return *array;
366 } 366 }
367 367
368 368
369 // GrowArrayElements returns a sentinel Smi if the object was normalized. 369 // GrowArrayElements returns a sentinel Smi if the object was normalized.
370 RUNTIME_FUNCTION(Runtime_GrowArrayElements) { 370 RUNTIME_FUNCTION(Runtime_GrowArrayElements) {
371 HandleScope scope(isolate); 371 HandleScope scope(isolate);
372 DCHECK(args.length() == 2); 372 DCHECK_EQ(2, args.length());
373 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); 373 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0);
374 CONVERT_NUMBER_CHECKED(int, key, Int32, args[1]); 374 CONVERT_NUMBER_CHECKED(int, key, Int32, args[1]);
375 375
376 if (key < 0) { 376 if (key < 0) {
377 return object->elements(); 377 return object->elements();
378 } 378 }
379 379
380 uint32_t capacity = static_cast<uint32_t>(object->elements()->length()); 380 uint32_t capacity = static_cast<uint32_t>(object->elements()->length());
381 uint32_t index = static_cast<uint32_t>(key); 381 uint32_t index = static_cast<uint32_t>(key);
382 382
383 if (index >= capacity) { 383 if (index >= capacity) {
384 if (!object->GetElementsAccessor()->GrowCapacity(object, index)) { 384 if (!object->GetElementsAccessor()->GrowCapacity(object, index)) {
385 return Smi::kZero; 385 return Smi::kZero;
386 } 386 }
387 } 387 }
388 388
389 // On success, return the fixed array elements. 389 // On success, return the fixed array elements.
390 return object->elements(); 390 return object->elements();
391 } 391 }
392 392
393 393
394 RUNTIME_FUNCTION(Runtime_HasComplexElements) { 394 RUNTIME_FUNCTION(Runtime_HasComplexElements) {
395 HandleScope scope(isolate); 395 HandleScope scope(isolate);
396 DCHECK(args.length() == 1); 396 DCHECK_EQ(1, args.length());
397 CONVERT_ARG_HANDLE_CHECKED(JSObject, array, 0); 397 CONVERT_ARG_HANDLE_CHECKED(JSObject, array, 0);
398 for (PrototypeIterator iter(isolate, array, kStartAtReceiver); 398 for (PrototypeIterator iter(isolate, array, kStartAtReceiver);
399 !iter.IsAtEnd(); iter.Advance()) { 399 !iter.IsAtEnd(); iter.Advance()) {
400 if (PrototypeIterator::GetCurrent(iter)->IsJSProxy()) { 400 if (PrototypeIterator::GetCurrent(iter)->IsJSProxy()) {
401 return isolate->heap()->true_value(); 401 return isolate->heap()->true_value();
402 } 402 }
403 Handle<JSObject> current = PrototypeIterator::GetCurrent<JSObject>(iter); 403 Handle<JSObject> current = PrototypeIterator::GetCurrent<JSObject>(iter);
404 if (current->HasIndexedInterceptor()) { 404 if (current->HasIndexedInterceptor()) {
405 return isolate->heap()->true_value(); 405 return isolate->heap()->true_value();
406 } 406 }
407 if (!current->HasDictionaryElements()) continue; 407 if (!current->HasDictionaryElements()) continue;
408 if (current->element_dictionary()->HasComplexElements()) { 408 if (current->element_dictionary()->HasComplexElements()) {
409 return isolate->heap()->true_value(); 409 return isolate->heap()->true_value();
410 } 410 }
411 } 411 }
412 return isolate->heap()->false_value(); 412 return isolate->heap()->false_value();
413 } 413 }
414 414
415 // ES6 22.1.2.2 Array.isArray 415 // ES6 22.1.2.2 Array.isArray
416 RUNTIME_FUNCTION(Runtime_ArrayIsArray) { 416 RUNTIME_FUNCTION(Runtime_ArrayIsArray) {
417 HandleScope shs(isolate); 417 HandleScope shs(isolate);
418 DCHECK(args.length() == 1); 418 DCHECK_EQ(1, args.length());
419 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0); 419 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0);
420 Maybe<bool> result = Object::IsArray(object); 420 Maybe<bool> result = Object::IsArray(object);
421 MAYBE_RETURN(result, isolate->heap()->exception()); 421 MAYBE_RETURN(result, isolate->heap()->exception());
422 return isolate->heap()->ToBoolean(result.FromJust()); 422 return isolate->heap()->ToBoolean(result.FromJust());
423 } 423 }
424 424
425 RUNTIME_FUNCTION(Runtime_IsArray) { 425 RUNTIME_FUNCTION(Runtime_IsArray) {
426 SealHandleScope shs(isolate); 426 SealHandleScope shs(isolate);
427 DCHECK(args.length() == 1); 427 DCHECK_EQ(1, args.length());
428 CONVERT_ARG_CHECKED(Object, obj, 0); 428 CONVERT_ARG_CHECKED(Object, obj, 0);
429 return isolate->heap()->ToBoolean(obj->IsJSArray()); 429 return isolate->heap()->ToBoolean(obj->IsJSArray());
430 } 430 }
431 431
432 RUNTIME_FUNCTION(Runtime_ArraySpeciesConstructor) { 432 RUNTIME_FUNCTION(Runtime_ArraySpeciesConstructor) {
433 HandleScope scope(isolate); 433 HandleScope scope(isolate);
434 DCHECK(args.length() == 1); 434 DCHECK_EQ(1, args.length());
435 CONVERT_ARG_HANDLE_CHECKED(Object, original_array, 0); 435 CONVERT_ARG_HANDLE_CHECKED(Object, original_array, 0);
436 RETURN_RESULT_OR_FAILURE( 436 RETURN_RESULT_OR_FAILURE(
437 isolate, Object::ArraySpeciesConstructor(isolate, original_array)); 437 isolate, Object::ArraySpeciesConstructor(isolate, original_array));
438 } 438 }
439 439
440 // ES7 22.1.3.11 Array.prototype.includes 440 // ES7 22.1.3.11 Array.prototype.includes
441 RUNTIME_FUNCTION(Runtime_ArrayIncludes_Slow) { 441 RUNTIME_FUNCTION(Runtime_ArrayIncludes_Slow) {
442 HandleScope shs(isolate); 442 HandleScope shs(isolate);
443 DCHECK(args.length() == 3); 443 DCHECK_EQ(3, args.length());
444 CONVERT_ARG_HANDLE_CHECKED(Object, search_element, 1); 444 CONVERT_ARG_HANDLE_CHECKED(Object, search_element, 1);
445 CONVERT_ARG_HANDLE_CHECKED(Object, from_index, 2); 445 CONVERT_ARG_HANDLE_CHECKED(Object, from_index, 2);
446 446
447 // Let O be ? ToObject(this value). 447 // Let O be ? ToObject(this value).
448 Handle<JSReceiver> object; 448 Handle<JSReceiver> object;
449 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 449 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
450 isolate, object, Object::ToObject(isolate, handle(args[0], isolate))); 450 isolate, object, Object::ToObject(isolate, handle(args[0], isolate)));
451 451
452 // Let len be ? ToLength(? Get(O, "length")). 452 // Let len be ? ToLength(? Get(O, "length")).
453 int64_t len; 453 int64_t len;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 // If SameValueZero(searchElement, elementK) is true, return true. 525 // If SameValueZero(searchElement, elementK) is true, return true.
526 if (search_element->SameValueZero(*element_k)) { 526 if (search_element->SameValueZero(*element_k)) {
527 return isolate->heap()->true_value(); 527 return isolate->heap()->true_value();
528 } 528 }
529 } 529 }
530 return isolate->heap()->false_value(); 530 return isolate->heap()->false_value();
531 } 531 }
532 532
533 RUNTIME_FUNCTION(Runtime_ArrayIndexOf) { 533 RUNTIME_FUNCTION(Runtime_ArrayIndexOf) {
534 HandleScope shs(isolate); 534 HandleScope shs(isolate);
535 DCHECK(args.length() == 3); 535 DCHECK_EQ(3, args.length());
536 CONVERT_ARG_HANDLE_CHECKED(Object, search_element, 1); 536 CONVERT_ARG_HANDLE_CHECKED(Object, search_element, 1);
537 CONVERT_ARG_HANDLE_CHECKED(Object, from_index, 2); 537 CONVERT_ARG_HANDLE_CHECKED(Object, from_index, 2);
538 538
539 // Let O be ? ToObject(this value). 539 // Let O be ? ToObject(this value).
540 Handle<Object> receiver_obj = args.at(0); 540 Handle<Object> receiver_obj = args.at(0);
541 if (receiver_obj->IsNull(isolate) || receiver_obj->IsUndefined(isolate)) { 541 if (receiver_obj->IsNull(isolate) || receiver_obj->IsUndefined(isolate)) {
542 THROW_NEW_ERROR_RETURN_FAILURE( 542 THROW_NEW_ERROR_RETURN_FAILURE(
543 isolate, NewTypeError(MessageTemplate::kCalledOnNullOrUndefined, 543 isolate, NewTypeError(MessageTemplate::kCalledOnNullOrUndefined,
544 isolate->factory()->NewStringFromAsciiChecked( 544 isolate->factory()->NewStringFromAsciiChecked(
545 "Array.prototype.indexOf"))); 545 "Array.prototype.indexOf")));
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 isolate, spread, 643 isolate, spread,
644 Execution::Call(isolate, spread_iterable_function, 644 Execution::Call(isolate, spread_iterable_function,
645 isolate->factory()->undefined_value(), 1, &spread)); 645 isolate->factory()->undefined_value(), 1, &spread));
646 } 646 }
647 647
648 return *spread; 648 return *spread;
649 } 649 }
650 650
651 } // namespace internal 651 } // namespace internal
652 } // namespace v8 652 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/runtime/runtime-atomics.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698