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

Side by Side Diff: src/objects.h

Issue 2405253006: [builtins] implement Array.prototype[@@iterator] in TFJ builtins (Closed)
Patch Set: add array_iterator_protector, and check array_protector in holey fast arrays 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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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 #ifndef V8_OBJECTS_H_ 5 #ifndef V8_OBJECTS_H_
6 #define V8_OBJECTS_H_ 6 #define V8_OBJECTS_H_
7 7
8 #include <iosfwd> 8 #include <iosfwd>
9 #include <memory> 9 #include <memory>
10 10
(...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 V(JS_MAP_TYPE) \ 437 V(JS_MAP_TYPE) \
438 V(JS_SET_ITERATOR_TYPE) \ 438 V(JS_SET_ITERATOR_TYPE) \
439 V(JS_MAP_ITERATOR_TYPE) \ 439 V(JS_MAP_ITERATOR_TYPE) \
440 V(JS_WEAK_MAP_TYPE) \ 440 V(JS_WEAK_MAP_TYPE) \
441 V(JS_WEAK_SET_TYPE) \ 441 V(JS_WEAK_SET_TYPE) \
442 V(JS_PROMISE_TYPE) \ 442 V(JS_PROMISE_TYPE) \
443 V(JS_REGEXP_TYPE) \ 443 V(JS_REGEXP_TYPE) \
444 V(JS_ERROR_TYPE) \ 444 V(JS_ERROR_TYPE) \
445 V(JS_STRING_ITERATOR_TYPE) \ 445 V(JS_STRING_ITERATOR_TYPE) \
446 \ 446 \
447 V(JS_TYPED_ARRAY_KEY_ITERATOR_TYPE) \
448 V(JS_GENERIC_ARRAY_KEY_ITERATOR_TYPE) \
449 \
450 V(JS_INT8_ARRAY_KEY_VALUE_ITERATOR_TYPE) \
451 V(JS_UINT8_ARRAY_KEY_VALUE_ITERATOR_TYPE) \
452 V(JS_INT16_ARRAY_KEY_VALUE_ITERATOR_TYPE) \
453 V(JS_UINT16_ARRAY_KEY_VALUE_ITERATOR_TYPE) \
454 V(JS_INT32_ARRAY_KEY_VALUE_ITERATOR_TYPE) \
455 V(JS_UINT32_ARRAY_KEY_VALUE_ITERATOR_TYPE) \
456 V(JS_FLOAT32_ARRAY_KEY_VALUE_ITERATOR_TYPE) \
457 V(JS_FLOAT64_ARRAY_KEY_VALUE_ITERATOR_TYPE) \
458 V(JS_UINT8_CLAMPED_ARRAY_KEY_VALUE_ITERATOR_TYPE) \
459 \
460 V(JS_FAST_SMI_ARRAY_KEY_VALUE_ITERATOR_TYPE) \
461 V(JS_FAST_HOLEY_SMI_ARRAY_KEY_VALUE_ITERATOR_TYPE) \
462 V(JS_FAST_ARRAY_KEY_VALUE_ITERATOR_TYPE) \
463 V(JS_FAST_HOLEY_ARRAY_KEY_VALUE_ITERATOR_TYPE) \
464 V(JS_FAST_DOUBLE_ARRAY_KEY_VALUE_ITERATOR_TYPE) \
465 V(JS_FAST_HOLEY_DOUBLE_ARRAY_KEY_VALUE_ITERATOR_TYPE) \
466 V(JS_GENERIC_ARRAY_KEY_VALUE_ITERATOR_TYPE) \
467 \
468 V(JS_INT8_ARRAY_VALUE_ITERATOR_TYPE) \
469 V(JS_UINT8_ARRAY_VALUE_ITERATOR_TYPE) \
470 V(JS_INT16_ARRAY_VALUE_ITERATOR_TYPE) \
471 V(JS_UINT16_ARRAY_VALUE_ITERATOR_TYPE) \
472 V(JS_INT32_ARRAY_VALUE_ITERATOR_TYPE) \
473 V(JS_UINT32_ARRAY_VALUE_ITERATOR_TYPE) \
474 V(JS_FLOAT32_ARRAY_VALUE_ITERATOR_TYPE) \
475 V(JS_FLOAT64_ARRAY_VALUE_ITERATOR_TYPE) \
476 V(JS_UINT8_CLAMPED_ARRAY_VALUE_ITERATOR_TYPE) \
477 \
478 V(JS_FAST_SMI_ARRAY_VALUE_ITERATOR_TYPE) \
479 V(JS_FAST_HOLEY_SMI_ARRAY_VALUE_ITERATOR_TYPE) \
480 V(JS_FAST_ARRAY_VALUE_ITERATOR_TYPE) \
481 V(JS_FAST_HOLEY_ARRAY_VALUE_ITERATOR_TYPE) \
482 V(JS_FAST_DOUBLE_ARRAY_VALUE_ITERATOR_TYPE) \
483 V(JS_FAST_HOLEY_DOUBLE_ARRAY_VALUE_ITERATOR_TYPE) \
484 V(JS_GENERIC_ARRAY_VALUE_ITERATOR_TYPE) \
485 \
447 V(JS_BOUND_FUNCTION_TYPE) \ 486 V(JS_BOUND_FUNCTION_TYPE) \
448 V(JS_FUNCTION_TYPE) \ 487 V(JS_FUNCTION_TYPE) \
449 V(DEBUG_INFO_TYPE) \ 488 V(DEBUG_INFO_TYPE) \
450 V(BREAK_POINT_INFO_TYPE) 489 V(BREAK_POINT_INFO_TYPE)
451 490
452 // Since string types are not consecutive, this macro is used to 491 // Since string types are not consecutive, this macro is used to
453 // iterate over them. 492 // iterate over them.
454 #define STRING_TYPE_LIST(V) \ 493 #define STRING_TYPE_LIST(V) \
455 V(STRING_TYPE, kVariableSizeSentinel, string, String) \ 494 V(STRING_TYPE, kVariableSizeSentinel, string, String) \
456 V(ONE_BYTE_STRING_TYPE, kVariableSizeSentinel, one_byte_string, \ 495 V(ONE_BYTE_STRING_TYPE, kVariableSizeSentinel, one_byte_string, \
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 JS_SET_TYPE, 779 JS_SET_TYPE,
741 JS_MAP_TYPE, 780 JS_MAP_TYPE,
742 JS_SET_ITERATOR_TYPE, 781 JS_SET_ITERATOR_TYPE,
743 JS_MAP_ITERATOR_TYPE, 782 JS_MAP_ITERATOR_TYPE,
744 JS_WEAK_MAP_TYPE, 783 JS_WEAK_MAP_TYPE,
745 JS_WEAK_SET_TYPE, 784 JS_WEAK_SET_TYPE,
746 JS_PROMISE_TYPE, 785 JS_PROMISE_TYPE,
747 JS_REGEXP_TYPE, 786 JS_REGEXP_TYPE,
748 JS_ERROR_TYPE, 787 JS_ERROR_TYPE,
749 JS_STRING_ITERATOR_TYPE, 788 JS_STRING_ITERATOR_TYPE,
789
790 JS_TYPED_ARRAY_KEY_ITERATOR_TYPE,
791 JS_GENERIC_ARRAY_KEY_ITERATOR_TYPE,
792
793 JS_UINT8_ARRAY_KEY_VALUE_ITERATOR_TYPE,
794 JS_INT8_ARRAY_KEY_VALUE_ITERATOR_TYPE,
795 JS_UINT16_ARRAY_KEY_VALUE_ITERATOR_TYPE,
796 JS_INT16_ARRAY_KEY_VALUE_ITERATOR_TYPE,
797 JS_UINT32_ARRAY_KEY_VALUE_ITERATOR_TYPE,
798 JS_INT32_ARRAY_KEY_VALUE_ITERATOR_TYPE,
799 JS_FLOAT32_ARRAY_KEY_VALUE_ITERATOR_TYPE,
800 JS_FLOAT64_ARRAY_KEY_VALUE_ITERATOR_TYPE,
801 JS_UINT8_CLAMPED_ARRAY_KEY_VALUE_ITERATOR_TYPE,
802
803 JS_FAST_SMI_ARRAY_KEY_VALUE_ITERATOR_TYPE,
804 JS_FAST_HOLEY_SMI_ARRAY_KEY_VALUE_ITERATOR_TYPE,
805 JS_FAST_ARRAY_KEY_VALUE_ITERATOR_TYPE,
806 JS_FAST_HOLEY_ARRAY_KEY_VALUE_ITERATOR_TYPE,
807 JS_FAST_DOUBLE_ARRAY_KEY_VALUE_ITERATOR_TYPE,
808 JS_FAST_HOLEY_DOUBLE_ARRAY_KEY_VALUE_ITERATOR_TYPE,
809 JS_GENERIC_ARRAY_KEY_VALUE_ITERATOR_TYPE,
810
811 JS_UINT8_ARRAY_VALUE_ITERATOR_TYPE,
812 JS_INT8_ARRAY_VALUE_ITERATOR_TYPE,
813 JS_UINT16_ARRAY_VALUE_ITERATOR_TYPE,
814 JS_INT16_ARRAY_VALUE_ITERATOR_TYPE,
815 JS_UINT32_ARRAY_VALUE_ITERATOR_TYPE,
816 JS_INT32_ARRAY_VALUE_ITERATOR_TYPE,
817 JS_FLOAT32_ARRAY_VALUE_ITERATOR_TYPE,
818 JS_FLOAT64_ARRAY_VALUE_ITERATOR_TYPE,
819 JS_UINT8_CLAMPED_ARRAY_VALUE_ITERATOR_TYPE,
820
821 JS_FAST_SMI_ARRAY_VALUE_ITERATOR_TYPE,
822 JS_FAST_HOLEY_SMI_ARRAY_VALUE_ITERATOR_TYPE,
823 JS_FAST_ARRAY_VALUE_ITERATOR_TYPE,
824 JS_FAST_HOLEY_ARRAY_VALUE_ITERATOR_TYPE,
825 JS_FAST_DOUBLE_ARRAY_VALUE_ITERATOR_TYPE,
826 JS_FAST_HOLEY_DOUBLE_ARRAY_VALUE_ITERATOR_TYPE,
827 JS_GENERIC_ARRAY_VALUE_ITERATOR_TYPE,
828
750 JS_BOUND_FUNCTION_TYPE, 829 JS_BOUND_FUNCTION_TYPE,
751 JS_FUNCTION_TYPE, // LAST_JS_OBJECT_TYPE, LAST_JS_RECEIVER_TYPE 830 JS_FUNCTION_TYPE, // LAST_JS_OBJECT_TYPE, LAST_JS_RECEIVER_TYPE
752 831
753 // Pseudo-types 832 // Pseudo-types
754 FIRST_TYPE = 0x0, 833 FIRST_TYPE = 0x0,
755 LAST_TYPE = JS_FUNCTION_TYPE, 834 LAST_TYPE = JS_FUNCTION_TYPE,
756 FIRST_NAME_TYPE = FIRST_TYPE, 835 FIRST_NAME_TYPE = FIRST_TYPE,
757 LAST_NAME_TYPE = SYMBOL_TYPE, 836 LAST_NAME_TYPE = SYMBOL_TYPE,
758 FIRST_UNIQUE_NAME_TYPE = INTERNALIZED_STRING_TYPE, 837 FIRST_UNIQUE_NAME_TYPE = INTERNALIZED_STRING_TYPE,
759 LAST_UNIQUE_NAME_TYPE = SYMBOL_TYPE, 838 LAST_UNIQUE_NAME_TYPE = SYMBOL_TYPE,
(...skipping 16 matching lines...) Expand all
776 LAST_JS_RECEIVER_TYPE = LAST_TYPE, 855 LAST_JS_RECEIVER_TYPE = LAST_TYPE,
777 // Boundaries for testing the types represented as JSObject 856 // Boundaries for testing the types represented as JSObject
778 FIRST_JS_OBJECT_TYPE = JS_GLOBAL_OBJECT_TYPE, 857 FIRST_JS_OBJECT_TYPE = JS_GLOBAL_OBJECT_TYPE,
779 LAST_JS_OBJECT_TYPE = LAST_TYPE, 858 LAST_JS_OBJECT_TYPE = LAST_TYPE,
780 // Boundary for testing JSReceivers that need special property lookup handling 859 // Boundary for testing JSReceivers that need special property lookup handling
781 LAST_SPECIAL_RECEIVER_TYPE = JS_SPECIAL_API_OBJECT_TYPE, 860 LAST_SPECIAL_RECEIVER_TYPE = JS_SPECIAL_API_OBJECT_TYPE,
782 // Boundary case for testing JSReceivers that may have elements while having 861 // Boundary case for testing JSReceivers that may have elements while having
783 // an empty fixed array as elements backing store. This is true for string 862 // an empty fixed array as elements backing store. This is true for string
784 // wrappers. 863 // wrappers.
785 LAST_CUSTOM_ELEMENTS_RECEIVER = JS_VALUE_TYPE, 864 LAST_CUSTOM_ELEMENTS_RECEIVER = JS_VALUE_TYPE,
865
866 FIRST_JS_TYPED_ARRAY_KEY_ITERATOR_TYPE = JS_TYPED_ARRAY_KEY_ITERATOR_TYPE,
867 LAST_JS_TYPED_ARRAY_KEY_ITERATOR_TYPE = JS_TYPED_ARRAY_KEY_ITERATOR_TYPE,
868 FIRST_JS_ARRAY_KEY_ITERATOR_TYPE = JS_GENERIC_ARRAY_KEY_ITERATOR_TYPE,
869 LAST_JS_ARRAY_KEY_ITERATOR_TYPE = JS_GENERIC_ARRAY_KEY_ITERATOR_TYPE,
870 FIRST_ARRAY_KEY_ITERATOR_TYPE = FIRST_JS_TYPED_ARRAY_KEY_ITERATOR_TYPE,
871 LAST_ARRAY_KEY_ITERATOR_TYPE = LAST_JS_ARRAY_KEY_ITERATOR_TYPE,
872
873 FIRST_JS_TYPED_ARRAY_KEY_VALUE_ITERATOR_TYPE =
874 JS_UINT8_ARRAY_KEY_VALUE_ITERATOR_TYPE,
875 LAST_JS_TYPED_ARRAY_KEY_VALUE_ITERATOR_TYPE =
876 JS_UINT8_CLAMPED_ARRAY_KEY_VALUE_ITERATOR_TYPE,
877 FIRST_JS_ARRAY_KEY_VALUE_ITERATOR_TYPE =
878 JS_FAST_SMI_ARRAY_KEY_VALUE_ITERATOR_TYPE,
879 LAST_JS_ARRAY_KEY_VALUE_ITERATOR_TYPE =
880 JS_GENERIC_ARRAY_KEY_VALUE_ITERATOR_TYPE,
881 FIRST_ARRAY_KEY_VALUE_ITERATOR_TYPE =
882 FIRST_JS_TYPED_ARRAY_KEY_VALUE_ITERATOR_TYPE,
883 LAST_ARRAY_KEY_VALUE_ITERATOR_TYPE = LAST_JS_ARRAY_KEY_VALUE_ITERATOR_TYPE,
884
885 FIRST_JS_TYPED_ARRAY_VALUE_ITERATOR_TYPE = JS_UINT8_ARRAY_VALUE_ITERATOR_TYPE,
886 LAST_JS_TYPED_ARRAY_VALUE_ITERATOR_TYPE =
887 JS_UINT8_CLAMPED_ARRAY_VALUE_ITERATOR_TYPE,
888 FIRST_JS_ARRAY_VALUE_ITERATOR_TYPE = JS_FAST_SMI_ARRAY_VALUE_ITERATOR_TYPE,
889 LAST_JS_ARRAY_VALUE_ITERATOR_TYPE = JS_GENERIC_ARRAY_VALUE_ITERATOR_TYPE,
890 FIRST_ARRAY_VALUE_ITERATOR_TYPE = FIRST_JS_TYPED_ARRAY_VALUE_ITERATOR_TYPE,
891 LAST_ARRAY_VALUE_ITERATOR_TYPE = LAST_JS_ARRAY_VALUE_ITERATOR_TYPE,
892
893 FIRST_ARRAY_ITERATOR_TYPE = FIRST_JS_TYPED_ARRAY_KEY_ITERATOR_TYPE,
894 LAST_ARRAY_ITERATOR_TYPE = LAST_ARRAY_VALUE_ITERATOR_TYPE,
786 }; 895 };
787 896
788 STATIC_ASSERT(JS_OBJECT_TYPE == Internals::kJSObjectType); 897 STATIC_ASSERT(JS_OBJECT_TYPE == Internals::kJSObjectType);
789 STATIC_ASSERT(JS_API_OBJECT_TYPE == Internals::kJSApiObjectType); 898 STATIC_ASSERT(JS_API_OBJECT_TYPE == Internals::kJSApiObjectType);
790 STATIC_ASSERT(FIRST_NONSTRING_TYPE == Internals::kFirstNonstringType); 899 STATIC_ASSERT(FIRST_NONSTRING_TYPE == Internals::kFirstNonstringType);
791 STATIC_ASSERT(ODDBALL_TYPE == Internals::kOddballType); 900 STATIC_ASSERT(ODDBALL_TYPE == Internals::kOddballType);
792 STATIC_ASSERT(FOREIGN_TYPE == Internals::kForeignType); 901 STATIC_ASSERT(FOREIGN_TYPE == Internals::kForeignType);
793 902
794 V8_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os, 903 V8_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
795 InstanceType instance_type); 904 InstanceType instance_type);
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
1021 V(JSDate) \ 1130 V(JSDate) \
1022 V(JSMessageObject) \ 1131 V(JSMessageObject) \
1023 V(StringWrapper) \ 1132 V(StringWrapper) \
1024 V(Foreign) \ 1133 V(Foreign) \
1025 V(Boolean) \ 1134 V(Boolean) \
1026 V(JSArray) \ 1135 V(JSArray) \
1027 V(JSArrayBuffer) \ 1136 V(JSArrayBuffer) \
1028 V(JSArrayBufferView) \ 1137 V(JSArrayBufferView) \
1029 V(JSCollection) \ 1138 V(JSCollection) \
1030 V(JSTypedArray) \ 1139 V(JSTypedArray) \
1140 V(JSArrayIterator) \
1031 V(JSDataView) \ 1141 V(JSDataView) \
1032 V(JSProxy) \ 1142 V(JSProxy) \
1033 V(JSError) \ 1143 V(JSError) \
1034 V(JSPromise) \ 1144 V(JSPromise) \
1035 V(JSStringIterator) \ 1145 V(JSStringIterator) \
1036 V(JSSet) \ 1146 V(JSSet) \
1037 V(JSMap) \ 1147 V(JSMap) \
1038 V(JSSetIterator) \ 1148 V(JSSetIterator) \
1039 V(JSMapIterator) \ 1149 V(JSMapIterator) \
1040 V(JSWeakCollection) \ 1150 V(JSWeakCollection) \
(...skipping 9466 matching lines...) Expand 10 before | Expand all | Expand 10 after
10507 static void Clear(Handle<JSMap> map); 10617 static void Clear(Handle<JSMap> map);
10508 10618
10509 // Dispatched behavior. 10619 // Dispatched behavior.
10510 DECLARE_PRINTER(JSMap) 10620 DECLARE_PRINTER(JSMap)
10511 DECLARE_VERIFIER(JSMap) 10621 DECLARE_VERIFIER(JSMap)
10512 10622
10513 private: 10623 private:
10514 DISALLOW_IMPLICIT_CONSTRUCTORS(JSMap); 10624 DISALLOW_IMPLICIT_CONSTRUCTORS(JSMap);
10515 }; 10625 };
10516 10626
10627 class JSArrayIterator : public JSObject {
10628 public:
10629 DECLARE_PRINTER(JSArrayIterator)
10630 DECLARE_VERIFIER(JSArrayIterator)
10631
10632 DECLARE_CAST(JSArrayIterator)
10633
10634 // [object]: the [[IteratedObject]] internal field.
10635 DECL_ACCESSORS(object, Object)
10636
10637 // [index]: The [[ArrayIteratorNextIndex]] internal field.
10638 DECL_ACCESSORS(index, Object)
10639
10640 // [map]: The Map of the [[IteratedObject]] field at the time the iterator is
10641 // allocated.
10642 DECL_ACCESSORS(object_map, Map)
10643
10644 static const int kIteratedObjectOffset = JSObject::kHeaderSize;
10645 static const int kNextIndexOffset = kIteratedObjectOffset + kPointerSize;
10646 static const int kIteratedObjectMapOffset = kNextIndexOffset + kPointerSize;
10647 static const int kSize = kIteratedObjectMapOffset + kPointerSize;
10648
10649 private:
10650 DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayIterator);
10651 };
10652
10517 class JSStringIterator : public JSObject { 10653 class JSStringIterator : public JSObject {
10518 public: 10654 public:
10519 // Dispatched behavior. 10655 // Dispatched behavior.
10520 DECLARE_PRINTER(JSStringIterator) 10656 DECLARE_PRINTER(JSStringIterator)
10521 DECLARE_VERIFIER(JSStringIterator) 10657 DECLARE_VERIFIER(JSStringIterator)
10522 10658
10523 DECLARE_CAST(JSStringIterator) 10659 DECLARE_CAST(JSStringIterator)
10524 10660
10525 // [string]: the [[IteratedString]] internal field. 10661 // [string]: the [[IteratedString]] internal field.
10526 DECL_ACCESSORS(string, String) 10662 DECL_ACCESSORS(string, String)
(...skipping 1080 matching lines...) Expand 10 before | Expand all | Expand 10 after
11607 } 11743 }
11608 return value; 11744 return value;
11609 } 11745 }
11610 }; 11746 };
11611 11747
11612 11748
11613 } // NOLINT, false-positive due to second-order macros. 11749 } // NOLINT, false-positive due to second-order macros.
11614 } // NOLINT, false-positive due to second-order macros. 11750 } // NOLINT, false-positive due to second-order macros.
11615 11751
11616 #endif // V8_OBJECTS_H_ 11752 #endif // V8_OBJECTS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698