OLD | NEW |
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 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 // - ScriptContextTable | 102 // - ScriptContextTable |
103 // - WeakFixedArray | 103 // - WeakFixedArray |
104 // - FixedDoubleArray | 104 // - FixedDoubleArray |
105 // - Name | 105 // - Name |
106 // - String | 106 // - String |
107 // - SeqString | 107 // - SeqString |
108 // - SeqOneByteString | 108 // - SeqOneByteString |
109 // - SeqTwoByteString | 109 // - SeqTwoByteString |
110 // - SlicedString | 110 // - SlicedString |
111 // - ConsString | 111 // - ConsString |
| 112 // - ThinString |
112 // - ExternalString | 113 // - ExternalString |
113 // - ExternalOneByteString | 114 // - ExternalOneByteString |
114 // - ExternalTwoByteString | 115 // - ExternalTwoByteString |
115 // - InternalizedString | 116 // - InternalizedString |
116 // - SeqInternalizedString | 117 // - SeqInternalizedString |
117 // - SeqOneByteInternalizedString | 118 // - SeqOneByteInternalizedString |
118 // - SeqTwoByteInternalizedString | 119 // - SeqTwoByteInternalizedString |
119 // - ConsInternalizedString | 120 // - ConsInternalizedString |
120 // - ExternalInternalizedString | 121 // - ExternalInternalizedString |
121 // - ExternalOneByteInternalizedString | 122 // - ExternalOneByteInternalizedString |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 V(ONE_BYTE_INTERNALIZED_STRING_TYPE) \ | 324 V(ONE_BYTE_INTERNALIZED_STRING_TYPE) \ |
324 V(EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE) \ | 325 V(EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE) \ |
325 V(EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE) \ | 326 V(EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE) \ |
326 V(SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE) \ | 327 V(SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE) \ |
327 V(SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE) \ | 328 V(SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE) \ |
328 V(SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE) \ | 329 V(SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE) \ |
329 V(STRING_TYPE) \ | 330 V(STRING_TYPE) \ |
330 V(CONS_STRING_TYPE) \ | 331 V(CONS_STRING_TYPE) \ |
331 V(EXTERNAL_STRING_TYPE) \ | 332 V(EXTERNAL_STRING_TYPE) \ |
332 V(SLICED_STRING_TYPE) \ | 333 V(SLICED_STRING_TYPE) \ |
| 334 V(THIN_STRING_TYPE) \ |
333 V(ONE_BYTE_STRING_TYPE) \ | 335 V(ONE_BYTE_STRING_TYPE) \ |
334 V(CONS_ONE_BYTE_STRING_TYPE) \ | 336 V(CONS_ONE_BYTE_STRING_TYPE) \ |
335 V(EXTERNAL_ONE_BYTE_STRING_TYPE) \ | 337 V(EXTERNAL_ONE_BYTE_STRING_TYPE) \ |
336 V(SLICED_ONE_BYTE_STRING_TYPE) \ | 338 V(SLICED_ONE_BYTE_STRING_TYPE) \ |
| 339 V(THIN_ONE_BYTE_STRING_TYPE) \ |
337 V(EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE) \ | 340 V(EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE) \ |
338 V(SHORT_EXTERNAL_STRING_TYPE) \ | 341 V(SHORT_EXTERNAL_STRING_TYPE) \ |
339 V(SHORT_EXTERNAL_ONE_BYTE_STRING_TYPE) \ | 342 V(SHORT_EXTERNAL_ONE_BYTE_STRING_TYPE) \ |
340 V(SHORT_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE) \ | 343 V(SHORT_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE) \ |
341 \ | 344 \ |
342 V(SYMBOL_TYPE) \ | 345 V(SYMBOL_TYPE) \ |
343 V(HEAP_NUMBER_TYPE) \ | 346 V(HEAP_NUMBER_TYPE) \ |
344 V(SIMD128_VALUE_TYPE) \ | 347 V(SIMD128_VALUE_TYPE) \ |
345 V(ODDBALL_TYPE) \ | 348 V(ODDBALL_TYPE) \ |
346 \ | 349 \ |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 V(SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE, \ | 513 V(SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE, \ |
511 ExternalTwoByteString::kShortSize, short_external_internalized_string, \ | 514 ExternalTwoByteString::kShortSize, short_external_internalized_string, \ |
512 ShortExternalInternalizedString) \ | 515 ShortExternalInternalizedString) \ |
513 V(SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE, \ | 516 V(SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE, \ |
514 ExternalOneByteString::kShortSize, \ | 517 ExternalOneByteString::kShortSize, \ |
515 short_external_one_byte_internalized_string, \ | 518 short_external_one_byte_internalized_string, \ |
516 ShortExternalOneByteInternalizedString) \ | 519 ShortExternalOneByteInternalizedString) \ |
517 V(SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE, \ | 520 V(SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE, \ |
518 ExternalTwoByteString::kShortSize, \ | 521 ExternalTwoByteString::kShortSize, \ |
519 short_external_internalized_string_with_one_byte_data, \ | 522 short_external_internalized_string_with_one_byte_data, \ |
520 ShortExternalInternalizedStringWithOneByteData) | 523 ShortExternalInternalizedStringWithOneByteData) \ |
| 524 V(THIN_STRING_TYPE, ThinString::kSize, thin_string, ThinString) \ |
| 525 V(THIN_ONE_BYTE_STRING_TYPE, ThinString::kSize, thin_one_byte_string, \ |
| 526 ThinOneByteString) |
521 | 527 |
522 // A struct is a simple object a set of object-valued fields. Including an | 528 // A struct is a simple object a set of object-valued fields. Including an |
523 // object type in this causes the compiler to generate most of the boilerplate | 529 // object type in this causes the compiler to generate most of the boilerplate |
524 // code for the class including allocation and garbage collection routines, | 530 // code for the class including allocation and garbage collection routines, |
525 // casts and predicates. All you need to define is the class, methods and | 531 // casts and predicates. All you need to define is the class, methods and |
526 // object verification routines. Easy, no? | 532 // object verification routines. Easy, no? |
527 // | 533 // |
528 // Note that for subtle reasons related to the ordering or numerical values of | 534 // Note that for subtle reasons related to the ordering or numerical values of |
529 // type tags, elements in this list have to be added to the INSTANCE_TYPE_LIST | 535 // type tags, elements in this list have to be added to the INSTANCE_TYPE_LIST |
530 // manually. | 536 // manually. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
562 const uint32_t kIsNotStringMask = 0x80; | 568 const uint32_t kIsNotStringMask = 0x80; |
563 const uint32_t kStringTag = 0x0; | 569 const uint32_t kStringTag = 0x0; |
564 const uint32_t kNotStringTag = 0x80; | 570 const uint32_t kNotStringTag = 0x80; |
565 | 571 |
566 // Bit 6 indicates that the object is an internalized string (if set) or not. | 572 // Bit 6 indicates that the object is an internalized string (if set) or not. |
567 // Bit 7 has to be clear as well. | 573 // Bit 7 has to be clear as well. |
568 const uint32_t kIsNotInternalizedMask = 0x40; | 574 const uint32_t kIsNotInternalizedMask = 0x40; |
569 const uint32_t kNotInternalizedTag = 0x40; | 575 const uint32_t kNotInternalizedTag = 0x40; |
570 const uint32_t kInternalizedTag = 0x0; | 576 const uint32_t kInternalizedTag = 0x0; |
571 | 577 |
572 // If bit 7 is clear then bit 2 indicates whether the string consists of | 578 // If bit 7 is clear then bit 3 indicates whether the string consists of |
573 // two-byte characters or one-byte characters. | 579 // two-byte characters or one-byte characters. |
574 const uint32_t kStringEncodingMask = 0x4; | 580 const uint32_t kStringEncodingMask = 0x8; |
575 const uint32_t kTwoByteStringTag = 0x0; | 581 const uint32_t kTwoByteStringTag = 0x0; |
576 const uint32_t kOneByteStringTag = 0x4; | 582 const uint32_t kOneByteStringTag = 0x8; |
577 | 583 |
578 // If bit 7 is clear, the low-order 2 bits indicate the representation | 584 // If bit 7 is clear, the low-order 3 bits indicate the representation |
579 // of the string. | 585 // of the string. |
580 const uint32_t kStringRepresentationMask = 0x03; | 586 const uint32_t kStringRepresentationMask = 0x07; |
581 enum StringRepresentationTag { | 587 enum StringRepresentationTag { |
582 kSeqStringTag = 0x0, | 588 kSeqStringTag = 0x0, |
583 kConsStringTag = 0x1, | 589 kConsStringTag = 0x1, |
584 kExternalStringTag = 0x2, | 590 kExternalStringTag = 0x2, |
585 kSlicedStringTag = 0x3 | 591 kSlicedStringTag = 0x3, |
| 592 kThinStringTag = 0x5 |
586 }; | 593 }; |
587 const uint32_t kIsIndirectStringMask = 0x1; | 594 const uint32_t kIsIndirectStringMask = 0x1; |
588 const uint32_t kIsIndirectStringTag = 0x1; | 595 const uint32_t kIsIndirectStringTag = 0x1; |
589 STATIC_ASSERT((kSeqStringTag & kIsIndirectStringMask) == 0); // NOLINT | 596 STATIC_ASSERT((kSeqStringTag & kIsIndirectStringMask) == 0); // NOLINT |
590 STATIC_ASSERT((kExternalStringTag & kIsIndirectStringMask) == 0); // NOLINT | 597 STATIC_ASSERT((kExternalStringTag & kIsIndirectStringMask) == 0); // NOLINT |
591 STATIC_ASSERT((kConsStringTag & | 598 STATIC_ASSERT((kConsStringTag & |
592 kIsIndirectStringMask) == kIsIndirectStringTag); // NOLINT | 599 kIsIndirectStringMask) == kIsIndirectStringTag); // NOLINT |
593 STATIC_ASSERT((kSlicedStringTag & | 600 STATIC_ASSERT((kSlicedStringTag & |
594 kIsIndirectStringMask) == kIsIndirectStringTag); // NOLINT | 601 kIsIndirectStringMask) == kIsIndirectStringTag); // NOLINT |
| 602 STATIC_ASSERT((kThinStringTag & kIsIndirectStringMask) == kIsIndirectStringTag); |
595 | 603 |
596 // Use this mask to distinguish between cons and slice only after making | 604 // If bit 7 is clear, then bit 4 indicates whether this two-byte |
597 // sure that the string is one of the two (an indirect string). | |
598 const uint32_t kSlicedNotConsMask = kSlicedStringTag & ~kConsStringTag; | |
599 STATIC_ASSERT(IS_POWER_OF_TWO(kSlicedNotConsMask)); | |
600 | |
601 // If bit 7 is clear, then bit 3 indicates whether this two-byte | |
602 // string actually contains one byte data. | 605 // string actually contains one byte data. |
603 const uint32_t kOneByteDataHintMask = 0x08; | 606 const uint32_t kOneByteDataHintMask = 0x10; |
604 const uint32_t kOneByteDataHintTag = 0x08; | 607 const uint32_t kOneByteDataHintTag = 0x10; |
605 | 608 |
606 // If bit 7 is clear and string representation indicates an external string, | 609 // If bit 7 is clear and string representation indicates an external string, |
607 // then bit 4 indicates whether the data pointer is cached. | 610 // then bit 5 indicates whether the data pointer is cached. |
608 const uint32_t kShortExternalStringMask = 0x10; | 611 const uint32_t kShortExternalStringMask = 0x20; |
609 const uint32_t kShortExternalStringTag = 0x10; | 612 const uint32_t kShortExternalStringTag = 0x20; |
610 | 613 |
611 // A ConsString with an empty string as the right side is a candidate | 614 // A ConsString with an empty string as the right side is a candidate |
612 // for being shortcut by the garbage collector. We don't allocate any | 615 // for being shortcut by the garbage collector. We don't allocate any |
613 // non-flat internalized strings, so we do not shortcut them thereby | 616 // non-flat internalized strings, so we do not shortcut them thereby |
614 // avoiding turning internalized strings into strings. The bit-masks | 617 // avoiding turning internalized strings into strings. The bit-masks |
615 // below contain the internalized bit as additional safety. | 618 // below contain the internalized bit as additional safety. |
616 // See heap.cc, mark-compact.cc and objects-visiting.cc. | 619 // See heap.cc, mark-compact.cc and objects-visiting.cc. |
617 const uint32_t kShortcutTypeMask = | 620 const uint32_t kShortcutTypeMask = |
618 kIsNotStringMask | | 621 kIsNotStringMask | |
619 kIsNotInternalizedMask | | 622 kIsNotInternalizedMask | |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
663 EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE = | 666 EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE = |
664 EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE | | 667 EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE | |
665 kNotInternalizedTag, | 668 kNotInternalizedTag, |
666 SHORT_EXTERNAL_STRING_TYPE = | 669 SHORT_EXTERNAL_STRING_TYPE = |
667 SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE | kNotInternalizedTag, | 670 SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE | kNotInternalizedTag, |
668 SHORT_EXTERNAL_ONE_BYTE_STRING_TYPE = | 671 SHORT_EXTERNAL_ONE_BYTE_STRING_TYPE = |
669 SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE | kNotInternalizedTag, | 672 SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE | kNotInternalizedTag, |
670 SHORT_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE = | 673 SHORT_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE = |
671 SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE | | 674 SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE | |
672 kNotInternalizedTag, | 675 kNotInternalizedTag, |
| 676 THIN_STRING_TYPE = kTwoByteStringTag | kThinStringTag | kNotInternalizedTag, |
| 677 THIN_ONE_BYTE_STRING_TYPE = |
| 678 kOneByteStringTag | kThinStringTag | kNotInternalizedTag, |
673 | 679 |
674 // Non-string names | 680 // Non-string names |
675 SYMBOL_TYPE = kNotStringTag, // FIRST_NONSTRING_TYPE, LAST_NAME_TYPE | 681 SYMBOL_TYPE = kNotStringTag, // FIRST_NONSTRING_TYPE, LAST_NAME_TYPE |
676 | 682 |
677 // Other primitives (cannot contain non-map-word pointers to heap objects). | 683 // Other primitives (cannot contain non-map-word pointers to heap objects). |
678 HEAP_NUMBER_TYPE, | 684 HEAP_NUMBER_TYPE, |
679 SIMD128_VALUE_TYPE, | 685 SIMD128_VALUE_TYPE, |
680 ODDBALL_TYPE, // LAST_PRIMITIVE_TYPE | 686 ODDBALL_TYPE, // LAST_PRIMITIVE_TYPE |
681 | 687 |
682 // Objects allocated in their own spaces (never in new space). | 688 // Objects allocated in their own spaces (never in new space). |
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1011 V(String) \ | 1017 V(String) \ |
1012 V(SeqString) \ | 1018 V(SeqString) \ |
1013 V(ExternalString) \ | 1019 V(ExternalString) \ |
1014 V(ConsString) \ | 1020 V(ConsString) \ |
1015 V(SlicedString) \ | 1021 V(SlicedString) \ |
1016 V(ExternalTwoByteString) \ | 1022 V(ExternalTwoByteString) \ |
1017 V(ExternalOneByteString) \ | 1023 V(ExternalOneByteString) \ |
1018 V(SeqTwoByteString) \ | 1024 V(SeqTwoByteString) \ |
1019 V(SeqOneByteString) \ | 1025 V(SeqOneByteString) \ |
1020 V(InternalizedString) \ | 1026 V(InternalizedString) \ |
| 1027 V(ThinString) \ |
1021 V(Symbol) \ | 1028 V(Symbol) \ |
1022 \ | 1029 \ |
1023 V(FixedTypedArrayBase) \ | 1030 V(FixedTypedArrayBase) \ |
1024 V(FixedUint8Array) \ | 1031 V(FixedUint8Array) \ |
1025 V(FixedInt8Array) \ | 1032 V(FixedInt8Array) \ |
1026 V(FixedUint16Array) \ | 1033 V(FixedUint16Array) \ |
1027 V(FixedInt16Array) \ | 1034 V(FixedInt16Array) \ |
1028 V(FixedUint32Array) \ | 1035 V(FixedUint32Array) \ |
1029 V(FixedInt32Array) \ | 1036 V(FixedInt32Array) \ |
1030 V(FixedFloat32Array) \ | 1037 V(FixedFloat32Array) \ |
(...skipping 8180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9211 // concrete performance benefit at that particular point in the code. | 9218 // concrete performance benefit at that particular point in the code. |
9212 class StringShape BASE_EMBEDDED { | 9219 class StringShape BASE_EMBEDDED { |
9213 public: | 9220 public: |
9214 inline explicit StringShape(const String* s); | 9221 inline explicit StringShape(const String* s); |
9215 inline explicit StringShape(Map* s); | 9222 inline explicit StringShape(Map* s); |
9216 inline explicit StringShape(InstanceType t); | 9223 inline explicit StringShape(InstanceType t); |
9217 inline bool IsSequential(); | 9224 inline bool IsSequential(); |
9218 inline bool IsExternal(); | 9225 inline bool IsExternal(); |
9219 inline bool IsCons(); | 9226 inline bool IsCons(); |
9220 inline bool IsSliced(); | 9227 inline bool IsSliced(); |
| 9228 inline bool IsThin(); |
9221 inline bool IsIndirect(); | 9229 inline bool IsIndirect(); |
9222 inline bool IsExternalOneByte(); | 9230 inline bool IsExternalOneByte(); |
9223 inline bool IsExternalTwoByte(); | 9231 inline bool IsExternalTwoByte(); |
9224 inline bool IsSequentialOneByte(); | 9232 inline bool IsSequentialOneByte(); |
9225 inline bool IsSequentialTwoByte(); | 9233 inline bool IsSequentialTwoByte(); |
9226 inline bool IsInternalized(); | 9234 inline bool IsInternalized(); |
9227 inline StringRepresentationTag representation_tag(); | 9235 inline StringRepresentationTag representation_tag(); |
9228 inline uint32_t encoding_tag(); | 9236 inline uint32_t encoding_tag(); |
9229 inline uint32_t full_representation_tag(); | 9237 inline uint32_t full_representation_tag(); |
9230 inline uint32_t size_tag(); | 9238 inline uint32_t size_tag(); |
(...skipping 692 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9923 | 9931 |
9924 typedef FixedBodyDescriptor<kFirstOffset, kSecondOffset + kPointerSize, kSize> | 9932 typedef FixedBodyDescriptor<kFirstOffset, kSecondOffset + kPointerSize, kSize> |
9925 BodyDescriptor; | 9933 BodyDescriptor; |
9926 | 9934 |
9927 DECLARE_VERIFIER(ConsString) | 9935 DECLARE_VERIFIER(ConsString) |
9928 | 9936 |
9929 private: | 9937 private: |
9930 DISALLOW_IMPLICIT_CONSTRUCTORS(ConsString); | 9938 DISALLOW_IMPLICIT_CONSTRUCTORS(ConsString); |
9931 }; | 9939 }; |
9932 | 9940 |
| 9941 // The ThinString class describes string objects that are just references |
| 9942 // to another string object. They are used for in-place internalization when |
| 9943 // the original string cannot actually be internalized in-place: in these |
| 9944 // cases, the original string is converted to a ThinString pointing at its |
| 9945 // internalized version (which is allocated as a new object). |
| 9946 // In terms of memory layout and most algorithms operating on strings, |
| 9947 // ThinStrings can be thought of as "one-part cons strings". |
| 9948 class ThinString : public String { |
| 9949 public: |
| 9950 // Actual string that this ThinString refers to. |
| 9951 inline String* actual() const; |
| 9952 inline void set_actual(String* s, |
| 9953 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); |
| 9954 |
| 9955 V8_EXPORT_PRIVATE uint16_t ThinStringGet(int index); |
| 9956 |
| 9957 DECLARE_CAST(ThinString) |
| 9958 DECLARE_VERIFIER(ThinString) |
| 9959 |
| 9960 // Layout description. |
| 9961 static const int kActualOffset = String::kSize; |
| 9962 static const int kSize = kActualOffset + kPointerSize; |
| 9963 |
| 9964 typedef FixedBodyDescriptor<kActualOffset, kSize, kSize> BodyDescriptor; |
| 9965 |
| 9966 private: |
| 9967 DISALLOW_COPY_AND_ASSIGN(ThinString); |
| 9968 }; |
9933 | 9969 |
9934 // The Sliced String class describes strings that are substrings of another | 9970 // The Sliced String class describes strings that are substrings of another |
9935 // sequential string. The motivation is to save time and memory when creating | 9971 // sequential string. The motivation is to save time and memory when creating |
9936 // a substring. A Sliced String is described as a pointer to the parent, | 9972 // a substring. A Sliced String is described as a pointer to the parent, |
9937 // the offset from the start of the parent string and the length. Using | 9973 // the offset from the start of the parent string and the length. Using |
9938 // a Sliced String therefore requires unpacking of the parent string and | 9974 // a Sliced String therefore requires unpacking of the parent string and |
9939 // adding the offset to the start address. A substring of a Sliced String | 9975 // adding the offset to the start address. A substring of a Sliced String |
9940 // are not nested since the double indirection is simplified when creating | 9976 // are not nested since the double indirection is simplified when creating |
9941 // such a substring. | 9977 // such a substring. |
9942 // Currently missing features are: | 9978 // Currently missing features are: |
(...skipping 1708 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11651 } | 11687 } |
11652 }; | 11688 }; |
11653 | 11689 |
11654 | 11690 |
11655 } // NOLINT, false-positive due to second-order macros. | 11691 } // NOLINT, false-positive due to second-order macros. |
11656 } // NOLINT, false-positive due to second-order macros. | 11692 } // NOLINT, false-positive due to second-order macros. |
11657 | 11693 |
11658 #include "src/objects/object-macros-undef.h" | 11694 #include "src/objects/object-macros-undef.h" |
11659 | 11695 |
11660 #endif // V8_OBJECTS_H_ | 11696 #endif // V8_OBJECTS_H_ |
OLD | NEW |