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

Side by Side Diff: src/objects-inl.h

Issue 2405253006: [builtins] implement Array.prototype[@@iterator] in TFJ builtins (Closed)
Patch Set: rebase and get tests passing Created 4 years, 2 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
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 // Review notes: 5 // Review notes:
6 // 6 //
7 // - The use of macros in these inline functions may seem superfluous 7 // - The use of macros in these inline functions may seem superfluous
8 // but it is absolutely needed to make sure gcc generates optimal 8 // but it is absolutely needed to make sure gcc generates optimal
9 // code. gcc is not happy when attempting to inline too deep. 9 // code. gcc is not happy when attempting to inline too deep.
10 // 10 //
(...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 return map()->instance_type() >= FIRST_JS_RECEIVER_TYPE; 683 return map()->instance_type() >= FIRST_JS_RECEIVER_TYPE;
684 } 684 }
685 685
686 bool HeapObject::IsJSObject() const { 686 bool HeapObject::IsJSObject() const {
687 STATIC_ASSERT(LAST_JS_OBJECT_TYPE == LAST_TYPE); 687 STATIC_ASSERT(LAST_JS_OBJECT_TYPE == LAST_TYPE);
688 return map()->IsJSObjectMap(); 688 return map()->IsJSObjectMap();
689 } 689 }
690 690
691 bool HeapObject::IsJSProxy() const { return map()->IsJSProxyMap(); } 691 bool HeapObject::IsJSProxy() const { return map()->IsJSProxyMap(); }
692 692
693 bool HeapObject::IsJSTypedArrayKeyIterator() const {
694 return map()->instance_type() == JS_TYPED_ARRAY_KEY_ITERATOR_TYPE;
695 }
696
697 bool HeapObject::IsJSTypedArrayValueIterator() const {
698 InstanceType instance_type = map()->instance_type();
699 return instance_type >= FIRST_JS_TYPED_ARRAY_VALUE_ITERATOR_TYPE &&
700 instance_type <= LAST_JS_TYPED_ARRAY_VALUE_ITERATOR_TYPE;
701 }
702
703 bool HeapObject::IsJSTypedArrayKeyValueIterator() const {
704 InstanceType instance_type = map()->instance_type();
705 return instance_type >= FIRST_JS_TYPED_ARRAY_KEY_VALUE_ITERATOR_TYPE &&
706 instance_type <= LAST_JS_TYPED_ARRAY_KEY_VALUE_ITERATOR_TYPE;
707 }
708
709 bool HeapObject::IsJSTypedArrayIterator() const {
710 return (IsJSTypedArrayKeyIterator() || IsJSTypedArrayValueIterator() ||
711 IsJSTypedArrayKeyValueIterator());
712 }
713
714 bool HeapObject::IsJSArrayKeyIterator() const {
715 return map()->instance_type() == JS_GENERIC_ARRAY_KEY_ITERATOR_TYPE;
716 }
717
718 bool HeapObject::IsJSArrayValueIterator() const {
719 InstanceType instance_type = map()->instance_type();
720 return instance_type >= FIRST_JS_ARRAY_VALUE_ITERATOR_TYPE &&
721 instance_type <= LAST_JS_ARRAY_VALUE_ITERATOR_TYPE;
722 }
723
724 bool HeapObject::IsJSArrayKeyValueIterator() const {
725 InstanceType instance_type = map()->instance_type();
726 return instance_type >= FIRST_JS_ARRAY_KEY_VALUE_ITERATOR_TYPE &&
727 instance_type <= LAST_JS_ARRAY_KEY_VALUE_ITERATOR_TYPE;
728 }
729
730 bool HeapObject::IsJSArrayIterator() const {
731 return (IsJSArrayKeyIterator() || IsJSArrayValueIterator() ||
732 IsJSArrayKeyValueIterator());
733 }
734
693 TYPE_CHECKER(JSSet, JS_SET_TYPE) 735 TYPE_CHECKER(JSSet, JS_SET_TYPE)
694 TYPE_CHECKER(JSMap, JS_MAP_TYPE) 736 TYPE_CHECKER(JSMap, JS_MAP_TYPE)
695 TYPE_CHECKER(JSSetIterator, JS_SET_ITERATOR_TYPE) 737 TYPE_CHECKER(JSSetIterator, JS_SET_ITERATOR_TYPE)
696 TYPE_CHECKER(JSMapIterator, JS_MAP_ITERATOR_TYPE) 738 TYPE_CHECKER(JSMapIterator, JS_MAP_ITERATOR_TYPE)
697 TYPE_CHECKER(JSWeakMap, JS_WEAK_MAP_TYPE) 739 TYPE_CHECKER(JSWeakMap, JS_WEAK_MAP_TYPE)
698 TYPE_CHECKER(JSWeakSet, JS_WEAK_SET_TYPE) 740 TYPE_CHECKER(JSWeakSet, JS_WEAK_SET_TYPE)
699 TYPE_CHECKER(JSContextExtensionObject, JS_CONTEXT_EXTENSION_OBJECT_TYPE) 741 TYPE_CHECKER(JSContextExtensionObject, JS_CONTEXT_EXTENSION_OBJECT_TYPE)
700 TYPE_CHECKER(Map, MAP_TYPE) 742 TYPE_CHECKER(Map, MAP_TYPE)
701 TYPE_CHECKER(FixedDoubleArray, FIXED_DOUBLE_ARRAY_TYPE) 743 TYPE_CHECKER(FixedDoubleArray, FIXED_DOUBLE_ARRAY_TYPE)
702 TYPE_CHECKER(WeakFixedArray, FIXED_ARRAY_TYPE) 744 TYPE_CHECKER(WeakFixedArray, FIXED_ARRAY_TYPE)
(...skipping 2628 matching lines...) Expand 10 before | Expand all | Expand 10 after
3331 CAST_ACCESSOR(JSMessageObject) 3373 CAST_ACCESSOR(JSMessageObject)
3332 CAST_ACCESSOR(JSModuleNamespace) 3374 CAST_ACCESSOR(JSModuleNamespace)
3333 CAST_ACCESSOR(JSFixedArrayIterator) 3375 CAST_ACCESSOR(JSFixedArrayIterator)
3334 CAST_ACCESSOR(JSObject) 3376 CAST_ACCESSOR(JSObject)
3335 CAST_ACCESSOR(JSProxy) 3377 CAST_ACCESSOR(JSProxy)
3336 CAST_ACCESSOR(JSReceiver) 3378 CAST_ACCESSOR(JSReceiver)
3337 CAST_ACCESSOR(JSRegExp) 3379 CAST_ACCESSOR(JSRegExp)
3338 CAST_ACCESSOR(JSSet) 3380 CAST_ACCESSOR(JSSet)
3339 CAST_ACCESSOR(JSSetIterator) 3381 CAST_ACCESSOR(JSSetIterator)
3340 CAST_ACCESSOR(JSStringIterator) 3382 CAST_ACCESSOR(JSStringIterator)
3383 CAST_ACCESSOR(JSTypedArrayIterator)
3384 CAST_ACCESSOR(JSArrayIterator)
3341 CAST_ACCESSOR(JSTypedArray) 3385 CAST_ACCESSOR(JSTypedArray)
3342 CAST_ACCESSOR(JSValue) 3386 CAST_ACCESSOR(JSValue)
3343 CAST_ACCESSOR(JSWeakCollection) 3387 CAST_ACCESSOR(JSWeakCollection)
3344 CAST_ACCESSOR(JSWeakMap) 3388 CAST_ACCESSOR(JSWeakMap)
3345 CAST_ACCESSOR(JSWeakSet) 3389 CAST_ACCESSOR(JSWeakSet)
3346 CAST_ACCESSOR(LayoutDescriptor) 3390 CAST_ACCESSOR(LayoutDescriptor)
3347 CAST_ACCESSOR(Map) 3391 CAST_ACCESSOR(Map)
3348 CAST_ACCESSOR(ModuleInfoEntry) 3392 CAST_ACCESSOR(ModuleInfoEntry)
3349 CAST_ACCESSOR(ModuleInfo) 3393 CAST_ACCESSOR(ModuleInfo)
3350 CAST_ACCESSOR(Name) 3394 CAST_ACCESSOR(Name)
(...skipping 4994 matching lines...) Expand 10 before | Expand all | Expand 10 after
8345 entry_storage->set(0, *key, SKIP_WRITE_BARRIER); 8389 entry_storage->set(0, *key, SKIP_WRITE_BARRIER);
8346 entry_storage->set(1, *value, SKIP_WRITE_BARRIER); 8390 entry_storage->set(1, *value, SKIP_WRITE_BARRIER);
8347 } 8391 }
8348 return isolate->factory()->NewJSArrayWithElements(entry_storage, 8392 return isolate->factory()->NewJSArrayWithElements(entry_storage,
8349 FAST_ELEMENTS, 2); 8393 FAST_ELEMENTS, 2);
8350 } 8394 }
8351 8395
8352 ACCESSORS(JSIteratorResult, value, Object, kValueOffset) 8396 ACCESSORS(JSIteratorResult, value, Object, kValueOffset)
8353 ACCESSORS(JSIteratorResult, done, Object, kDoneOffset) 8397 ACCESSORS(JSIteratorResult, done, Object, kDoneOffset)
8354 8398
8399 ACCESSORS(JSTypedArrayIterator, object, Object, kIteratedObjectOffset)
8400 SMI_ACCESSORS(JSTypedArrayIterator, index, kNextIndexOffset)
8401
8402 ACCESSORS(JSArrayIterator, object, Object, kIteratedObjectOffset)
8403 ACCESSORS(JSArrayIterator, index, Object, kNextIndexOffset)
8404 ACCESSORS(JSArrayIterator, map, Map, kIteratedObjectMapOffset)
8405
8355 ACCESSORS(JSStringIterator, string, String, kStringOffset) 8406 ACCESSORS(JSStringIterator, string, String, kStringOffset)
8356 SMI_ACCESSORS(JSStringIterator, index, kNextIndexOffset) 8407 SMI_ACCESSORS(JSStringIterator, index, kNextIndexOffset)
8357 8408
8358 #undef TYPE_CHECKER 8409 #undef TYPE_CHECKER
8359 #undef CAST_ACCESSOR 8410 #undef CAST_ACCESSOR
8360 #undef INT_ACCESSORS 8411 #undef INT_ACCESSORS
8361 #undef ACCESSORS 8412 #undef ACCESSORS
8362 #undef SMI_ACCESSORS 8413 #undef SMI_ACCESSORS
8363 #undef SYNCHRONIZED_SMI_ACCESSORS 8414 #undef SYNCHRONIZED_SMI_ACCESSORS
8364 #undef NOBARRIER_SMI_ACCESSORS 8415 #undef NOBARRIER_SMI_ACCESSORS
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
8398 #undef WRITE_INT64_FIELD 8449 #undef WRITE_INT64_FIELD
8399 #undef READ_BYTE_FIELD 8450 #undef READ_BYTE_FIELD
8400 #undef WRITE_BYTE_FIELD 8451 #undef WRITE_BYTE_FIELD
8401 #undef NOBARRIER_READ_BYTE_FIELD 8452 #undef NOBARRIER_READ_BYTE_FIELD
8402 #undef NOBARRIER_WRITE_BYTE_FIELD 8453 #undef NOBARRIER_WRITE_BYTE_FIELD
8403 8454
8404 } // namespace internal 8455 } // namespace internal
8405 } // namespace v8 8456 } // namespace v8
8406 8457
8407 #endif // V8_OBJECTS_INL_H_ 8458 #endif // V8_OBJECTS_INL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698