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

Side by Side Diff: src/objects.h

Issue 2625073002: Revert of Internalize strings in-place (Closed)
Patch Set: 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 | « src/mips64/codegen-mips64.cc ('k') | src/objects.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 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
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
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
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
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
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
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
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
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
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_
OLDNEW
« no previous file with comments | « src/mips64/codegen-mips64.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698