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

Side by Side Diff: src/objects.h

Issue 2626893005: Revert of Internalize strings in-place (Closed)
Patch Set: rebased 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 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
113 // - ExternalString 112 // - ExternalString
114 // - ExternalOneByteString 113 // - ExternalOneByteString
115 // - ExternalTwoByteString 114 // - ExternalTwoByteString
116 // - InternalizedString 115 // - InternalizedString
117 // - SeqInternalizedString 116 // - SeqInternalizedString
118 // - SeqOneByteInternalizedString 117 // - SeqOneByteInternalizedString
119 // - SeqTwoByteInternalizedString 118 // - SeqTwoByteInternalizedString
120 // - ConsInternalizedString 119 // - ConsInternalizedString
121 // - ExternalInternalizedString 120 // - ExternalInternalizedString
122 // - ExternalOneByteInternalizedString 121 // - ExternalOneByteInternalizedString
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 V(ONE_BYTE_INTERNALIZED_STRING_TYPE) \ 328 V(ONE_BYTE_INTERNALIZED_STRING_TYPE) \
330 V(EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE) \ 329 V(EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE) \
331 V(EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE) \ 330 V(EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE) \
332 V(SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE) \ 331 V(SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE) \
333 V(SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE) \ 332 V(SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE) \
334 V(SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE) \ 333 V(SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE) \
335 V(STRING_TYPE) \ 334 V(STRING_TYPE) \
336 V(CONS_STRING_TYPE) \ 335 V(CONS_STRING_TYPE) \
337 V(EXTERNAL_STRING_TYPE) \ 336 V(EXTERNAL_STRING_TYPE) \
338 V(SLICED_STRING_TYPE) \ 337 V(SLICED_STRING_TYPE) \
339 V(THIN_STRING_TYPE) \
340 V(ONE_BYTE_STRING_TYPE) \ 338 V(ONE_BYTE_STRING_TYPE) \
341 V(CONS_ONE_BYTE_STRING_TYPE) \ 339 V(CONS_ONE_BYTE_STRING_TYPE) \
342 V(EXTERNAL_ONE_BYTE_STRING_TYPE) \ 340 V(EXTERNAL_ONE_BYTE_STRING_TYPE) \
343 V(SLICED_ONE_BYTE_STRING_TYPE) \ 341 V(SLICED_ONE_BYTE_STRING_TYPE) \
344 V(THIN_ONE_BYTE_STRING_TYPE) \
345 V(EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE) \ 342 V(EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE) \
346 V(SHORT_EXTERNAL_STRING_TYPE) \ 343 V(SHORT_EXTERNAL_STRING_TYPE) \
347 V(SHORT_EXTERNAL_ONE_BYTE_STRING_TYPE) \ 344 V(SHORT_EXTERNAL_ONE_BYTE_STRING_TYPE) \
348 V(SHORT_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE) \ 345 V(SHORT_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE) \
349 \ 346 \
350 V(SYMBOL_TYPE) \ 347 V(SYMBOL_TYPE) \
351 V(HEAP_NUMBER_TYPE) \ 348 V(HEAP_NUMBER_TYPE) \
352 V(SIMD128_VALUE_TYPE) \ 349 V(SIMD128_VALUE_TYPE) \
353 V(ODDBALL_TYPE) \ 350 V(ODDBALL_TYPE) \
354 \ 351 \
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 V(SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE, \ 515 V(SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE, \
519 ExternalTwoByteString::kShortSize, short_external_internalized_string, \ 516 ExternalTwoByteString::kShortSize, short_external_internalized_string, \
520 ShortExternalInternalizedString) \ 517 ShortExternalInternalizedString) \
521 V(SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE, \ 518 V(SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE, \
522 ExternalOneByteString::kShortSize, \ 519 ExternalOneByteString::kShortSize, \
523 short_external_one_byte_internalized_string, \ 520 short_external_one_byte_internalized_string, \
524 ShortExternalOneByteInternalizedString) \ 521 ShortExternalOneByteInternalizedString) \
525 V(SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE, \ 522 V(SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE, \
526 ExternalTwoByteString::kShortSize, \ 523 ExternalTwoByteString::kShortSize, \
527 short_external_internalized_string_with_one_byte_data, \ 524 short_external_internalized_string_with_one_byte_data, \
528 ShortExternalInternalizedStringWithOneByteData) \ 525 ShortExternalInternalizedStringWithOneByteData)
529 V(THIN_STRING_TYPE, ThinString::kSize, thin_string, ThinString) \
530 V(THIN_ONE_BYTE_STRING_TYPE, ThinString::kSize, thin_one_byte_string, \
531 ThinOneByteString)
532 526
533 // A struct is a simple object a set of object-valued fields. Including an 527 // A struct is a simple object a set of object-valued fields. Including an
534 // object type in this causes the compiler to generate most of the boilerplate 528 // object type in this causes the compiler to generate most of the boilerplate
535 // code for the class including allocation and garbage collection routines, 529 // code for the class including allocation and garbage collection routines,
536 // casts and predicates. All you need to define is the class, methods and 530 // casts and predicates. All you need to define is the class, methods and
537 // object verification routines. Easy, no? 531 // object verification routines. Easy, no?
538 // 532 //
539 // Note that for subtle reasons related to the ordering or numerical values of 533 // Note that for subtle reasons related to the ordering or numerical values of
540 // type tags, elements in this list have to be added to the INSTANCE_TYPE_LIST 534 // type tags, elements in this list have to be added to the INSTANCE_TYPE_LIST
541 // manually. 535 // manually.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 const uint32_t kIsNotStringMask = 0x80; 567 const uint32_t kIsNotStringMask = 0x80;
574 const uint32_t kStringTag = 0x0; 568 const uint32_t kStringTag = 0x0;
575 const uint32_t kNotStringTag = 0x80; 569 const uint32_t kNotStringTag = 0x80;
576 570
577 // Bit 6 indicates that the object is an internalized string (if set) or not. 571 // Bit 6 indicates that the object is an internalized string (if set) or not.
578 // Bit 7 has to be clear as well. 572 // Bit 7 has to be clear as well.
579 const uint32_t kIsNotInternalizedMask = 0x40; 573 const uint32_t kIsNotInternalizedMask = 0x40;
580 const uint32_t kNotInternalizedTag = 0x40; 574 const uint32_t kNotInternalizedTag = 0x40;
581 const uint32_t kInternalizedTag = 0x0; 575 const uint32_t kInternalizedTag = 0x0;
582 576
583 // If bit 7 is clear then bit 3 indicates whether the string consists of 577 // If bit 7 is clear then bit 2 indicates whether the string consists of
584 // two-byte characters or one-byte characters. 578 // two-byte characters or one-byte characters.
585 const uint32_t kStringEncodingMask = 0x8; 579 const uint32_t kStringEncodingMask = 0x4;
586 const uint32_t kTwoByteStringTag = 0x0; 580 const uint32_t kTwoByteStringTag = 0x0;
587 const uint32_t kOneByteStringTag = 0x8; 581 const uint32_t kOneByteStringTag = 0x4;
588 582
589 // If bit 7 is clear, the low-order 3 bits indicate the representation 583 // If bit 7 is clear, the low-order 2 bits indicate the representation
590 // of the string. 584 // of the string.
591 const uint32_t kStringRepresentationMask = 0x07; 585 const uint32_t kStringRepresentationMask = 0x03;
592 enum StringRepresentationTag { 586 enum StringRepresentationTag {
593 kSeqStringTag = 0x0, 587 kSeqStringTag = 0x0,
594 kConsStringTag = 0x1, 588 kConsStringTag = 0x1,
595 kExternalStringTag = 0x2, 589 kExternalStringTag = 0x2,
596 kSlicedStringTag = 0x3, 590 kSlicedStringTag = 0x3
597 kThinStringTag = 0x5
598 }; 591 };
599 const uint32_t kIsIndirectStringMask = 0x1; 592 const uint32_t kIsIndirectStringMask = 0x1;
600 const uint32_t kIsIndirectStringTag = 0x1; 593 const uint32_t kIsIndirectStringTag = 0x1;
601 STATIC_ASSERT((kSeqStringTag & kIsIndirectStringMask) == 0); // NOLINT 594 STATIC_ASSERT((kSeqStringTag & kIsIndirectStringMask) == 0); // NOLINT
602 STATIC_ASSERT((kExternalStringTag & kIsIndirectStringMask) == 0); // NOLINT 595 STATIC_ASSERT((kExternalStringTag & kIsIndirectStringMask) == 0); // NOLINT
603 STATIC_ASSERT((kConsStringTag & 596 STATIC_ASSERT((kConsStringTag &
604 kIsIndirectStringMask) == kIsIndirectStringTag); // NOLINT 597 kIsIndirectStringMask) == kIsIndirectStringTag); // NOLINT
605 STATIC_ASSERT((kSlicedStringTag & 598 STATIC_ASSERT((kSlicedStringTag &
606 kIsIndirectStringMask) == kIsIndirectStringTag); // NOLINT 599 kIsIndirectStringMask) == kIsIndirectStringTag); // NOLINT
607 STATIC_ASSERT((kThinStringTag & kIsIndirectStringMask) == kIsIndirectStringTag);
608 600
609 // If bit 7 is clear, then bit 4 indicates whether this two-byte 601 // Use this mask to distinguish between cons and slice only after making
602 // sure that the string is one of the two (an indirect string).
603 const uint32_t kSlicedNotConsMask = kSlicedStringTag & ~kConsStringTag;
604 STATIC_ASSERT(IS_POWER_OF_TWO(kSlicedNotConsMask));
605
606 // If bit 7 is clear, then bit 3 indicates whether this two-byte
610 // string actually contains one byte data. 607 // string actually contains one byte data.
611 const uint32_t kOneByteDataHintMask = 0x10; 608 const uint32_t kOneByteDataHintMask = 0x08;
612 const uint32_t kOneByteDataHintTag = 0x10; 609 const uint32_t kOneByteDataHintTag = 0x08;
613 610
614 // If bit 7 is clear and string representation indicates an external string, 611 // If bit 7 is clear and string representation indicates an external string,
615 // then bit 5 indicates whether the data pointer is cached. 612 // then bit 4 indicates whether the data pointer is cached.
616 const uint32_t kShortExternalStringMask = 0x20; 613 const uint32_t kShortExternalStringMask = 0x10;
617 const uint32_t kShortExternalStringTag = 0x20; 614 const uint32_t kShortExternalStringTag = 0x10;
618 615
619 // A ConsString with an empty string as the right side is a candidate 616 // A ConsString with an empty string as the right side is a candidate
620 // for being shortcut by the garbage collector. We don't allocate any 617 // for being shortcut by the garbage collector. We don't allocate any
621 // non-flat internalized strings, so we do not shortcut them thereby 618 // non-flat internalized strings, so we do not shortcut them thereby
622 // avoiding turning internalized strings into strings. The bit-masks 619 // avoiding turning internalized strings into strings. The bit-masks
623 // below contain the internalized bit as additional safety. 620 // below contain the internalized bit as additional safety.
624 // See heap.cc, mark-compact.cc and objects-visiting.cc. 621 // See heap.cc, mark-compact.cc and objects-visiting.cc.
625 const uint32_t kShortcutTypeMask = 622 const uint32_t kShortcutTypeMask =
626 kIsNotStringMask | 623 kIsNotStringMask |
627 kIsNotInternalizedMask | 624 kIsNotInternalizedMask |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
671 EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE = 668 EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE =
672 EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE | 669 EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE |
673 kNotInternalizedTag, 670 kNotInternalizedTag,
674 SHORT_EXTERNAL_STRING_TYPE = 671 SHORT_EXTERNAL_STRING_TYPE =
675 SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE | kNotInternalizedTag, 672 SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
676 SHORT_EXTERNAL_ONE_BYTE_STRING_TYPE = 673 SHORT_EXTERNAL_ONE_BYTE_STRING_TYPE =
677 SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE | kNotInternalizedTag, 674 SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
678 SHORT_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE = 675 SHORT_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE =
679 SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE | 676 SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE |
680 kNotInternalizedTag, 677 kNotInternalizedTag,
681 THIN_STRING_TYPE = kTwoByteStringTag | kThinStringTag | kNotInternalizedTag,
682 THIN_ONE_BYTE_STRING_TYPE =
683 kOneByteStringTag | kThinStringTag | kNotInternalizedTag,
684 678
685 // Non-string names 679 // Non-string names
686 SYMBOL_TYPE = kNotStringTag, // FIRST_NONSTRING_TYPE, LAST_NAME_TYPE 680 SYMBOL_TYPE = kNotStringTag, // FIRST_NONSTRING_TYPE, LAST_NAME_TYPE
687 681
688 // Other primitives (cannot contain non-map-word pointers to heap objects). 682 // Other primitives (cannot contain non-map-word pointers to heap objects).
689 HEAP_NUMBER_TYPE, 683 HEAP_NUMBER_TYPE,
690 SIMD128_VALUE_TYPE, 684 SIMD128_VALUE_TYPE,
691 ODDBALL_TYPE, // LAST_PRIMITIVE_TYPE 685 ODDBALL_TYPE, // LAST_PRIMITIVE_TYPE
692 686
693 // Objects allocated in their own spaces (never in new space). 687 // Objects allocated in their own spaces (never in new space).
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
1028 V(String) \ 1022 V(String) \
1029 V(SeqString) \ 1023 V(SeqString) \
1030 V(ExternalString) \ 1024 V(ExternalString) \
1031 V(ConsString) \ 1025 V(ConsString) \
1032 V(SlicedString) \ 1026 V(SlicedString) \
1033 V(ExternalTwoByteString) \ 1027 V(ExternalTwoByteString) \
1034 V(ExternalOneByteString) \ 1028 V(ExternalOneByteString) \
1035 V(SeqTwoByteString) \ 1029 V(SeqTwoByteString) \
1036 V(SeqOneByteString) \ 1030 V(SeqOneByteString) \
1037 V(InternalizedString) \ 1031 V(InternalizedString) \
1038 V(ThinString) \
1039 V(Symbol) \ 1032 V(Symbol) \
1040 \ 1033 \
1041 V(FixedTypedArrayBase) \ 1034 V(FixedTypedArrayBase) \
1042 V(FixedUint8Array) \ 1035 V(FixedUint8Array) \
1043 V(FixedInt8Array) \ 1036 V(FixedInt8Array) \
1044 V(FixedUint16Array) \ 1037 V(FixedUint16Array) \
1045 V(FixedInt16Array) \ 1038 V(FixedInt16Array) \
1046 V(FixedUint32Array) \ 1039 V(FixedUint32Array) \
1047 V(FixedInt32Array) \ 1040 V(FixedInt32Array) \
1048 V(FixedFloat32Array) \ 1041 V(FixedFloat32Array) \
(...skipping 8220 matching lines...) Expand 10 before | Expand all | Expand 10 after
9269 // concrete performance benefit at that particular point in the code. 9262 // concrete performance benefit at that particular point in the code.
9270 class StringShape BASE_EMBEDDED { 9263 class StringShape BASE_EMBEDDED {
9271 public: 9264 public:
9272 inline explicit StringShape(const String* s); 9265 inline explicit StringShape(const String* s);
9273 inline explicit StringShape(Map* s); 9266 inline explicit StringShape(Map* s);
9274 inline explicit StringShape(InstanceType t); 9267 inline explicit StringShape(InstanceType t);
9275 inline bool IsSequential(); 9268 inline bool IsSequential();
9276 inline bool IsExternal(); 9269 inline bool IsExternal();
9277 inline bool IsCons(); 9270 inline bool IsCons();
9278 inline bool IsSliced(); 9271 inline bool IsSliced();
9279 inline bool IsThin();
9280 inline bool IsIndirect(); 9272 inline bool IsIndirect();
9281 inline bool IsExternalOneByte(); 9273 inline bool IsExternalOneByte();
9282 inline bool IsExternalTwoByte(); 9274 inline bool IsExternalTwoByte();
9283 inline bool IsSequentialOneByte(); 9275 inline bool IsSequentialOneByte();
9284 inline bool IsSequentialTwoByte(); 9276 inline bool IsSequentialTwoByte();
9285 inline bool IsInternalized(); 9277 inline bool IsInternalized();
9286 inline StringRepresentationTag representation_tag(); 9278 inline StringRepresentationTag representation_tag();
9287 inline uint32_t encoding_tag(); 9279 inline uint32_t encoding_tag();
9288 inline uint32_t full_representation_tag(); 9280 inline uint32_t full_representation_tag();
9289 inline uint32_t size_tag(); 9281 inline uint32_t size_tag();
(...skipping 693 matching lines...) Expand 10 before | Expand all | Expand 10 after
9983 9975
9984 typedef FixedBodyDescriptor<kFirstOffset, kSecondOffset + kPointerSize, kSize> 9976 typedef FixedBodyDescriptor<kFirstOffset, kSecondOffset + kPointerSize, kSize>
9985 BodyDescriptor; 9977 BodyDescriptor;
9986 9978
9987 DECLARE_VERIFIER(ConsString) 9979 DECLARE_VERIFIER(ConsString)
9988 9980
9989 private: 9981 private:
9990 DISALLOW_IMPLICIT_CONSTRUCTORS(ConsString); 9982 DISALLOW_IMPLICIT_CONSTRUCTORS(ConsString);
9991 }; 9983 };
9992 9984
9993 // The ThinString class describes string objects that are just references
9994 // to another string object. They are used for in-place internalization when
9995 // the original string cannot actually be internalized in-place: in these
9996 // cases, the original string is converted to a ThinString pointing at its
9997 // internalized version (which is allocated as a new object).
9998 // In terms of memory layout and most algorithms operating on strings,
9999 // ThinStrings can be thought of as "one-part cons strings".
10000 class ThinString : public String {
10001 public:
10002 // Actual string that this ThinString refers to.
10003 inline String* actual() const;
10004 inline void set_actual(String* s,
10005 WriteBarrierMode mode = UPDATE_WRITE_BARRIER);
10006
10007 V8_EXPORT_PRIVATE uint16_t ThinStringGet(int index);
10008
10009 DECLARE_CAST(ThinString)
10010 DECLARE_VERIFIER(ThinString)
10011
10012 // Layout description.
10013 static const int kActualOffset = String::kSize;
10014 static const int kSize = kActualOffset + kPointerSize;
10015
10016 typedef FixedBodyDescriptor<kActualOffset, kSize, kSize> BodyDescriptor;
10017
10018 private:
10019 DISALLOW_COPY_AND_ASSIGN(ThinString);
10020 };
10021 9985
10022 // The Sliced String class describes strings that are substrings of another 9986 // The Sliced String class describes strings that are substrings of another
10023 // sequential string. The motivation is to save time and memory when creating 9987 // sequential string. The motivation is to save time and memory when creating
10024 // a substring. A Sliced String is described as a pointer to the parent, 9988 // a substring. A Sliced String is described as a pointer to the parent,
10025 // the offset from the start of the parent string and the length. Using 9989 // the offset from the start of the parent string and the length. Using
10026 // a Sliced String therefore requires unpacking of the parent string and 9990 // a Sliced String therefore requires unpacking of the parent string and
10027 // adding the offset to the start address. A substring of a Sliced String 9991 // adding the offset to the start address. A substring of a Sliced String
10028 // are not nested since the double indirection is simplified when creating 9992 // are not nested since the double indirection is simplified when creating
10029 // such a substring. 9993 // such a substring.
10030 // Currently missing features are: 9994 // Currently missing features are:
(...skipping 1713 matching lines...) Expand 10 before | Expand all | Expand 10 after
11744 } 11708 }
11745 }; 11709 };
11746 11710
11747 11711
11748 } // NOLINT, false-positive due to second-order macros. 11712 } // NOLINT, false-positive due to second-order macros.
11749 } // NOLINT, false-positive due to second-order macros. 11713 } // NOLINT, false-positive due to second-order macros.
11750 11714
11751 #include "src/objects/object-macros-undef.h" 11715 #include "src/objects/object-macros-undef.h"
11752 11716
11753 #endif // V8_OBJECTS_H_ 11717 #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