OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
600 } | 600 } |
601 inline Object* ToObjectUnchecked() { | 601 inline Object* ToObjectUnchecked() { |
602 ASSERT(!IsFailure()); | 602 ASSERT(!IsFailure()); |
603 return reinterpret_cast<Object*>(this); | 603 return reinterpret_cast<Object*>(this); |
604 } | 604 } |
605 inline Object* ToObjectChecked() { | 605 inline Object* ToObjectChecked() { |
606 CHECK(!IsFailure()); | 606 CHECK(!IsFailure()); |
607 return reinterpret_cast<Object*>(this); | 607 return reinterpret_cast<Object*>(this); |
608 } | 608 } |
609 | 609 |
| 610 #ifdef OBJECT_PRINT |
| 611 // Prints this object with details. |
| 612 inline void Print() { |
| 613 Print(stdout); |
| 614 }; |
| 615 inline void PrintLn() { |
| 616 PrintLn(stdout); |
| 617 } |
| 618 void Print(FILE* out); |
| 619 void PrintLn(FILE* out); |
| 620 #endif |
610 #ifdef DEBUG | 621 #ifdef DEBUG |
611 // Prints this object with details. | |
612 void Print(); | |
613 void PrintLn(); | |
614 // Verifies the object. | 622 // Verifies the object. |
615 void Verify(); | 623 void Verify(); |
616 #endif | 624 #endif |
617 }; | 625 }; |
618 | 626 |
619 // Object is the abstract superclass for all classes in the | 627 // Object is the abstract superclass for all classes in the |
620 // object hierarchy. | 628 // object hierarchy. |
621 // Object does not use any virtual functions to avoid the | 629 // Object does not use any virtual functions to avoid the |
622 // allocation of the C++ vtable. | 630 // allocation of the C++ vtable. |
623 // Since Smi and Failure are subclasses of Object no | 631 // Since Smi and Failure are subclasses of Object no |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
755 // Returns true if this is a JSValue containing a string and the index is | 763 // Returns true if this is a JSValue containing a string and the index is |
756 // < the length of the string. Used to implement [] on strings. | 764 // < the length of the string. Used to implement [] on strings. |
757 inline bool IsStringObjectWithCharacterAt(uint32_t index); | 765 inline bool IsStringObjectWithCharacterAt(uint32_t index); |
758 | 766 |
759 #ifdef DEBUG | 767 #ifdef DEBUG |
760 // Verify a pointer is a valid object pointer. | 768 // Verify a pointer is a valid object pointer. |
761 static void VerifyPointer(Object* p); | 769 static void VerifyPointer(Object* p); |
762 #endif | 770 #endif |
763 | 771 |
764 // Prints this object without details. | 772 // Prints this object without details. |
765 void ShortPrint(); | 773 inline void ShortPrint() { |
| 774 ShortPrint(stdout); |
| 775 } |
| 776 void ShortPrint(FILE* out); |
766 | 777 |
767 // Prints this object without details to a message accumulator. | 778 // Prints this object without details to a message accumulator. |
768 void ShortPrint(StringStream* accumulator); | 779 void ShortPrint(StringStream* accumulator); |
769 | 780 |
770 // Casting: This cast is only needed to satisfy macros in objects-inl.h. | 781 // Casting: This cast is only needed to satisfy macros in objects-inl.h. |
771 static Object* cast(Object* value) { return value; } | 782 static Object* cast(Object* value) { return value; } |
772 | 783 |
773 // Layout description. | 784 // Layout description. |
774 static const int kHeaderSize = 0; // Object does not take up any space. | 785 static const int kHeaderSize = 0; // Object does not take up any space. |
775 | 786 |
(...skipping 18 matching lines...) Expand all Loading... |
794 | 805 |
795 static inline Smi* FromIntptr(intptr_t value); | 806 static inline Smi* FromIntptr(intptr_t value); |
796 | 807 |
797 // Returns whether value can be represented in a Smi. | 808 // Returns whether value can be represented in a Smi. |
798 static inline bool IsValid(intptr_t value); | 809 static inline bool IsValid(intptr_t value); |
799 | 810 |
800 // Casting. | 811 // Casting. |
801 static inline Smi* cast(Object* object); | 812 static inline Smi* cast(Object* object); |
802 | 813 |
803 // Dispatched behavior. | 814 // Dispatched behavior. |
804 void SmiPrint(); | 815 inline void SmiPrint() { |
| 816 SmiPrint(stdout); |
| 817 } |
| 818 void SmiPrint(FILE* out); |
805 void SmiPrint(StringStream* accumulator); | 819 void SmiPrint(StringStream* accumulator); |
806 #ifdef DEBUG | 820 #ifdef DEBUG |
807 void SmiVerify(); | 821 void SmiVerify(); |
808 #endif | 822 #endif |
809 | 823 |
810 static const int kMinValue = (-1 << (kSmiValueSize - 1)); | 824 static const int kMinValue = (-1 << (kSmiValueSize - 1)); |
811 static const int kMaxValue = -(kMinValue + 1); | 825 static const int kMaxValue = -(kMinValue + 1); |
812 | 826 |
813 private: | 827 private: |
814 DISALLOW_IMPLICIT_CONSTRUCTORS(Smi); | 828 DISALLOW_IMPLICIT_CONSTRUCTORS(Smi); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
863 | 877 |
864 static inline Failure* RetryAfterGC(AllocationSpace space); | 878 static inline Failure* RetryAfterGC(AllocationSpace space); |
865 static inline Failure* RetryAfterGC(); // NEW_SPACE | 879 static inline Failure* RetryAfterGC(); // NEW_SPACE |
866 static inline Failure* Exception(); | 880 static inline Failure* Exception(); |
867 static inline Failure* InternalError(); | 881 static inline Failure* InternalError(); |
868 static inline Failure* OutOfMemoryException(); | 882 static inline Failure* OutOfMemoryException(); |
869 // Casting. | 883 // Casting. |
870 static inline Failure* cast(MaybeObject* object); | 884 static inline Failure* cast(MaybeObject* object); |
871 | 885 |
872 // Dispatched behavior. | 886 // Dispatched behavior. |
873 void FailurePrint(); | 887 void FailurePrint(FILE* out); |
874 void FailurePrint(StringStream* accumulator); | 888 void FailurePrint(StringStream* accumulator); |
875 #ifdef DEBUG | 889 #ifdef DEBUG |
876 void FailureVerify(); | 890 void FailureVerify(); |
877 #endif | 891 #endif |
878 | 892 |
879 private: | 893 private: |
880 inline intptr_t value() const; | 894 inline intptr_t value() const; |
881 static inline Failure* Construct(Type type, intptr_t value = 0); | 895 static inline Failure* Construct(Type type, intptr_t value = 0); |
882 | 896 |
883 DISALLOW_IMPLICIT_CONSTRUCTORS(Failure); | 897 DISALLOW_IMPLICIT_CONSTRUCTORS(Failure); |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1092 | 1106 |
1093 // Return the write barrier mode for this. Callers of this function | 1107 // Return the write barrier mode for this. Callers of this function |
1094 // must be able to present a reference to an AssertNoAllocation | 1108 // must be able to present a reference to an AssertNoAllocation |
1095 // object as a sign that they are not going to use this function | 1109 // object as a sign that they are not going to use this function |
1096 // from code that allocates and thus invalidates the returned write | 1110 // from code that allocates and thus invalidates the returned write |
1097 // barrier mode. | 1111 // barrier mode. |
1098 inline WriteBarrierMode GetWriteBarrierMode(const AssertNoAllocation&); | 1112 inline WriteBarrierMode GetWriteBarrierMode(const AssertNoAllocation&); |
1099 | 1113 |
1100 // Dispatched behavior. | 1114 // Dispatched behavior. |
1101 void HeapObjectShortPrint(StringStream* accumulator); | 1115 void HeapObjectShortPrint(StringStream* accumulator); |
| 1116 #ifdef OBJECT_PRINT |
| 1117 inline void HeapObjectPrint() { |
| 1118 HeapObjectPrint(stdout); |
| 1119 } |
| 1120 void HeapObjectPrint(FILE* out); |
| 1121 #endif |
1102 #ifdef DEBUG | 1122 #ifdef DEBUG |
1103 void HeapObjectPrint(); | |
1104 void HeapObjectVerify(); | 1123 void HeapObjectVerify(); |
1105 inline void VerifyObjectField(int offset); | 1124 inline void VerifyObjectField(int offset); |
1106 inline void VerifySmiField(int offset); | 1125 inline void VerifySmiField(int offset); |
| 1126 #endif |
1107 | 1127 |
1108 void PrintHeader(const char* id); | 1128 #ifdef OBJECT_PRINT |
| 1129 void PrintHeader(FILE* out, const char* id); |
| 1130 #endif |
1109 | 1131 |
| 1132 #ifdef DEBUG |
1110 // Verify a pointer is a valid HeapObject pointer that points to object | 1133 // Verify a pointer is a valid HeapObject pointer that points to object |
1111 // areas in the heap. | 1134 // areas in the heap. |
1112 static void VerifyHeapPointer(Object* p); | 1135 static void VerifyHeapPointer(Object* p); |
1113 #endif | 1136 #endif |
1114 | 1137 |
1115 // Layout description. | 1138 // Layout description. |
1116 // First field in a heap object is map. | 1139 // First field in a heap object is map. |
1117 static const int kMapOffset = Object::kHeaderSize; | 1140 static const int kMapOffset = Object::kHeaderSize; |
1118 static const int kHeaderSize = kMapOffset + kPointerSize; | 1141 static const int kHeaderSize = kMapOffset + kPointerSize; |
1119 | 1142 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1182 public: | 1205 public: |
1183 // [value]: number value. | 1206 // [value]: number value. |
1184 inline double value(); | 1207 inline double value(); |
1185 inline void set_value(double value); | 1208 inline void set_value(double value); |
1186 | 1209 |
1187 // Casting. | 1210 // Casting. |
1188 static inline HeapNumber* cast(Object* obj); | 1211 static inline HeapNumber* cast(Object* obj); |
1189 | 1212 |
1190 // Dispatched behavior. | 1213 // Dispatched behavior. |
1191 Object* HeapNumberToBoolean(); | 1214 Object* HeapNumberToBoolean(); |
1192 void HeapNumberPrint(); | 1215 inline void HeapNumberPrint() { |
| 1216 HeapNumberPrint(stdout); |
| 1217 } |
| 1218 void HeapNumberPrint(FILE* out); |
1193 void HeapNumberPrint(StringStream* accumulator); | 1219 void HeapNumberPrint(StringStream* accumulator); |
1194 #ifdef DEBUG | 1220 #ifdef DEBUG |
1195 void HeapNumberVerify(); | 1221 void HeapNumberVerify(); |
1196 #endif | 1222 #endif |
1197 | 1223 |
1198 inline int get_exponent(); | 1224 inline int get_exponent(); |
1199 inline int get_sign(); | 1225 inline int get_sign(); |
1200 | 1226 |
1201 // Layout description. | 1227 // Layout description. |
1202 static const int kValueOffset = HeapObject::kHeaderSize; | 1228 static const int kValueOffset = HeapObject::kHeaderSize; |
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1642 | 1668 |
1643 // Casting. | 1669 // Casting. |
1644 static inline JSObject* cast(Object* obj); | 1670 static inline JSObject* cast(Object* obj); |
1645 | 1671 |
1646 // Disalow further properties to be added to the object. | 1672 // Disalow further properties to be added to the object. |
1647 MUST_USE_RESULT MaybeObject* PreventExtensions(); | 1673 MUST_USE_RESULT MaybeObject* PreventExtensions(); |
1648 | 1674 |
1649 | 1675 |
1650 // Dispatched behavior. | 1676 // Dispatched behavior. |
1651 void JSObjectShortPrint(StringStream* accumulator); | 1677 void JSObjectShortPrint(StringStream* accumulator); |
| 1678 #ifdef OBJECT_PRINT |
| 1679 inline void JSObjectPrint() { |
| 1680 JSObjectPrint(stdout); |
| 1681 } |
| 1682 void JSObjectPrint(FILE* out); |
| 1683 #endif |
1652 #ifdef DEBUG | 1684 #ifdef DEBUG |
1653 void JSObjectPrint(); | |
1654 void JSObjectVerify(); | 1685 void JSObjectVerify(); |
1655 void PrintProperties(); | 1686 #endif |
1656 void PrintElements(); | 1687 #ifdef OBJECT_PRINT |
| 1688 inline void PrintProperties() { |
| 1689 PrintProperties(stdout); |
| 1690 } |
| 1691 void PrintProperties(FILE* out); |
1657 | 1692 |
| 1693 inline void PrintElements() { |
| 1694 PrintElements(stdout); |
| 1695 } |
| 1696 void PrintElements(FILE* out); |
| 1697 #endif |
| 1698 |
| 1699 #ifdef DEBUG |
1658 // Structure for collecting spill information about JSObjects. | 1700 // Structure for collecting spill information about JSObjects. |
1659 class SpillInformation { | 1701 class SpillInformation { |
1660 public: | 1702 public: |
1661 void Clear(); | 1703 void Clear(); |
1662 void Print(); | 1704 void Print(); |
1663 int number_of_objects_; | 1705 int number_of_objects_; |
1664 int number_of_objects_with_fast_properties_; | 1706 int number_of_objects_with_fast_properties_; |
1665 int number_of_objects_with_fast_elements_; | 1707 int number_of_objects_with_fast_elements_; |
1666 int number_of_fast_used_fields_; | 1708 int number_of_fast_used_fields_; |
1667 int number_of_fast_unused_fields_; | 1709 int number_of_fast_unused_fields_; |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1828 static const int kHeaderSize = kLengthOffset + kPointerSize; | 1870 static const int kHeaderSize = kLengthOffset + kPointerSize; |
1829 | 1871 |
1830 // Maximal allowed size, in bytes, of a single FixedArray. | 1872 // Maximal allowed size, in bytes, of a single FixedArray. |
1831 // Prevents overflowing size computations, as well as extreme memory | 1873 // Prevents overflowing size computations, as well as extreme memory |
1832 // consumption. | 1874 // consumption. |
1833 static const int kMaxSize = 512 * MB; | 1875 static const int kMaxSize = 512 * MB; |
1834 // Maximally allowed length of a FixedArray. | 1876 // Maximally allowed length of a FixedArray. |
1835 static const int kMaxLength = (kMaxSize - kHeaderSize) / kPointerSize; | 1877 static const int kMaxLength = (kMaxSize - kHeaderSize) / kPointerSize; |
1836 | 1878 |
1837 // Dispatched behavior. | 1879 // Dispatched behavior. |
| 1880 #ifdef OBJECT_PRINT |
| 1881 inline void FixedArrayPrint() { |
| 1882 FixedArrayPrint(stdout); |
| 1883 } |
| 1884 void FixedArrayPrint(FILE* out); |
| 1885 #endif |
1838 #ifdef DEBUG | 1886 #ifdef DEBUG |
1839 void FixedArrayPrint(); | |
1840 void FixedArrayVerify(); | 1887 void FixedArrayVerify(); |
1841 // Checks if two FixedArrays have identical contents. | 1888 // Checks if two FixedArrays have identical contents. |
1842 bool IsEqualTo(FixedArray* other); | 1889 bool IsEqualTo(FixedArray* other); |
1843 #endif | 1890 #endif |
1844 | 1891 |
1845 // Swap two elements in a pair of arrays. If this array and the | 1892 // Swap two elements in a pair of arrays. If this array and the |
1846 // numbers array are the same object, the elements are only swapped | 1893 // numbers array are the same object, the elements are only swapped |
1847 // once. | 1894 // once. |
1848 void SwapPairs(FixedArray* numbers, int i, int j); | 1895 void SwapPairs(FixedArray* numbers, int i, int j); |
1849 | 1896 |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2005 // Layout description. | 2052 // Layout description. |
2006 static const int kContentArrayOffset = FixedArray::kHeaderSize; | 2053 static const int kContentArrayOffset = FixedArray::kHeaderSize; |
2007 static const int kEnumerationIndexOffset = kContentArrayOffset + kPointerSize; | 2054 static const int kEnumerationIndexOffset = kContentArrayOffset + kPointerSize; |
2008 static const int kFirstOffset = kEnumerationIndexOffset + kPointerSize; | 2055 static const int kFirstOffset = kEnumerationIndexOffset + kPointerSize; |
2009 | 2056 |
2010 // Layout description for the bridge array. | 2057 // Layout description for the bridge array. |
2011 static const int kEnumCacheBridgeEnumOffset = FixedArray::kHeaderSize; | 2058 static const int kEnumCacheBridgeEnumOffset = FixedArray::kHeaderSize; |
2012 static const int kEnumCacheBridgeCacheOffset = | 2059 static const int kEnumCacheBridgeCacheOffset = |
2013 kEnumCacheBridgeEnumOffset + kPointerSize; | 2060 kEnumCacheBridgeEnumOffset + kPointerSize; |
2014 | 2061 |
| 2062 #ifdef OBJECT_PRINT |
| 2063 // Print all the descriptors. |
| 2064 inline void PrintDescriptors() { |
| 2065 PrintDescriptors(stdout); |
| 2066 } |
| 2067 void PrintDescriptors(FILE* out); |
| 2068 #endif |
| 2069 |
2015 #ifdef DEBUG | 2070 #ifdef DEBUG |
2016 // Print all the descriptors. | |
2017 void PrintDescriptors(); | |
2018 | |
2019 // Is the descriptor array sorted and without duplicates? | 2071 // Is the descriptor array sorted and without duplicates? |
2020 bool IsSortedNoDuplicates(); | 2072 bool IsSortedNoDuplicates(); |
2021 | 2073 |
2022 // Are two DescriptorArrays equal? | 2074 // Are two DescriptorArrays equal? |
2023 bool IsEqualTo(DescriptorArray* other); | 2075 bool IsEqualTo(DescriptorArray* other); |
2024 #endif | 2076 #endif |
2025 | 2077 |
2026 // The maximum number of descriptors we want in a descriptor array (should | 2078 // The maximum number of descriptors we want in a descriptor array (should |
2027 // fit in a page). | 2079 // fit in a page). |
2028 static const int kMaxNumberOfDescriptors = 1024 + 512; | 2080 static const int kMaxNumberOfDescriptors = 1024 + 512; |
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2389 int NextEnumerationIndex() { | 2441 int NextEnumerationIndex() { |
2390 return Smi::cast(FixedArray::get(kNextEnumerationIndexIndex))->value(); | 2442 return Smi::cast(FixedArray::get(kNextEnumerationIndexIndex))->value(); |
2391 } | 2443 } |
2392 | 2444 |
2393 // Returns a new array for dictionary usage. Might return Failure. | 2445 // Returns a new array for dictionary usage. Might return Failure. |
2394 MUST_USE_RESULT static MaybeObject* Allocate(int at_least_space_for); | 2446 MUST_USE_RESULT static MaybeObject* Allocate(int at_least_space_for); |
2395 | 2447 |
2396 // Ensure enough space for n additional elements. | 2448 // Ensure enough space for n additional elements. |
2397 MUST_USE_RESULT MaybeObject* EnsureCapacity(int n, Key key); | 2449 MUST_USE_RESULT MaybeObject* EnsureCapacity(int n, Key key); |
2398 | 2450 |
2399 #ifdef DEBUG | 2451 #ifdef OBJECT_PRINT |
2400 void Print(); | 2452 inline void Print() { |
| 2453 Print(stdout); |
| 2454 } |
| 2455 void Print(FILE* out); |
2401 #endif | 2456 #endif |
2402 // Returns the key (slow). | 2457 // Returns the key (slow). |
2403 Object* SlowReverseLookup(Object* value); | 2458 Object* SlowReverseLookup(Object* value); |
2404 | 2459 |
2405 // Sets the entry to (key, value) pair. | 2460 // Sets the entry to (key, value) pair. |
2406 inline void SetEntry(int entry, | 2461 inline void SetEntry(int entry, |
2407 Object* key, | 2462 Object* key, |
2408 Object* value, | 2463 Object* value, |
2409 PropertyDetails details); | 2464 PropertyDetails details); |
2410 | 2465 |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2612 // Returns a pointer to the ByteArray object for a given data start address. | 2667 // Returns a pointer to the ByteArray object for a given data start address. |
2613 static inline ByteArray* FromDataStartAddress(Address address); | 2668 static inline ByteArray* FromDataStartAddress(Address address); |
2614 | 2669 |
2615 // Casting. | 2670 // Casting. |
2616 static inline ByteArray* cast(Object* obj); | 2671 static inline ByteArray* cast(Object* obj); |
2617 | 2672 |
2618 // Dispatched behavior. | 2673 // Dispatched behavior. |
2619 inline int ByteArraySize() { | 2674 inline int ByteArraySize() { |
2620 return SizeFor(this->length()); | 2675 return SizeFor(this->length()); |
2621 } | 2676 } |
| 2677 #ifdef OBJECT_PRINT |
| 2678 inline void ByteArrayPrint() { |
| 2679 ByteArrayPrint(stdout); |
| 2680 } |
| 2681 void ByteArrayPrint(FILE* out); |
| 2682 #endif |
2622 #ifdef DEBUG | 2683 #ifdef DEBUG |
2623 void ByteArrayPrint(); | |
2624 void ByteArrayVerify(); | 2684 void ByteArrayVerify(); |
2625 #endif | 2685 #endif |
2626 | 2686 |
2627 // Layout description. | 2687 // Layout description. |
2628 // Length is smi tagged when it is stored. | 2688 // Length is smi tagged when it is stored. |
2629 static const int kLengthOffset = HeapObject::kHeaderSize; | 2689 static const int kLengthOffset = HeapObject::kHeaderSize; |
2630 static const int kHeaderSize = kLengthOffset + kPointerSize; | 2690 static const int kHeaderSize = kLengthOffset + kPointerSize; |
2631 | 2691 |
2632 static const int kAlignedSize = OBJECT_POINTER_ALIGN(kHeaderSize); | 2692 static const int kAlignedSize = OBJECT_POINTER_ALIGN(kHeaderSize); |
2633 | 2693 |
(...skipping 28 matching lines...) Expand all Loading... |
2662 inline uint8_t get(int index); | 2722 inline uint8_t get(int index); |
2663 inline void set(int index, uint8_t value); | 2723 inline void set(int index, uint8_t value); |
2664 | 2724 |
2665 // This accessor applies the correct conversion from Smi, HeapNumber and | 2725 // This accessor applies the correct conversion from Smi, HeapNumber and |
2666 // undefined and clamps the converted value between 0 and 255. | 2726 // undefined and clamps the converted value between 0 and 255. |
2667 Object* SetValue(uint32_t index, Object* value); | 2727 Object* SetValue(uint32_t index, Object* value); |
2668 | 2728 |
2669 // Casting. | 2729 // Casting. |
2670 static inline PixelArray* cast(Object* obj); | 2730 static inline PixelArray* cast(Object* obj); |
2671 | 2731 |
| 2732 #ifdef OBJECT_PRINT |
| 2733 inline void PixelArrayPrint() { |
| 2734 PixelArrayPrint(stdout); |
| 2735 } |
| 2736 void PixelArrayPrint(FILE* out); |
| 2737 #endif |
2672 #ifdef DEBUG | 2738 #ifdef DEBUG |
2673 void PixelArrayPrint(); | |
2674 void PixelArrayVerify(); | 2739 void PixelArrayVerify(); |
2675 #endif // DEBUG | 2740 #endif // DEBUG |
2676 | 2741 |
2677 // Maximal acceptable length for a pixel array. | 2742 // Maximal acceptable length for a pixel array. |
2678 static const int kMaxLength = 0x3fffffff; | 2743 static const int kMaxLength = 0x3fffffff; |
2679 | 2744 |
2680 // PixelArray headers are not quadword aligned. | 2745 // PixelArray headers are not quadword aligned. |
2681 static const int kLengthOffset = HeapObject::kHeaderSize; | 2746 static const int kLengthOffset = HeapObject::kHeaderSize; |
2682 static const int kExternalPointerOffset = | 2747 static const int kExternalPointerOffset = |
2683 POINTER_SIZE_ALIGN(kLengthOffset + kIntSize); | 2748 POINTER_SIZE_ALIGN(kLengthOffset + kIntSize); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2734 inline int8_t get(int index); | 2799 inline int8_t get(int index); |
2735 inline void set(int index, int8_t value); | 2800 inline void set(int index, int8_t value); |
2736 | 2801 |
2737 // This accessor applies the correct conversion from Smi, HeapNumber | 2802 // This accessor applies the correct conversion from Smi, HeapNumber |
2738 // and undefined. | 2803 // and undefined. |
2739 MaybeObject* SetValue(uint32_t index, Object* value); | 2804 MaybeObject* SetValue(uint32_t index, Object* value); |
2740 | 2805 |
2741 // Casting. | 2806 // Casting. |
2742 static inline ExternalByteArray* cast(Object* obj); | 2807 static inline ExternalByteArray* cast(Object* obj); |
2743 | 2808 |
| 2809 #ifdef OBJECT_PRINT |
| 2810 inline void ExternalByteArrayPrint() { |
| 2811 ExternalByteArrayPrint(stdout); |
| 2812 } |
| 2813 void ExternalByteArrayPrint(FILE* out); |
| 2814 #endif |
2744 #ifdef DEBUG | 2815 #ifdef DEBUG |
2745 void ExternalByteArrayPrint(); | |
2746 void ExternalByteArrayVerify(); | 2816 void ExternalByteArrayVerify(); |
2747 #endif // DEBUG | 2817 #endif // DEBUG |
2748 | 2818 |
2749 private: | 2819 private: |
2750 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalByteArray); | 2820 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalByteArray); |
2751 }; | 2821 }; |
2752 | 2822 |
2753 | 2823 |
2754 class ExternalUnsignedByteArray: public ExternalArray { | 2824 class ExternalUnsignedByteArray: public ExternalArray { |
2755 public: | 2825 public: |
2756 // Setter and getter. | 2826 // Setter and getter. |
2757 inline uint8_t get(int index); | 2827 inline uint8_t get(int index); |
2758 inline void set(int index, uint8_t value); | 2828 inline void set(int index, uint8_t value); |
2759 | 2829 |
2760 // This accessor applies the correct conversion from Smi, HeapNumber | 2830 // This accessor applies the correct conversion from Smi, HeapNumber |
2761 // and undefined. | 2831 // and undefined. |
2762 MaybeObject* SetValue(uint32_t index, Object* value); | 2832 MaybeObject* SetValue(uint32_t index, Object* value); |
2763 | 2833 |
2764 // Casting. | 2834 // Casting. |
2765 static inline ExternalUnsignedByteArray* cast(Object* obj); | 2835 static inline ExternalUnsignedByteArray* cast(Object* obj); |
2766 | 2836 |
| 2837 #ifdef OBJECT_PRINT |
| 2838 inline void ExternalUnsignedByteArrayPrint() { |
| 2839 ExternalUnsignedByteArrayPrint(stdout); |
| 2840 } |
| 2841 void ExternalUnsignedByteArrayPrint(FILE* out); |
| 2842 #endif |
2767 #ifdef DEBUG | 2843 #ifdef DEBUG |
2768 void ExternalUnsignedByteArrayPrint(); | |
2769 void ExternalUnsignedByteArrayVerify(); | 2844 void ExternalUnsignedByteArrayVerify(); |
2770 #endif // DEBUG | 2845 #endif // DEBUG |
2771 | 2846 |
2772 private: | 2847 private: |
2773 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedByteArray); | 2848 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedByteArray); |
2774 }; | 2849 }; |
2775 | 2850 |
2776 | 2851 |
2777 class ExternalShortArray: public ExternalArray { | 2852 class ExternalShortArray: public ExternalArray { |
2778 public: | 2853 public: |
2779 // Setter and getter. | 2854 // Setter and getter. |
2780 inline int16_t get(int index); | 2855 inline int16_t get(int index); |
2781 inline void set(int index, int16_t value); | 2856 inline void set(int index, int16_t value); |
2782 | 2857 |
2783 // This accessor applies the correct conversion from Smi, HeapNumber | 2858 // This accessor applies the correct conversion from Smi, HeapNumber |
2784 // and undefined. | 2859 // and undefined. |
2785 MaybeObject* SetValue(uint32_t index, Object* value); | 2860 MaybeObject* SetValue(uint32_t index, Object* value); |
2786 | 2861 |
2787 // Casting. | 2862 // Casting. |
2788 static inline ExternalShortArray* cast(Object* obj); | 2863 static inline ExternalShortArray* cast(Object* obj); |
2789 | 2864 |
| 2865 #ifdef OBJECT_PRINT |
| 2866 inline void ExternalShortArrayPrint() { |
| 2867 ExternalShortArrayPrint(stdout); |
| 2868 } |
| 2869 void ExternalShortArrayPrint(FILE* out); |
| 2870 #endif |
2790 #ifdef DEBUG | 2871 #ifdef DEBUG |
2791 void ExternalShortArrayPrint(); | |
2792 void ExternalShortArrayVerify(); | 2872 void ExternalShortArrayVerify(); |
2793 #endif // DEBUG | 2873 #endif // DEBUG |
2794 | 2874 |
2795 private: | 2875 private: |
2796 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalShortArray); | 2876 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalShortArray); |
2797 }; | 2877 }; |
2798 | 2878 |
2799 | 2879 |
2800 class ExternalUnsignedShortArray: public ExternalArray { | 2880 class ExternalUnsignedShortArray: public ExternalArray { |
2801 public: | 2881 public: |
2802 // Setter and getter. | 2882 // Setter and getter. |
2803 inline uint16_t get(int index); | 2883 inline uint16_t get(int index); |
2804 inline void set(int index, uint16_t value); | 2884 inline void set(int index, uint16_t value); |
2805 | 2885 |
2806 // This accessor applies the correct conversion from Smi, HeapNumber | 2886 // This accessor applies the correct conversion from Smi, HeapNumber |
2807 // and undefined. | 2887 // and undefined. |
2808 MaybeObject* SetValue(uint32_t index, Object* value); | 2888 MaybeObject* SetValue(uint32_t index, Object* value); |
2809 | 2889 |
2810 // Casting. | 2890 // Casting. |
2811 static inline ExternalUnsignedShortArray* cast(Object* obj); | 2891 static inline ExternalUnsignedShortArray* cast(Object* obj); |
2812 | 2892 |
| 2893 #ifdef OBJECT_PRINT |
| 2894 inline void ExternalUnsignedShortArrayPrint() { |
| 2895 ExternalUnsignedShortArrayPrint(stdout); |
| 2896 } |
| 2897 void ExternalUnsignedShortArrayPrint(FILE* out); |
| 2898 #endif |
2813 #ifdef DEBUG | 2899 #ifdef DEBUG |
2814 void ExternalUnsignedShortArrayPrint(); | |
2815 void ExternalUnsignedShortArrayVerify(); | 2900 void ExternalUnsignedShortArrayVerify(); |
2816 #endif // DEBUG | 2901 #endif // DEBUG |
2817 | 2902 |
2818 private: | 2903 private: |
2819 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedShortArray); | 2904 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedShortArray); |
2820 }; | 2905 }; |
2821 | 2906 |
2822 | 2907 |
2823 class ExternalIntArray: public ExternalArray { | 2908 class ExternalIntArray: public ExternalArray { |
2824 public: | 2909 public: |
2825 // Setter and getter. | 2910 // Setter and getter. |
2826 inline int32_t get(int index); | 2911 inline int32_t get(int index); |
2827 inline void set(int index, int32_t value); | 2912 inline void set(int index, int32_t value); |
2828 | 2913 |
2829 // This accessor applies the correct conversion from Smi, HeapNumber | 2914 // This accessor applies the correct conversion from Smi, HeapNumber |
2830 // and undefined. | 2915 // and undefined. |
2831 MaybeObject* SetValue(uint32_t index, Object* value); | 2916 MaybeObject* SetValue(uint32_t index, Object* value); |
2832 | 2917 |
2833 // Casting. | 2918 // Casting. |
2834 static inline ExternalIntArray* cast(Object* obj); | 2919 static inline ExternalIntArray* cast(Object* obj); |
2835 | 2920 |
| 2921 #ifdef OBJECT_PRINT |
| 2922 inline void ExternalIntArrayPrint() { |
| 2923 ExternalIntArrayPrint(stdout); |
| 2924 } |
| 2925 void ExternalIntArrayPrint(FILE* out); |
| 2926 #endif |
2836 #ifdef DEBUG | 2927 #ifdef DEBUG |
2837 void ExternalIntArrayPrint(); | |
2838 void ExternalIntArrayVerify(); | 2928 void ExternalIntArrayVerify(); |
2839 #endif // DEBUG | 2929 #endif // DEBUG |
2840 | 2930 |
2841 private: | 2931 private: |
2842 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalIntArray); | 2932 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalIntArray); |
2843 }; | 2933 }; |
2844 | 2934 |
2845 | 2935 |
2846 class ExternalUnsignedIntArray: public ExternalArray { | 2936 class ExternalUnsignedIntArray: public ExternalArray { |
2847 public: | 2937 public: |
2848 // Setter and getter. | 2938 // Setter and getter. |
2849 inline uint32_t get(int index); | 2939 inline uint32_t get(int index); |
2850 inline void set(int index, uint32_t value); | 2940 inline void set(int index, uint32_t value); |
2851 | 2941 |
2852 // This accessor applies the correct conversion from Smi, HeapNumber | 2942 // This accessor applies the correct conversion from Smi, HeapNumber |
2853 // and undefined. | 2943 // and undefined. |
2854 MaybeObject* SetValue(uint32_t index, Object* value); | 2944 MaybeObject* SetValue(uint32_t index, Object* value); |
2855 | 2945 |
2856 // Casting. | 2946 // Casting. |
2857 static inline ExternalUnsignedIntArray* cast(Object* obj); | 2947 static inline ExternalUnsignedIntArray* cast(Object* obj); |
2858 | 2948 |
| 2949 #ifdef OBJECT_PRINT |
| 2950 inline void ExternalUnsignedIntArrayPrint() { |
| 2951 ExternalUnsignedIntArrayPrint(stdout); |
| 2952 } |
| 2953 void ExternalUnsignedIntArrayPrint(FILE* out); |
| 2954 #endif |
2859 #ifdef DEBUG | 2955 #ifdef DEBUG |
2860 void ExternalUnsignedIntArrayPrint(); | |
2861 void ExternalUnsignedIntArrayVerify(); | 2956 void ExternalUnsignedIntArrayVerify(); |
2862 #endif // DEBUG | 2957 #endif // DEBUG |
2863 | 2958 |
2864 private: | 2959 private: |
2865 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedIntArray); | 2960 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedIntArray); |
2866 }; | 2961 }; |
2867 | 2962 |
2868 | 2963 |
2869 class ExternalFloatArray: public ExternalArray { | 2964 class ExternalFloatArray: public ExternalArray { |
2870 public: | 2965 public: |
2871 // Setter and getter. | 2966 // Setter and getter. |
2872 inline float get(int index); | 2967 inline float get(int index); |
2873 inline void set(int index, float value); | 2968 inline void set(int index, float value); |
2874 | 2969 |
2875 // This accessor applies the correct conversion from Smi, HeapNumber | 2970 // This accessor applies the correct conversion from Smi, HeapNumber |
2876 // and undefined. | 2971 // and undefined. |
2877 MaybeObject* SetValue(uint32_t index, Object* value); | 2972 MaybeObject* SetValue(uint32_t index, Object* value); |
2878 | 2973 |
2879 // Casting. | 2974 // Casting. |
2880 static inline ExternalFloatArray* cast(Object* obj); | 2975 static inline ExternalFloatArray* cast(Object* obj); |
2881 | 2976 |
| 2977 #ifdef OBJECT_PRINT |
| 2978 inline void ExternalFloatArrayPrint() { |
| 2979 ExternalFloatArrayPrint(stdout); |
| 2980 } |
| 2981 void ExternalFloatArrayPrint(FILE* out); |
| 2982 #endif |
2882 #ifdef DEBUG | 2983 #ifdef DEBUG |
2883 void ExternalFloatArrayPrint(); | |
2884 void ExternalFloatArrayVerify(); | 2984 void ExternalFloatArrayVerify(); |
2885 #endif // DEBUG | 2985 #endif // DEBUG |
2886 | 2986 |
2887 private: | 2987 private: |
2888 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloatArray); | 2988 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloatArray); |
2889 }; | 2989 }; |
2890 | 2990 |
2891 | 2991 |
2892 // DeoptimizationInputData is a fixed array used to hold the deoptimization | 2992 // DeoptimizationInputData is a fixed array used to hold the deoptimization |
2893 // data for code generated by the Hydrogen/Lithium compiler. It also | 2993 // data for code generated by the Hydrogen/Lithium compiler. It also |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2953 return (length() - kFirstDeoptEntryIndex) / kDeoptEntrySize; | 3053 return (length() - kFirstDeoptEntryIndex) / kDeoptEntrySize; |
2954 } | 3054 } |
2955 | 3055 |
2956 // Allocates a DeoptimizationInputData. | 3056 // Allocates a DeoptimizationInputData. |
2957 MUST_USE_RESULT static MaybeObject* Allocate(int deopt_entry_count, | 3057 MUST_USE_RESULT static MaybeObject* Allocate(int deopt_entry_count, |
2958 PretenureFlag pretenure); | 3058 PretenureFlag pretenure); |
2959 | 3059 |
2960 // Casting. | 3060 // Casting. |
2961 static inline DeoptimizationInputData* cast(Object* obj); | 3061 static inline DeoptimizationInputData* cast(Object* obj); |
2962 | 3062 |
2963 #ifdef DEBUG | 3063 #ifdef OBJECT_PRINT |
2964 void DeoptimizationInputDataPrint(); | 3064 void DeoptimizationInputDataPrint(FILE* out); |
2965 #endif | 3065 #endif |
2966 | 3066 |
2967 private: | 3067 private: |
2968 static int IndexForEntry(int i) { | 3068 static int IndexForEntry(int i) { |
2969 return kFirstDeoptEntryIndex + (i * kDeoptEntrySize); | 3069 return kFirstDeoptEntryIndex + (i * kDeoptEntrySize); |
2970 } | 3070 } |
2971 | 3071 |
2972 static int LengthFor(int entry_count) { | 3072 static int LengthFor(int entry_count) { |
2973 return IndexForEntry(entry_count); | 3073 return IndexForEntry(entry_count); |
2974 } | 3074 } |
(...skipping 17 matching lines...) Expand all Loading... |
2992 return deopt_points * 2; | 3092 return deopt_points * 2; |
2993 } | 3093 } |
2994 | 3094 |
2995 // Allocates a DeoptimizationOutputData. | 3095 // Allocates a DeoptimizationOutputData. |
2996 MUST_USE_RESULT static MaybeObject* Allocate(int number_of_deopt_points, | 3096 MUST_USE_RESULT static MaybeObject* Allocate(int number_of_deopt_points, |
2997 PretenureFlag pretenure); | 3097 PretenureFlag pretenure); |
2998 | 3098 |
2999 // Casting. | 3099 // Casting. |
3000 static inline DeoptimizationOutputData* cast(Object* obj); | 3100 static inline DeoptimizationOutputData* cast(Object* obj); |
3001 | 3101 |
3002 #ifdef DEBUG | 3102 #ifdef OBJECT_PRINT |
3003 void DeoptimizationOutputDataPrint(); | 3103 void DeoptimizationOutputDataPrint(FILE* out); |
3004 #endif | 3104 #endif |
3005 }; | 3105 }; |
3006 | 3106 |
3007 | 3107 |
3008 // Code describes objects with on-the-fly generated machine code. | 3108 // Code describes objects with on-the-fly generated machine code. |
3009 class Code: public HeapObject { | 3109 class Code: public HeapObject { |
3010 public: | 3110 public: |
3011 // Opaque data type for encapsulating code flags like kind, inline | 3111 // Opaque data type for encapsulating code flags like kind, inline |
3012 // cache state, and arguments count. | 3112 // cache state, and arguments count. |
3013 // FLAGS_MIN_VALUE and FLAGS_MAX_VALUE are specified to ensure that | 3113 // FLAGS_MIN_VALUE and FLAGS_MAX_VALUE are specified to ensure that |
(...skipping 28 matching lines...) Expand all Loading... |
3042 | 3142 |
3043 enum { | 3143 enum { |
3044 NUMBER_OF_KINDS = LAST_IC_KIND + 1 | 3144 NUMBER_OF_KINDS = LAST_IC_KIND + 1 |
3045 }; | 3145 }; |
3046 | 3146 |
3047 #ifdef ENABLE_DISASSEMBLER | 3147 #ifdef ENABLE_DISASSEMBLER |
3048 // Printing | 3148 // Printing |
3049 static const char* Kind2String(Kind kind); | 3149 static const char* Kind2String(Kind kind); |
3050 static const char* ICState2String(InlineCacheState state); | 3150 static const char* ICState2String(InlineCacheState state); |
3051 static const char* PropertyType2String(PropertyType type); | 3151 static const char* PropertyType2String(PropertyType type); |
3052 void Disassemble(const char* name); | 3152 inline void Disassemble(const char* name) { |
| 3153 Disassemble(name, stdout); |
| 3154 } |
| 3155 void Disassemble(const char* name, FILE* out); |
3053 #endif // ENABLE_DISASSEMBLER | 3156 #endif // ENABLE_DISASSEMBLER |
3054 | 3157 |
3055 // [instruction_size]: Size of the native instructions | 3158 // [instruction_size]: Size of the native instructions |
3056 inline int instruction_size(); | 3159 inline int instruction_size(); |
3057 inline void set_instruction_size(int value); | 3160 inline void set_instruction_size(int value); |
3058 | 3161 |
3059 // [relocation_info]: Code relocation information | 3162 // [relocation_info]: Code relocation information |
3060 DECL_ACCESSORS(relocation_info, ByteArray) | 3163 DECL_ACCESSORS(relocation_info, ByteArray) |
3061 void InvalidateRelocation(); | 3164 void InvalidateRelocation(); |
3062 | 3165 |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3235 | 3338 |
3236 // Casting. | 3339 // Casting. |
3237 static inline Code* cast(Object* obj); | 3340 static inline Code* cast(Object* obj); |
3238 | 3341 |
3239 // Dispatched behavior. | 3342 // Dispatched behavior. |
3240 int CodeSize() { return SizeFor(body_size()); } | 3343 int CodeSize() { return SizeFor(body_size()); } |
3241 inline void CodeIterateBody(ObjectVisitor* v); | 3344 inline void CodeIterateBody(ObjectVisitor* v); |
3242 | 3345 |
3243 template<typename StaticVisitor> | 3346 template<typename StaticVisitor> |
3244 inline void CodeIterateBody(); | 3347 inline void CodeIterateBody(); |
| 3348 #ifdef OBJECT_PRINT |
| 3349 inline void CodePrint() { |
| 3350 CodePrint(stdout); |
| 3351 } |
| 3352 void CodePrint(FILE* out); |
| 3353 #endif |
3245 #ifdef DEBUG | 3354 #ifdef DEBUG |
3246 void CodePrint(); | |
3247 void CodeVerify(); | 3355 void CodeVerify(); |
3248 #endif | 3356 #endif |
3249 | 3357 |
3250 // Max loop nesting marker used to postpose OSR. We don't take loop | 3358 // Max loop nesting marker used to postpose OSR. We don't take loop |
3251 // nesting that is deeper than 5 levels into account. | 3359 // nesting that is deeper than 5 levels into account. |
3252 static const int kMaxLoopNestingMarker = 6; | 3360 static const int kMaxLoopNestingMarker = 6; |
3253 | 3361 |
3254 // Layout description. | 3362 // Layout description. |
3255 static const int kInstructionSizeOffset = HeapObject::kHeaderSize; | 3363 static const int kInstructionSizeOffset = HeapObject::kHeaderSize; |
3256 static const int kRelocationInfoOffset = kInstructionSizeOffset + kIntSize; | 3364 static const int kRelocationInfoOffset = kInstructionSizeOffset + kIntSize; |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3524 // This is undone in MarkCompactCollector::ClearNonLiveTransitions(). | 3632 // This is undone in MarkCompactCollector::ClearNonLiveTransitions(). |
3525 void CreateBackPointers(); | 3633 void CreateBackPointers(); |
3526 | 3634 |
3527 // Set all map transitions from this map to dead maps to null. | 3635 // Set all map transitions from this map to dead maps to null. |
3528 // Also, restore the original prototype on the targets of these | 3636 // Also, restore the original prototype on the targets of these |
3529 // transitions, so that we do not process this map again while | 3637 // transitions, so that we do not process this map again while |
3530 // following back pointers. | 3638 // following back pointers. |
3531 void ClearNonLiveTransitions(Object* real_prototype); | 3639 void ClearNonLiveTransitions(Object* real_prototype); |
3532 | 3640 |
3533 // Dispatched behavior. | 3641 // Dispatched behavior. |
| 3642 #ifdef OBJECT_PRINT |
| 3643 inline void MapPrint() { |
| 3644 MapPrint(stdout); |
| 3645 } |
| 3646 void MapPrint(FILE* out); |
| 3647 #endif |
3534 #ifdef DEBUG | 3648 #ifdef DEBUG |
3535 void MapPrint(); | |
3536 void MapVerify(); | 3649 void MapVerify(); |
3537 void SharedMapVerify(); | 3650 void SharedMapVerify(); |
3538 #endif | 3651 #endif |
3539 | 3652 |
3540 inline int visitor_id(); | 3653 inline int visitor_id(); |
3541 inline void set_visitor_id(int visitor_id); | 3654 inline void set_visitor_id(int visitor_id); |
3542 | 3655 |
3543 typedef void (*TraverseCallback)(Map* map, void* data); | 3656 typedef void (*TraverseCallback)(Map* map, void* data); |
3544 | 3657 |
3545 void TraverseTransitionTree(TraverseCallback callback, void* data); | 3658 void TraverseTransitionTree(TraverseCallback callback, void* data); |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3681 // [eval_from_instructions_offset]: the instruction offset in the code for the | 3794 // [eval_from_instructions_offset]: the instruction offset in the code for the |
3682 // function from which eval was called where eval was called. | 3795 // function from which eval was called where eval was called. |
3683 DECL_ACCESSORS(eval_from_instructions_offset, Smi) | 3796 DECL_ACCESSORS(eval_from_instructions_offset, Smi) |
3684 | 3797 |
3685 static inline Script* cast(Object* obj); | 3798 static inline Script* cast(Object* obj); |
3686 | 3799 |
3687 // If script source is an external string, check that the underlying | 3800 // If script source is an external string, check that the underlying |
3688 // resource is accessible. Otherwise, always return true. | 3801 // resource is accessible. Otherwise, always return true. |
3689 inline bool HasValidSource(); | 3802 inline bool HasValidSource(); |
3690 | 3803 |
| 3804 #ifdef OBJECT_PRINT |
| 3805 inline void ScriptPrint() { |
| 3806 ScriptPrint(stdout); |
| 3807 } |
| 3808 void ScriptPrint(FILE* out); |
| 3809 #endif |
3691 #ifdef DEBUG | 3810 #ifdef DEBUG |
3692 void ScriptPrint(); | |
3693 void ScriptVerify(); | 3811 void ScriptVerify(); |
3694 #endif | 3812 #endif |
3695 | 3813 |
3696 static const int kSourceOffset = HeapObject::kHeaderSize; | 3814 static const int kSourceOffset = HeapObject::kHeaderSize; |
3697 static const int kNameOffset = kSourceOffset + kPointerSize; | 3815 static const int kNameOffset = kSourceOffset + kPointerSize; |
3698 static const int kLineOffsetOffset = kNameOffset + kPointerSize; | 3816 static const int kLineOffsetOffset = kNameOffset + kPointerSize; |
3699 static const int kColumnOffsetOffset = kLineOffsetOffset + kPointerSize; | 3817 static const int kColumnOffsetOffset = kLineOffsetOffset + kPointerSize; |
3700 static const int kDataOffset = kColumnOffsetOffset + kPointerSize; | 3818 static const int kDataOffset = kColumnOffsetOffset + kPointerSize; |
3701 static const int kContextOffset = kDataOffset + kPointerSize; | 3819 static const int kContextOffset = kDataOffset + kPointerSize; |
3702 static const int kWrapperOffset = kContextOffset + kPointerSize; | 3820 static const int kWrapperOffset = kContextOffset + kPointerSize; |
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4045 | 4163 |
4046 // Calculate the instance size. | 4164 // Calculate the instance size. |
4047 int CalculateInstanceSize(); | 4165 int CalculateInstanceSize(); |
4048 | 4166 |
4049 // Calculate the number of in-object properties. | 4167 // Calculate the number of in-object properties. |
4050 int CalculateInObjectProperties(); | 4168 int CalculateInObjectProperties(); |
4051 | 4169 |
4052 // Dispatched behavior. | 4170 // Dispatched behavior. |
4053 // Set max_length to -1 for unlimited length. | 4171 // Set max_length to -1 for unlimited length. |
4054 void SourceCodePrint(StringStream* accumulator, int max_length); | 4172 void SourceCodePrint(StringStream* accumulator, int max_length); |
| 4173 #ifdef OBJECT_PRINT |
| 4174 inline void SharedFunctionInfoPrint() { |
| 4175 SharedFunctionInfoPrint(stdout); |
| 4176 } |
| 4177 void SharedFunctionInfoPrint(FILE* out); |
| 4178 #endif |
4055 #ifdef DEBUG | 4179 #ifdef DEBUG |
4056 void SharedFunctionInfoPrint(); | |
4057 void SharedFunctionInfoVerify(); | 4180 void SharedFunctionInfoVerify(); |
4058 #endif | 4181 #endif |
4059 | 4182 |
4060 // Casting. | 4183 // Casting. |
4061 static inline SharedFunctionInfo* cast(Object* obj); | 4184 static inline SharedFunctionInfo* cast(Object* obj); |
4062 | 4185 |
4063 // Constants. | 4186 // Constants. |
4064 static const int kDontAdaptArgumentsSentinel = -1; | 4187 static const int kDontAdaptArgumentsSentinel = -1; |
4065 | 4188 |
4066 // Layout description. | 4189 // Layout description. |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4278 Object* SetInstanceClassName(String* name); | 4401 Object* SetInstanceClassName(String* name); |
4279 | 4402 |
4280 // Returns if this function has been compiled to native code yet. | 4403 // Returns if this function has been compiled to native code yet. |
4281 inline bool is_compiled(); | 4404 inline bool is_compiled(); |
4282 | 4405 |
4283 // [next_function_link]: Field for linking functions. This list is treated as | 4406 // [next_function_link]: Field for linking functions. This list is treated as |
4284 // a weak list by the GC. | 4407 // a weak list by the GC. |
4285 DECL_ACCESSORS(next_function_link, Object) | 4408 DECL_ACCESSORS(next_function_link, Object) |
4286 | 4409 |
4287 // Prints the name of the function using PrintF. | 4410 // Prints the name of the function using PrintF. |
4288 void PrintName(); | 4411 inline void PrintName() { |
| 4412 PrintName(stdout); |
| 4413 } |
| 4414 void PrintName(FILE* out); |
4289 | 4415 |
4290 // Casting. | 4416 // Casting. |
4291 static inline JSFunction* cast(Object* obj); | 4417 static inline JSFunction* cast(Object* obj); |
4292 | 4418 |
4293 // Iterates the objects, including code objects indirectly referenced | 4419 // Iterates the objects, including code objects indirectly referenced |
4294 // through pointers to the first instruction in the code object. | 4420 // through pointers to the first instruction in the code object. |
4295 void JSFunctionIterateBody(int object_size, ObjectVisitor* v); | 4421 void JSFunctionIterateBody(int object_size, ObjectVisitor* v); |
4296 | 4422 |
4297 // Dispatched behavior. | 4423 // Dispatched behavior. |
| 4424 #ifdef OBJECT_PRINT |
| 4425 inline void JSFunctionPrint() { |
| 4426 JSFunctionPrint(stdout); |
| 4427 } |
| 4428 void JSFunctionPrint(FILE* out); |
| 4429 #endif |
4298 #ifdef DEBUG | 4430 #ifdef DEBUG |
4299 void JSFunctionPrint(); | |
4300 void JSFunctionVerify(); | 4431 void JSFunctionVerify(); |
4301 #endif | 4432 #endif |
4302 | 4433 |
4303 // Returns the number of allocated literals. | 4434 // Returns the number of allocated literals. |
4304 inline int NumberOfLiterals(); | 4435 inline int NumberOfLiterals(); |
4305 | 4436 |
4306 // Retrieve the global context from a function's literal array. | 4437 // Retrieve the global context from a function's literal array. |
4307 static Context* GlobalContextFromLiterals(FixedArray* literals); | 4438 static Context* GlobalContextFromLiterals(FixedArray* literals); |
4308 | 4439 |
4309 // Layout descriptors. The last property (from kNonWeakFieldsEndOffset to | 4440 // Layout descriptors. The last property (from kNonWeakFieldsEndOffset to |
(...skipping 28 matching lines...) Expand all Loading... |
4338 class JSGlobalProxy : public JSObject { | 4469 class JSGlobalProxy : public JSObject { |
4339 public: | 4470 public: |
4340 // [context]: the owner global context of this proxy object. | 4471 // [context]: the owner global context of this proxy object. |
4341 // It is null value if this object is not used by any context. | 4472 // It is null value if this object is not used by any context. |
4342 DECL_ACCESSORS(context, Object) | 4473 DECL_ACCESSORS(context, Object) |
4343 | 4474 |
4344 // Casting. | 4475 // Casting. |
4345 static inline JSGlobalProxy* cast(Object* obj); | 4476 static inline JSGlobalProxy* cast(Object* obj); |
4346 | 4477 |
4347 // Dispatched behavior. | 4478 // Dispatched behavior. |
| 4479 #ifdef OBJECT_PRINT |
| 4480 inline void JSGlobalProxyPrint() { |
| 4481 JSGlobalProxyPrint(stdout); |
| 4482 } |
| 4483 void JSGlobalProxyPrint(FILE* out); |
| 4484 #endif |
4348 #ifdef DEBUG | 4485 #ifdef DEBUG |
4349 void JSGlobalProxyPrint(); | |
4350 void JSGlobalProxyVerify(); | 4486 void JSGlobalProxyVerify(); |
4351 #endif | 4487 #endif |
4352 | 4488 |
4353 // Layout description. | 4489 // Layout description. |
4354 static const int kContextOffset = JSObject::kHeaderSize; | 4490 static const int kContextOffset = JSObject::kHeaderSize; |
4355 static const int kSize = kContextOffset + kPointerSize; | 4491 static const int kSize = kContextOffset + kPointerSize; |
4356 | 4492 |
4357 private: | 4493 private: |
4358 | 4494 |
4359 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalProxy); | 4495 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalProxy); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4409 | 4545 |
4410 | 4546 |
4411 // JavaScript global object. | 4547 // JavaScript global object. |
4412 class JSGlobalObject: public GlobalObject { | 4548 class JSGlobalObject: public GlobalObject { |
4413 public: | 4549 public: |
4414 | 4550 |
4415 // Casting. | 4551 // Casting. |
4416 static inline JSGlobalObject* cast(Object* obj); | 4552 static inline JSGlobalObject* cast(Object* obj); |
4417 | 4553 |
4418 // Dispatched behavior. | 4554 // Dispatched behavior. |
| 4555 #ifdef OBJECT_PRINT |
| 4556 inline void JSGlobalObjectPrint() { |
| 4557 JSGlobalObjectPrint(stdout); |
| 4558 } |
| 4559 void JSGlobalObjectPrint(FILE* out); |
| 4560 #endif |
4419 #ifdef DEBUG | 4561 #ifdef DEBUG |
4420 void JSGlobalObjectPrint(); | |
4421 void JSGlobalObjectVerify(); | 4562 void JSGlobalObjectVerify(); |
4422 #endif | 4563 #endif |
4423 | 4564 |
4424 // Layout description. | 4565 // Layout description. |
4425 static const int kSize = GlobalObject::kHeaderSize; | 4566 static const int kSize = GlobalObject::kHeaderSize; |
4426 | 4567 |
4427 private: | 4568 private: |
4428 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalObject); | 4569 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalObject); |
4429 }; | 4570 }; |
4430 | 4571 |
4431 | 4572 |
4432 // Builtins global object which holds the runtime routines written in | 4573 // Builtins global object which holds the runtime routines written in |
4433 // JavaScript. | 4574 // JavaScript. |
4434 class JSBuiltinsObject: public GlobalObject { | 4575 class JSBuiltinsObject: public GlobalObject { |
4435 public: | 4576 public: |
4436 // Accessors for the runtime routines written in JavaScript. | 4577 // Accessors for the runtime routines written in JavaScript. |
4437 inline Object* javascript_builtin(Builtins::JavaScript id); | 4578 inline Object* javascript_builtin(Builtins::JavaScript id); |
4438 inline void set_javascript_builtin(Builtins::JavaScript id, Object* value); | 4579 inline void set_javascript_builtin(Builtins::JavaScript id, Object* value); |
4439 | 4580 |
4440 // Accessors for code of the runtime routines written in JavaScript. | 4581 // Accessors for code of the runtime routines written in JavaScript. |
4441 inline Code* javascript_builtin_code(Builtins::JavaScript id); | 4582 inline Code* javascript_builtin_code(Builtins::JavaScript id); |
4442 inline void set_javascript_builtin_code(Builtins::JavaScript id, Code* value); | 4583 inline void set_javascript_builtin_code(Builtins::JavaScript id, Code* value); |
4443 | 4584 |
4444 // Casting. | 4585 // Casting. |
4445 static inline JSBuiltinsObject* cast(Object* obj); | 4586 static inline JSBuiltinsObject* cast(Object* obj); |
4446 | 4587 |
4447 // Dispatched behavior. | 4588 // Dispatched behavior. |
| 4589 #ifdef OBJECT_PRINT |
| 4590 inline void JSBuiltinsObjectPrint() { |
| 4591 JSBuiltinsObjectPrint(stdout); |
| 4592 } |
| 4593 void JSBuiltinsObjectPrint(FILE* out); |
| 4594 #endif |
4448 #ifdef DEBUG | 4595 #ifdef DEBUG |
4449 void JSBuiltinsObjectPrint(); | |
4450 void JSBuiltinsObjectVerify(); | 4596 void JSBuiltinsObjectVerify(); |
4451 #endif | 4597 #endif |
4452 | 4598 |
4453 // Layout description. The size of the builtins object includes | 4599 // Layout description. The size of the builtins object includes |
4454 // room for two pointers per runtime routine written in javascript | 4600 // room for two pointers per runtime routine written in javascript |
4455 // (function and code object). | 4601 // (function and code object). |
4456 static const int kJSBuiltinsCount = Builtins::id_count; | 4602 static const int kJSBuiltinsCount = Builtins::id_count; |
4457 static const int kJSBuiltinsOffset = GlobalObject::kHeaderSize; | 4603 static const int kJSBuiltinsOffset = GlobalObject::kHeaderSize; |
4458 static const int kJSBuiltinsCodeOffset = | 4604 static const int kJSBuiltinsCodeOffset = |
4459 GlobalObject::kHeaderSize + (kJSBuiltinsCount * kPointerSize); | 4605 GlobalObject::kHeaderSize + (kJSBuiltinsCount * kPointerSize); |
(...skipping 16 matching lines...) Expand all Loading... |
4476 // Representation for JS Wrapper objects, String, Number, Boolean, Date, etc. | 4622 // Representation for JS Wrapper objects, String, Number, Boolean, Date, etc. |
4477 class JSValue: public JSObject { | 4623 class JSValue: public JSObject { |
4478 public: | 4624 public: |
4479 // [value]: the object being wrapped. | 4625 // [value]: the object being wrapped. |
4480 DECL_ACCESSORS(value, Object) | 4626 DECL_ACCESSORS(value, Object) |
4481 | 4627 |
4482 // Casting. | 4628 // Casting. |
4483 static inline JSValue* cast(Object* obj); | 4629 static inline JSValue* cast(Object* obj); |
4484 | 4630 |
4485 // Dispatched behavior. | 4631 // Dispatched behavior. |
| 4632 #ifdef OBJECT_PRINT |
| 4633 inline void JSValuePrint() { |
| 4634 JSValuePrint(stdout); |
| 4635 } |
| 4636 void JSValuePrint(FILE* out); |
| 4637 #endif |
4486 #ifdef DEBUG | 4638 #ifdef DEBUG |
4487 void JSValuePrint(); | |
4488 void JSValueVerify(); | 4639 void JSValueVerify(); |
4489 #endif | 4640 #endif |
4490 | 4641 |
4491 // Layout description. | 4642 // Layout description. |
4492 static const int kValueOffset = JSObject::kHeaderSize; | 4643 static const int kValueOffset = JSObject::kHeaderSize; |
4493 static const int kSize = kValueOffset + kPointerSize; | 4644 static const int kSize = kValueOffset + kPointerSize; |
4494 | 4645 |
4495 private: | 4646 private: |
4496 DISALLOW_IMPLICIT_CONSTRUCTORS(JSValue); | 4647 DISALLOW_IMPLICIT_CONSTRUCTORS(JSValue); |
4497 }; | 4648 }; |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4666 // code object is not in that cache. This index can be used to later call | 4817 // code object is not in that cache. This index can be used to later call |
4667 // RemoveByIndex. The cache cannot be modified between a call to GetIndex and | 4818 // RemoveByIndex. The cache cannot be modified between a call to GetIndex and |
4668 // RemoveByIndex. | 4819 // RemoveByIndex. |
4669 int GetIndex(Object* name, Code* code); | 4820 int GetIndex(Object* name, Code* code); |
4670 | 4821 |
4671 // Remove an object from the cache with the provided internal index. | 4822 // Remove an object from the cache with the provided internal index. |
4672 void RemoveByIndex(Object* name, Code* code, int index); | 4823 void RemoveByIndex(Object* name, Code* code, int index); |
4673 | 4824 |
4674 static inline CodeCache* cast(Object* obj); | 4825 static inline CodeCache* cast(Object* obj); |
4675 | 4826 |
| 4827 #ifdef OBJECT_PRINT |
| 4828 inline void CodeCachePrint() { |
| 4829 CodeCachePrint(stdout); |
| 4830 } |
| 4831 void CodeCachePrint(FILE* out); |
| 4832 #endif |
4676 #ifdef DEBUG | 4833 #ifdef DEBUG |
4677 void CodeCachePrint(); | |
4678 void CodeCacheVerify(); | 4834 void CodeCacheVerify(); |
4679 #endif | 4835 #endif |
4680 | 4836 |
4681 static const int kDefaultCacheOffset = HeapObject::kHeaderSize; | 4837 static const int kDefaultCacheOffset = HeapObject::kHeaderSize; |
4682 static const int kNormalTypeCacheOffset = | 4838 static const int kNormalTypeCacheOffset = |
4683 kDefaultCacheOffset + kPointerSize; | 4839 kDefaultCacheOffset + kPointerSize; |
4684 static const int kSize = kNormalTypeCacheOffset + kPointerSize; | 4840 static const int kSize = kNormalTypeCacheOffset + kPointerSize; |
4685 | 4841 |
4686 private: | 4842 private: |
4687 MUST_USE_RESULT MaybeObject* UpdateDefaultCache(String* name, Code* code); | 4843 MUST_USE_RESULT MaybeObject* UpdateDefaultCache(String* name, Code* code); |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4968 // Casting. | 5124 // Casting. |
4969 static inline String* cast(Object* obj); | 5125 static inline String* cast(Object* obj); |
4970 | 5126 |
4971 void PrintOn(FILE* out); | 5127 void PrintOn(FILE* out); |
4972 | 5128 |
4973 // For use during stack traces. Performs rudimentary sanity check. | 5129 // For use during stack traces. Performs rudimentary sanity check. |
4974 bool LooksValid(); | 5130 bool LooksValid(); |
4975 | 5131 |
4976 // Dispatched behavior. | 5132 // Dispatched behavior. |
4977 void StringShortPrint(StringStream* accumulator); | 5133 void StringShortPrint(StringStream* accumulator); |
| 5134 #ifdef OBJECT_PRINT |
| 5135 inline void StringPrint() { |
| 5136 StringPrint(stdout); |
| 5137 } |
| 5138 void StringPrint(FILE* out); |
| 5139 #endif |
4978 #ifdef DEBUG | 5140 #ifdef DEBUG |
4979 void StringPrint(); | |
4980 void StringVerify(); | 5141 void StringVerify(); |
4981 #endif | 5142 #endif |
4982 inline bool IsFlat(); | 5143 inline bool IsFlat(); |
4983 | 5144 |
4984 // Layout description. | 5145 // Layout description. |
4985 static const int kLengthOffset = HeapObject::kHeaderSize; | 5146 static const int kLengthOffset = HeapObject::kHeaderSize; |
4986 static const int kHashFieldOffset = kLengthOffset + kPointerSize; | 5147 static const int kHashFieldOffset = kLengthOffset + kPointerSize; |
4987 static const int kSize = kHashFieldOffset + kPointerSize; | 5148 static const int kSize = kHashFieldOffset + kPointerSize; |
4988 | 5149 |
4989 // Maximum number of characters to consider when trying to convert a string | 5150 // Maximum number of characters to consider when trying to convert a string |
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5524 class JSGlobalPropertyCell: public HeapObject { | 5685 class JSGlobalPropertyCell: public HeapObject { |
5525 public: | 5686 public: |
5526 // [value]: value of the global property. | 5687 // [value]: value of the global property. |
5527 DECL_ACCESSORS(value, Object) | 5688 DECL_ACCESSORS(value, Object) |
5528 | 5689 |
5529 // Casting. | 5690 // Casting. |
5530 static inline JSGlobalPropertyCell* cast(Object* obj); | 5691 static inline JSGlobalPropertyCell* cast(Object* obj); |
5531 | 5692 |
5532 #ifdef DEBUG | 5693 #ifdef DEBUG |
5533 void JSGlobalPropertyCellVerify(); | 5694 void JSGlobalPropertyCellVerify(); |
5534 void JSGlobalPropertyCellPrint(); | 5695 #endif |
| 5696 #ifdef OBJECT_PRINT |
| 5697 inline void JSGlobalPropertyCellPrint() { |
| 5698 JSGlobalPropertyCellPrint(stdout); |
| 5699 } |
| 5700 void JSGlobalPropertyCellPrint(FILE* out); |
5535 #endif | 5701 #endif |
5536 | 5702 |
5537 // Layout description. | 5703 // Layout description. |
5538 static const int kValueOffset = HeapObject::kHeaderSize; | 5704 static const int kValueOffset = HeapObject::kHeaderSize; |
5539 static const int kSize = kValueOffset + kPointerSize; | 5705 static const int kSize = kValueOffset + kPointerSize; |
5540 | 5706 |
5541 typedef FixedBodyDescriptor<kValueOffset, | 5707 typedef FixedBodyDescriptor<kValueOffset, |
5542 kValueOffset + kPointerSize, | 5708 kValueOffset + kPointerSize, |
5543 kSize> BodyDescriptor; | 5709 kSize> BodyDescriptor; |
5544 | 5710 |
(...skipping 14 matching lines...) Expand all Loading... |
5559 | 5725 |
5560 // Casting. | 5726 // Casting. |
5561 static inline Proxy* cast(Object* obj); | 5727 static inline Proxy* cast(Object* obj); |
5562 | 5728 |
5563 // Dispatched behavior. | 5729 // Dispatched behavior. |
5564 inline void ProxyIterateBody(ObjectVisitor* v); | 5730 inline void ProxyIterateBody(ObjectVisitor* v); |
5565 | 5731 |
5566 template<typename StaticVisitor> | 5732 template<typename StaticVisitor> |
5567 inline void ProxyIterateBody(); | 5733 inline void ProxyIterateBody(); |
5568 | 5734 |
| 5735 #ifdef OBJECT_PRINT |
| 5736 inline void ProxyPrint() { |
| 5737 ProxyPrint(stdout); |
| 5738 } |
| 5739 void ProxyPrint(FILE* out); |
| 5740 #endif |
5569 #ifdef DEBUG | 5741 #ifdef DEBUG |
5570 void ProxyPrint(); | |
5571 void ProxyVerify(); | 5742 void ProxyVerify(); |
5572 #endif | 5743 #endif |
5573 | 5744 |
5574 // Layout description. | 5745 // Layout description. |
5575 | 5746 |
5576 static const int kProxyOffset = HeapObject::kHeaderSize; | 5747 static const int kProxyOffset = HeapObject::kHeaderSize; |
5577 static const int kSize = kProxyOffset + kPointerSize; | 5748 static const int kSize = kProxyOffset + kPointerSize; |
5578 | 5749 |
5579 STATIC_CHECK(kProxyOffset == Internals::kProxyProxyOffset); | 5750 STATIC_CHECK(kProxyOffset == Internals::kProxyProxyOffset); |
5580 | 5751 |
(...skipping 28 matching lines...) Expand all Loading... |
5609 inline void SetContent(FixedArray* storage); | 5780 inline void SetContent(FixedArray* storage); |
5610 | 5781 |
5611 // Casting. | 5782 // Casting. |
5612 static inline JSArray* cast(Object* obj); | 5783 static inline JSArray* cast(Object* obj); |
5613 | 5784 |
5614 // Uses handles. Ensures that the fixed array backing the JSArray has at | 5785 // Uses handles. Ensures that the fixed array backing the JSArray has at |
5615 // least the stated size. | 5786 // least the stated size. |
5616 inline void EnsureSize(int minimum_size_of_backing_fixed_array); | 5787 inline void EnsureSize(int minimum_size_of_backing_fixed_array); |
5617 | 5788 |
5618 // Dispatched behavior. | 5789 // Dispatched behavior. |
| 5790 #ifdef OBJECT_PRINT |
| 5791 inline void JSArrayPrint() { |
| 5792 JSArrayPrint(stdout); |
| 5793 } |
| 5794 void JSArrayPrint(FILE* out); |
| 5795 #endif |
5619 #ifdef DEBUG | 5796 #ifdef DEBUG |
5620 void JSArrayPrint(); | |
5621 void JSArrayVerify(); | 5797 void JSArrayVerify(); |
5622 #endif | 5798 #endif |
5623 | 5799 |
5624 // Number of element slots to pre-allocate for an empty array. | 5800 // Number of element slots to pre-allocate for an empty array. |
5625 static const int kPreallocatedArrayElements = 4; | 5801 static const int kPreallocatedArrayElements = 4; |
5626 | 5802 |
5627 // Layout description. | 5803 // Layout description. |
5628 static const int kLengthOffset = JSObject::kHeaderSize; | 5804 static const int kLengthOffset = JSObject::kHeaderSize; |
5629 static const int kSize = kLengthOffset + kPointerSize; | 5805 static const int kSize = kLengthOffset + kPointerSize; |
5630 | 5806 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5681 inline void set_all_can_write(bool value); | 5857 inline void set_all_can_write(bool value); |
5682 | 5858 |
5683 inline bool prohibits_overwriting(); | 5859 inline bool prohibits_overwriting(); |
5684 inline void set_prohibits_overwriting(bool value); | 5860 inline void set_prohibits_overwriting(bool value); |
5685 | 5861 |
5686 inline PropertyAttributes property_attributes(); | 5862 inline PropertyAttributes property_attributes(); |
5687 inline void set_property_attributes(PropertyAttributes attributes); | 5863 inline void set_property_attributes(PropertyAttributes attributes); |
5688 | 5864 |
5689 static inline AccessorInfo* cast(Object* obj); | 5865 static inline AccessorInfo* cast(Object* obj); |
5690 | 5866 |
| 5867 #ifdef OBJECT_PRINT |
| 5868 inline void AccessorInfoPrint() { |
| 5869 AccessorInfoPrint(stdout); |
| 5870 } |
| 5871 void AccessorInfoPrint(FILE* out); |
| 5872 #endif |
5691 #ifdef DEBUG | 5873 #ifdef DEBUG |
5692 void AccessorInfoPrint(); | |
5693 void AccessorInfoVerify(); | 5874 void AccessorInfoVerify(); |
5694 #endif | 5875 #endif |
5695 | 5876 |
5696 static const int kGetterOffset = HeapObject::kHeaderSize; | 5877 static const int kGetterOffset = HeapObject::kHeaderSize; |
5697 static const int kSetterOffset = kGetterOffset + kPointerSize; | 5878 static const int kSetterOffset = kGetterOffset + kPointerSize; |
5698 static const int kDataOffset = kSetterOffset + kPointerSize; | 5879 static const int kDataOffset = kSetterOffset + kPointerSize; |
5699 static const int kNameOffset = kDataOffset + kPointerSize; | 5880 static const int kNameOffset = kDataOffset + kPointerSize; |
5700 static const int kFlagOffset = kNameOffset + kPointerSize; | 5881 static const int kFlagOffset = kNameOffset + kPointerSize; |
5701 static const int kSize = kFlagOffset + kPointerSize; | 5882 static const int kSize = kFlagOffset + kPointerSize; |
5702 | 5883 |
5703 private: | 5884 private: |
5704 // Bit positions in flag. | 5885 // Bit positions in flag. |
5705 static const int kAllCanReadBit = 0; | 5886 static const int kAllCanReadBit = 0; |
5706 static const int kAllCanWriteBit = 1; | 5887 static const int kAllCanWriteBit = 1; |
5707 static const int kProhibitsOverwritingBit = 2; | 5888 static const int kProhibitsOverwritingBit = 2; |
5708 class AttributesField: public BitField<PropertyAttributes, 3, 3> {}; | 5889 class AttributesField: public BitField<PropertyAttributes, 3, 3> {}; |
5709 | 5890 |
5710 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessorInfo); | 5891 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessorInfo); |
5711 }; | 5892 }; |
5712 | 5893 |
5713 | 5894 |
5714 class AccessCheckInfo: public Struct { | 5895 class AccessCheckInfo: public Struct { |
5715 public: | 5896 public: |
5716 DECL_ACCESSORS(named_callback, Object) | 5897 DECL_ACCESSORS(named_callback, Object) |
5717 DECL_ACCESSORS(indexed_callback, Object) | 5898 DECL_ACCESSORS(indexed_callback, Object) |
5718 DECL_ACCESSORS(data, Object) | 5899 DECL_ACCESSORS(data, Object) |
5719 | 5900 |
5720 static inline AccessCheckInfo* cast(Object* obj); | 5901 static inline AccessCheckInfo* cast(Object* obj); |
5721 | 5902 |
| 5903 #ifdef OBJECT_PRINT |
| 5904 inline void AccessCheckInfoPrint() { |
| 5905 AccessCheckInfoPrint(stdout); |
| 5906 } |
| 5907 void AccessCheckInfoPrint(FILE* out); |
| 5908 #endif |
5722 #ifdef DEBUG | 5909 #ifdef DEBUG |
5723 void AccessCheckInfoPrint(); | |
5724 void AccessCheckInfoVerify(); | 5910 void AccessCheckInfoVerify(); |
5725 #endif | 5911 #endif |
5726 | 5912 |
5727 static const int kNamedCallbackOffset = HeapObject::kHeaderSize; | 5913 static const int kNamedCallbackOffset = HeapObject::kHeaderSize; |
5728 static const int kIndexedCallbackOffset = kNamedCallbackOffset + kPointerSize; | 5914 static const int kIndexedCallbackOffset = kNamedCallbackOffset + kPointerSize; |
5729 static const int kDataOffset = kIndexedCallbackOffset + kPointerSize; | 5915 static const int kDataOffset = kIndexedCallbackOffset + kPointerSize; |
5730 static const int kSize = kDataOffset + kPointerSize; | 5916 static const int kSize = kDataOffset + kPointerSize; |
5731 | 5917 |
5732 private: | 5918 private: |
5733 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessCheckInfo); | 5919 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessCheckInfo); |
5734 }; | 5920 }; |
5735 | 5921 |
5736 | 5922 |
5737 class InterceptorInfo: public Struct { | 5923 class InterceptorInfo: public Struct { |
5738 public: | 5924 public: |
5739 DECL_ACCESSORS(getter, Object) | 5925 DECL_ACCESSORS(getter, Object) |
5740 DECL_ACCESSORS(setter, Object) | 5926 DECL_ACCESSORS(setter, Object) |
5741 DECL_ACCESSORS(query, Object) | 5927 DECL_ACCESSORS(query, Object) |
5742 DECL_ACCESSORS(deleter, Object) | 5928 DECL_ACCESSORS(deleter, Object) |
5743 DECL_ACCESSORS(enumerator, Object) | 5929 DECL_ACCESSORS(enumerator, Object) |
5744 DECL_ACCESSORS(data, Object) | 5930 DECL_ACCESSORS(data, Object) |
5745 | 5931 |
5746 static inline InterceptorInfo* cast(Object* obj); | 5932 static inline InterceptorInfo* cast(Object* obj); |
5747 | 5933 |
| 5934 #ifdef OBJECT_PRINT |
| 5935 inline void InterceptorInfoPrint() { |
| 5936 InterceptorInfoPrint(stdout); |
| 5937 } |
| 5938 void InterceptorInfoPrint(FILE* out); |
| 5939 #endif |
5748 #ifdef DEBUG | 5940 #ifdef DEBUG |
5749 void InterceptorInfoPrint(); | |
5750 void InterceptorInfoVerify(); | 5941 void InterceptorInfoVerify(); |
5751 #endif | 5942 #endif |
5752 | 5943 |
5753 static const int kGetterOffset = HeapObject::kHeaderSize; | 5944 static const int kGetterOffset = HeapObject::kHeaderSize; |
5754 static const int kSetterOffset = kGetterOffset + kPointerSize; | 5945 static const int kSetterOffset = kGetterOffset + kPointerSize; |
5755 static const int kQueryOffset = kSetterOffset + kPointerSize; | 5946 static const int kQueryOffset = kSetterOffset + kPointerSize; |
5756 static const int kDeleterOffset = kQueryOffset + kPointerSize; | 5947 static const int kDeleterOffset = kQueryOffset + kPointerSize; |
5757 static const int kEnumeratorOffset = kDeleterOffset + kPointerSize; | 5948 static const int kEnumeratorOffset = kDeleterOffset + kPointerSize; |
5758 static const int kDataOffset = kEnumeratorOffset + kPointerSize; | 5949 static const int kDataOffset = kEnumeratorOffset + kPointerSize; |
5759 static const int kSize = kDataOffset + kPointerSize; | 5950 static const int kSize = kDataOffset + kPointerSize; |
5760 | 5951 |
5761 private: | 5952 private: |
5762 DISALLOW_IMPLICIT_CONSTRUCTORS(InterceptorInfo); | 5953 DISALLOW_IMPLICIT_CONSTRUCTORS(InterceptorInfo); |
5763 }; | 5954 }; |
5764 | 5955 |
5765 | 5956 |
5766 class CallHandlerInfo: public Struct { | 5957 class CallHandlerInfo: public Struct { |
5767 public: | 5958 public: |
5768 DECL_ACCESSORS(callback, Object) | 5959 DECL_ACCESSORS(callback, Object) |
5769 DECL_ACCESSORS(data, Object) | 5960 DECL_ACCESSORS(data, Object) |
5770 | 5961 |
5771 static inline CallHandlerInfo* cast(Object* obj); | 5962 static inline CallHandlerInfo* cast(Object* obj); |
5772 | 5963 |
| 5964 #ifdef OBJECT_PRINT |
| 5965 inline void CallHandlerInfoPrint() { |
| 5966 CallHandlerInfoPrint(stdout); |
| 5967 } |
| 5968 void CallHandlerInfoPrint(FILE* out); |
| 5969 #endif |
5773 #ifdef DEBUG | 5970 #ifdef DEBUG |
5774 void CallHandlerInfoPrint(); | |
5775 void CallHandlerInfoVerify(); | 5971 void CallHandlerInfoVerify(); |
5776 #endif | 5972 #endif |
5777 | 5973 |
5778 static const int kCallbackOffset = HeapObject::kHeaderSize; | 5974 static const int kCallbackOffset = HeapObject::kHeaderSize; |
5779 static const int kDataOffset = kCallbackOffset + kPointerSize; | 5975 static const int kDataOffset = kCallbackOffset + kPointerSize; |
5780 static const int kSize = kDataOffset + kPointerSize; | 5976 static const int kSize = kDataOffset + kPointerSize; |
5781 | 5977 |
5782 private: | 5978 private: |
5783 DISALLOW_IMPLICIT_CONSTRUCTORS(CallHandlerInfo); | 5979 DISALLOW_IMPLICIT_CONSTRUCTORS(CallHandlerInfo); |
5784 }; | 5980 }; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5820 | 6016 |
5821 // Following properties use flag bits. | 6017 // Following properties use flag bits. |
5822 DECL_BOOLEAN_ACCESSORS(hidden_prototype) | 6018 DECL_BOOLEAN_ACCESSORS(hidden_prototype) |
5823 DECL_BOOLEAN_ACCESSORS(undetectable) | 6019 DECL_BOOLEAN_ACCESSORS(undetectable) |
5824 // If the bit is set, object instances created by this function | 6020 // If the bit is set, object instances created by this function |
5825 // requires access check. | 6021 // requires access check. |
5826 DECL_BOOLEAN_ACCESSORS(needs_access_check) | 6022 DECL_BOOLEAN_ACCESSORS(needs_access_check) |
5827 | 6023 |
5828 static inline FunctionTemplateInfo* cast(Object* obj); | 6024 static inline FunctionTemplateInfo* cast(Object* obj); |
5829 | 6025 |
| 6026 #ifdef OBJECT_PRINT |
| 6027 inline void FunctionTemplateInfoPrint() { |
| 6028 FunctionTemplateInfoPrint(stdout); |
| 6029 } |
| 6030 void FunctionTemplateInfoPrint(FILE* out); |
| 6031 #endif |
5830 #ifdef DEBUG | 6032 #ifdef DEBUG |
5831 void FunctionTemplateInfoPrint(); | |
5832 void FunctionTemplateInfoVerify(); | 6033 void FunctionTemplateInfoVerify(); |
5833 #endif | 6034 #endif |
5834 | 6035 |
5835 static const int kSerialNumberOffset = TemplateInfo::kHeaderSize; | 6036 static const int kSerialNumberOffset = TemplateInfo::kHeaderSize; |
5836 static const int kCallCodeOffset = kSerialNumberOffset + kPointerSize; | 6037 static const int kCallCodeOffset = kSerialNumberOffset + kPointerSize; |
5837 static const int kPropertyAccessorsOffset = kCallCodeOffset + kPointerSize; | 6038 static const int kPropertyAccessorsOffset = kCallCodeOffset + kPointerSize; |
5838 static const int kPrototypeTemplateOffset = | 6039 static const int kPrototypeTemplateOffset = |
5839 kPropertyAccessorsOffset + kPointerSize; | 6040 kPropertyAccessorsOffset + kPointerSize; |
5840 static const int kParentTemplateOffset = | 6041 static const int kParentTemplateOffset = |
5841 kPrototypeTemplateOffset + kPointerSize; | 6042 kPrototypeTemplateOffset + kPointerSize; |
(...skipping 21 matching lines...) Expand all Loading... |
5863 }; | 6064 }; |
5864 | 6065 |
5865 | 6066 |
5866 class ObjectTemplateInfo: public TemplateInfo { | 6067 class ObjectTemplateInfo: public TemplateInfo { |
5867 public: | 6068 public: |
5868 DECL_ACCESSORS(constructor, Object) | 6069 DECL_ACCESSORS(constructor, Object) |
5869 DECL_ACCESSORS(internal_field_count, Object) | 6070 DECL_ACCESSORS(internal_field_count, Object) |
5870 | 6071 |
5871 static inline ObjectTemplateInfo* cast(Object* obj); | 6072 static inline ObjectTemplateInfo* cast(Object* obj); |
5872 | 6073 |
| 6074 #ifdef OBJECT_PRINT |
| 6075 inline void ObjectTemplateInfoPrint() { |
| 6076 ObjectTemplateInfoPrint(stdout); |
| 6077 } |
| 6078 void ObjectTemplateInfoPrint(FILE* out); |
| 6079 #endif |
5873 #ifdef DEBUG | 6080 #ifdef DEBUG |
5874 void ObjectTemplateInfoPrint(); | |
5875 void ObjectTemplateInfoVerify(); | 6081 void ObjectTemplateInfoVerify(); |
5876 #endif | 6082 #endif |
5877 | 6083 |
5878 static const int kConstructorOffset = TemplateInfo::kHeaderSize; | 6084 static const int kConstructorOffset = TemplateInfo::kHeaderSize; |
5879 static const int kInternalFieldCountOffset = | 6085 static const int kInternalFieldCountOffset = |
5880 kConstructorOffset + kPointerSize; | 6086 kConstructorOffset + kPointerSize; |
5881 static const int kSize = kInternalFieldCountOffset + kPointerSize; | 6087 static const int kSize = kInternalFieldCountOffset + kPointerSize; |
5882 }; | 6088 }; |
5883 | 6089 |
5884 | 6090 |
5885 class SignatureInfo: public Struct { | 6091 class SignatureInfo: public Struct { |
5886 public: | 6092 public: |
5887 DECL_ACCESSORS(receiver, Object) | 6093 DECL_ACCESSORS(receiver, Object) |
5888 DECL_ACCESSORS(args, Object) | 6094 DECL_ACCESSORS(args, Object) |
5889 | 6095 |
5890 static inline SignatureInfo* cast(Object* obj); | 6096 static inline SignatureInfo* cast(Object* obj); |
5891 | 6097 |
| 6098 #ifdef OBJECT_PRINT |
| 6099 inline void SignatureInfoPrint() { |
| 6100 SignatureInfoPrint(stdout); |
| 6101 } |
| 6102 void SignatureInfoPrint(FILE* out); |
| 6103 #endif |
5892 #ifdef DEBUG | 6104 #ifdef DEBUG |
5893 void SignatureInfoPrint(); | |
5894 void SignatureInfoVerify(); | 6105 void SignatureInfoVerify(); |
5895 #endif | 6106 #endif |
5896 | 6107 |
5897 static const int kReceiverOffset = Struct::kHeaderSize; | 6108 static const int kReceiverOffset = Struct::kHeaderSize; |
5898 static const int kArgsOffset = kReceiverOffset + kPointerSize; | 6109 static const int kArgsOffset = kReceiverOffset + kPointerSize; |
5899 static const int kSize = kArgsOffset + kPointerSize; | 6110 static const int kSize = kArgsOffset + kPointerSize; |
5900 | 6111 |
5901 private: | 6112 private: |
5902 DISALLOW_IMPLICIT_CONSTRUCTORS(SignatureInfo); | 6113 DISALLOW_IMPLICIT_CONSTRUCTORS(SignatureInfo); |
5903 }; | 6114 }; |
5904 | 6115 |
5905 | 6116 |
5906 class TypeSwitchInfo: public Struct { | 6117 class TypeSwitchInfo: public Struct { |
5907 public: | 6118 public: |
5908 DECL_ACCESSORS(types, Object) | 6119 DECL_ACCESSORS(types, Object) |
5909 | 6120 |
5910 static inline TypeSwitchInfo* cast(Object* obj); | 6121 static inline TypeSwitchInfo* cast(Object* obj); |
5911 | 6122 |
| 6123 #ifdef OBJECT_PRINT |
| 6124 inline void TypeSwitchInfoPrint() { |
| 6125 TypeSwitchInfoPrint(stdout); |
| 6126 } |
| 6127 void TypeSwitchInfoPrint(FILE* out); |
| 6128 #endif |
5912 #ifdef DEBUG | 6129 #ifdef DEBUG |
5913 void TypeSwitchInfoPrint(); | |
5914 void TypeSwitchInfoVerify(); | 6130 void TypeSwitchInfoVerify(); |
5915 #endif | 6131 #endif |
5916 | 6132 |
5917 static const int kTypesOffset = Struct::kHeaderSize; | 6133 static const int kTypesOffset = Struct::kHeaderSize; |
5918 static const int kSize = kTypesOffset + kPointerSize; | 6134 static const int kSize = kTypesOffset + kPointerSize; |
5919 }; | 6135 }; |
5920 | 6136 |
5921 | 6137 |
5922 #ifdef ENABLE_DEBUGGER_SUPPORT | 6138 #ifdef ENABLE_DEBUGGER_SUPPORT |
5923 // The DebugInfo class holds additional information for a function being | 6139 // The DebugInfo class holds additional information for a function being |
(...skipping 25 matching lines...) Expand all Loading... |
5949 // Get the break point objects for a code position. | 6165 // Get the break point objects for a code position. |
5950 Object* GetBreakPointObjects(int code_position); | 6166 Object* GetBreakPointObjects(int code_position); |
5951 // Find the break point info holding this break point object. | 6167 // Find the break point info holding this break point object. |
5952 static Object* FindBreakPointInfo(Handle<DebugInfo> debug_info, | 6168 static Object* FindBreakPointInfo(Handle<DebugInfo> debug_info, |
5953 Handle<Object> break_point_object); | 6169 Handle<Object> break_point_object); |
5954 // Get the number of break points for this function. | 6170 // Get the number of break points for this function. |
5955 int GetBreakPointCount(); | 6171 int GetBreakPointCount(); |
5956 | 6172 |
5957 static inline DebugInfo* cast(Object* obj); | 6173 static inline DebugInfo* cast(Object* obj); |
5958 | 6174 |
| 6175 #ifdef OBJECT_PRINT |
| 6176 inline void DebugInfoPrint() { |
| 6177 DebugInfoPrint(stdout); |
| 6178 } |
| 6179 void DebugInfoPrint(FILE* out); |
| 6180 #endif |
5959 #ifdef DEBUG | 6181 #ifdef DEBUG |
5960 void DebugInfoPrint(); | |
5961 void DebugInfoVerify(); | 6182 void DebugInfoVerify(); |
5962 #endif | 6183 #endif |
5963 | 6184 |
5964 static const int kSharedFunctionInfoIndex = Struct::kHeaderSize; | 6185 static const int kSharedFunctionInfoIndex = Struct::kHeaderSize; |
5965 static const int kOriginalCodeIndex = kSharedFunctionInfoIndex + kPointerSize; | 6186 static const int kOriginalCodeIndex = kSharedFunctionInfoIndex + kPointerSize; |
5966 static const int kPatchedCodeIndex = kOriginalCodeIndex + kPointerSize; | 6187 static const int kPatchedCodeIndex = kOriginalCodeIndex + kPointerSize; |
5967 static const int kActiveBreakPointsCountIndex = | 6188 static const int kActiveBreakPointsCountIndex = |
5968 kPatchedCodeIndex + kPointerSize; | 6189 kPatchedCodeIndex + kPointerSize; |
5969 static const int kBreakPointsStateIndex = | 6190 static const int kBreakPointsStateIndex = |
5970 kActiveBreakPointsCountIndex + kPointerSize; | 6191 kActiveBreakPointsCountIndex + kPointerSize; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6002 static void SetBreakPoint(Handle<BreakPointInfo> info, | 6223 static void SetBreakPoint(Handle<BreakPointInfo> info, |
6003 Handle<Object> break_point_object); | 6224 Handle<Object> break_point_object); |
6004 // Check if break point info has this break point object. | 6225 // Check if break point info has this break point object. |
6005 static bool HasBreakPointObject(Handle<BreakPointInfo> info, | 6226 static bool HasBreakPointObject(Handle<BreakPointInfo> info, |
6006 Handle<Object> break_point_object); | 6227 Handle<Object> break_point_object); |
6007 // Get the number of break points for this code position. | 6228 // Get the number of break points for this code position. |
6008 int GetBreakPointCount(); | 6229 int GetBreakPointCount(); |
6009 | 6230 |
6010 static inline BreakPointInfo* cast(Object* obj); | 6231 static inline BreakPointInfo* cast(Object* obj); |
6011 | 6232 |
| 6233 #ifdef OBJECT_PRINT |
| 6234 inline void BreakPointInfoPrint() { |
| 6235 BreakPointInfoPrint(stdout); |
| 6236 } |
| 6237 void BreakPointInfoPrint(FILE* out); |
| 6238 #endif |
6012 #ifdef DEBUG | 6239 #ifdef DEBUG |
6013 void BreakPointInfoPrint(); | |
6014 void BreakPointInfoVerify(); | 6240 void BreakPointInfoVerify(); |
6015 #endif | 6241 #endif |
6016 | 6242 |
6017 static const int kCodePositionIndex = Struct::kHeaderSize; | 6243 static const int kCodePositionIndex = Struct::kHeaderSize; |
6018 static const int kSourcePositionIndex = kCodePositionIndex + kPointerSize; | 6244 static const int kSourcePositionIndex = kCodePositionIndex + kPointerSize; |
6019 static const int kStatementPositionIndex = | 6245 static const int kStatementPositionIndex = |
6020 kSourcePositionIndex + kPointerSize; | 6246 kSourcePositionIndex + kPointerSize; |
6021 static const int kBreakPointObjectsIndex = | 6247 static const int kBreakPointObjectsIndex = |
6022 kStatementPositionIndex + kPointerSize; | 6248 kStatementPositionIndex + kPointerSize; |
6023 static const int kSize = kBreakPointObjectsIndex + kPointerSize; | 6249 static const int kSize = kBreakPointObjectsIndex + kPointerSize; |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6119 } else { | 6345 } else { |
6120 value &= ~(1 << bit_position); | 6346 value &= ~(1 << bit_position); |
6121 } | 6347 } |
6122 return value; | 6348 return value; |
6123 } | 6349 } |
6124 }; | 6350 }; |
6125 | 6351 |
6126 } } // namespace v8::internal | 6352 } } // namespace v8::internal |
6127 | 6353 |
6128 #endif // V8_OBJECTS_H_ | 6354 #endif // V8_OBJECTS_H_ |
OLD | NEW |