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 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 // - ScriptContextTable | 101 // - ScriptContextTable |
102 // - WeakFixedArray | 102 // - WeakFixedArray |
103 // - FixedDoubleArray | 103 // - FixedDoubleArray |
104 // - Name | 104 // - Name |
105 // - String | 105 // - String |
106 // - SeqString | 106 // - SeqString |
107 // - SeqOneByteString | 107 // - SeqOneByteString |
108 // - SeqTwoByteString | 108 // - SeqTwoByteString |
109 // - SlicedString | 109 // - SlicedString |
110 // - ConsString | 110 // - ConsString |
111 // - ThinString | |
112 // - ExternalString | 111 // - ExternalString |
113 // - ExternalOneByteString | 112 // - ExternalOneByteString |
114 // - ExternalTwoByteString | 113 // - ExternalTwoByteString |
115 // - InternalizedString | 114 // - InternalizedString |
116 // - SeqInternalizedString | 115 // - SeqInternalizedString |
117 // - SeqOneByteInternalizedString | 116 // - SeqOneByteInternalizedString |
118 // - SeqTwoByteInternalizedString | 117 // - SeqTwoByteInternalizedString |
119 // - ConsInternalizedString | 118 // - ConsInternalizedString |
120 // - ExternalInternalizedString | 119 // - ExternalInternalizedString |
121 // - ExternalOneByteInternalizedString | 120 // - ExternalOneByteInternalizedString |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 V(ONE_BYTE_INTERNALIZED_STRING_TYPE) \ | 326 V(ONE_BYTE_INTERNALIZED_STRING_TYPE) \ |
328 V(EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE) \ | 327 V(EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE) \ |
329 V(EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE) \ | 328 V(EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE) \ |
330 V(SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE) \ | 329 V(SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE) \ |
331 V(SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE) \ | 330 V(SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE) \ |
332 V(SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE) \ | 331 V(SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE) \ |
333 V(STRING_TYPE) \ | 332 V(STRING_TYPE) \ |
334 V(CONS_STRING_TYPE) \ | 333 V(CONS_STRING_TYPE) \ |
335 V(EXTERNAL_STRING_TYPE) \ | 334 V(EXTERNAL_STRING_TYPE) \ |
336 V(SLICED_STRING_TYPE) \ | 335 V(SLICED_STRING_TYPE) \ |
337 V(THIN_STRING_TYPE) \ | |
338 V(ONE_BYTE_STRING_TYPE) \ | 336 V(ONE_BYTE_STRING_TYPE) \ |
339 V(CONS_ONE_BYTE_STRING_TYPE) \ | 337 V(CONS_ONE_BYTE_STRING_TYPE) \ |
340 V(EXTERNAL_ONE_BYTE_STRING_TYPE) \ | 338 V(EXTERNAL_ONE_BYTE_STRING_TYPE) \ |
341 V(SLICED_ONE_BYTE_STRING_TYPE) \ | 339 V(SLICED_ONE_BYTE_STRING_TYPE) \ |
342 V(THIN_ONE_BYTE_STRING_TYPE) \ | |
343 V(EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE) \ | 340 V(EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE) \ |
344 V(SHORT_EXTERNAL_STRING_TYPE) \ | 341 V(SHORT_EXTERNAL_STRING_TYPE) \ |
345 V(SHORT_EXTERNAL_ONE_BYTE_STRING_TYPE) \ | 342 V(SHORT_EXTERNAL_ONE_BYTE_STRING_TYPE) \ |
346 V(SHORT_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE) \ | 343 V(SHORT_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE) \ |
347 \ | 344 \ |
348 V(SYMBOL_TYPE) \ | 345 V(SYMBOL_TYPE) \ |
349 V(HEAP_NUMBER_TYPE) \ | 346 V(HEAP_NUMBER_TYPE) \ |
350 V(SIMD128_VALUE_TYPE) \ | 347 V(SIMD128_VALUE_TYPE) \ |
351 V(ODDBALL_TYPE) \ | 348 V(ODDBALL_TYPE) \ |
352 \ | 349 \ |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
516 V(SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE, \ | 513 V(SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE, \ |
517 ExternalTwoByteString::kShortSize, short_external_internalized_string, \ | 514 ExternalTwoByteString::kShortSize, short_external_internalized_string, \ |
518 ShortExternalInternalizedString) \ | 515 ShortExternalInternalizedString) \ |
519 V(SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE, \ | 516 V(SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE, \ |
520 ExternalOneByteString::kShortSize, \ | 517 ExternalOneByteString::kShortSize, \ |
521 short_external_one_byte_internalized_string, \ | 518 short_external_one_byte_internalized_string, \ |
522 ShortExternalOneByteInternalizedString) \ | 519 ShortExternalOneByteInternalizedString) \ |
523 V(SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE, \ | 520 V(SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE, \ |
524 ExternalTwoByteString::kShortSize, \ | 521 ExternalTwoByteString::kShortSize, \ |
525 short_external_internalized_string_with_one_byte_data, \ | 522 short_external_internalized_string_with_one_byte_data, \ |
526 ShortExternalInternalizedStringWithOneByteData) \ | 523 ShortExternalInternalizedStringWithOneByteData) |
527 V(THIN_STRING_TYPE, ThinString::kSize, thin_string, ThinString) \ | |
528 V(THIN_ONE_BYTE_STRING_TYPE, ThinString::kSize, thin_one_byte_string, \ | |
529 ThinOneByteString) | |
530 | 524 |
531 // A struct is a simple object a set of object-valued fields. Including an | 525 // A struct is a simple object a set of object-valued fields. Including an |
532 // object type in this causes the compiler to generate most of the boilerplate | 526 // object type in this causes the compiler to generate most of the boilerplate |
533 // code for the class including allocation and garbage collection routines, | 527 // code for the class including allocation and garbage collection routines, |
534 // casts and predicates. All you need to define is the class, methods and | 528 // casts and predicates. All you need to define is the class, methods and |
535 // object verification routines. Easy, no? | 529 // object verification routines. Easy, no? |
536 // | 530 // |
537 // Note that for subtle reasons related to the ordering or numerical values of | 531 // Note that for subtle reasons related to the ordering or numerical values of |
538 // type tags, elements in this list have to be added to the INSTANCE_TYPE_LIST | 532 // type tags, elements in this list have to be added to the INSTANCE_TYPE_LIST |
539 // manually. | 533 // manually. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
571 const uint32_t kIsNotStringMask = 0x80; | 565 const uint32_t kIsNotStringMask = 0x80; |
572 const uint32_t kStringTag = 0x0; | 566 const uint32_t kStringTag = 0x0; |
573 const uint32_t kNotStringTag = 0x80; | 567 const uint32_t kNotStringTag = 0x80; |
574 | 568 |
575 // Bit 6 indicates that the object is an internalized string (if set) or not. | 569 // Bit 6 indicates that the object is an internalized string (if set) or not. |
576 // Bit 7 has to be clear as well. | 570 // Bit 7 has to be clear as well. |
577 const uint32_t kIsNotInternalizedMask = 0x40; | 571 const uint32_t kIsNotInternalizedMask = 0x40; |
578 const uint32_t kNotInternalizedTag = 0x40; | 572 const uint32_t kNotInternalizedTag = 0x40; |
579 const uint32_t kInternalizedTag = 0x0; | 573 const uint32_t kInternalizedTag = 0x0; |
580 | 574 |
581 // If bit 7 is clear then bit 3 indicates whether the string consists of | 575 // If bit 7 is clear then bit 2 indicates whether the string consists of |
582 // two-byte characters or one-byte characters. | 576 // two-byte characters or one-byte characters. |
583 const uint32_t kStringEncodingMask = 0x8; | 577 const uint32_t kStringEncodingMask = 0x4; |
584 const uint32_t kTwoByteStringTag = 0x0; | 578 const uint32_t kTwoByteStringTag = 0x0; |
585 const uint32_t kOneByteStringTag = 0x8; | 579 const uint32_t kOneByteStringTag = 0x4; |
586 | 580 |
587 // If bit 7 is clear, the low-order 3 bits indicate the representation | 581 // If bit 7 is clear, the low-order 2 bits indicate the representation |
588 // of the string. | 582 // of the string. |
589 const uint32_t kStringRepresentationMask = 0x07; | 583 const uint32_t kStringRepresentationMask = 0x03; |
590 enum StringRepresentationTag { | 584 enum StringRepresentationTag { |
591 kSeqStringTag = 0x0, | 585 kSeqStringTag = 0x0, |
592 kConsStringTag = 0x1, | 586 kConsStringTag = 0x1, |
593 kExternalStringTag = 0x2, | 587 kExternalStringTag = 0x2, |
594 kSlicedStringTag = 0x3, | 588 kSlicedStringTag = 0x3 |
595 kThinStringTag = 0x5 | |
596 }; | 589 }; |
597 const uint32_t kIsIndirectStringMask = 0x1; | 590 const uint32_t kIsIndirectStringMask = 0x1; |
598 const uint32_t kIsIndirectStringTag = 0x1; | 591 const uint32_t kIsIndirectStringTag = 0x1; |
599 STATIC_ASSERT((kSeqStringTag & kIsIndirectStringMask) == 0); // NOLINT | 592 STATIC_ASSERT((kSeqStringTag & kIsIndirectStringMask) == 0); // NOLINT |
600 STATIC_ASSERT((kExternalStringTag & kIsIndirectStringMask) == 0); // NOLINT | 593 STATIC_ASSERT((kExternalStringTag & kIsIndirectStringMask) == 0); // NOLINT |
601 STATIC_ASSERT((kConsStringTag & | 594 STATIC_ASSERT((kConsStringTag & |
602 kIsIndirectStringMask) == kIsIndirectStringTag); // NOLINT | 595 kIsIndirectStringMask) == kIsIndirectStringTag); // NOLINT |
603 STATIC_ASSERT((kSlicedStringTag & | 596 STATIC_ASSERT((kSlicedStringTag & |
604 kIsIndirectStringMask) == kIsIndirectStringTag); // NOLINT | 597 kIsIndirectStringMask) == kIsIndirectStringTag); // NOLINT |
605 STATIC_ASSERT((kThinStringTag & kIsIndirectStringMask) == kIsIndirectStringTag); | |
606 | 598 |
607 // If bit 7 is clear, then bit 4 indicates whether this two-byte | 599 // Use this mask to distinguish between cons and slice only after making |
| 600 // sure that the string is one of the two (an indirect string). |
| 601 const uint32_t kSlicedNotConsMask = kSlicedStringTag & ~kConsStringTag; |
| 602 STATIC_ASSERT(IS_POWER_OF_TWO(kSlicedNotConsMask)); |
| 603 |
| 604 // If bit 7 is clear, then bit 3 indicates whether this two-byte |
608 // string actually contains one byte data. | 605 // string actually contains one byte data. |
609 const uint32_t kOneByteDataHintMask = 0x10; | 606 const uint32_t kOneByteDataHintMask = 0x08; |
610 const uint32_t kOneByteDataHintTag = 0x10; | 607 const uint32_t kOneByteDataHintTag = 0x08; |
611 | 608 |
612 // 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, |
613 // then bit 5 indicates whether the data pointer is cached. | 610 // then bit 4 indicates whether the data pointer is cached. |
614 const uint32_t kShortExternalStringMask = 0x20; | 611 const uint32_t kShortExternalStringMask = 0x10; |
615 const uint32_t kShortExternalStringTag = 0x20; | 612 const uint32_t kShortExternalStringTag = 0x10; |
| 613 |
616 | 614 |
617 // A ConsString with an empty string as the right side is a candidate | 615 // A ConsString with an empty string as the right side is a candidate |
618 // for being shortcut by the garbage collector. We don't allocate any | 616 // for being shortcut by the garbage collector. We don't allocate any |
619 // non-flat internalized strings, so we do not shortcut them thereby | 617 // non-flat internalized strings, so we do not shortcut them thereby |
620 // avoiding turning internalized strings into strings. The bit-masks | 618 // avoiding turning internalized strings into strings. The bit-masks |
621 // below contain the internalized bit as additional safety. | 619 // below contain the internalized bit as additional safety. |
622 // See heap.cc, mark-compact.cc and objects-visiting.cc. | 620 // See heap.cc, mark-compact.cc and objects-visiting.cc. |
623 const uint32_t kShortcutTypeMask = | 621 const uint32_t kShortcutTypeMask = |
624 kIsNotStringMask | | 622 kIsNotStringMask | |
625 kIsNotInternalizedMask | | 623 kIsNotInternalizedMask | |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
669 EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE = | 667 EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE = |
670 EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE | | 668 EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE | |
671 kNotInternalizedTag, | 669 kNotInternalizedTag, |
672 SHORT_EXTERNAL_STRING_TYPE = | 670 SHORT_EXTERNAL_STRING_TYPE = |
673 SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE | kNotInternalizedTag, | 671 SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE | kNotInternalizedTag, |
674 SHORT_EXTERNAL_ONE_BYTE_STRING_TYPE = | 672 SHORT_EXTERNAL_ONE_BYTE_STRING_TYPE = |
675 SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE | kNotInternalizedTag, | 673 SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE | kNotInternalizedTag, |
676 SHORT_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE = | 674 SHORT_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE = |
677 SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE | | 675 SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE | |
678 kNotInternalizedTag, | 676 kNotInternalizedTag, |
679 THIN_STRING_TYPE = kTwoByteStringTag | kThinStringTag | kNotInternalizedTag, | |
680 THIN_ONE_BYTE_STRING_TYPE = | |
681 kOneByteStringTag | kThinStringTag | kNotInternalizedTag, | |
682 | 677 |
683 // Non-string names | 678 // Non-string names |
684 SYMBOL_TYPE = kNotStringTag, // FIRST_NONSTRING_TYPE, LAST_NAME_TYPE | 679 SYMBOL_TYPE = kNotStringTag, // FIRST_NONSTRING_TYPE, LAST_NAME_TYPE |
685 | 680 |
686 // Other primitives (cannot contain non-map-word pointers to heap objects). | 681 // Other primitives (cannot contain non-map-word pointers to heap objects). |
687 HEAP_NUMBER_TYPE, | 682 HEAP_NUMBER_TYPE, |
688 SIMD128_VALUE_TYPE, | 683 SIMD128_VALUE_TYPE, |
689 ODDBALL_TYPE, // LAST_PRIMITIVE_TYPE | 684 ODDBALL_TYPE, // LAST_PRIMITIVE_TYPE |
690 | 685 |
691 // Objects allocated in their own spaces (never in new space). | 686 // Objects allocated in their own spaces (never in new space). |
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1026 V(String) \ | 1021 V(String) \ |
1027 V(SeqString) \ | 1022 V(SeqString) \ |
1028 V(ExternalString) \ | 1023 V(ExternalString) \ |
1029 V(ConsString) \ | 1024 V(ConsString) \ |
1030 V(SlicedString) \ | 1025 V(SlicedString) \ |
1031 V(ExternalTwoByteString) \ | 1026 V(ExternalTwoByteString) \ |
1032 V(ExternalOneByteString) \ | 1027 V(ExternalOneByteString) \ |
1033 V(SeqTwoByteString) \ | 1028 V(SeqTwoByteString) \ |
1034 V(SeqOneByteString) \ | 1029 V(SeqOneByteString) \ |
1035 V(InternalizedString) \ | 1030 V(InternalizedString) \ |
1036 V(ThinString) \ | |
1037 V(Symbol) \ | 1031 V(Symbol) \ |
1038 \ | 1032 \ |
1039 V(FixedTypedArrayBase) \ | 1033 V(FixedTypedArrayBase) \ |
1040 V(FixedUint8Array) \ | 1034 V(FixedUint8Array) \ |
1041 V(FixedInt8Array) \ | 1035 V(FixedInt8Array) \ |
1042 V(FixedUint16Array) \ | 1036 V(FixedUint16Array) \ |
1043 V(FixedInt16Array) \ | 1037 V(FixedInt16Array) \ |
1044 V(FixedUint32Array) \ | 1038 V(FixedUint32Array) \ |
1045 V(FixedInt32Array) \ | 1039 V(FixedInt32Array) \ |
1046 V(FixedFloat32Array) \ | 1040 V(FixedFloat32Array) \ |
(...skipping 8271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9318 // concrete performance benefit at that particular point in the code. | 9312 // concrete performance benefit at that particular point in the code. |
9319 class StringShape BASE_EMBEDDED { | 9313 class StringShape BASE_EMBEDDED { |
9320 public: | 9314 public: |
9321 inline explicit StringShape(const String* s); | 9315 inline explicit StringShape(const String* s); |
9322 inline explicit StringShape(Map* s); | 9316 inline explicit StringShape(Map* s); |
9323 inline explicit StringShape(InstanceType t); | 9317 inline explicit StringShape(InstanceType t); |
9324 inline bool IsSequential(); | 9318 inline bool IsSequential(); |
9325 inline bool IsExternal(); | 9319 inline bool IsExternal(); |
9326 inline bool IsCons(); | 9320 inline bool IsCons(); |
9327 inline bool IsSliced(); | 9321 inline bool IsSliced(); |
9328 inline bool IsThin(); | |
9329 inline bool IsIndirect(); | 9322 inline bool IsIndirect(); |
9330 inline bool IsExternalOneByte(); | 9323 inline bool IsExternalOneByte(); |
9331 inline bool IsExternalTwoByte(); | 9324 inline bool IsExternalTwoByte(); |
9332 inline bool IsSequentialOneByte(); | 9325 inline bool IsSequentialOneByte(); |
9333 inline bool IsSequentialTwoByte(); | 9326 inline bool IsSequentialTwoByte(); |
9334 inline bool IsInternalized(); | 9327 inline bool IsInternalized(); |
9335 inline StringRepresentationTag representation_tag(); | 9328 inline StringRepresentationTag representation_tag(); |
9336 inline uint32_t encoding_tag(); | 9329 inline uint32_t encoding_tag(); |
9337 inline uint32_t full_representation_tag(); | 9330 inline uint32_t full_representation_tag(); |
9338 inline uint32_t size_tag(); | 9331 inline uint32_t size_tag(); |
(...skipping 693 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10032 | 10025 |
10033 typedef FixedBodyDescriptor<kFirstOffset, kSecondOffset + kPointerSize, kSize> | 10026 typedef FixedBodyDescriptor<kFirstOffset, kSecondOffset + kPointerSize, kSize> |
10034 BodyDescriptor; | 10027 BodyDescriptor; |
10035 | 10028 |
10036 DECLARE_VERIFIER(ConsString) | 10029 DECLARE_VERIFIER(ConsString) |
10037 | 10030 |
10038 private: | 10031 private: |
10039 DISALLOW_IMPLICIT_CONSTRUCTORS(ConsString); | 10032 DISALLOW_IMPLICIT_CONSTRUCTORS(ConsString); |
10040 }; | 10033 }; |
10041 | 10034 |
10042 // The ThinString class describes string objects that are just references | |
10043 // to another string object. They are used for in-place internalization when | |
10044 // the original string cannot actually be internalized in-place: in these | |
10045 // cases, the original string is converted to a ThinString pointing at its | |
10046 // internalized version (which is allocated as a new object). | |
10047 // In terms of memory layout and most algorithms operating on strings, | |
10048 // ThinStrings can be thought of as "one-part cons strings". | |
10049 class ThinString : public String { | |
10050 public: | |
10051 // Actual string that this ThinString refers to. | |
10052 inline String* actual() const; | |
10053 inline void set_actual(String* s, | |
10054 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); | |
10055 | |
10056 V8_EXPORT_PRIVATE uint16_t ThinStringGet(int index); | |
10057 | |
10058 DECLARE_CAST(ThinString) | |
10059 DECLARE_VERIFIER(ThinString) | |
10060 | |
10061 // Layout description. | |
10062 static const int kActualOffset = String::kSize; | |
10063 static const int kSize = kActualOffset + kPointerSize; | |
10064 | |
10065 typedef FixedBodyDescriptor<kActualOffset, kSize, kSize> BodyDescriptor; | |
10066 | |
10067 private: | |
10068 DISALLOW_COPY_AND_ASSIGN(ThinString); | |
10069 }; | |
10070 | 10035 |
10071 // The Sliced String class describes strings that are substrings of another | 10036 // The Sliced String class describes strings that are substrings of another |
10072 // sequential string. The motivation is to save time and memory when creating | 10037 // sequential string. The motivation is to save time and memory when creating |
10073 // a substring. A Sliced String is described as a pointer to the parent, | 10038 // a substring. A Sliced String is described as a pointer to the parent, |
10074 // the offset from the start of the parent string and the length. Using | 10039 // the offset from the start of the parent string and the length. Using |
10075 // a Sliced String therefore requires unpacking of the parent string and | 10040 // a Sliced String therefore requires unpacking of the parent string and |
10076 // adding the offset to the start address. A substring of a Sliced String | 10041 // adding the offset to the start address. A substring of a Sliced String |
10077 // are not nested since the double indirection is simplified when creating | 10042 // are not nested since the double indirection is simplified when creating |
10078 // such a substring. | 10043 // such a substring. |
10079 // Currently missing features are: | 10044 // Currently missing features are: |
(...skipping 1711 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11791 } | 11756 } |
11792 }; | 11757 }; |
11793 | 11758 |
11794 | 11759 |
11795 } // NOLINT, false-positive due to second-order macros. | 11760 } // NOLINT, false-positive due to second-order macros. |
11796 } // NOLINT, false-positive due to second-order macros. | 11761 } // NOLINT, false-positive due to second-order macros. |
11797 | 11762 |
11798 #include "src/objects/object-macros-undef.h" | 11763 #include "src/objects/object-macros-undef.h" |
11799 | 11764 |
11800 #endif // V8_OBJECTS_H_ | 11765 #endif // V8_OBJECTS_H_ |
OLD | NEW |