OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_OBJECTS_H_ | 5 #ifndef V8_OBJECTS_H_ |
6 #define V8_OBJECTS_H_ | 6 #define V8_OBJECTS_H_ |
7 | 7 |
8 #include <iosfwd> | 8 #include <iosfwd> |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 948 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
959 class WeakCell; | 959 class WeakCell; |
960 class TransitionArray; | 960 class TransitionArray; |
961 class TemplateList; | 961 class TemplateList; |
962 template <typename T> | 962 template <typename T> |
963 class ZoneForwardList; | 963 class ZoneForwardList; |
964 | 964 |
965 // A template-ized version of the IsXXX functions. | 965 // A template-ized version of the IsXXX functions. |
966 template <class C> inline bool Is(Object* obj); | 966 template <class C> inline bool Is(Object* obj); |
967 | 967 |
968 #ifdef OBJECT_PRINT | 968 #ifdef OBJECT_PRINT |
969 #define DECLARE_PRINTER(Name) void Name##Print(std::ostream& os); // NOLINT | 969 #define DECL_PRINTER(Name) void Name##Print(std::ostream& os); // NOLINT |
970 #else | 970 #else |
971 #define DECLARE_PRINTER(Name) | 971 #define DECL_PRINTER(Name) |
972 #endif | 972 #endif |
973 | 973 |
974 #define OBJECT_TYPE_LIST(V) \ | 974 #define OBJECT_TYPE_LIST(V) \ |
975 V(Smi) \ | 975 V(Smi) \ |
976 V(LayoutDescriptor) \ | 976 V(LayoutDescriptor) \ |
977 V(HeapObject) \ | 977 V(HeapObject) \ |
978 V(Primitive) \ | 978 V(Primitive) \ |
979 V(Number) | 979 V(Number) |
980 | 980 |
981 #define HEAP_OBJECT_TYPE_LIST(V) \ | 981 #define HEAP_OBJECT_TYPE_LIST(V) \ |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1165 } \ | 1165 } \ |
1166 } while (false) | 1166 } while (false) |
1167 | 1167 |
1168 #define MAYBE_RETURN(call, value) \ | 1168 #define MAYBE_RETURN(call, value) \ |
1169 do { \ | 1169 do { \ |
1170 if ((call).IsNothing()) return value; \ | 1170 if ((call).IsNothing()) return value; \ |
1171 } while (false) | 1171 } while (false) |
1172 | 1172 |
1173 #define MAYBE_RETURN_NULL(call) MAYBE_RETURN(call, MaybeHandle<Object>()) | 1173 #define MAYBE_RETURN_NULL(call) MAYBE_RETURN(call, MaybeHandle<Object>()) |
1174 | 1174 |
1175 #define DECLARE_STRUCT_PREDICATE(NAME, Name, name) \ | 1175 #define DECL_STRUCT_PREDICATE(NAME, Name, name) INLINE(bool Is##Name() const); |
1176 INLINE(bool Is##Name() const); | 1176 STRUCT_LIST(DECL_STRUCT_PREDICATE) |
1177 STRUCT_LIST(DECLARE_STRUCT_PREDICATE) | 1177 #undef DECL_STRUCT_PREDICATE |
1178 #undef DECLARE_STRUCT_PREDICATE | |
1179 | 1178 |
1180 // ES6, #sec-isarray. NOT to be confused with %_IsArray. | 1179 // ES6, #sec-isarray. NOT to be confused with %_IsArray. |
1181 INLINE(MUST_USE_RESULT static Maybe<bool> IsArray(Handle<Object> object)); | 1180 INLINE(MUST_USE_RESULT static Maybe<bool> IsArray(Handle<Object> object)); |
1182 | 1181 |
1183 INLINE(bool IsNameDictionary() const); | 1182 INLINE(bool IsNameDictionary() const); |
1184 INLINE(bool IsGlobalDictionary() const); | 1183 INLINE(bool IsGlobalDictionary() const); |
1185 INLINE(bool IsSeededNumberDictionary() const); | 1184 INLINE(bool IsSeededNumberDictionary() const); |
1186 INLINE(bool IsOrderedHashSet() const); | 1185 INLINE(bool IsOrderedHashSet() const); |
1187 INLINE(bool IsOrderedHashMap() const); | 1186 INLINE(bool IsOrderedHashMap() const); |
1188 INLINE(bool IsSmallOrderedHashTable() const); | 1187 INLINE(bool IsSmallOrderedHashTable() const); |
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1476 // Tries to convert an object to an array index. Returns true and sets the | 1475 // Tries to convert an object to an array index. Returns true and sets the |
1477 // output parameter if it succeeds. Equivalent to ToArrayLength, but does not | 1476 // output parameter if it succeeds. Equivalent to ToArrayLength, but does not |
1478 // allow kMaxUInt32. | 1477 // allow kMaxUInt32. |
1479 inline bool ToArrayIndex(uint32_t* index); | 1478 inline bool ToArrayIndex(uint32_t* index); |
1480 | 1479 |
1481 // Returns true if the result of iterating over the object is the same | 1480 // Returns true if the result of iterating over the object is the same |
1482 // (including observable effects) as simply accessing the properties between 0 | 1481 // (including observable effects) as simply accessing the properties between 0 |
1483 // and length. | 1482 // and length. |
1484 bool IterationHasObservableEffects(); | 1483 bool IterationHasObservableEffects(); |
1485 | 1484 |
1486 DECLARE_VERIFIER(Object) | 1485 DECL_VERIFIER(Object) |
1487 #ifdef VERIFY_HEAP | 1486 #ifdef VERIFY_HEAP |
1488 // Verify a pointer is a valid object pointer. | 1487 // Verify a pointer is a valid object pointer. |
1489 static void VerifyPointer(Object* p); | 1488 static void VerifyPointer(Object* p); |
1490 #endif | 1489 #endif |
1491 | 1490 |
1492 inline void VerifyApiCallResultType(); | 1491 inline void VerifyApiCallResultType(); |
1493 | 1492 |
1494 // Prints this object without details. | 1493 // Prints this object without details. |
1495 void ShortPrint(FILE* out = stdout); | 1494 void ShortPrint(FILE* out = stdout); |
1496 | 1495 |
1497 // Prints this object without details to a message accumulator. | 1496 // Prints this object without details to a message accumulator. |
1498 void ShortPrint(StringStream* accumulator); | 1497 void ShortPrint(StringStream* accumulator); |
1499 | 1498 |
1500 void ShortPrint(std::ostream& os); // NOLINT | 1499 void ShortPrint(std::ostream& os); // NOLINT |
1501 | 1500 |
1502 DECLARE_CAST(Object) | 1501 DECL_CAST(Object) |
1503 | 1502 |
1504 // Layout description. | 1503 // Layout description. |
1505 static const int kHeaderSize = 0; // Object does not take up any space. | 1504 static const int kHeaderSize = 0; // Object does not take up any space. |
1506 | 1505 |
1507 #ifdef OBJECT_PRINT | 1506 #ifdef OBJECT_PRINT |
1508 // For our gdb macros, we should perhaps change these in the future. | 1507 // For our gdb macros, we should perhaps change these in the future. |
1509 void Print(); | 1508 void Print(); |
1510 | 1509 |
1511 // Prints this object with details. | 1510 // Prints this object with details. |
1512 void Print(std::ostream& os); // NOLINT | 1511 void Print(std::ostream& os); // NOLINT |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1600 return FromInt(static_cast<int>(value)); | 1599 return FromInt(static_cast<int>(value)); |
1601 } | 1600 } |
1602 | 1601 |
1603 // Returns whether value can be represented in a Smi. | 1602 // Returns whether value can be represented in a Smi. |
1604 static inline bool IsValid(intptr_t value) { | 1603 static inline bool IsValid(intptr_t value) { |
1605 bool result = Internals::IsValidSmi(value); | 1604 bool result = Internals::IsValidSmi(value); |
1606 DCHECK_EQ(result, value >= kMinValue && value <= kMaxValue); | 1605 DCHECK_EQ(result, value >= kMinValue && value <= kMaxValue); |
1607 return result; | 1606 return result; |
1608 } | 1607 } |
1609 | 1608 |
1610 DECLARE_CAST(Smi) | 1609 DECL_CAST(Smi) |
1611 | 1610 |
1612 // Dispatched behavior. | 1611 // Dispatched behavior. |
1613 V8_EXPORT_PRIVATE void SmiPrint(std::ostream& os) const; // NOLINT | 1612 V8_EXPORT_PRIVATE void SmiPrint(std::ostream& os) const; // NOLINT |
1614 DECLARE_VERIFIER(Smi) | 1613 DECL_VERIFIER(Smi) |
1615 | 1614 |
1616 static constexpr Smi* const kZero = nullptr; | 1615 static constexpr Smi* const kZero = nullptr; |
1617 static const int kMinValue = | 1616 static const int kMinValue = |
1618 (static_cast<unsigned int>(-1)) << (kSmiValueSize - 1); | 1617 (static_cast<unsigned int>(-1)) << (kSmiValueSize - 1); |
1619 static const int kMaxValue = -(kMinValue + 1); | 1618 static const int kMaxValue = -(kMinValue + 1); |
1620 | 1619 |
1621 private: | 1620 private: |
1622 DISALLOW_IMPLICIT_CONSTRUCTORS(Smi); | 1621 DISALLOW_IMPLICIT_CONSTRUCTORS(Smi); |
1623 }; | 1622 }; |
1624 | 1623 |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1714 HEAP_OBJECT_TYPE_LIST(IS_TYPE_FUNCTION_DECL) | 1713 HEAP_OBJECT_TYPE_LIST(IS_TYPE_FUNCTION_DECL) |
1715 #undef IS_TYPE_FUNCTION_DECL | 1714 #undef IS_TYPE_FUNCTION_DECL |
1716 | 1715 |
1717 #define IS_TYPE_FUNCTION_DECL(Type, Value) \ | 1716 #define IS_TYPE_FUNCTION_DECL(Type, Value) \ |
1718 INLINE(bool Is##Type(Isolate* isolate) const); | 1717 INLINE(bool Is##Type(Isolate* isolate) const); |
1719 ODDBALL_LIST(IS_TYPE_FUNCTION_DECL) | 1718 ODDBALL_LIST(IS_TYPE_FUNCTION_DECL) |
1720 #undef IS_TYPE_FUNCTION_DECL | 1719 #undef IS_TYPE_FUNCTION_DECL |
1721 | 1720 |
1722 INLINE(bool IsNullOrUndefined(Isolate* isolate) const); | 1721 INLINE(bool IsNullOrUndefined(Isolate* isolate) const); |
1723 | 1722 |
1724 #define DECLARE_STRUCT_PREDICATE(NAME, Name, name) \ | 1723 #define DECL_STRUCT_PREDICATE(NAME, Name, name) INLINE(bool Is##Name() const); |
1725 INLINE(bool Is##Name() const); | 1724 STRUCT_LIST(DECL_STRUCT_PREDICATE) |
1726 STRUCT_LIST(DECLARE_STRUCT_PREDICATE) | 1725 #undef DECL_STRUCT_PREDICATE |
1727 #undef DECLARE_STRUCT_PREDICATE | |
1728 | 1726 |
1729 // Converts an address to a HeapObject pointer. | 1727 // Converts an address to a HeapObject pointer. |
1730 static inline HeapObject* FromAddress(Address address) { | 1728 static inline HeapObject* FromAddress(Address address) { |
1731 DCHECK_TAG_ALIGNED(address); | 1729 DCHECK_TAG_ALIGNED(address); |
1732 return reinterpret_cast<HeapObject*>(address + kHeapObjectTag); | 1730 return reinterpret_cast<HeapObject*>(address + kHeapObjectTag); |
1733 } | 1731 } |
1734 | 1732 |
1735 // Returns the address of this HeapObject. | 1733 // Returns the address of this HeapObject. |
1736 inline Address address() { | 1734 inline Address address() { |
1737 return reinterpret_cast<Address>(this) - kHeapObjectTag; | 1735 return reinterpret_cast<Address>(this) - kHeapObjectTag; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1780 // during marking GC. | 1778 // during marking GC. |
1781 static inline Object** RawField(HeapObject* obj, int offset); | 1779 static inline Object** RawField(HeapObject* obj, int offset); |
1782 | 1780 |
1783 // Adds the |code| object related to |name| to the code cache of this map. If | 1781 // Adds the |code| object related to |name| to the code cache of this map. If |
1784 // this map is a dictionary map that is shared, the map copied and installed | 1782 // this map is a dictionary map that is shared, the map copied and installed |
1785 // onto the object. | 1783 // onto the object. |
1786 static void UpdateMapCodeCache(Handle<HeapObject> object, | 1784 static void UpdateMapCodeCache(Handle<HeapObject> object, |
1787 Handle<Name> name, | 1785 Handle<Name> name, |
1788 Handle<Code> code); | 1786 Handle<Code> code); |
1789 | 1787 |
1790 DECLARE_CAST(HeapObject) | 1788 DECL_CAST(HeapObject) |
1791 | 1789 |
1792 // Return the write barrier mode for this. Callers of this function | 1790 // Return the write barrier mode for this. Callers of this function |
1793 // must be able to present a reference to an DisallowHeapAllocation | 1791 // must be able to present a reference to an DisallowHeapAllocation |
1794 // object as a sign that they are not going to use this function | 1792 // object as a sign that they are not going to use this function |
1795 // from code that allocates and thus invalidates the returned write | 1793 // from code that allocates and thus invalidates the returned write |
1796 // barrier mode. | 1794 // barrier mode. |
1797 inline WriteBarrierMode GetWriteBarrierMode( | 1795 inline WriteBarrierMode GetWriteBarrierMode( |
1798 const DisallowHeapAllocation& promise); | 1796 const DisallowHeapAllocation& promise); |
1799 | 1797 |
1800 // Dispatched behavior. | 1798 // Dispatched behavior. |
1801 void HeapObjectShortPrint(std::ostream& os); // NOLINT | 1799 void HeapObjectShortPrint(std::ostream& os); // NOLINT |
1802 #ifdef OBJECT_PRINT | 1800 #ifdef OBJECT_PRINT |
1803 void PrintHeader(std::ostream& os, const char* id); // NOLINT | 1801 void PrintHeader(std::ostream& os, const char* id); // NOLINT |
1804 #endif | 1802 #endif |
1805 DECLARE_PRINTER(HeapObject) | 1803 DECL_PRINTER(HeapObject) |
1806 DECLARE_VERIFIER(HeapObject) | 1804 DECL_VERIFIER(HeapObject) |
1807 #ifdef VERIFY_HEAP | 1805 #ifdef VERIFY_HEAP |
1808 inline void VerifyObjectField(int offset); | 1806 inline void VerifyObjectField(int offset); |
1809 inline void VerifySmiField(int offset); | 1807 inline void VerifySmiField(int offset); |
1810 | 1808 |
1811 // Verify a pointer is a valid HeapObject pointer that points to object | 1809 // Verify a pointer is a valid HeapObject pointer that points to object |
1812 // areas in the heap. | 1810 // areas in the heap. |
1813 static void VerifyHeapPointer(Object* p); | 1811 static void VerifyHeapPointer(Object* p); |
1814 #endif | 1812 #endif |
1815 | 1813 |
1816 inline AllocationAlignment RequiredAlignment(); | 1814 inline AllocationAlignment RequiredAlignment(); |
(...skipping 22 matching lines...) Expand all Loading... |
1839 // represented in a Smi (small integer) | 1837 // represented in a Smi (small integer) |
1840 class HeapNumber: public HeapObject { | 1838 class HeapNumber: public HeapObject { |
1841 public: | 1839 public: |
1842 // [value]: number value. | 1840 // [value]: number value. |
1843 inline double value() const; | 1841 inline double value() const; |
1844 inline void set_value(double value); | 1842 inline void set_value(double value); |
1845 | 1843 |
1846 inline uint64_t value_as_bits() const; | 1844 inline uint64_t value_as_bits() const; |
1847 inline void set_value_as_bits(uint64_t bits); | 1845 inline void set_value_as_bits(uint64_t bits); |
1848 | 1846 |
1849 DECLARE_CAST(HeapNumber) | 1847 DECL_CAST(HeapNumber) |
1850 | 1848 |
1851 // Dispatched behavior. | 1849 // Dispatched behavior. |
1852 bool HeapNumberBooleanValue(); | 1850 bool HeapNumberBooleanValue(); |
1853 | 1851 |
1854 V8_EXPORT_PRIVATE void HeapNumberPrint(std::ostream& os); // NOLINT | 1852 V8_EXPORT_PRIVATE void HeapNumberPrint(std::ostream& os); // NOLINT |
1855 DECLARE_VERIFIER(HeapNumber) | 1853 DECL_VERIFIER(HeapNumber) |
1856 | 1854 |
1857 inline int get_exponent(); | 1855 inline int get_exponent(); |
1858 inline int get_sign(); | 1856 inline int get_sign(); |
1859 | 1857 |
1860 // Layout description. | 1858 // Layout description. |
1861 static const int kValueOffset = HeapObject::kHeaderSize; | 1859 static const int kValueOffset = HeapObject::kHeaderSize; |
1862 // IEEE doubles are two 32 bit words. The first is just mantissa, the second | 1860 // IEEE doubles are two 32 bit words. The first is just mantissa, the second |
1863 // is a mixture of sign, exponent and mantissa. The offsets of two 32 bit | 1861 // is a mixture of sign, exponent and mantissa. The offsets of two 32 bit |
1864 // words within double numbers are endian dependent and they are set | 1862 // words within double numbers are endian dependent and they are set |
1865 // accordingly. | 1863 // accordingly. |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1922 // slow case. | 1920 // slow case. |
1923 DECL_ACCESSORS(properties, FixedArray) // Get and set fast properties. | 1921 DECL_ACCESSORS(properties, FixedArray) // Get and set fast properties. |
1924 inline void initialize_properties(); | 1922 inline void initialize_properties(); |
1925 inline bool HasFastProperties(); | 1923 inline bool HasFastProperties(); |
1926 // Gets slow properties for non-global objects. | 1924 // Gets slow properties for non-global objects. |
1927 inline NameDictionary* property_dictionary(); | 1925 inline NameDictionary* property_dictionary(); |
1928 | 1926 |
1929 // Deletes an existing named property in a normalized object. | 1927 // Deletes an existing named property in a normalized object. |
1930 static void DeleteNormalizedProperty(Handle<JSReceiver> object, int entry); | 1928 static void DeleteNormalizedProperty(Handle<JSReceiver> object, int entry); |
1931 | 1929 |
1932 DECLARE_CAST(JSReceiver) | 1930 DECL_CAST(JSReceiver) |
1933 | 1931 |
1934 // ES6 section 7.1.1 ToPrimitive | 1932 // ES6 section 7.1.1 ToPrimitive |
1935 MUST_USE_RESULT static MaybeHandle<Object> ToPrimitive( | 1933 MUST_USE_RESULT static MaybeHandle<Object> ToPrimitive( |
1936 Handle<JSReceiver> receiver, | 1934 Handle<JSReceiver> receiver, |
1937 ToPrimitiveHint hint = ToPrimitiveHint::kDefault); | 1935 ToPrimitiveHint hint = ToPrimitiveHint::kDefault); |
1938 | 1936 |
1939 // ES6 section 7.1.1.1 OrdinaryToPrimitive | 1937 // ES6 section 7.1.1.1 OrdinaryToPrimitive |
1940 MUST_USE_RESULT static MaybeHandle<Object> OrdinaryToPrimitive( | 1938 MUST_USE_RESULT static MaybeHandle<Object> OrdinaryToPrimitive( |
1941 Handle<JSReceiver> receiver, OrdinaryToPrimitiveHint hint); | 1939 Handle<JSReceiver> receiver, OrdinaryToPrimitiveHint hint); |
1942 | 1940 |
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2492 bool ReferencesObject(Object* obj); | 2490 bool ReferencesObject(Object* obj); |
2493 | 2491 |
2494 MUST_USE_RESULT static Maybe<bool> TestIntegrityLevel(Handle<JSObject> object, | 2492 MUST_USE_RESULT static Maybe<bool> TestIntegrityLevel(Handle<JSObject> object, |
2495 IntegrityLevel lvl); | 2493 IntegrityLevel lvl); |
2496 | 2494 |
2497 MUST_USE_RESULT static Maybe<bool> PreventExtensions( | 2495 MUST_USE_RESULT static Maybe<bool> PreventExtensions( |
2498 Handle<JSObject> object, ShouldThrow should_throw); | 2496 Handle<JSObject> object, ShouldThrow should_throw); |
2499 | 2497 |
2500 static bool IsExtensible(Handle<JSObject> object); | 2498 static bool IsExtensible(Handle<JSObject> object); |
2501 | 2499 |
2502 DECLARE_CAST(JSObject) | 2500 DECL_CAST(JSObject) |
2503 | 2501 |
2504 // Dispatched behavior. | 2502 // Dispatched behavior. |
2505 void JSObjectShortPrint(StringStream* accumulator); | 2503 void JSObjectShortPrint(StringStream* accumulator); |
2506 DECLARE_PRINTER(JSObject) | 2504 DECL_PRINTER(JSObject) |
2507 DECLARE_VERIFIER(JSObject) | 2505 DECL_VERIFIER(JSObject) |
2508 #ifdef OBJECT_PRINT | 2506 #ifdef OBJECT_PRINT |
2509 bool PrintProperties(std::ostream& os); // NOLINT | 2507 bool PrintProperties(std::ostream& os); // NOLINT |
2510 void PrintElements(std::ostream& os); // NOLINT | 2508 void PrintElements(std::ostream& os); // NOLINT |
2511 #endif | 2509 #endif |
2512 #if defined(DEBUG) || defined(OBJECT_PRINT) | 2510 #if defined(DEBUG) || defined(OBJECT_PRINT) |
2513 void PrintTransitions(std::ostream& os); // NOLINT | 2511 void PrintTransitions(std::ostream& os); // NOLINT |
2514 #endif | 2512 #endif |
2515 | 2513 |
2516 static void PrintElementsTransition( | 2514 static void PrintElementsTransition( |
2517 FILE* file, Handle<JSObject> object, | 2515 FILE* file, Handle<JSObject> object, |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2709 class FixedArrayBase: public HeapObject { | 2707 class FixedArrayBase: public HeapObject { |
2710 public: | 2708 public: |
2711 // [length]: length of the array. | 2709 // [length]: length of the array. |
2712 inline int length() const; | 2710 inline int length() const; |
2713 inline void set_length(int value); | 2711 inline void set_length(int value); |
2714 | 2712 |
2715 // Get and set the length using acquire loads and release stores. | 2713 // Get and set the length using acquire loads and release stores. |
2716 inline int synchronized_length() const; | 2714 inline int synchronized_length() const; |
2717 inline void synchronized_set_length(int value); | 2715 inline void synchronized_set_length(int value); |
2718 | 2716 |
2719 DECLARE_CAST(FixedArrayBase) | 2717 DECL_CAST(FixedArrayBase) |
2720 | 2718 |
2721 static int GetMaxLengthForNewSpaceAllocation(ElementsKind kind); | 2719 static int GetMaxLengthForNewSpaceAllocation(ElementsKind kind); |
2722 | 2720 |
2723 bool IsCowArray() const; | 2721 bool IsCowArray() const; |
2724 | 2722 |
2725 // Layout description. | 2723 // Layout description. |
2726 // Length is smi tagged when it is stored. | 2724 // Length is smi tagged when it is stored. |
2727 static const int kLengthOffset = HeapObject::kHeaderSize; | 2725 static const int kLengthOffset = HeapObject::kHeaderSize; |
2728 static const int kHeaderSize = kLengthOffset + kPointerSize; | 2726 static const int kHeaderSize = kLengthOffset + kPointerSize; |
2729 }; | 2727 }; |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2785 static constexpr int SizeFor(int length) { | 2783 static constexpr int SizeFor(int length) { |
2786 return kHeaderSize + length * kPointerSize; | 2784 return kHeaderSize + length * kPointerSize; |
2787 } | 2785 } |
2788 | 2786 |
2789 // Code Generation support. | 2787 // Code Generation support. |
2790 static constexpr int OffsetOfElementAt(int index) { return SizeFor(index); } | 2788 static constexpr int OffsetOfElementAt(int index) { return SizeFor(index); } |
2791 | 2789 |
2792 // Garbage collection support. | 2790 // Garbage collection support. |
2793 inline Object** RawFieldOfElementAt(int index); | 2791 inline Object** RawFieldOfElementAt(int index); |
2794 | 2792 |
2795 DECLARE_CAST(FixedArray) | 2793 DECL_CAST(FixedArray) |
2796 | 2794 |
2797 // Maximal allowed size, in bytes, of a single FixedArray. | 2795 // Maximal allowed size, in bytes, of a single FixedArray. |
2798 // Prevents overflowing size computations, as well as extreme memory | 2796 // Prevents overflowing size computations, as well as extreme memory |
2799 // consumption. | 2797 // consumption. |
2800 static const int kMaxSize = 128 * MB * kPointerSize; | 2798 static const int kMaxSize = 128 * MB * kPointerSize; |
2801 // Maximally allowed length of a FixedArray. | 2799 // Maximally allowed length of a FixedArray. |
2802 static const int kMaxLength = (kMaxSize - kHeaderSize) / kPointerSize; | 2800 static const int kMaxLength = (kMaxSize - kHeaderSize) / kPointerSize; |
2803 // Maximally allowed length for regular (non large object space) object. | 2801 // Maximally allowed length for regular (non large object space) object. |
2804 STATIC_ASSERT(kMaxRegularHeapObjectSize < kMaxSize); | 2802 STATIC_ASSERT(kMaxRegularHeapObjectSize < kMaxSize); |
2805 static const int kMaxRegularLength = | 2803 static const int kMaxRegularLength = |
2806 (kMaxRegularHeapObjectSize - kHeaderSize) / kPointerSize; | 2804 (kMaxRegularHeapObjectSize - kHeaderSize) / kPointerSize; |
2807 | 2805 |
2808 // Dispatched behavior. | 2806 // Dispatched behavior. |
2809 DECLARE_PRINTER(FixedArray) | 2807 DECL_PRINTER(FixedArray) |
2810 DECLARE_VERIFIER(FixedArray) | 2808 DECL_VERIFIER(FixedArray) |
2811 #ifdef DEBUG | 2809 #ifdef DEBUG |
2812 // Checks if two FixedArrays have identical contents. | 2810 // Checks if two FixedArrays have identical contents. |
2813 bool IsEqualTo(FixedArray* other); | 2811 bool IsEqualTo(FixedArray* other); |
2814 #endif | 2812 #endif |
2815 | 2813 |
2816 typedef FlexibleBodyDescriptor<kHeaderSize> BodyDescriptor; | 2814 typedef FlexibleBodyDescriptor<kHeaderSize> BodyDescriptor; |
2817 // No weak fields. | 2815 // No weak fields. |
2818 typedef BodyDescriptor BodyDescriptorWeak; | 2816 typedef BodyDescriptor BodyDescriptorWeak; |
2819 | 2817 |
2820 protected: | 2818 protected: |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2852 } | 2850 } |
2853 | 2851 |
2854 // Gives access to raw memory which stores the array's data. | 2852 // Gives access to raw memory which stores the array's data. |
2855 inline double* data_start(); | 2853 inline double* data_start(); |
2856 | 2854 |
2857 inline void FillWithHoles(int from, int to); | 2855 inline void FillWithHoles(int from, int to); |
2858 | 2856 |
2859 // Code Generation support. | 2857 // Code Generation support. |
2860 static int OffsetOfElementAt(int index) { return SizeFor(index); } | 2858 static int OffsetOfElementAt(int index) { return SizeFor(index); } |
2861 | 2859 |
2862 DECLARE_CAST(FixedDoubleArray) | 2860 DECL_CAST(FixedDoubleArray) |
2863 | 2861 |
2864 // Maximal allowed size, in bytes, of a single FixedDoubleArray. | 2862 // Maximal allowed size, in bytes, of a single FixedDoubleArray. |
2865 // Prevents overflowing size computations, as well as extreme memory | 2863 // Prevents overflowing size computations, as well as extreme memory |
2866 // consumption. | 2864 // consumption. |
2867 static const int kMaxSize = 512 * MB; | 2865 static const int kMaxSize = 512 * MB; |
2868 // Maximally allowed length of a FixedArray. | 2866 // Maximally allowed length of a FixedArray. |
2869 static const int kMaxLength = (kMaxSize - kHeaderSize) / kDoubleSize; | 2867 static const int kMaxLength = (kMaxSize - kHeaderSize) / kDoubleSize; |
2870 | 2868 |
2871 // Dispatched behavior. | 2869 // Dispatched behavior. |
2872 DECLARE_PRINTER(FixedDoubleArray) | 2870 DECL_PRINTER(FixedDoubleArray) |
2873 DECLARE_VERIFIER(FixedDoubleArray) | 2871 DECL_VERIFIER(FixedDoubleArray) |
2874 | 2872 |
2875 class BodyDescriptor; | 2873 class BodyDescriptor; |
2876 // No weak fields. | 2874 // No weak fields. |
2877 typedef BodyDescriptor BodyDescriptorWeak; | 2875 typedef BodyDescriptor BodyDescriptorWeak; |
2878 | 2876 |
2879 private: | 2877 private: |
2880 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedDoubleArray); | 2878 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedDoubleArray); |
2881 }; | 2879 }; |
2882 | 2880 |
2883 class WeakFixedArray : public FixedArray { | 2881 class WeakFixedArray : public FixedArray { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2918 private: | 2916 private: |
2919 int index_; | 2917 int index_; |
2920 WeakFixedArray* list_; | 2918 WeakFixedArray* list_; |
2921 #ifdef DEBUG | 2919 #ifdef DEBUG |
2922 int last_used_index_; | 2920 int last_used_index_; |
2923 DisallowHeapAllocation no_gc_; | 2921 DisallowHeapAllocation no_gc_; |
2924 #endif // DEBUG | 2922 #endif // DEBUG |
2925 DISALLOW_COPY_AND_ASSIGN(Iterator); | 2923 DISALLOW_COPY_AND_ASSIGN(Iterator); |
2926 }; | 2924 }; |
2927 | 2925 |
2928 DECLARE_CAST(WeakFixedArray) | 2926 DECL_CAST(WeakFixedArray) |
2929 | 2927 |
2930 private: | 2928 private: |
2931 static const int kLastUsedIndexIndex = 0; | 2929 static const int kLastUsedIndexIndex = 0; |
2932 static const int kFirstIndex = 1; | 2930 static const int kFirstIndex = 1; |
2933 | 2931 |
2934 static Handle<WeakFixedArray> Allocate( | 2932 static Handle<WeakFixedArray> Allocate( |
2935 Isolate* isolate, int size, Handle<WeakFixedArray> initialize_from); | 2933 Isolate* isolate, int size, Handle<WeakFixedArray> initialize_from); |
2936 | 2934 |
2937 static void Set(Handle<WeakFixedArray> array, int index, | 2935 static void Set(Handle<WeakFixedArray> array, int index, |
2938 Handle<HeapObject> value); | 2936 Handle<HeapObject> value); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2983 inline void Set(int index, Object* obj, | 2981 inline void Set(int index, Object* obj, |
2984 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); | 2982 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); |
2985 | 2983 |
2986 // Set the element at index to undefined. This does not change the Length(). | 2984 // Set the element at index to undefined. This does not change the Length(). |
2987 inline void Clear(int index, Object* undefined); | 2985 inline void Clear(int index, Object* undefined); |
2988 | 2986 |
2989 // Return a copy of the list of size Length() without the first entry. The | 2987 // Return a copy of the list of size Length() without the first entry. The |
2990 // number returned by Length() is stored in the first entry. | 2988 // number returned by Length() is stored in the first entry. |
2991 Handle<FixedArray> Elements() const; | 2989 Handle<FixedArray> Elements() const; |
2992 bool IsFull(); | 2990 bool IsFull(); |
2993 DECLARE_CAST(ArrayList) | 2991 DECL_CAST(ArrayList) |
2994 | 2992 |
2995 private: | 2993 private: |
2996 static Handle<ArrayList> EnsureSpace(Handle<ArrayList> array, int length); | 2994 static Handle<ArrayList> EnsureSpace(Handle<ArrayList> array, int length); |
2997 static const int kLengthIndex = 0; | 2995 static const int kLengthIndex = 0; |
2998 static const int kFirstIndex = 1; | 2996 static const int kFirstIndex = 1; |
2999 DISALLOW_IMPLICIT_CONSTRUCTORS(ArrayList); | 2997 DISALLOW_IMPLICIT_CONSTRUCTORS(ArrayList); |
3000 }; | 2998 }; |
3001 | 2999 |
3002 enum SearchMode { ALL_ENTRIES, VALID_ENTRIES }; | 3000 enum SearchMode { ALL_ENTRIES, VALID_ENTRIES }; |
3003 | 3001 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3056 // Lookup handler in a table based on return addresses. | 3054 // Lookup handler in a table based on return addresses. |
3057 int LookupReturn(int pc_offset); | 3055 int LookupReturn(int pc_offset); |
3058 | 3056 |
3059 // Returns the number of entries in the table. | 3057 // Returns the number of entries in the table. |
3060 inline int NumberOfRangeEntries() const; | 3058 inline int NumberOfRangeEntries() const; |
3061 | 3059 |
3062 // Returns the required length of the underlying fixed array. | 3060 // Returns the required length of the underlying fixed array. |
3063 static int LengthForRange(int entries) { return entries * kRangeEntrySize; } | 3061 static int LengthForRange(int entries) { return entries * kRangeEntrySize; } |
3064 static int LengthForReturn(int entries) { return entries * kReturnEntrySize; } | 3062 static int LengthForReturn(int entries) { return entries * kReturnEntrySize; } |
3065 | 3063 |
3066 DECLARE_CAST(HandlerTable) | 3064 DECL_CAST(HandlerTable) |
3067 | 3065 |
3068 #ifdef ENABLE_DISASSEMBLER | 3066 #ifdef ENABLE_DISASSEMBLER |
3069 void HandlerTableRangePrint(std::ostream& os); // NOLINT | 3067 void HandlerTableRangePrint(std::ostream& os); // NOLINT |
3070 void HandlerTableReturnPrint(std::ostream& os); // NOLINT | 3068 void HandlerTableReturnPrint(std::ostream& os); // NOLINT |
3071 #endif | 3069 #endif |
3072 | 3070 |
3073 private: | 3071 private: |
3074 // Layout description for handler table based on ranges. | 3072 // Layout description for handler table based on ranges. |
3075 static const int kRangeStartIndex = 0; | 3073 static const int kRangeStartIndex = 0; |
3076 static const int kRangeEndIndex = 1; | 3074 static const int kRangeEndIndex = 1; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3123 } | 3121 } |
3124 | 3122 |
3125 // Returns data start address. | 3123 // Returns data start address. |
3126 inline Address GetDataStartAddress(); | 3124 inline Address GetDataStartAddress(); |
3127 | 3125 |
3128 inline int DataSize() const; | 3126 inline int DataSize() const; |
3129 | 3127 |
3130 // Returns a pointer to the ByteArray object for a given data start address. | 3128 // Returns a pointer to the ByteArray object for a given data start address. |
3131 static inline ByteArray* FromDataStartAddress(Address address); | 3129 static inline ByteArray* FromDataStartAddress(Address address); |
3132 | 3130 |
3133 DECLARE_CAST(ByteArray) | 3131 DECL_CAST(ByteArray) |
3134 | 3132 |
3135 // Dispatched behavior. | 3133 // Dispatched behavior. |
3136 inline int ByteArraySize(); | 3134 inline int ByteArraySize(); |
3137 DECLARE_PRINTER(ByteArray) | 3135 DECL_PRINTER(ByteArray) |
3138 DECLARE_VERIFIER(ByteArray) | 3136 DECL_VERIFIER(ByteArray) |
3139 | 3137 |
3140 // Layout description. | 3138 // Layout description. |
3141 static const int kAlignedSize = OBJECT_POINTER_ALIGN(kHeaderSize); | 3139 static const int kAlignedSize = OBJECT_POINTER_ALIGN(kHeaderSize); |
3142 | 3140 |
3143 // Maximal memory consumption for a single ByteArray. | 3141 // Maximal memory consumption for a single ByteArray. |
3144 static const int kMaxSize = 512 * MB; | 3142 static const int kMaxSize = 512 * MB; |
3145 // Maximal length of a single ByteArray. | 3143 // Maximal length of a single ByteArray. |
3146 static const int kMaxLength = kMaxSize - kHeaderSize; | 3144 static const int kMaxLength = kMaxSize - kHeaderSize; |
3147 | 3145 |
3148 class BodyDescriptor; | 3146 class BodyDescriptor; |
(...skipping 18 matching lines...) Expand all Loading... |
3167 T get(int index) { | 3165 T get(int index) { |
3168 T result; | 3166 T result; |
3169 copy_out(index, &result); | 3167 copy_out(index, &result); |
3170 return result; | 3168 return result; |
3171 } | 3169 } |
3172 void set(int index, const T& value) { | 3170 void set(int index, const T& value) { |
3173 copy_in(index * sizeof(T), reinterpret_cast<const byte*>(&value), | 3171 copy_in(index * sizeof(T), reinterpret_cast<const byte*>(&value), |
3174 sizeof(T)); | 3172 sizeof(T)); |
3175 } | 3173 } |
3176 int length() { return ByteArray::length() / sizeof(T); } | 3174 int length() { return ByteArray::length() / sizeof(T); } |
3177 DECLARE_CAST(PodArray<T>) | 3175 DECL_CAST(PodArray<T>) |
3178 | 3176 |
3179 private: | 3177 private: |
3180 DISALLOW_IMPLICIT_CONSTRUCTORS(PodArray<T>); | 3178 DISALLOW_IMPLICIT_CONSTRUCTORS(PodArray<T>); |
3181 }; | 3179 }; |
3182 | 3180 |
3183 // BytecodeArray represents a sequence of interpreter bytecodes. | 3181 // BytecodeArray represents a sequence of interpreter bytecodes. |
3184 class BytecodeArray : public FixedArrayBase { | 3182 class BytecodeArray : public FixedArrayBase { |
3185 public: | 3183 public: |
3186 #define DECLARE_BYTECODE_AGE_ENUM(X) k##X##BytecodeAge, | 3184 #define DECL_BYTECODE_AGE_ENUM(X) k##X##BytecodeAge, |
3187 enum Age { | 3185 enum Age { |
3188 kNoAgeBytecodeAge = 0, | 3186 kNoAgeBytecodeAge = 0, |
3189 CODE_AGE_LIST(DECLARE_BYTECODE_AGE_ENUM) kAfterLastBytecodeAge, | 3187 CODE_AGE_LIST(DECL_BYTECODE_AGE_ENUM) kAfterLastBytecodeAge, |
3190 kFirstBytecodeAge = kNoAgeBytecodeAge, | 3188 kFirstBytecodeAge = kNoAgeBytecodeAge, |
3191 kLastBytecodeAge = kAfterLastBytecodeAge - 1, | 3189 kLastBytecodeAge = kAfterLastBytecodeAge - 1, |
3192 kBytecodeAgeCount = kAfterLastBytecodeAge - kFirstBytecodeAge - 1, | 3190 kBytecodeAgeCount = kAfterLastBytecodeAge - kFirstBytecodeAge - 1, |
3193 kIsOldBytecodeAge = kSexagenarianBytecodeAge | 3191 kIsOldBytecodeAge = kSexagenarianBytecodeAge |
3194 }; | 3192 }; |
3195 #undef DECLARE_BYTECODE_AGE_ENUM | 3193 #undef DECL_BYTECODE_AGE_ENUM |
3196 | 3194 |
3197 static int SizeFor(int length) { | 3195 static int SizeFor(int length) { |
3198 return OBJECT_POINTER_ALIGN(kHeaderSize + length); | 3196 return OBJECT_POINTER_ALIGN(kHeaderSize + length); |
3199 } | 3197 } |
3200 | 3198 |
3201 // Setter and getter | 3199 // Setter and getter |
3202 inline byte get(int index); | 3200 inline byte get(int index); |
3203 inline void set(int index, byte value); | 3201 inline void set(int index, byte value); |
3204 | 3202 |
3205 // Returns data start address. | 3203 // Returns data start address. |
(...skipping 27 matching lines...) Expand all Loading... |
3233 | 3231 |
3234 // Accessors for handler table containing offsets of exception handlers. | 3232 // Accessors for handler table containing offsets of exception handlers. |
3235 DECL_ACCESSORS(handler_table, FixedArray) | 3233 DECL_ACCESSORS(handler_table, FixedArray) |
3236 | 3234 |
3237 // Accessors for source position table containing mappings between byte code | 3235 // Accessors for source position table containing mappings between byte code |
3238 // offset and source position or SourcePositionTableWithFrameCache. | 3236 // offset and source position or SourcePositionTableWithFrameCache. |
3239 DECL_ACCESSORS(source_position_table, Object) | 3237 DECL_ACCESSORS(source_position_table, Object) |
3240 | 3238 |
3241 inline ByteArray* SourcePositionTable(); | 3239 inline ByteArray* SourcePositionTable(); |
3242 | 3240 |
3243 DECLARE_CAST(BytecodeArray) | 3241 DECL_CAST(BytecodeArray) |
3244 | 3242 |
3245 // Dispatched behavior. | 3243 // Dispatched behavior. |
3246 inline int BytecodeArraySize(); | 3244 inline int BytecodeArraySize(); |
3247 | 3245 |
3248 inline int instruction_size(); | 3246 inline int instruction_size(); |
3249 | 3247 |
3250 // Returns the size of bytecode and its metadata. This includes the size of | 3248 // Returns the size of bytecode and its metadata. This includes the size of |
3251 // bytecode, constant pool, source position table, and handler table. | 3249 // bytecode, constant pool, source position table, and handler table. |
3252 inline int SizeIncludingMetadata(); | 3250 inline int SizeIncludingMetadata(); |
3253 | 3251 |
3254 int SourcePosition(int offset); | 3252 int SourcePosition(int offset); |
3255 int SourceStatementPosition(int offset); | 3253 int SourceStatementPosition(int offset); |
3256 | 3254 |
3257 DECLARE_PRINTER(BytecodeArray) | 3255 DECL_PRINTER(BytecodeArray) |
3258 DECLARE_VERIFIER(BytecodeArray) | 3256 DECL_VERIFIER(BytecodeArray) |
3259 | 3257 |
3260 void Disassemble(std::ostream& os); | 3258 void Disassemble(std::ostream& os); |
3261 | 3259 |
3262 void CopyBytecodesTo(BytecodeArray* to); | 3260 void CopyBytecodesTo(BytecodeArray* to); |
3263 | 3261 |
3264 // Bytecode aging | 3262 // Bytecode aging |
3265 bool IsOld() const; | 3263 bool IsOld() const; |
3266 void MakeOlder(); | 3264 void MakeOlder(); |
3267 | 3265 |
3268 // Layout description. | 3266 // Layout description. |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3310 | 3308 |
3311 inline int Size(); | 3309 inline int Size(); |
3312 | 3310 |
3313 // Accessors for the next field. | 3311 // Accessors for the next field. |
3314 inline FreeSpace* next(); | 3312 inline FreeSpace* next(); |
3315 inline void set_next(FreeSpace* next); | 3313 inline void set_next(FreeSpace* next); |
3316 | 3314 |
3317 inline static FreeSpace* cast(HeapObject* obj); | 3315 inline static FreeSpace* cast(HeapObject* obj); |
3318 | 3316 |
3319 // Dispatched behavior. | 3317 // Dispatched behavior. |
3320 DECLARE_PRINTER(FreeSpace) | 3318 DECL_PRINTER(FreeSpace) |
3321 DECLARE_VERIFIER(FreeSpace) | 3319 DECL_VERIFIER(FreeSpace) |
3322 | 3320 |
3323 // Layout description. | 3321 // Layout description. |
3324 // Size is smi tagged when it is stored. | 3322 // Size is smi tagged when it is stored. |
3325 static const int kSizeOffset = HeapObject::kHeaderSize; | 3323 static const int kSizeOffset = HeapObject::kHeaderSize; |
3326 static const int kNextOffset = POINTER_SIZE_ALIGN(kSizeOffset + kPointerSize); | 3324 static const int kNextOffset = POINTER_SIZE_ALIGN(kSizeOffset + kPointerSize); |
3327 static const int kSize = kNextOffset + kPointerSize; | 3325 static const int kSize = kNextOffset + kPointerSize; |
3328 | 3326 |
3329 private: | 3327 private: |
3330 DISALLOW_IMPLICIT_CONSTRUCTORS(FreeSpace); | 3328 DISALLOW_IMPLICIT_CONSTRUCTORS(FreeSpace); |
3331 }; | 3329 }; |
(...skipping 16 matching lines...) Expand all Loading... |
3348 public: | 3346 public: |
3349 // [base_pointer]: Either points to the FixedTypedArrayBase itself or nullptr. | 3347 // [base_pointer]: Either points to the FixedTypedArrayBase itself or nullptr. |
3350 DECL_ACCESSORS(base_pointer, Object) | 3348 DECL_ACCESSORS(base_pointer, Object) |
3351 | 3349 |
3352 // [external_pointer]: Contains the offset between base_pointer and the start | 3350 // [external_pointer]: Contains the offset between base_pointer and the start |
3353 // of the data. If the base_pointer is a nullptr, the external_pointer | 3351 // of the data. If the base_pointer is a nullptr, the external_pointer |
3354 // therefore points to the actual backing store. | 3352 // therefore points to the actual backing store. |
3355 DECL_ACCESSORS(external_pointer, void) | 3353 DECL_ACCESSORS(external_pointer, void) |
3356 | 3354 |
3357 // Dispatched behavior. | 3355 // Dispatched behavior. |
3358 DECLARE_CAST(FixedTypedArrayBase) | 3356 DECL_CAST(FixedTypedArrayBase) |
3359 | 3357 |
3360 static const int kBasePointerOffset = FixedArrayBase::kHeaderSize; | 3358 static const int kBasePointerOffset = FixedArrayBase::kHeaderSize; |
3361 static const int kExternalPointerOffset = kBasePointerOffset + kPointerSize; | 3359 static const int kExternalPointerOffset = kBasePointerOffset + kPointerSize; |
3362 static const int kHeaderSize = | 3360 static const int kHeaderSize = |
3363 DOUBLE_POINTER_ALIGN(kExternalPointerOffset + kPointerSize); | 3361 DOUBLE_POINTER_ALIGN(kExternalPointerOffset + kPointerSize); |
3364 | 3362 |
3365 static const int kDataOffset = kHeaderSize; | 3363 static const int kDataOffset = kHeaderSize; |
3366 | 3364 |
3367 static const int kMaxElementSize = 8; | 3365 static const int kMaxElementSize = 8; |
3368 | 3366 |
(...skipping 28 matching lines...) Expand all Loading... |
3397 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedTypedArrayBase); | 3395 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedTypedArrayBase); |
3398 }; | 3396 }; |
3399 | 3397 |
3400 | 3398 |
3401 template <class Traits> | 3399 template <class Traits> |
3402 class FixedTypedArray: public FixedTypedArrayBase { | 3400 class FixedTypedArray: public FixedTypedArrayBase { |
3403 public: | 3401 public: |
3404 typedef typename Traits::ElementType ElementType; | 3402 typedef typename Traits::ElementType ElementType; |
3405 static const InstanceType kInstanceType = Traits::kInstanceType; | 3403 static const InstanceType kInstanceType = Traits::kInstanceType; |
3406 | 3404 |
3407 DECLARE_CAST(FixedTypedArray<Traits>) | 3405 DECL_CAST(FixedTypedArray<Traits>) |
3408 | 3406 |
3409 inline ElementType get_scalar(int index); | 3407 inline ElementType get_scalar(int index); |
3410 static inline Handle<Object> get(FixedTypedArray* array, int index); | 3408 static inline Handle<Object> get(FixedTypedArray* array, int index); |
3411 inline void set(int index, ElementType value); | 3409 inline void set(int index, ElementType value); |
3412 | 3410 |
3413 static inline ElementType from(int value); | 3411 static inline ElementType from(int value); |
3414 static inline ElementType from(uint32_t value); | 3412 static inline ElementType from(uint32_t value); |
3415 static inline ElementType from(double value); | 3413 static inline ElementType from(double value); |
3416 | 3414 |
3417 // This accessor applies the correct conversion from Smi, HeapNumber | 3415 // This accessor applies the correct conversion from Smi, HeapNumber |
3418 // and undefined. | 3416 // and undefined. |
3419 inline void SetValue(uint32_t index, Object* value); | 3417 inline void SetValue(uint32_t index, Object* value); |
3420 | 3418 |
3421 DECLARE_PRINTER(FixedTypedArray) | 3419 DECL_PRINTER(FixedTypedArray) |
3422 DECLARE_VERIFIER(FixedTypedArray) | 3420 DECL_VERIFIER(FixedTypedArray) |
3423 | 3421 |
3424 private: | 3422 private: |
3425 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedTypedArray); | 3423 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedTypedArray); |
3426 }; | 3424 }; |
3427 | 3425 |
3428 #define FIXED_TYPED_ARRAY_TRAITS(Type, type, TYPE, elementType, size) \ | 3426 #define FIXED_TYPED_ARRAY_TRAITS(Type, type, TYPE, elementType, size) \ |
3429 STATIC_ASSERT(size <= FixedTypedArrayBase::kMaxElementSize); \ | 3427 STATIC_ASSERT(size <= FixedTypedArrayBase::kMaxElementSize); \ |
3430 class Type##ArrayTraits { \ | 3428 class Type##ArrayTraits { \ |
3431 public: /* NOLINT */ \ | 3429 public: /* NOLINT */ \ |
3432 typedef elementType ElementType; \ | 3430 typedef elementType ElementType; \ |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3464 static const int kFirstDeoptEntryIndex = 9; | 3462 static const int kFirstDeoptEntryIndex = 9; |
3465 | 3463 |
3466 // Offsets of deopt entry elements relative to the start of the entry. | 3464 // Offsets of deopt entry elements relative to the start of the entry. |
3467 static const int kAstIdRawOffset = 0; | 3465 static const int kAstIdRawOffset = 0; |
3468 static const int kTranslationIndexOffset = 1; | 3466 static const int kTranslationIndexOffset = 1; |
3469 static const int kArgumentsStackHeightOffset = 2; | 3467 static const int kArgumentsStackHeightOffset = 2; |
3470 static const int kPcOffset = 3; | 3468 static const int kPcOffset = 3; |
3471 static const int kDeoptEntrySize = 4; | 3469 static const int kDeoptEntrySize = 4; |
3472 | 3470 |
3473 // Simple element accessors. | 3471 // Simple element accessors. |
3474 #define DECLARE_ELEMENT_ACCESSORS(name, type) \ | 3472 #define DECL_ELEMENT_ACCESSORS(name, type) \ |
3475 inline type* name(); \ | 3473 inline type* name(); \ |
3476 inline void Set##name(type* value); | 3474 inline void Set##name(type* value); |
3477 | 3475 |
3478 DECLARE_ELEMENT_ACCESSORS(TranslationByteArray, ByteArray) | 3476 DECL_ELEMENT_ACCESSORS(TranslationByteArray, ByteArray) |
3479 DECLARE_ELEMENT_ACCESSORS(InlinedFunctionCount, Smi) | 3477 DECL_ELEMENT_ACCESSORS(InlinedFunctionCount, Smi) |
3480 DECLARE_ELEMENT_ACCESSORS(LiteralArray, FixedArray) | 3478 DECL_ELEMENT_ACCESSORS(LiteralArray, FixedArray) |
3481 DECLARE_ELEMENT_ACCESSORS(OsrAstId, Smi) | 3479 DECL_ELEMENT_ACCESSORS(OsrAstId, Smi) |
3482 DECLARE_ELEMENT_ACCESSORS(OsrPcOffset, Smi) | 3480 DECL_ELEMENT_ACCESSORS(OsrPcOffset, Smi) |
3483 DECLARE_ELEMENT_ACCESSORS(OptimizationId, Smi) | 3481 DECL_ELEMENT_ACCESSORS(OptimizationId, Smi) |
3484 DECLARE_ELEMENT_ACCESSORS(SharedFunctionInfo, Object) | 3482 DECL_ELEMENT_ACCESSORS(SharedFunctionInfo, Object) |
3485 DECLARE_ELEMENT_ACCESSORS(WeakCellCache, Object) | 3483 DECL_ELEMENT_ACCESSORS(WeakCellCache, Object) |
3486 DECLARE_ELEMENT_ACCESSORS(InliningPositions, PodArray<InliningPosition>) | 3484 DECL_ELEMENT_ACCESSORS(InliningPositions, PodArray<InliningPosition>) |
3487 | 3485 |
3488 #undef DECLARE_ELEMENT_ACCESSORS | 3486 #undef DECL_ELEMENT_ACCESSORS |
3489 | 3487 |
3490 // Accessors for elements of the ith deoptimization entry. | 3488 // Accessors for elements of the ith deoptimization entry. |
3491 #define DECLARE_ENTRY_ACCESSORS(name, type) \ | 3489 #define DECL_ENTRY_ACCESSORS(name, type) \ |
3492 inline type* name(int i); \ | 3490 inline type* name(int i); \ |
3493 inline void Set##name(int i, type* value); | 3491 inline void Set##name(int i, type* value); |
3494 | 3492 |
3495 DECLARE_ENTRY_ACCESSORS(AstIdRaw, Smi) | 3493 DECL_ENTRY_ACCESSORS(AstIdRaw, Smi) |
3496 DECLARE_ENTRY_ACCESSORS(TranslationIndex, Smi) | 3494 DECL_ENTRY_ACCESSORS(TranslationIndex, Smi) |
3497 DECLARE_ENTRY_ACCESSORS(ArgumentsStackHeight, Smi) | 3495 DECL_ENTRY_ACCESSORS(ArgumentsStackHeight, Smi) |
3498 DECLARE_ENTRY_ACCESSORS(Pc, Smi) | 3496 DECL_ENTRY_ACCESSORS(Pc, Smi) |
3499 | 3497 |
3500 #undef DECLARE_ENTRY_ACCESSORS | 3498 #undef DECL_ENTRY_ACCESSORS |
3501 | 3499 |
3502 inline BailoutId AstId(int i); | 3500 inline BailoutId AstId(int i); |
3503 | 3501 |
3504 inline void SetAstId(int i, BailoutId value); | 3502 inline void SetAstId(int i, BailoutId value); |
3505 | 3503 |
3506 inline int DeoptCount(); | 3504 inline int DeoptCount(); |
3507 | 3505 |
3508 static const int kNotInlinedIndex = -1; | 3506 static const int kNotInlinedIndex = -1; |
3509 | 3507 |
3510 // Returns the inlined function at the given position in LiteralArray, or the | 3508 // Returns the inlined function at the given position in LiteralArray, or the |
3511 // outer function if index == kNotInlinedIndex. | 3509 // outer function if index == kNotInlinedIndex. |
3512 class SharedFunctionInfo* GetInlinedFunction(int index); | 3510 class SharedFunctionInfo* GetInlinedFunction(int index); |
3513 | 3511 |
3514 // Allocates a DeoptimizationInputData. | 3512 // Allocates a DeoptimizationInputData. |
3515 static Handle<DeoptimizationInputData> New(Isolate* isolate, | 3513 static Handle<DeoptimizationInputData> New(Isolate* isolate, |
3516 int deopt_entry_count, | 3514 int deopt_entry_count, |
3517 PretenureFlag pretenure); | 3515 PretenureFlag pretenure); |
3518 | 3516 |
3519 DECLARE_CAST(DeoptimizationInputData) | 3517 DECL_CAST(DeoptimizationInputData) |
3520 | 3518 |
3521 #ifdef ENABLE_DISASSEMBLER | 3519 #ifdef ENABLE_DISASSEMBLER |
3522 void DeoptimizationInputDataPrint(std::ostream& os); // NOLINT | 3520 void DeoptimizationInputDataPrint(std::ostream& os); // NOLINT |
3523 #endif | 3521 #endif |
3524 | 3522 |
3525 private: | 3523 private: |
3526 static int IndexForEntry(int i) { | 3524 static int IndexForEntry(int i) { |
3527 return kFirstDeoptEntryIndex + (i * kDeoptEntrySize); | 3525 return kFirstDeoptEntryIndex + (i * kDeoptEntrySize); |
3528 } | 3526 } |
3529 | 3527 |
3530 | 3528 |
3531 static int LengthFor(int entry_count) { return IndexForEntry(entry_count); } | 3529 static int LengthFor(int entry_count) { return IndexForEntry(entry_count); } |
3532 }; | 3530 }; |
3533 | 3531 |
3534 class TemplateList : public FixedArray { | 3532 class TemplateList : public FixedArray { |
3535 public: | 3533 public: |
3536 static Handle<TemplateList> New(Isolate* isolate, int size); | 3534 static Handle<TemplateList> New(Isolate* isolate, int size); |
3537 inline int length() const; | 3535 inline int length() const; |
3538 inline Object* get(int index) const; | 3536 inline Object* get(int index) const; |
3539 inline void set(int index, Object* value); | 3537 inline void set(int index, Object* value); |
3540 static Handle<TemplateList> Add(Isolate* isolate, Handle<TemplateList> list, | 3538 static Handle<TemplateList> Add(Isolate* isolate, Handle<TemplateList> list, |
3541 Handle<Object> value); | 3539 Handle<Object> value); |
3542 DECLARE_CAST(TemplateList) | 3540 DECL_CAST(TemplateList) |
3543 private: | 3541 private: |
3544 static const int kLengthIndex = 0; | 3542 static const int kLengthIndex = 0; |
3545 static const int kFirstElementIndex = kLengthIndex + 1; | 3543 static const int kFirstElementIndex = kLengthIndex + 1; |
3546 DISALLOW_IMPLICIT_CONSTRUCTORS(TemplateList); | 3544 DISALLOW_IMPLICIT_CONSTRUCTORS(TemplateList); |
3547 }; | 3545 }; |
3548 | 3546 |
3549 // Code describes objects with on-the-fly generated machine code. | 3547 // Code describes objects with on-the-fly generated machine code. |
3550 class Code: public HeapObject { | 3548 class Code: public HeapObject { |
3551 public: | 3549 public: |
3552 // Opaque data type for encapsulating code flags like kind, inline | 3550 // Opaque data type for encapsulating code flags like kind, inline |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3905 // Returns the object size for a given body (used for allocation). | 3903 // Returns the object size for a given body (used for allocation). |
3906 static int SizeFor(int body_size) { | 3904 static int SizeFor(int body_size) { |
3907 DCHECK_SIZE_TAG_ALIGNED(body_size); | 3905 DCHECK_SIZE_TAG_ALIGNED(body_size); |
3908 return RoundUp(kHeaderSize + body_size, kCodeAlignment); | 3906 return RoundUp(kHeaderSize + body_size, kCodeAlignment); |
3909 } | 3907 } |
3910 | 3908 |
3911 // Calculate the size of the code object to report for log events. This takes | 3909 // Calculate the size of the code object to report for log events. This takes |
3912 // the layout of the code object into account. | 3910 // the layout of the code object into account. |
3913 inline int ExecutableSize(); | 3911 inline int ExecutableSize(); |
3914 | 3912 |
3915 DECLARE_CAST(Code) | 3913 DECL_CAST(Code) |
3916 | 3914 |
3917 // Dispatched behavior. | 3915 // Dispatched behavior. |
3918 inline int CodeSize(); | 3916 inline int CodeSize(); |
3919 | 3917 |
3920 DECLARE_PRINTER(Code) | 3918 DECL_PRINTER(Code) |
3921 DECLARE_VERIFIER(Code) | 3919 DECL_VERIFIER(Code) |
3922 | 3920 |
3923 void ClearInlineCaches(); | 3921 void ClearInlineCaches(); |
3924 | 3922 |
3925 BailoutId TranslatePcOffsetToAstId(uint32_t pc_offset); | 3923 BailoutId TranslatePcOffsetToAstId(uint32_t pc_offset); |
3926 uint32_t TranslateAstIdToPcOffset(BailoutId ast_id); | 3924 uint32_t TranslateAstIdToPcOffset(BailoutId ast_id); |
3927 | 3925 |
3928 #define DECLARE_CODE_AGE_ENUM(X) k##X##CodeAge, | 3926 #define DECL_CODE_AGE_ENUM(X) k##X##CodeAge, |
3929 enum Age { | 3927 enum Age { |
3930 kToBeExecutedOnceCodeAge = -3, | 3928 kToBeExecutedOnceCodeAge = -3, |
3931 kNotExecutedCodeAge = -2, | 3929 kNotExecutedCodeAge = -2, |
3932 kExecutedOnceCodeAge = -1, | 3930 kExecutedOnceCodeAge = -1, |
3933 kNoAgeCodeAge = 0, | 3931 kNoAgeCodeAge = 0, |
3934 CODE_AGE_LIST(DECLARE_CODE_AGE_ENUM) | 3932 CODE_AGE_LIST(DECL_CODE_AGE_ENUM) kAfterLastCodeAge, |
3935 kAfterLastCodeAge, | |
3936 kFirstCodeAge = kToBeExecutedOnceCodeAge, | 3933 kFirstCodeAge = kToBeExecutedOnceCodeAge, |
3937 kLastCodeAge = kAfterLastCodeAge - 1, | 3934 kLastCodeAge = kAfterLastCodeAge - 1, |
3938 kCodeAgeCount = kAfterLastCodeAge - kFirstCodeAge - 1, | 3935 kCodeAgeCount = kAfterLastCodeAge - kFirstCodeAge - 1, |
3939 kIsOldCodeAge = kSexagenarianCodeAge, | 3936 kIsOldCodeAge = kSexagenarianCodeAge, |
3940 kPreAgedCodeAge = kIsOldCodeAge - 1 | 3937 kPreAgedCodeAge = kIsOldCodeAge - 1 |
3941 }; | 3938 }; |
3942 #undef DECLARE_CODE_AGE_ENUM | 3939 #undef DECL_CODE_AGE_ENUM |
3943 | 3940 |
3944 // Code aging. Indicates how many full GCs this code has survived without | 3941 // Code aging. Indicates how many full GCs this code has survived without |
3945 // being entered through the prologue. Used to determine when to flush code | 3942 // being entered through the prologue. Used to determine when to flush code |
3946 // held in the compilation cache. | 3943 // held in the compilation cache. |
3947 static void MakeCodeAgeSequenceYoung(byte* sequence, Isolate* isolate); | 3944 static void MakeCodeAgeSequenceYoung(byte* sequence, Isolate* isolate); |
3948 static void MarkCodeAsExecuted(byte* sequence, Isolate* isolate); | 3945 static void MarkCodeAsExecuted(byte* sequence, Isolate* isolate); |
3949 void MakeYoung(Isolate* isolate); | 3946 void MakeYoung(Isolate* isolate); |
3950 void PreAge(Isolate* isolate); | 3947 void PreAge(Isolate* isolate); |
3951 void MarkToBeExecutedOnce(Isolate* isolate); | 3948 void MarkToBeExecutedOnce(Isolate* isolate); |
3952 void MakeOlder(); | 3949 void MakeOlder(); |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4158 // Returns true if pc is inside this object's instructions. | 4155 // Returns true if pc is inside this object's instructions. |
4159 inline bool contains(byte* pc); | 4156 inline bool contains(byte* pc); |
4160 | 4157 |
4161 // Returns the AbstractCode::Kind of the code. | 4158 // Returns the AbstractCode::Kind of the code. |
4162 inline Kind kind(); | 4159 inline Kind kind(); |
4163 | 4160 |
4164 // Calculate the size of the code object to report for log events. This takes | 4161 // Calculate the size of the code object to report for log events. This takes |
4165 // the layout of the code object into account. | 4162 // the layout of the code object into account. |
4166 inline int ExecutableSize(); | 4163 inline int ExecutableSize(); |
4167 | 4164 |
4168 DECLARE_CAST(AbstractCode) | 4165 DECL_CAST(AbstractCode) |
4169 inline Code* GetCode(); | 4166 inline Code* GetCode(); |
4170 inline BytecodeArray* GetBytecodeArray(); | 4167 inline BytecodeArray* GetBytecodeArray(); |
4171 | 4168 |
4172 // Max loop nesting marker used to postpose OSR. We don't take loop | 4169 // Max loop nesting marker used to postpose OSR. We don't take loop |
4173 // nesting that is deeper than 5 levels into account. | 4170 // nesting that is deeper than 5 levels into account. |
4174 static const int kMaxLoopNestingMarker = 6; | 4171 static const int kMaxLoopNestingMarker = 6; |
4175 STATIC_ASSERT(Code::AllowOSRAtLoopNestingLevelField::kMax >= | 4172 STATIC_ASSERT(Code::AllowOSRAtLoopNestingLevelField::kMax >= |
4176 kMaxLoopNestingMarker); | 4173 kMaxLoopNestingMarker); |
4177 }; | 4174 }; |
4178 | 4175 |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4259 inline DependentCode* next_link(); | 4256 inline DependentCode* next_link(); |
4260 inline void set_next_link(DependentCode* next); | 4257 inline void set_next_link(DependentCode* next); |
4261 inline int count(); | 4258 inline int count(); |
4262 inline void set_count(int value); | 4259 inline void set_count(int value); |
4263 inline DependencyGroup group(); | 4260 inline DependencyGroup group(); |
4264 inline void set_group(DependencyGroup group); | 4261 inline void set_group(DependencyGroup group); |
4265 inline Object* object_at(int i); | 4262 inline Object* object_at(int i); |
4266 inline void set_object_at(int i, Object* object); | 4263 inline void set_object_at(int i, Object* object); |
4267 inline void clear_at(int i); | 4264 inline void clear_at(int i); |
4268 inline void copy(int from, int to); | 4265 inline void copy(int from, int to); |
4269 DECLARE_CAST(DependentCode) | 4266 DECL_CAST(DependentCode) |
4270 | 4267 |
4271 static const char* DependencyGroupName(DependencyGroup group); | 4268 static const char* DependencyGroupName(DependencyGroup group); |
4272 static void SetMarkedForDeoptimization(Code* code, DependencyGroup group); | 4269 static void SetMarkedForDeoptimization(Code* code, DependencyGroup group); |
4273 | 4270 |
4274 private: | 4271 private: |
4275 static Handle<DependentCode> Insert(Handle<DependentCode> entries, | 4272 static Handle<DependentCode> Insert(Handle<DependentCode> entries, |
4276 DependencyGroup group, | 4273 DependencyGroup group, |
4277 Handle<Object> object); | 4274 Handle<Object> object); |
4278 static Handle<DependentCode> New(DependencyGroup group, Handle<Object> object, | 4275 static Handle<DependentCode> New(DependencyGroup group, Handle<Object> object, |
4279 Handle<DependentCode> next); | 4276 Handle<DependentCode> next); |
(...skipping 13 matching lines...) Expand all Loading... |
4293 }; | 4290 }; |
4294 | 4291 |
4295 class PrototypeInfo; | 4292 class PrototypeInfo; |
4296 | 4293 |
4297 // An abstract superclass, a marker class really, for simple structure classes. | 4294 // An abstract superclass, a marker class really, for simple structure classes. |
4298 // It doesn't carry much functionality but allows struct classes to be | 4295 // It doesn't carry much functionality but allows struct classes to be |
4299 // identified in the type system. | 4296 // identified in the type system. |
4300 class Struct: public HeapObject { | 4297 class Struct: public HeapObject { |
4301 public: | 4298 public: |
4302 inline void InitializeBody(int object_size); | 4299 inline void InitializeBody(int object_size); |
4303 DECLARE_CAST(Struct) | 4300 DECL_CAST(Struct) |
4304 }; | 4301 }; |
4305 | 4302 |
4306 // A container struct to hold state required for PromiseResolveThenableJob. | 4303 // A container struct to hold state required for PromiseResolveThenableJob. |
4307 class PromiseResolveThenableJobInfo : public Struct { | 4304 class PromiseResolveThenableJobInfo : public Struct { |
4308 public: | 4305 public: |
4309 DECL_ACCESSORS(thenable, JSReceiver) | 4306 DECL_ACCESSORS(thenable, JSReceiver) |
4310 DECL_ACCESSORS(then, JSReceiver) | 4307 DECL_ACCESSORS(then, JSReceiver) |
4311 DECL_ACCESSORS(resolve, JSFunction) | 4308 DECL_ACCESSORS(resolve, JSFunction) |
4312 DECL_ACCESSORS(reject, JSFunction) | 4309 DECL_ACCESSORS(reject, JSFunction) |
4313 | 4310 |
4314 DECL_ACCESSORS(context, Context) | 4311 DECL_ACCESSORS(context, Context) |
4315 | 4312 |
4316 static const int kThenableOffset = Struct::kHeaderSize; | 4313 static const int kThenableOffset = Struct::kHeaderSize; |
4317 static const int kThenOffset = kThenableOffset + kPointerSize; | 4314 static const int kThenOffset = kThenableOffset + kPointerSize; |
4318 static const int kResolveOffset = kThenOffset + kPointerSize; | 4315 static const int kResolveOffset = kThenOffset + kPointerSize; |
4319 static const int kRejectOffset = kResolveOffset + kPointerSize; | 4316 static const int kRejectOffset = kResolveOffset + kPointerSize; |
4320 static const int kContextOffset = kRejectOffset + kPointerSize; | 4317 static const int kContextOffset = kRejectOffset + kPointerSize; |
4321 static const int kSize = kContextOffset + kPointerSize; | 4318 static const int kSize = kContextOffset + kPointerSize; |
4322 | 4319 |
4323 DECLARE_CAST(PromiseResolveThenableJobInfo) | 4320 DECL_CAST(PromiseResolveThenableJobInfo) |
4324 DECLARE_PRINTER(PromiseResolveThenableJobInfo) | 4321 DECL_PRINTER(PromiseResolveThenableJobInfo) |
4325 DECLARE_VERIFIER(PromiseResolveThenableJobInfo) | 4322 DECL_VERIFIER(PromiseResolveThenableJobInfo) |
4326 | 4323 |
4327 private: | 4324 private: |
4328 DISALLOW_IMPLICIT_CONSTRUCTORS(PromiseResolveThenableJobInfo); | 4325 DISALLOW_IMPLICIT_CONSTRUCTORS(PromiseResolveThenableJobInfo); |
4329 }; | 4326 }; |
4330 | 4327 |
4331 class JSPromise; | 4328 class JSPromise; |
4332 | 4329 |
4333 // Struct to hold state required for PromiseReactionJob. | 4330 // Struct to hold state required for PromiseReactionJob. |
4334 class PromiseReactionJobInfo : public Struct { | 4331 class PromiseReactionJobInfo : public Struct { |
4335 public: | 4332 public: |
(...skipping 13 matching lines...) Expand all Loading... |
4349 static const int kValueOffset = Struct::kHeaderSize; | 4346 static const int kValueOffset = Struct::kHeaderSize; |
4350 static const int kTasksOffset = kValueOffset + kPointerSize; | 4347 static const int kTasksOffset = kValueOffset + kPointerSize; |
4351 static const int kDeferredPromiseOffset = kTasksOffset + kPointerSize; | 4348 static const int kDeferredPromiseOffset = kTasksOffset + kPointerSize; |
4352 static const int kDeferredOnResolveOffset = | 4349 static const int kDeferredOnResolveOffset = |
4353 kDeferredPromiseOffset + kPointerSize; | 4350 kDeferredPromiseOffset + kPointerSize; |
4354 static const int kDeferredOnRejectOffset = | 4351 static const int kDeferredOnRejectOffset = |
4355 kDeferredOnResolveOffset + kPointerSize; | 4352 kDeferredOnResolveOffset + kPointerSize; |
4356 static const int kContextOffset = kDeferredOnRejectOffset + kPointerSize; | 4353 static const int kContextOffset = kDeferredOnRejectOffset + kPointerSize; |
4357 static const int kSize = kContextOffset + kPointerSize; | 4354 static const int kSize = kContextOffset + kPointerSize; |
4358 | 4355 |
4359 DECLARE_CAST(PromiseReactionJobInfo) | 4356 DECL_CAST(PromiseReactionJobInfo) |
4360 DECLARE_PRINTER(PromiseReactionJobInfo) | 4357 DECL_PRINTER(PromiseReactionJobInfo) |
4361 DECLARE_VERIFIER(PromiseReactionJobInfo) | 4358 DECL_VERIFIER(PromiseReactionJobInfo) |
4362 | 4359 |
4363 private: | 4360 private: |
4364 DISALLOW_IMPLICIT_CONSTRUCTORS(PromiseReactionJobInfo); | 4361 DISALLOW_IMPLICIT_CONSTRUCTORS(PromiseReactionJobInfo); |
4365 }; | 4362 }; |
4366 | 4363 |
4367 class AsyncGeneratorRequest : public Struct { | 4364 class AsyncGeneratorRequest : public Struct { |
4368 public: | 4365 public: |
4369 // Holds an AsyncGeneratorRequest, or Undefined. | 4366 // Holds an AsyncGeneratorRequest, or Undefined. |
4370 DECL_ACCESSORS(next, Object) | 4367 DECL_ACCESSORS(next, Object) |
4371 DECL_INT_ACCESSORS(resume_mode) | 4368 DECL_INT_ACCESSORS(resume_mode) |
4372 DECL_ACCESSORS(value, Object) | 4369 DECL_ACCESSORS(value, Object) |
4373 DECL_ACCESSORS(promise, Object) | 4370 DECL_ACCESSORS(promise, Object) |
4374 | 4371 |
4375 static const int kNextOffset = Struct::kHeaderSize; | 4372 static const int kNextOffset = Struct::kHeaderSize; |
4376 static const int kResumeModeOffset = kNextOffset + kPointerSize; | 4373 static const int kResumeModeOffset = kNextOffset + kPointerSize; |
4377 static const int kValueOffset = kResumeModeOffset + kPointerSize; | 4374 static const int kValueOffset = kResumeModeOffset + kPointerSize; |
4378 static const int kPromiseOffset = kValueOffset + kPointerSize; | 4375 static const int kPromiseOffset = kValueOffset + kPointerSize; |
4379 static const int kSize = kPromiseOffset + kPointerSize; | 4376 static const int kSize = kPromiseOffset + kPointerSize; |
4380 | 4377 |
4381 DECLARE_CAST(AsyncGeneratorRequest) | 4378 DECL_CAST(AsyncGeneratorRequest) |
4382 DECLARE_PRINTER(AsyncGeneratorRequest) | 4379 DECL_PRINTER(AsyncGeneratorRequest) |
4383 DECLARE_VERIFIER(AsyncGeneratorRequest) | 4380 DECL_VERIFIER(AsyncGeneratorRequest) |
4384 | 4381 |
4385 private: | 4382 private: |
4386 DISALLOW_IMPLICIT_CONSTRUCTORS(AsyncGeneratorRequest); | 4383 DISALLOW_IMPLICIT_CONSTRUCTORS(AsyncGeneratorRequest); |
4387 }; | 4384 }; |
4388 | 4385 |
4389 // Container for metadata stored on each prototype map. | 4386 // Container for metadata stored on each prototype map. |
4390 class PrototypeInfo : public Struct { | 4387 class PrototypeInfo : public Struct { |
4391 public: | 4388 public: |
4392 static const int UNREGISTERED = -1; | 4389 static const int UNREGISTERED = -1; |
4393 | 4390 |
(...skipping 20 matching lines...) Expand all Loading... |
4414 // and those of all "downstream" prototypes are invalidated; handlers for a | 4411 // and those of all "downstream" prototypes are invalidated; handlers for a |
4415 // given receiver embed the currently valid cell for that receiver's prototype | 4412 // given receiver embed the currently valid cell for that receiver's prototype |
4416 // during their compilation and check it on execution. | 4413 // during their compilation and check it on execution. |
4417 DECL_ACCESSORS(validity_cell, Object) | 4414 DECL_ACCESSORS(validity_cell, Object) |
4418 // [bit_field] | 4415 // [bit_field] |
4419 inline int bit_field() const; | 4416 inline int bit_field() const; |
4420 inline void set_bit_field(int bit_field); | 4417 inline void set_bit_field(int bit_field); |
4421 | 4418 |
4422 DECL_BOOLEAN_ACCESSORS(should_be_fast_map) | 4419 DECL_BOOLEAN_ACCESSORS(should_be_fast_map) |
4423 | 4420 |
4424 DECLARE_CAST(PrototypeInfo) | 4421 DECL_CAST(PrototypeInfo) |
4425 | 4422 |
4426 // Dispatched behavior. | 4423 // Dispatched behavior. |
4427 DECLARE_PRINTER(PrototypeInfo) | 4424 DECL_PRINTER(PrototypeInfo) |
4428 DECLARE_VERIFIER(PrototypeInfo) | 4425 DECL_VERIFIER(PrototypeInfo) |
4429 | 4426 |
4430 static const int kWeakCellOffset = HeapObject::kHeaderSize; | 4427 static const int kWeakCellOffset = HeapObject::kHeaderSize; |
4431 static const int kPrototypeUsersOffset = kWeakCellOffset + kPointerSize; | 4428 static const int kPrototypeUsersOffset = kWeakCellOffset + kPointerSize; |
4432 static const int kRegistrySlotOffset = kPrototypeUsersOffset + kPointerSize; | 4429 static const int kRegistrySlotOffset = kPrototypeUsersOffset + kPointerSize; |
4433 static const int kValidityCellOffset = kRegistrySlotOffset + kPointerSize; | 4430 static const int kValidityCellOffset = kRegistrySlotOffset + kPointerSize; |
4434 static const int kObjectCreateMap = kValidityCellOffset + kPointerSize; | 4431 static const int kObjectCreateMap = kValidityCellOffset + kPointerSize; |
4435 static const int kBitFieldOffset = kObjectCreateMap + kPointerSize; | 4432 static const int kBitFieldOffset = kObjectCreateMap + kPointerSize; |
4436 static const int kSize = kBitFieldOffset + kPointerSize; | 4433 static const int kSize = kBitFieldOffset + kPointerSize; |
4437 | 4434 |
4438 // Bit field usage. | 4435 // Bit field usage. |
4439 static const int kShouldBeFastBit = 0; | 4436 static const int kShouldBeFastBit = 0; |
4440 | 4437 |
4441 private: | 4438 private: |
4442 DECL_ACCESSORS(object_create_map, Object) | 4439 DECL_ACCESSORS(object_create_map, Object) |
4443 | 4440 |
4444 DISALLOW_IMPLICIT_CONSTRUCTORS(PrototypeInfo); | 4441 DISALLOW_IMPLICIT_CONSTRUCTORS(PrototypeInfo); |
4445 }; | 4442 }; |
4446 | 4443 |
4447 class Tuple2 : public Struct { | 4444 class Tuple2 : public Struct { |
4448 public: | 4445 public: |
4449 DECL_ACCESSORS(value1, Object) | 4446 DECL_ACCESSORS(value1, Object) |
4450 DECL_ACCESSORS(value2, Object) | 4447 DECL_ACCESSORS(value2, Object) |
4451 | 4448 |
4452 DECLARE_CAST(Tuple2) | 4449 DECL_CAST(Tuple2) |
4453 | 4450 |
4454 // Dispatched behavior. | 4451 // Dispatched behavior. |
4455 DECLARE_PRINTER(Tuple2) | 4452 DECL_PRINTER(Tuple2) |
4456 DECLARE_VERIFIER(Tuple2) | 4453 DECL_VERIFIER(Tuple2) |
4457 | 4454 |
4458 static const int kValue1Offset = HeapObject::kHeaderSize; | 4455 static const int kValue1Offset = HeapObject::kHeaderSize; |
4459 static const int kValue2Offset = kValue1Offset + kPointerSize; | 4456 static const int kValue2Offset = kValue1Offset + kPointerSize; |
4460 static const int kSize = kValue2Offset + kPointerSize; | 4457 static const int kSize = kValue2Offset + kPointerSize; |
4461 | 4458 |
4462 private: | 4459 private: |
4463 DISALLOW_IMPLICIT_CONSTRUCTORS(Tuple2); | 4460 DISALLOW_IMPLICIT_CONSTRUCTORS(Tuple2); |
4464 }; | 4461 }; |
4465 | 4462 |
4466 class Tuple3 : public Tuple2 { | 4463 class Tuple3 : public Tuple2 { |
4467 public: | 4464 public: |
4468 DECL_ACCESSORS(value3, Object) | 4465 DECL_ACCESSORS(value3, Object) |
4469 | 4466 |
4470 DECLARE_CAST(Tuple3) | 4467 DECL_CAST(Tuple3) |
4471 | 4468 |
4472 // Dispatched behavior. | 4469 // Dispatched behavior. |
4473 DECLARE_PRINTER(Tuple3) | 4470 DECL_PRINTER(Tuple3) |
4474 DECLARE_VERIFIER(Tuple3) | 4471 DECL_VERIFIER(Tuple3) |
4475 | 4472 |
4476 static const int kValue3Offset = Tuple2::kSize; | 4473 static const int kValue3Offset = Tuple2::kSize; |
4477 static const int kSize = kValue3Offset + kPointerSize; | 4474 static const int kSize = kValue3Offset + kPointerSize; |
4478 | 4475 |
4479 private: | 4476 private: |
4480 DISALLOW_IMPLICIT_CONSTRUCTORS(Tuple3); | 4477 DISALLOW_IMPLICIT_CONSTRUCTORS(Tuple3); |
4481 }; | 4478 }; |
4482 | 4479 |
4483 // Pair used to store both a ScopeInfo and an extension object in the extension | 4480 // Pair used to store both a ScopeInfo and an extension object in the extension |
4484 // slot of a block, catch, or with context. Needed in the rare case where a | 4481 // slot of a block, catch, or with context. Needed in the rare case where a |
4485 // declaration block scope (a "varblock" as used to desugar parameter | 4482 // declaration block scope (a "varblock" as used to desugar parameter |
4486 // destructuring) also contains a sloppy direct eval, or for with and catch | 4483 // destructuring) also contains a sloppy direct eval, or for with and catch |
4487 // scopes. (In no other case both are needed at the same time.) | 4484 // scopes. (In no other case both are needed at the same time.) |
4488 class ContextExtension : public Struct { | 4485 class ContextExtension : public Struct { |
4489 public: | 4486 public: |
4490 // [scope_info]: Scope info. | 4487 // [scope_info]: Scope info. |
4491 DECL_ACCESSORS(scope_info, ScopeInfo) | 4488 DECL_ACCESSORS(scope_info, ScopeInfo) |
4492 // [extension]: Extension object. | 4489 // [extension]: Extension object. |
4493 DECL_ACCESSORS(extension, Object) | 4490 DECL_ACCESSORS(extension, Object) |
4494 | 4491 |
4495 DECLARE_CAST(ContextExtension) | 4492 DECL_CAST(ContextExtension) |
4496 | 4493 |
4497 // Dispatched behavior. | 4494 // Dispatched behavior. |
4498 DECLARE_PRINTER(ContextExtension) | 4495 DECL_PRINTER(ContextExtension) |
4499 DECLARE_VERIFIER(ContextExtension) | 4496 DECL_VERIFIER(ContextExtension) |
4500 | 4497 |
4501 static const int kScopeInfoOffset = HeapObject::kHeaderSize; | 4498 static const int kScopeInfoOffset = HeapObject::kHeaderSize; |
4502 static const int kExtensionOffset = kScopeInfoOffset + kPointerSize; | 4499 static const int kExtensionOffset = kScopeInfoOffset + kPointerSize; |
4503 static const int kSize = kExtensionOffset + kPointerSize; | 4500 static const int kSize = kExtensionOffset + kPointerSize; |
4504 | 4501 |
4505 private: | 4502 private: |
4506 DISALLOW_IMPLICIT_CONSTRUCTORS(ContextExtension); | 4503 DISALLOW_IMPLICIT_CONSTRUCTORS(ContextExtension); |
4507 }; | 4504 }; |
4508 | 4505 |
4509 // List of builtin functions we want to identify to improve code | 4506 // List of builtin functions we want to identify to improve code |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4652 V(Atomics, compareExchange, AtomicsCompareExchange) \ | 4649 V(Atomics, compareExchange, AtomicsCompareExchange) \ |
4653 V(Atomics, add, AtomicsAdd) \ | 4650 V(Atomics, add, AtomicsAdd) \ |
4654 V(Atomics, sub, AtomicsSub) \ | 4651 V(Atomics, sub, AtomicsSub) \ |
4655 V(Atomics, and, AtomicsAnd) \ | 4652 V(Atomics, and, AtomicsAnd) \ |
4656 V(Atomics, or, AtomicsOr) \ | 4653 V(Atomics, or, AtomicsOr) \ |
4657 V(Atomics, xor, AtomicsXor) | 4654 V(Atomics, xor, AtomicsXor) |
4658 | 4655 |
4659 enum BuiltinFunctionId { | 4656 enum BuiltinFunctionId { |
4660 kInvalidBuiltinFunctionId = -1, | 4657 kInvalidBuiltinFunctionId = -1, |
4661 kArrayCode, | 4658 kArrayCode, |
4662 #define DECLARE_FUNCTION_ID(ignored1, ignore2, name) \ | 4659 #define DECL_FUNCTION_ID(ignored1, ignore2, name) k##name, |
4663 k##name, | 4660 FUNCTIONS_WITH_ID_LIST(DECL_FUNCTION_ID) |
4664 FUNCTIONS_WITH_ID_LIST(DECLARE_FUNCTION_ID) | 4661 ATOMIC_FUNCTIONS_WITH_ID_LIST(DECL_FUNCTION_ID) |
4665 ATOMIC_FUNCTIONS_WITH_ID_LIST(DECLARE_FUNCTION_ID) | 4662 #undef DECL_FUNCTION_ID |
4666 #undef DECLARE_FUNCTION_ID | |
4667 // Fake id for a special case of Math.pow. Note, it continues the | 4663 // Fake id for a special case of Math.pow. Note, it continues the |
4668 // list of math functions. | 4664 // list of math functions. |
4669 kMathPowHalf, | 4665 kMathPowHalf, |
4670 // These are manually assigned to special getters during bootstrapping. | 4666 // These are manually assigned to special getters during bootstrapping. |
4671 kArrayBufferByteLength, | 4667 kArrayBufferByteLength, |
4672 kArrayEntries, | 4668 kArrayEntries, |
4673 kArrayKeys, | 4669 kArrayKeys, |
4674 kArrayValues, | 4670 kArrayValues, |
4675 kArrayIteratorNext, | 4671 kArrayIteratorNext, |
4676 kDataViewBuffer, | 4672 kDataViewBuffer, |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4731 inline bool is_executing() const; | 4727 inline bool is_executing() const; |
4732 inline bool is_suspended() const; | 4728 inline bool is_suspended() const; |
4733 | 4729 |
4734 // For suspended generators: the source position at which the generator | 4730 // For suspended generators: the source position at which the generator |
4735 // is suspended. | 4731 // is suspended. |
4736 int source_position() const; | 4732 int source_position() const; |
4737 | 4733 |
4738 // [register_file]: Saved interpreter register file. | 4734 // [register_file]: Saved interpreter register file. |
4739 DECL_ACCESSORS(register_file, FixedArray) | 4735 DECL_ACCESSORS(register_file, FixedArray) |
4740 | 4736 |
4741 DECLARE_CAST(JSGeneratorObject) | 4737 DECL_CAST(JSGeneratorObject) |
4742 | 4738 |
4743 // Dispatched behavior. | 4739 // Dispatched behavior. |
4744 DECLARE_VERIFIER(JSGeneratorObject) | 4740 DECL_VERIFIER(JSGeneratorObject) |
4745 | 4741 |
4746 // Magic sentinel values for the continuation. | 4742 // Magic sentinel values for the continuation. |
4747 static const int kGeneratorExecuting = -2; | 4743 static const int kGeneratorExecuting = -2; |
4748 static const int kGeneratorClosed = -1; | 4744 static const int kGeneratorClosed = -1; |
4749 | 4745 |
4750 // Layout description. | 4746 // Layout description. |
4751 static const int kFunctionOffset = JSObject::kHeaderSize; | 4747 static const int kFunctionOffset = JSObject::kHeaderSize; |
4752 static const int kContextOffset = kFunctionOffset + kPointerSize; | 4748 static const int kContextOffset = kFunctionOffset + kPointerSize; |
4753 static const int kReceiverOffset = kContextOffset + kPointerSize; | 4749 static const int kReceiverOffset = kContextOffset + kPointerSize; |
4754 static const int kInputOrDebugPosOffset = kReceiverOffset + kPointerSize; | 4750 static const int kInputOrDebugPosOffset = kReceiverOffset + kPointerSize; |
4755 static const int kResumeModeOffset = kInputOrDebugPosOffset + kPointerSize; | 4751 static const int kResumeModeOffset = kInputOrDebugPosOffset + kPointerSize; |
4756 static const int kContinuationOffset = kResumeModeOffset + kPointerSize; | 4752 static const int kContinuationOffset = kResumeModeOffset + kPointerSize; |
4757 static const int kRegisterFileOffset = kContinuationOffset + kPointerSize; | 4753 static const int kRegisterFileOffset = kContinuationOffset + kPointerSize; |
4758 static const int kSize = kRegisterFileOffset + kPointerSize; | 4754 static const int kSize = kRegisterFileOffset + kPointerSize; |
4759 | 4755 |
4760 private: | 4756 private: |
4761 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGeneratorObject); | 4757 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGeneratorObject); |
4762 }; | 4758 }; |
4763 | 4759 |
4764 class JSAsyncGeneratorObject : public JSGeneratorObject { | 4760 class JSAsyncGeneratorObject : public JSGeneratorObject { |
4765 public: | 4761 public: |
4766 DECLARE_CAST(JSAsyncGeneratorObject) | 4762 DECL_CAST(JSAsyncGeneratorObject) |
4767 | 4763 |
4768 // Dispatched behavior. | 4764 // Dispatched behavior. |
4769 DECLARE_VERIFIER(JSAsyncGeneratorObject) | 4765 DECL_VERIFIER(JSAsyncGeneratorObject) |
4770 | 4766 |
4771 // [queue] | 4767 // [queue] |
4772 // Pointer to the head of a singly linked list of AsyncGeneratorRequest, or | 4768 // Pointer to the head of a singly linked list of AsyncGeneratorRequest, or |
4773 // undefined. | 4769 // undefined. |
4774 DECL_ACCESSORS(queue, HeapObject) | 4770 DECL_ACCESSORS(queue, HeapObject) |
4775 | 4771 |
4776 // [await_input_or_debug_pos] | 4772 // [await_input_or_debug_pos] |
4777 // Holds the value to resume generator with after an Await(), in order to | 4773 // Holds the value to resume generator with after an Await(), in order to |
4778 // avoid clobbering function.sent. If awaited_promise is not undefined, holds | 4774 // avoid clobbering function.sent. If awaited_promise is not undefined, holds |
4779 // current bytecode offset for debugging instead. | 4775 // current bytecode offset for debugging instead. |
(...skipping 12 matching lines...) Expand all Loading... |
4792 | 4788 |
4793 private: | 4789 private: |
4794 DISALLOW_IMPLICIT_CONSTRUCTORS(JSAsyncGeneratorObject); | 4790 DISALLOW_IMPLICIT_CONSTRUCTORS(JSAsyncGeneratorObject); |
4795 }; | 4791 }; |
4796 | 4792 |
4797 // When importing a module namespace (import * as foo from "bar"), a | 4793 // When importing a module namespace (import * as foo from "bar"), a |
4798 // JSModuleNamespace object (representing module "bar") is created and bound to | 4794 // JSModuleNamespace object (representing module "bar") is created and bound to |
4799 // the declared variable (foo). A module can have at most one namespace object. | 4795 // the declared variable (foo). A module can have at most one namespace object. |
4800 class JSModuleNamespace : public JSObject { | 4796 class JSModuleNamespace : public JSObject { |
4801 public: | 4797 public: |
4802 DECLARE_CAST(JSModuleNamespace) | 4798 DECL_CAST(JSModuleNamespace) |
4803 DECLARE_PRINTER(JSModuleNamespace) | 4799 DECL_PRINTER(JSModuleNamespace) |
4804 DECLARE_VERIFIER(JSModuleNamespace) | 4800 DECL_VERIFIER(JSModuleNamespace) |
4805 | 4801 |
4806 // The actual module whose namespace is being represented. | 4802 // The actual module whose namespace is being represented. |
4807 DECL_ACCESSORS(module, Module) | 4803 DECL_ACCESSORS(module, Module) |
4808 | 4804 |
4809 // Retrieve the value exported by [module] under the given [name]. If there is | 4805 // Retrieve the value exported by [module] under the given [name]. If there is |
4810 // no such export, return Just(undefined). If the export is uninitialized, | 4806 // no such export, return Just(undefined). If the export is uninitialized, |
4811 // schedule an exception and return Nothing. | 4807 // schedule an exception and return Nothing. |
4812 MUST_USE_RESULT MaybeHandle<Object> GetExport(Handle<String> name); | 4808 MUST_USE_RESULT MaybeHandle<Object> GetExport(Handle<String> name); |
4813 | 4809 |
4814 // In-object fields. | 4810 // In-object fields. |
4815 enum { | 4811 enum { |
4816 kToStringTagFieldIndex, | 4812 kToStringTagFieldIndex, |
4817 kInObjectFieldCount, | 4813 kInObjectFieldCount, |
4818 }; | 4814 }; |
4819 | 4815 |
4820 static const int kModuleOffset = JSObject::kHeaderSize; | 4816 static const int kModuleOffset = JSObject::kHeaderSize; |
4821 static const int kHeaderSize = kModuleOffset + kPointerSize; | 4817 static const int kHeaderSize = kModuleOffset + kPointerSize; |
4822 | 4818 |
4823 static const int kSize = kHeaderSize + kPointerSize * kInObjectFieldCount; | 4819 static const int kSize = kHeaderSize + kPointerSize * kInObjectFieldCount; |
4824 | 4820 |
4825 private: | 4821 private: |
4826 DISALLOW_IMPLICIT_CONSTRUCTORS(JSModuleNamespace); | 4822 DISALLOW_IMPLICIT_CONSTRUCTORS(JSModuleNamespace); |
4827 }; | 4823 }; |
4828 | 4824 |
4829 // A Module object is a mapping from export names to cells | 4825 // A Module object is a mapping from export names to cells |
4830 // This is still very much in flux. | 4826 // This is still very much in flux. |
4831 class Module : public Struct { | 4827 class Module : public Struct { |
4832 public: | 4828 public: |
4833 DECLARE_CAST(Module) | 4829 DECL_CAST(Module) |
4834 DECLARE_VERIFIER(Module) | 4830 DECL_VERIFIER(Module) |
4835 DECLARE_PRINTER(Module) | 4831 DECL_PRINTER(Module) |
4836 | 4832 |
4837 // The code representing this Module, or an abstraction thereof. | 4833 // The code representing this Module, or an abstraction thereof. |
4838 // This is either a SharedFunctionInfo or a JSFunction or a ModuleInfo | 4834 // This is either a SharedFunctionInfo or a JSFunction or a ModuleInfo |
4839 // depending on whether the module has been instantiated and evaluated. See | 4835 // depending on whether the module has been instantiated and evaluated. See |
4840 // Module::ModuleVerify() for the precise invariant. | 4836 // Module::ModuleVerify() for the precise invariant. |
4841 DECL_ACCESSORS(code, Object) | 4837 DECL_ACCESSORS(code, Object) |
4842 | 4838 |
4843 // Arrays of cells corresponding to regular exports and regular imports. | 4839 // Arrays of cells corresponding to regular exports and regular imports. |
4844 // A cell's position in the array is determined by the cell index of the | 4840 // A cell's position in the array is determined by the cell index of the |
4845 // associated module entry (which coincides with the variable index of the | 4841 // associated module entry (which coincides with the variable index of the |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4995 | 4991 |
4996 // [bound_arguments]: A list of values whose elements are used as the first | 4992 // [bound_arguments]: A list of values whose elements are used as the first |
4997 // arguments to any call to the wrapped function. | 4993 // arguments to any call to the wrapped function. |
4998 DECL_ACCESSORS(bound_arguments, FixedArray) | 4994 DECL_ACCESSORS(bound_arguments, FixedArray) |
4999 | 4995 |
5000 static MaybeHandle<String> GetName(Isolate* isolate, | 4996 static MaybeHandle<String> GetName(Isolate* isolate, |
5001 Handle<JSBoundFunction> function); | 4997 Handle<JSBoundFunction> function); |
5002 static MaybeHandle<Context> GetFunctionRealm( | 4998 static MaybeHandle<Context> GetFunctionRealm( |
5003 Handle<JSBoundFunction> function); | 4999 Handle<JSBoundFunction> function); |
5004 | 5000 |
5005 DECLARE_CAST(JSBoundFunction) | 5001 DECL_CAST(JSBoundFunction) |
5006 | 5002 |
5007 // Dispatched behavior. | 5003 // Dispatched behavior. |
5008 DECLARE_PRINTER(JSBoundFunction) | 5004 DECL_PRINTER(JSBoundFunction) |
5009 DECLARE_VERIFIER(JSBoundFunction) | 5005 DECL_VERIFIER(JSBoundFunction) |
5010 | 5006 |
5011 // The bound function's string representation implemented according | 5007 // The bound function's string representation implemented according |
5012 // to ES6 section 19.2.3.5 Function.prototype.toString ( ). | 5008 // to ES6 section 19.2.3.5 Function.prototype.toString ( ). |
5013 static Handle<String> ToString(Handle<JSBoundFunction> function); | 5009 static Handle<String> ToString(Handle<JSBoundFunction> function); |
5014 | 5010 |
5015 // Layout description. | 5011 // Layout description. |
5016 static const int kBoundTargetFunctionOffset = JSObject::kHeaderSize; | 5012 static const int kBoundTargetFunctionOffset = JSObject::kHeaderSize; |
5017 static const int kBoundThisOffset = kBoundTargetFunctionOffset + kPointerSize; | 5013 static const int kBoundThisOffset = kBoundTargetFunctionOffset + kPointerSize; |
5018 static const int kBoundArgumentsOffset = kBoundThisOffset + kPointerSize; | 5014 static const int kBoundArgumentsOffset = kBoundThisOffset + kPointerSize; |
5019 static const int kSize = kBoundArgumentsOffset + kPointerSize; | 5015 static const int kSize = kBoundArgumentsOffset + kPointerSize; |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5164 inline bool is_compiled(); | 5160 inline bool is_compiled(); |
5165 | 5161 |
5166 // [next_function_link]: Links functions into various lists, e.g. the list | 5162 // [next_function_link]: Links functions into various lists, e.g. the list |
5167 // of optimized functions hanging off the native_context. Treated weakly | 5163 // of optimized functions hanging off the native_context. Treated weakly |
5168 // by the garbage collector. | 5164 // by the garbage collector. |
5169 DECL_ACCESSORS(next_function_link, Object) | 5165 DECL_ACCESSORS(next_function_link, Object) |
5170 | 5166 |
5171 // Prints the name of the function using PrintF. | 5167 // Prints the name of the function using PrintF. |
5172 void PrintName(FILE* out = stdout); | 5168 void PrintName(FILE* out = stdout); |
5173 | 5169 |
5174 DECLARE_CAST(JSFunction) | 5170 DECL_CAST(JSFunction) |
5175 | 5171 |
5176 // Calculate the instance size and in-object properties count. | 5172 // Calculate the instance size and in-object properties count. |
5177 static void CalculateInstanceSizeForDerivedClass( | 5173 static void CalculateInstanceSizeForDerivedClass( |
5178 Handle<JSFunction> function, InstanceType instance_type, | 5174 Handle<JSFunction> function, InstanceType instance_type, |
5179 int requested_embedder_fields, int* instance_size, | 5175 int requested_embedder_fields, int* instance_size, |
5180 int* in_object_properties); | 5176 int* in_object_properties); |
5181 static void CalculateInstanceSizeHelper(InstanceType instance_type, | 5177 static void CalculateInstanceSizeHelper(InstanceType instance_type, |
5182 int requested_embedder_fields, | 5178 int requested_embedder_fields, |
5183 int requested_in_object_properties, | 5179 int requested_in_object_properties, |
5184 int* instance_size, | 5180 int* instance_size, |
5185 int* in_object_properties); | 5181 int* in_object_properties); |
5186 enum BodyVisitingPolicy { kIgnoreWeakness, kRespectWeakness }; | 5182 enum BodyVisitingPolicy { kIgnoreWeakness, kRespectWeakness }; |
5187 // Iterates the function object according to the visiting policy. | 5183 // Iterates the function object according to the visiting policy. |
5188 template <BodyVisitingPolicy> | 5184 template <BodyVisitingPolicy> |
5189 class BodyDescriptorImpl; | 5185 class BodyDescriptorImpl; |
5190 | 5186 |
5191 typedef BodyDescriptorImpl<kIgnoreWeakness> BodyDescriptor; | 5187 typedef BodyDescriptorImpl<kIgnoreWeakness> BodyDescriptor; |
5192 typedef BodyDescriptorImpl<kRespectWeakness> BodyDescriptorWeak; | 5188 typedef BodyDescriptorImpl<kRespectWeakness> BodyDescriptorWeak; |
5193 | 5189 |
5194 // Dispatched behavior. | 5190 // Dispatched behavior. |
5195 DECLARE_PRINTER(JSFunction) | 5191 DECL_PRINTER(JSFunction) |
5196 DECLARE_VERIFIER(JSFunction) | 5192 DECL_VERIFIER(JSFunction) |
5197 | 5193 |
5198 // The function's name if it is configured, otherwise shared function info | 5194 // The function's name if it is configured, otherwise shared function info |
5199 // debug name. | 5195 // debug name. |
5200 static Handle<String> GetName(Handle<JSFunction> function); | 5196 static Handle<String> GetName(Handle<JSFunction> function); |
5201 | 5197 |
5202 // ES6 section 9.2.11 SetFunctionName | 5198 // ES6 section 9.2.11 SetFunctionName |
5203 // Because of the way this abstract operation is used in the spec, | 5199 // Because of the way this abstract operation is used in the spec, |
5204 // it should never fail. | 5200 // it should never fail. |
5205 static void SetName(Handle<JSFunction> function, Handle<Name> name, | 5201 static void SetName(Handle<JSFunction> function, Handle<Name> name, |
5206 Handle<String> prefix); | 5202 Handle<String> prefix); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5242 | 5238 |
5243 class JSGlobalProxy : public JSObject { | 5239 class JSGlobalProxy : public JSObject { |
5244 public: | 5240 public: |
5245 // [native_context]: the owner native context of this global proxy object. | 5241 // [native_context]: the owner native context of this global proxy object. |
5246 // It is null value if this object is not used by any context. | 5242 // It is null value if this object is not used by any context. |
5247 DECL_ACCESSORS(native_context, Object) | 5243 DECL_ACCESSORS(native_context, Object) |
5248 | 5244 |
5249 // [hash]: The hash code property (undefined if not initialized yet). | 5245 // [hash]: The hash code property (undefined if not initialized yet). |
5250 DECL_ACCESSORS(hash, Object) | 5246 DECL_ACCESSORS(hash, Object) |
5251 | 5247 |
5252 DECLARE_CAST(JSGlobalProxy) | 5248 DECL_CAST(JSGlobalProxy) |
5253 | 5249 |
5254 inline bool IsDetachedFrom(JSGlobalObject* global) const; | 5250 inline bool IsDetachedFrom(JSGlobalObject* global) const; |
5255 | 5251 |
5256 static int SizeWithEmbedderFields(int embedder_field_count); | 5252 static int SizeWithEmbedderFields(int embedder_field_count); |
5257 | 5253 |
5258 // Dispatched behavior. | 5254 // Dispatched behavior. |
5259 DECLARE_PRINTER(JSGlobalProxy) | 5255 DECL_PRINTER(JSGlobalProxy) |
5260 DECLARE_VERIFIER(JSGlobalProxy) | 5256 DECL_VERIFIER(JSGlobalProxy) |
5261 | 5257 |
5262 // Layout description. | 5258 // Layout description. |
5263 static const int kNativeContextOffset = JSObject::kHeaderSize; | 5259 static const int kNativeContextOffset = JSObject::kHeaderSize; |
5264 static const int kHashOffset = kNativeContextOffset + kPointerSize; | 5260 static const int kHashOffset = kNativeContextOffset + kPointerSize; |
5265 static const int kSize = kHashOffset + kPointerSize; | 5261 static const int kSize = kHashOffset + kPointerSize; |
5266 | 5262 |
5267 private: | 5263 private: |
5268 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalProxy); | 5264 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalProxy); |
5269 }; | 5265 }; |
5270 | 5266 |
5271 | 5267 |
5272 // JavaScript global object. | 5268 // JavaScript global object. |
5273 class JSGlobalObject : public JSObject { | 5269 class JSGlobalObject : public JSObject { |
5274 public: | 5270 public: |
5275 // [native context]: the natives corresponding to this global object. | 5271 // [native context]: the natives corresponding to this global object. |
5276 DECL_ACCESSORS(native_context, Context) | 5272 DECL_ACCESSORS(native_context, Context) |
5277 | 5273 |
5278 // [global proxy]: the global proxy object of the context | 5274 // [global proxy]: the global proxy object of the context |
5279 DECL_ACCESSORS(global_proxy, JSObject) | 5275 DECL_ACCESSORS(global_proxy, JSObject) |
5280 | 5276 |
5281 | 5277 |
5282 static void InvalidatePropertyCell(Handle<JSGlobalObject> object, | 5278 static void InvalidatePropertyCell(Handle<JSGlobalObject> object, |
5283 Handle<Name> name); | 5279 Handle<Name> name); |
5284 // Ensure that the global object has a cell for the given property name. | 5280 // Ensure that the global object has a cell for the given property name. |
5285 static Handle<PropertyCell> EnsureEmptyPropertyCell( | 5281 static Handle<PropertyCell> EnsureEmptyPropertyCell( |
5286 Handle<JSGlobalObject> global, Handle<Name> name, | 5282 Handle<JSGlobalObject> global, Handle<Name> name, |
5287 PropertyCellType cell_type, int* entry_out = nullptr); | 5283 PropertyCellType cell_type, int* entry_out = nullptr); |
5288 | 5284 |
5289 DECLARE_CAST(JSGlobalObject) | 5285 DECL_CAST(JSGlobalObject) |
5290 | 5286 |
5291 inline bool IsDetached(); | 5287 inline bool IsDetached(); |
5292 | 5288 |
5293 // Dispatched behavior. | 5289 // Dispatched behavior. |
5294 DECLARE_PRINTER(JSGlobalObject) | 5290 DECL_PRINTER(JSGlobalObject) |
5295 DECLARE_VERIFIER(JSGlobalObject) | 5291 DECL_VERIFIER(JSGlobalObject) |
5296 | 5292 |
5297 // Layout description. | 5293 // Layout description. |
5298 static const int kNativeContextOffset = JSObject::kHeaderSize; | 5294 static const int kNativeContextOffset = JSObject::kHeaderSize; |
5299 static const int kGlobalProxyOffset = kNativeContextOffset + kPointerSize; | 5295 static const int kGlobalProxyOffset = kNativeContextOffset + kPointerSize; |
5300 static const int kHeaderSize = kGlobalProxyOffset + kPointerSize; | 5296 static const int kHeaderSize = kGlobalProxyOffset + kPointerSize; |
5301 static const int kSize = kHeaderSize; | 5297 static const int kSize = kHeaderSize; |
5302 | 5298 |
5303 private: | 5299 private: |
5304 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalObject); | 5300 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalObject); |
5305 }; | 5301 }; |
5306 | 5302 |
5307 | 5303 |
5308 // Representation for JS Wrapper objects, String, Number, Boolean, etc. | 5304 // Representation for JS Wrapper objects, String, Number, Boolean, etc. |
5309 class JSValue: public JSObject { | 5305 class JSValue: public JSObject { |
5310 public: | 5306 public: |
5311 // [value]: the object being wrapped. | 5307 // [value]: the object being wrapped. |
5312 DECL_ACCESSORS(value, Object) | 5308 DECL_ACCESSORS(value, Object) |
5313 | 5309 |
5314 DECLARE_CAST(JSValue) | 5310 DECL_CAST(JSValue) |
5315 | 5311 |
5316 // Dispatched behavior. | 5312 // Dispatched behavior. |
5317 DECLARE_PRINTER(JSValue) | 5313 DECL_PRINTER(JSValue) |
5318 DECLARE_VERIFIER(JSValue) | 5314 DECL_VERIFIER(JSValue) |
5319 | 5315 |
5320 // Layout description. | 5316 // Layout description. |
5321 static const int kValueOffset = JSObject::kHeaderSize; | 5317 static const int kValueOffset = JSObject::kHeaderSize; |
5322 static const int kSize = kValueOffset + kPointerSize; | 5318 static const int kSize = kValueOffset + kPointerSize; |
5323 | 5319 |
5324 private: | 5320 private: |
5325 DISALLOW_IMPLICIT_CONSTRUCTORS(JSValue); | 5321 DISALLOW_IMPLICIT_CONSTRUCTORS(JSValue); |
5326 }; | 5322 }; |
5327 | 5323 |
5328 | 5324 |
(...skipping 20 matching lines...) Expand all Loading... |
5349 // [hour]: caches hours. Either undefined, smi, or NaN. | 5345 // [hour]: caches hours. Either undefined, smi, or NaN. |
5350 DECL_ACCESSORS(hour, Object) | 5346 DECL_ACCESSORS(hour, Object) |
5351 // [min]: caches minutes. Either undefined, smi, or NaN. | 5347 // [min]: caches minutes. Either undefined, smi, or NaN. |
5352 DECL_ACCESSORS(min, Object) | 5348 DECL_ACCESSORS(min, Object) |
5353 // [sec]: caches seconds. Either undefined, smi, or NaN. | 5349 // [sec]: caches seconds. Either undefined, smi, or NaN. |
5354 DECL_ACCESSORS(sec, Object) | 5350 DECL_ACCESSORS(sec, Object) |
5355 // [cache stamp]: sample of the date cache stamp at the | 5351 // [cache stamp]: sample of the date cache stamp at the |
5356 // moment when chached fields were cached. | 5352 // moment when chached fields were cached. |
5357 DECL_ACCESSORS(cache_stamp, Object) | 5353 DECL_ACCESSORS(cache_stamp, Object) |
5358 | 5354 |
5359 DECLARE_CAST(JSDate) | 5355 DECL_CAST(JSDate) |
5360 | 5356 |
5361 // Returns the time value (UTC) identifying the current time. | 5357 // Returns the time value (UTC) identifying the current time. |
5362 static double CurrentTimeValue(Isolate* isolate); | 5358 static double CurrentTimeValue(Isolate* isolate); |
5363 | 5359 |
5364 // Returns the date field with the specified index. | 5360 // Returns the date field with the specified index. |
5365 // See FieldIndex for the list of date fields. | 5361 // See FieldIndex for the list of date fields. |
5366 static Object* GetField(Object* date, Smi* index); | 5362 static Object* GetField(Object* date, Smi* index); |
5367 | 5363 |
5368 static Handle<Object> SetValue(Handle<JSDate> date, double v); | 5364 static Handle<Object> SetValue(Handle<JSDate> date, double v); |
5369 | 5365 |
5370 void SetValue(Object* value, bool is_value_nan); | 5366 void SetValue(Object* value, bool is_value_nan); |
5371 | 5367 |
5372 // Dispatched behavior. | 5368 // Dispatched behavior. |
5373 DECLARE_PRINTER(JSDate) | 5369 DECL_PRINTER(JSDate) |
5374 DECLARE_VERIFIER(JSDate) | 5370 DECL_VERIFIER(JSDate) |
5375 | 5371 |
5376 // The order is important. It must be kept in sync with date macros | 5372 // The order is important. It must be kept in sync with date macros |
5377 // in macros.py. | 5373 // in macros.py. |
5378 enum FieldIndex { | 5374 enum FieldIndex { |
5379 kDateValue, | 5375 kDateValue, |
5380 kYear, | 5376 kYear, |
5381 kMonth, | 5377 kMonth, |
5382 kDay, | 5378 kDay, |
5383 kWeekday, | 5379 kWeekday, |
5384 kHour, | 5380 kHour, |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5461 // Returns the offset of the given position within the containing line. | 5457 // Returns the offset of the given position within the containing line. |
5462 int GetColumnNumber() const; | 5458 int GetColumnNumber() const; |
5463 | 5459 |
5464 // Returns the source code line containing the given source | 5460 // Returns the source code line containing the given source |
5465 // position, or the empty string if the position is invalid. | 5461 // position, or the empty string if the position is invalid. |
5466 Handle<String> GetSourceLine() const; | 5462 Handle<String> GetSourceLine() const; |
5467 | 5463 |
5468 inline int error_level() const; | 5464 inline int error_level() const; |
5469 inline void set_error_level(int level); | 5465 inline void set_error_level(int level); |
5470 | 5466 |
5471 DECLARE_CAST(JSMessageObject) | 5467 DECL_CAST(JSMessageObject) |
5472 | 5468 |
5473 // Dispatched behavior. | 5469 // Dispatched behavior. |
5474 DECLARE_PRINTER(JSMessageObject) | 5470 DECL_PRINTER(JSMessageObject) |
5475 DECLARE_VERIFIER(JSMessageObject) | 5471 DECL_VERIFIER(JSMessageObject) |
5476 | 5472 |
5477 // Layout description. | 5473 // Layout description. |
5478 static const int kTypeOffset = JSObject::kHeaderSize; | 5474 static const int kTypeOffset = JSObject::kHeaderSize; |
5479 static const int kArgumentsOffset = kTypeOffset + kPointerSize; | 5475 static const int kArgumentsOffset = kTypeOffset + kPointerSize; |
5480 static const int kScriptOffset = kArgumentsOffset + kPointerSize; | 5476 static const int kScriptOffset = kArgumentsOffset + kPointerSize; |
5481 static const int kStackFramesOffset = kScriptOffset + kPointerSize; | 5477 static const int kStackFramesOffset = kScriptOffset + kPointerSize; |
5482 static const int kStartPositionOffset = kStackFramesOffset + kPointerSize; | 5478 static const int kStartPositionOffset = kStackFramesOffset + kPointerSize; |
5483 static const int kEndPositionOffset = kStartPositionOffset + kPointerSize; | 5479 static const int kEndPositionOffset = kStartPositionOffset + kPointerSize; |
5484 static const int kErrorLevelOffset = kEndPositionOffset + kPointerSize; | 5480 static const int kErrorLevelOffset = kEndPositionOffset + kPointerSize; |
5485 static const int kSize = kErrorLevelOffset + kPointerSize; | 5481 static const int kSize = kErrorLevelOffset + kPointerSize; |
5486 | 5482 |
5487 typedef FixedBodyDescriptor<HeapObject::kMapOffset, | 5483 typedef FixedBodyDescriptor<HeapObject::kMapOffset, |
5488 kStackFramesOffset + kPointerSize, | 5484 kStackFramesOffset + kPointerSize, |
5489 kSize> BodyDescriptor; | 5485 kSize> BodyDescriptor; |
5490 // No weak fields. | 5486 // No weak fields. |
5491 typedef BodyDescriptor BodyDescriptorWeak; | 5487 typedef BodyDescriptor BodyDescriptorWeak; |
5492 }; | 5488 }; |
5493 | 5489 |
5494 class JSPromise; | 5490 class JSPromise; |
5495 | 5491 |
5496 // TODO(caitp): Make this a Struct once properties are no longer accessed from | 5492 // TODO(caitp): Make this a Struct once properties are no longer accessed from |
5497 // JS | 5493 // JS |
5498 class JSPromiseCapability : public JSObject { | 5494 class JSPromiseCapability : public JSObject { |
5499 public: | 5495 public: |
5500 DECLARE_CAST(JSPromiseCapability) | 5496 DECL_CAST(JSPromiseCapability) |
5501 | 5497 |
5502 DECLARE_VERIFIER(JSPromiseCapability) | 5498 DECL_VERIFIER(JSPromiseCapability) |
5503 | 5499 |
5504 DECL_ACCESSORS(promise, Object) | 5500 DECL_ACCESSORS(promise, Object) |
5505 DECL_ACCESSORS(resolve, Object) | 5501 DECL_ACCESSORS(resolve, Object) |
5506 DECL_ACCESSORS(reject, Object) | 5502 DECL_ACCESSORS(reject, Object) |
5507 | 5503 |
5508 static const int kPromiseOffset = JSObject::kHeaderSize; | 5504 static const int kPromiseOffset = JSObject::kHeaderSize; |
5509 static const int kResolveOffset = kPromiseOffset + kPointerSize; | 5505 static const int kResolveOffset = kPromiseOffset + kPointerSize; |
5510 static const int kRejectOffset = kResolveOffset + kPointerSize; | 5506 static const int kRejectOffset = kResolveOffset + kPointerSize; |
5511 static const int kSize = kRejectOffset + kPointerSize; | 5507 static const int kSize = kRejectOffset + kPointerSize; |
5512 | 5508 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5549 | 5545 |
5550 // [has_handler]: Whether this promise has a reject handler or not. | 5546 // [has_handler]: Whether this promise has a reject handler or not. |
5551 DECL_BOOLEAN_ACCESSORS(has_handler) | 5547 DECL_BOOLEAN_ACCESSORS(has_handler) |
5552 | 5548 |
5553 // [handled_hint]: Whether this promise will be handled by a catch | 5549 // [handled_hint]: Whether this promise will be handled by a catch |
5554 // block in an async function. | 5550 // block in an async function. |
5555 DECL_BOOLEAN_ACCESSORS(handled_hint) | 5551 DECL_BOOLEAN_ACCESSORS(handled_hint) |
5556 | 5552 |
5557 static const char* Status(int status); | 5553 static const char* Status(int status); |
5558 | 5554 |
5559 DECLARE_CAST(JSPromise) | 5555 DECL_CAST(JSPromise) |
5560 | 5556 |
5561 // Dispatched behavior. | 5557 // Dispatched behavior. |
5562 DECLARE_PRINTER(JSPromise) | 5558 DECL_PRINTER(JSPromise) |
5563 DECLARE_VERIFIER(JSPromise) | 5559 DECL_VERIFIER(JSPromise) |
5564 | 5560 |
5565 // Layout description. | 5561 // Layout description. |
5566 static const int kStatusOffset = JSObject::kHeaderSize; | 5562 static const int kStatusOffset = JSObject::kHeaderSize; |
5567 static const int kResultOffset = kStatusOffset + kPointerSize; | 5563 static const int kResultOffset = kStatusOffset + kPointerSize; |
5568 static const int kDeferredPromiseOffset = kResultOffset + kPointerSize; | 5564 static const int kDeferredPromiseOffset = kResultOffset + kPointerSize; |
5569 static const int kDeferredOnResolveOffset = | 5565 static const int kDeferredOnResolveOffset = |
5570 kDeferredPromiseOffset + kPointerSize; | 5566 kDeferredPromiseOffset + kPointerSize; |
5571 static const int kDeferredOnRejectOffset = | 5567 static const int kDeferredOnRejectOffset = |
5572 kDeferredOnResolveOffset + kPointerSize; | 5568 kDeferredOnResolveOffset + kPointerSize; |
5573 static const int kFulfillReactionsOffset = | 5569 static const int kFulfillReactionsOffset = |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5657 } | 5653 } |
5658 | 5654 |
5659 static int saved_code_index(bool is_latin1) { | 5655 static int saved_code_index(bool is_latin1) { |
5660 if (is_latin1) { | 5656 if (is_latin1) { |
5661 return kIrregexpLatin1CodeSavedIndex; | 5657 return kIrregexpLatin1CodeSavedIndex; |
5662 } else { | 5658 } else { |
5663 return kIrregexpUC16CodeSavedIndex; | 5659 return kIrregexpUC16CodeSavedIndex; |
5664 } | 5660 } |
5665 } | 5661 } |
5666 | 5662 |
5667 DECLARE_CAST(JSRegExp) | 5663 DECL_CAST(JSRegExp) |
5668 | 5664 |
5669 // Dispatched behavior. | 5665 // Dispatched behavior. |
5670 DECLARE_PRINTER(JSRegExp) | 5666 DECL_PRINTER(JSRegExp) |
5671 DECLARE_VERIFIER(JSRegExp) | 5667 DECL_VERIFIER(JSRegExp) |
5672 | 5668 |
5673 static const int kDataOffset = JSObject::kHeaderSize; | 5669 static const int kDataOffset = JSObject::kHeaderSize; |
5674 static const int kSourceOffset = kDataOffset + kPointerSize; | 5670 static const int kSourceOffset = kDataOffset + kPointerSize; |
5675 static const int kFlagsOffset = kSourceOffset + kPointerSize; | 5671 static const int kFlagsOffset = kSourceOffset + kPointerSize; |
5676 static const int kSize = kFlagsOffset + kPointerSize; | 5672 static const int kSize = kFlagsOffset + kPointerSize; |
5677 | 5673 |
5678 // Indices in the data array. | 5674 // Indices in the data array. |
5679 static const int kTagIndex = 0; | 5675 static const int kTagIndex = 0; |
5680 static const int kSourceIndex = kTagIndex + 1; | 5676 static const int kSourceIndex = kTagIndex + 1; |
5681 static const int kFlagsIndex = kSourceIndex + 1; | 5677 static const int kFlagsIndex = kSourceIndex + 1; |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5745 inline void change_ic_generic_count(int delta); | 5741 inline void change_ic_generic_count(int delta); |
5746 | 5742 |
5747 inline void initialize_storage(); | 5743 inline void initialize_storage(); |
5748 | 5744 |
5749 inline void change_own_type_change_checksum(); | 5745 inline void change_own_type_change_checksum(); |
5750 inline int own_type_change_checksum(); | 5746 inline int own_type_change_checksum(); |
5751 | 5747 |
5752 inline void set_inlined_type_change_checksum(int checksum); | 5748 inline void set_inlined_type_change_checksum(int checksum); |
5753 inline bool matches_inlined_type_change_checksum(int checksum); | 5749 inline bool matches_inlined_type_change_checksum(int checksum); |
5754 | 5750 |
5755 DECLARE_CAST(TypeFeedbackInfo) | 5751 DECL_CAST(TypeFeedbackInfo) |
5756 | 5752 |
5757 static const int kStorage1Offset = kValue1Offset; | 5753 static const int kStorage1Offset = kValue1Offset; |
5758 static const int kStorage2Offset = kValue2Offset; | 5754 static const int kStorage2Offset = kValue2Offset; |
5759 static const int kStorage3Offset = kValue3Offset; | 5755 static const int kStorage3Offset = kValue3Offset; |
5760 | 5756 |
5761 private: | 5757 private: |
5762 static const int kTypeChangeChecksumBits = 7; | 5758 static const int kTypeChangeChecksumBits = 7; |
5763 | 5759 |
5764 class ICTotalCountField: public BitField<int, 0, | 5760 class ICTotalCountField: public BitField<int, 0, |
5765 kSmiValueSize - kTypeChangeChecksumBits> {}; // NOLINT | 5761 kSmiValueSize - kTypeChangeChecksumBits> {}; // NOLINT |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5863 inline bool CanInlineCall(); | 5859 inline bool CanInlineCall(); |
5864 inline void SetDoNotInlineCall(); | 5860 inline void SetDoNotInlineCall(); |
5865 | 5861 |
5866 inline bool SitePointsToLiteral(); | 5862 inline bool SitePointsToLiteral(); |
5867 | 5863 |
5868 template <AllocationSiteUpdateMode update_or_check = | 5864 template <AllocationSiteUpdateMode update_or_check = |
5869 AllocationSiteUpdateMode::kUpdate> | 5865 AllocationSiteUpdateMode::kUpdate> |
5870 static bool DigestTransitionFeedback(Handle<AllocationSite> site, | 5866 static bool DigestTransitionFeedback(Handle<AllocationSite> site, |
5871 ElementsKind to_kind); | 5867 ElementsKind to_kind); |
5872 | 5868 |
5873 DECLARE_PRINTER(AllocationSite) | 5869 DECL_PRINTER(AllocationSite) |
5874 DECLARE_VERIFIER(AllocationSite) | 5870 DECL_VERIFIER(AllocationSite) |
5875 | 5871 |
5876 DECLARE_CAST(AllocationSite) | 5872 DECL_CAST(AllocationSite) |
5877 static inline bool ShouldTrack(ElementsKind boilerplate_elements_kind); | 5873 static inline bool ShouldTrack(ElementsKind boilerplate_elements_kind); |
5878 static bool ShouldTrack(ElementsKind from, ElementsKind to); | 5874 static bool ShouldTrack(ElementsKind from, ElementsKind to); |
5879 static inline bool CanTrack(InstanceType type); | 5875 static inline bool CanTrack(InstanceType type); |
5880 | 5876 |
5881 static const int kTransitionInfoOffset = HeapObject::kHeaderSize; | 5877 static const int kTransitionInfoOffset = HeapObject::kHeaderSize; |
5882 static const int kNestedSiteOffset = kTransitionInfoOffset + kPointerSize; | 5878 static const int kNestedSiteOffset = kTransitionInfoOffset + kPointerSize; |
5883 static const int kPretenureDataOffset = kNestedSiteOffset + kPointerSize; | 5879 static const int kPretenureDataOffset = kNestedSiteOffset + kPointerSize; |
5884 static const int kPretenureCreateCountOffset = | 5880 static const int kPretenureCreateCountOffset = |
5885 kPretenureDataOffset + kPointerSize; | 5881 kPretenureDataOffset + kPointerSize; |
5886 static const int kDependentCodeOffset = | 5882 static const int kDependentCodeOffset = |
(...skipping 26 matching lines...) Expand all Loading... |
5913 public: | 5909 public: |
5914 static const int kAllocationSiteOffset = HeapObject::kHeaderSize; | 5910 static const int kAllocationSiteOffset = HeapObject::kHeaderSize; |
5915 static const int kSize = kAllocationSiteOffset + kPointerSize; | 5911 static const int kSize = kAllocationSiteOffset + kPointerSize; |
5916 | 5912 |
5917 DECL_ACCESSORS(allocation_site, Object) | 5913 DECL_ACCESSORS(allocation_site, Object) |
5918 | 5914 |
5919 inline bool IsValid(); | 5915 inline bool IsValid(); |
5920 inline AllocationSite* GetAllocationSite(); | 5916 inline AllocationSite* GetAllocationSite(); |
5921 inline Address GetAllocationSiteUnchecked(); | 5917 inline Address GetAllocationSiteUnchecked(); |
5922 | 5918 |
5923 DECLARE_PRINTER(AllocationMemento) | 5919 DECL_PRINTER(AllocationMemento) |
5924 DECLARE_VERIFIER(AllocationMemento) | 5920 DECL_VERIFIER(AllocationMemento) |
5925 | 5921 |
5926 DECLARE_CAST(AllocationMemento) | 5922 DECL_CAST(AllocationMemento) |
5927 | 5923 |
5928 private: | 5924 private: |
5929 DISALLOW_IMPLICIT_CONSTRUCTORS(AllocationMemento); | 5925 DISALLOW_IMPLICIT_CONSTRUCTORS(AllocationMemento); |
5930 }; | 5926 }; |
5931 | 5927 |
5932 | 5928 |
5933 // Utility superclass for stack-allocated objects that must be updated | 5929 // Utility superclass for stack-allocated objects that must be updated |
5934 // on gc. It provides two ways for the gc to update instances, either | 5930 // on gc. It provides two ways for the gc to update instances, either |
5935 // iterating or updating after gc. | 5931 // iterating or updating after gc. |
5936 class Relocatable BASE_EMBEDDED { | 5932 class Relocatable BASE_EMBEDDED { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5982 | 5978 |
5983 // [typeof]: Cached type_of computed at startup. | 5979 // [typeof]: Cached type_of computed at startup. |
5984 DECL_ACCESSORS(type_of, String) | 5980 DECL_ACCESSORS(type_of, String) |
5985 | 5981 |
5986 inline byte kind() const; | 5982 inline byte kind() const; |
5987 inline void set_kind(byte kind); | 5983 inline void set_kind(byte kind); |
5988 | 5984 |
5989 // ES6 section 7.1.3 ToNumber for Boolean, Null, Undefined. | 5985 // ES6 section 7.1.3 ToNumber for Boolean, Null, Undefined. |
5990 MUST_USE_RESULT static inline Handle<Object> ToNumber(Handle<Oddball> input); | 5986 MUST_USE_RESULT static inline Handle<Object> ToNumber(Handle<Oddball> input); |
5991 | 5987 |
5992 DECLARE_CAST(Oddball) | 5988 DECL_CAST(Oddball) |
5993 | 5989 |
5994 // Dispatched behavior. | 5990 // Dispatched behavior. |
5995 DECLARE_VERIFIER(Oddball) | 5991 DECL_VERIFIER(Oddball) |
5996 | 5992 |
5997 // Initialize the fields. | 5993 // Initialize the fields. |
5998 static void Initialize(Isolate* isolate, Handle<Oddball> oddball, | 5994 static void Initialize(Isolate* isolate, Handle<Oddball> oddball, |
5999 const char* to_string, Handle<Object> to_number, | 5995 const char* to_string, Handle<Object> to_number, |
6000 const char* type_of, byte kind); | 5996 const char* type_of, byte kind); |
6001 | 5997 |
6002 // Layout description. | 5998 // Layout description. |
6003 static const int kToNumberRawOffset = HeapObject::kHeaderSize; | 5999 static const int kToNumberRawOffset = HeapObject::kHeaderSize; |
6004 static const int kToStringOffset = kToNumberRawOffset + kDoubleSize; | 6000 static const int kToStringOffset = kToNumberRawOffset + kDoubleSize; |
6005 static const int kToNumberOffset = kToStringOffset + kPointerSize; | 6001 static const int kToNumberOffset = kToStringOffset + kPointerSize; |
(...skipping 27 matching lines...) Expand all Loading... |
6033 private: | 6029 private: |
6034 DISALLOW_IMPLICIT_CONSTRUCTORS(Oddball); | 6030 DISALLOW_IMPLICIT_CONSTRUCTORS(Oddball); |
6035 }; | 6031 }; |
6036 | 6032 |
6037 | 6033 |
6038 class Cell: public HeapObject { | 6034 class Cell: public HeapObject { |
6039 public: | 6035 public: |
6040 // [value]: value of the cell. | 6036 // [value]: value of the cell. |
6041 DECL_ACCESSORS(value, Object) | 6037 DECL_ACCESSORS(value, Object) |
6042 | 6038 |
6043 DECLARE_CAST(Cell) | 6039 DECL_CAST(Cell) |
6044 | 6040 |
6045 static inline Cell* FromValueAddress(Address value) { | 6041 static inline Cell* FromValueAddress(Address value) { |
6046 Object* result = FromAddress(value - kValueOffset); | 6042 Object* result = FromAddress(value - kValueOffset); |
6047 return static_cast<Cell*>(result); | 6043 return static_cast<Cell*>(result); |
6048 } | 6044 } |
6049 | 6045 |
6050 inline Address ValueAddress() { | 6046 inline Address ValueAddress() { |
6051 return address() + kValueOffset; | 6047 return address() + kValueOffset; |
6052 } | 6048 } |
6053 | 6049 |
6054 // Dispatched behavior. | 6050 // Dispatched behavior. |
6055 DECLARE_PRINTER(Cell) | 6051 DECL_PRINTER(Cell) |
6056 DECLARE_VERIFIER(Cell) | 6052 DECL_VERIFIER(Cell) |
6057 | 6053 |
6058 // Layout description. | 6054 // Layout description. |
6059 static const int kValueOffset = HeapObject::kHeaderSize; | 6055 static const int kValueOffset = HeapObject::kHeaderSize; |
6060 static const int kSize = kValueOffset + kPointerSize; | 6056 static const int kSize = kValueOffset + kPointerSize; |
6061 | 6057 |
6062 typedef FixedBodyDescriptor<kValueOffset, | 6058 typedef FixedBodyDescriptor<kValueOffset, |
6063 kValueOffset + kPointerSize, | 6059 kValueOffset + kPointerSize, |
6064 kSize> BodyDescriptor; | 6060 kSize> BodyDescriptor; |
6065 // No weak fields. | 6061 // No weak fields. |
6066 typedef BodyDescriptor BodyDescriptorWeak; | 6062 typedef BodyDescriptor BodyDescriptorWeak; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6098 static Handle<PropertyCell> PrepareForValue( | 6094 static Handle<PropertyCell> PrepareForValue( |
6099 Handle<GlobalDictionary> dictionary, int entry, Handle<Object> value, | 6095 Handle<GlobalDictionary> dictionary, int entry, Handle<Object> value, |
6100 PropertyDetails details); | 6096 PropertyDetails details); |
6101 | 6097 |
6102 static Handle<PropertyCell> InvalidateEntry( | 6098 static Handle<PropertyCell> InvalidateEntry( |
6103 Handle<GlobalDictionary> dictionary, int entry); | 6099 Handle<GlobalDictionary> dictionary, int entry); |
6104 | 6100 |
6105 static void SetValueWithInvalidation(Handle<PropertyCell> cell, | 6101 static void SetValueWithInvalidation(Handle<PropertyCell> cell, |
6106 Handle<Object> new_value); | 6102 Handle<Object> new_value); |
6107 | 6103 |
6108 DECLARE_CAST(PropertyCell) | 6104 DECL_CAST(PropertyCell) |
6109 | 6105 |
6110 // Dispatched behavior. | 6106 // Dispatched behavior. |
6111 DECLARE_PRINTER(PropertyCell) | 6107 DECL_PRINTER(PropertyCell) |
6112 DECLARE_VERIFIER(PropertyCell) | 6108 DECL_VERIFIER(PropertyCell) |
6113 | 6109 |
6114 // Layout description. | 6110 // Layout description. |
6115 static const int kDetailsOffset = HeapObject::kHeaderSize; | 6111 static const int kDetailsOffset = HeapObject::kHeaderSize; |
6116 static const int kNameOffset = kDetailsOffset + kPointerSize; | 6112 static const int kNameOffset = kDetailsOffset + kPointerSize; |
6117 static const int kValueOffset = kNameOffset + kPointerSize; | 6113 static const int kValueOffset = kNameOffset + kPointerSize; |
6118 static const int kDependentCodeOffset = kValueOffset + kPointerSize; | 6114 static const int kDependentCodeOffset = kValueOffset + kPointerSize; |
6119 static const int kSize = kDependentCodeOffset + kPointerSize; | 6115 static const int kSize = kDependentCodeOffset + kPointerSize; |
6120 | 6116 |
6121 typedef FixedBodyDescriptor<kNameOffset, kSize, kSize> BodyDescriptor; | 6117 typedef FixedBodyDescriptor<kNameOffset, kSize, kSize> BodyDescriptor; |
6122 // No weak fields. | 6118 // No weak fields. |
(...skipping 15 matching lines...) Expand all Loading... |
6138 inline void initialize(HeapObject* value); | 6134 inline void initialize(HeapObject* value); |
6139 | 6135 |
6140 inline bool cleared() const; | 6136 inline bool cleared() const; |
6141 | 6137 |
6142 DECL_ACCESSORS(next, Object) | 6138 DECL_ACCESSORS(next, Object) |
6143 | 6139 |
6144 inline void clear_next(Object* the_hole_value); | 6140 inline void clear_next(Object* the_hole_value); |
6145 | 6141 |
6146 inline bool next_cleared(); | 6142 inline bool next_cleared(); |
6147 | 6143 |
6148 DECLARE_CAST(WeakCell) | 6144 DECL_CAST(WeakCell) |
6149 | 6145 |
6150 DECLARE_PRINTER(WeakCell) | 6146 DECL_PRINTER(WeakCell) |
6151 DECLARE_VERIFIER(WeakCell) | 6147 DECL_VERIFIER(WeakCell) |
6152 | 6148 |
6153 // Layout description. | 6149 // Layout description. |
6154 static const int kValueOffset = HeapObject::kHeaderSize; | 6150 static const int kValueOffset = HeapObject::kHeaderSize; |
6155 static const int kNextOffset = kValueOffset + kPointerSize; | 6151 static const int kNextOffset = kValueOffset + kPointerSize; |
6156 static const int kSize = kNextOffset + kPointerSize; | 6152 static const int kSize = kNextOffset + kPointerSize; |
6157 | 6153 |
6158 typedef FixedBodyDescriptor<kValueOffset, kSize, kSize> BodyDescriptor; | 6154 typedef FixedBodyDescriptor<kValueOffset, kSize, kSize> BodyDescriptor; |
6159 | 6155 |
6160 private: | 6156 private: |
6161 DISALLOW_IMPLICIT_CONSTRUCTORS(WeakCell); | 6157 DISALLOW_IMPLICIT_CONSTRUCTORS(WeakCell); |
6162 }; | 6158 }; |
6163 | 6159 |
6164 | 6160 |
6165 // The JSProxy describes EcmaScript Harmony proxies | 6161 // The JSProxy describes EcmaScript Harmony proxies |
6166 class JSProxy: public JSReceiver { | 6162 class JSProxy: public JSReceiver { |
6167 public: | 6163 public: |
6168 MUST_USE_RESULT static MaybeHandle<JSProxy> New(Isolate* isolate, | 6164 MUST_USE_RESULT static MaybeHandle<JSProxy> New(Isolate* isolate, |
6169 Handle<Object>, | 6165 Handle<Object>, |
6170 Handle<Object>); | 6166 Handle<Object>); |
6171 | 6167 |
6172 // [handler]: The handler property. | 6168 // [handler]: The handler property. |
6173 DECL_ACCESSORS(handler, Object) | 6169 DECL_ACCESSORS(handler, Object) |
6174 // [target]: The target property. | 6170 // [target]: The target property. |
6175 DECL_ACCESSORS(target, JSReceiver) | 6171 DECL_ACCESSORS(target, JSReceiver) |
6176 // [hash]: The hash code property (undefined if not initialized yet). | 6172 // [hash]: The hash code property (undefined if not initialized yet). |
6177 DECL_ACCESSORS(hash, Object) | 6173 DECL_ACCESSORS(hash, Object) |
6178 | 6174 |
6179 static MaybeHandle<Context> GetFunctionRealm(Handle<JSProxy> proxy); | 6175 static MaybeHandle<Context> GetFunctionRealm(Handle<JSProxy> proxy); |
6180 | 6176 |
6181 DECLARE_CAST(JSProxy) | 6177 DECL_CAST(JSProxy) |
6182 | 6178 |
6183 INLINE(bool IsRevoked() const); | 6179 INLINE(bool IsRevoked() const); |
6184 static void Revoke(Handle<JSProxy> proxy); | 6180 static void Revoke(Handle<JSProxy> proxy); |
6185 | 6181 |
6186 // ES6 9.5.1 | 6182 // ES6 9.5.1 |
6187 static MaybeHandle<Object> GetPrototype(Handle<JSProxy> receiver); | 6183 static MaybeHandle<Object> GetPrototype(Handle<JSProxy> receiver); |
6188 | 6184 |
6189 // ES6 9.5.2 | 6185 // ES6 9.5.2 |
6190 MUST_USE_RESULT static Maybe<bool> SetPrototype(Handle<JSProxy> proxy, | 6186 MUST_USE_RESULT static Maybe<bool> SetPrototype(Handle<JSProxy> proxy, |
6191 Handle<Object> value, | 6187 Handle<Object> value, |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6234 | 6230 |
6235 // ES6 9.5.12 | 6231 // ES6 9.5.12 |
6236 MUST_USE_RESULT static Maybe<bool> OwnPropertyKeys( | 6232 MUST_USE_RESULT static Maybe<bool> OwnPropertyKeys( |
6237 Isolate* isolate, Handle<JSReceiver> receiver, Handle<JSProxy> proxy, | 6233 Isolate* isolate, Handle<JSReceiver> receiver, Handle<JSProxy> proxy, |
6238 PropertyFilter filter, KeyAccumulator* accumulator); | 6234 PropertyFilter filter, KeyAccumulator* accumulator); |
6239 | 6235 |
6240 MUST_USE_RESULT static Maybe<PropertyAttributes> GetPropertyAttributes( | 6236 MUST_USE_RESULT static Maybe<PropertyAttributes> GetPropertyAttributes( |
6241 LookupIterator* it); | 6237 LookupIterator* it); |
6242 | 6238 |
6243 // Dispatched behavior. | 6239 // Dispatched behavior. |
6244 DECLARE_PRINTER(JSProxy) | 6240 DECL_PRINTER(JSProxy) |
6245 DECLARE_VERIFIER(JSProxy) | 6241 DECL_VERIFIER(JSProxy) |
6246 | 6242 |
6247 static const int kMaxIterationLimit = 100 * 1024; | 6243 static const int kMaxIterationLimit = 100 * 1024; |
6248 | 6244 |
6249 // Layout description. | 6245 // Layout description. |
6250 static const int kTargetOffset = JSReceiver::kHeaderSize; | 6246 static const int kTargetOffset = JSReceiver::kHeaderSize; |
6251 static const int kHandlerOffset = kTargetOffset + kPointerSize; | 6247 static const int kHandlerOffset = kTargetOffset + kPointerSize; |
6252 static const int kHashOffset = kHandlerOffset + kPointerSize; | 6248 static const int kHashOffset = kHandlerOffset + kPointerSize; |
6253 static const int kSize = kHashOffset + kPointerSize; | 6249 static const int kSize = kHashOffset + kPointerSize; |
6254 | 6250 |
6255 typedef FixedBodyDescriptor<JSReceiver::kPropertiesOffset, kSize, kSize> | 6251 typedef FixedBodyDescriptor<JSReceiver::kPropertiesOffset, kSize, kSize> |
(...skipping 26 matching lines...) Expand all Loading... |
6282 private: | 6278 private: |
6283 DISALLOW_IMPLICIT_CONSTRUCTORS(JSCollection); | 6279 DISALLOW_IMPLICIT_CONSTRUCTORS(JSCollection); |
6284 }; | 6280 }; |
6285 | 6281 |
6286 | 6282 |
6287 // The JSSet describes EcmaScript Harmony sets | 6283 // The JSSet describes EcmaScript Harmony sets |
6288 // TODO(marja): When moving JSSet out of objects.h, move JSSetIterator (from | 6284 // TODO(marja): When moving JSSet out of objects.h, move JSSetIterator (from |
6289 // objects/hash-table.h) into the same file. | 6285 // objects/hash-table.h) into the same file. |
6290 class JSSet : public JSCollection { | 6286 class JSSet : public JSCollection { |
6291 public: | 6287 public: |
6292 DECLARE_CAST(JSSet) | 6288 DECL_CAST(JSSet) |
6293 | 6289 |
6294 static void Initialize(Handle<JSSet> set, Isolate* isolate); | 6290 static void Initialize(Handle<JSSet> set, Isolate* isolate); |
6295 static void Clear(Handle<JSSet> set); | 6291 static void Clear(Handle<JSSet> set); |
6296 | 6292 |
6297 // Dispatched behavior. | 6293 // Dispatched behavior. |
6298 DECLARE_PRINTER(JSSet) | 6294 DECL_PRINTER(JSSet) |
6299 DECLARE_VERIFIER(JSSet) | 6295 DECL_VERIFIER(JSSet) |
6300 | 6296 |
6301 private: | 6297 private: |
6302 DISALLOW_IMPLICIT_CONSTRUCTORS(JSSet); | 6298 DISALLOW_IMPLICIT_CONSTRUCTORS(JSSet); |
6303 }; | 6299 }; |
6304 | 6300 |
6305 | 6301 |
6306 // The JSMap describes EcmaScript Harmony maps | 6302 // The JSMap describes EcmaScript Harmony maps |
6307 // TODO(marja): When moving JSMap out of objects.h, move JSMapIterator (from | 6303 // TODO(marja): When moving JSMap out of objects.h, move JSMapIterator (from |
6308 // objects/hash-table.h) into the same file. | 6304 // objects/hash-table.h) into the same file. |
6309 class JSMap : public JSCollection { | 6305 class JSMap : public JSCollection { |
6310 public: | 6306 public: |
6311 DECLARE_CAST(JSMap) | 6307 DECL_CAST(JSMap) |
6312 | 6308 |
6313 static void Initialize(Handle<JSMap> map, Isolate* isolate); | 6309 static void Initialize(Handle<JSMap> map, Isolate* isolate); |
6314 static void Clear(Handle<JSMap> map); | 6310 static void Clear(Handle<JSMap> map); |
6315 | 6311 |
6316 // Dispatched behavior. | 6312 // Dispatched behavior. |
6317 DECLARE_PRINTER(JSMap) | 6313 DECL_PRINTER(JSMap) |
6318 DECLARE_VERIFIER(JSMap) | 6314 DECL_VERIFIER(JSMap) |
6319 | 6315 |
6320 private: | 6316 private: |
6321 DISALLOW_IMPLICIT_CONSTRUCTORS(JSMap); | 6317 DISALLOW_IMPLICIT_CONSTRUCTORS(JSMap); |
6322 }; | 6318 }; |
6323 | 6319 |
6324 class JSArrayIterator : public JSObject { | 6320 class JSArrayIterator : public JSObject { |
6325 public: | 6321 public: |
6326 DECLARE_PRINTER(JSArrayIterator) | 6322 DECL_PRINTER(JSArrayIterator) |
6327 DECLARE_VERIFIER(JSArrayIterator) | 6323 DECL_VERIFIER(JSArrayIterator) |
6328 | 6324 |
6329 DECLARE_CAST(JSArrayIterator) | 6325 DECL_CAST(JSArrayIterator) |
6330 | 6326 |
6331 // [object]: the [[IteratedObject]] inobject property. | 6327 // [object]: the [[IteratedObject]] inobject property. |
6332 DECL_ACCESSORS(object, Object) | 6328 DECL_ACCESSORS(object, Object) |
6333 | 6329 |
6334 // [index]: The [[ArrayIteratorNextIndex]] inobject property. | 6330 // [index]: The [[ArrayIteratorNextIndex]] inobject property. |
6335 DECL_ACCESSORS(index, Object) | 6331 DECL_ACCESSORS(index, Object) |
6336 | 6332 |
6337 // [map]: The Map of the [[IteratedObject]] field at the time the iterator is | 6333 // [map]: The Map of the [[IteratedObject]] field at the time the iterator is |
6338 // allocated. | 6334 // allocated. |
6339 DECL_ACCESSORS(object_map, Object) | 6335 DECL_ACCESSORS(object_map, Object) |
(...skipping 11 matching lines...) Expand all Loading... |
6351 DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayIterator); | 6347 DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayIterator); |
6352 }; | 6348 }; |
6353 | 6349 |
6354 // The [Async-from-Sync Iterator] object | 6350 // The [Async-from-Sync Iterator] object |
6355 // (proposal-async-iteration/#sec-async-from-sync-iterator-objects) | 6351 // (proposal-async-iteration/#sec-async-from-sync-iterator-objects) |
6356 // An object which wraps an ordinary Iterator and converts it to behave | 6352 // An object which wraps an ordinary Iterator and converts it to behave |
6357 // according to the Async Iterator protocol. | 6353 // according to the Async Iterator protocol. |
6358 // (See https://tc39.github.io/proposal-async-iteration/#sec-iteration) | 6354 // (See https://tc39.github.io/proposal-async-iteration/#sec-iteration) |
6359 class JSAsyncFromSyncIterator : public JSObject { | 6355 class JSAsyncFromSyncIterator : public JSObject { |
6360 public: | 6356 public: |
6361 DECLARE_CAST(JSAsyncFromSyncIterator) | 6357 DECL_CAST(JSAsyncFromSyncIterator) |
6362 DECLARE_PRINTER(JSAsyncFromSyncIterator) | 6358 DECL_PRINTER(JSAsyncFromSyncIterator) |
6363 DECLARE_VERIFIER(JSAsyncFromSyncIterator) | 6359 DECL_VERIFIER(JSAsyncFromSyncIterator) |
6364 | 6360 |
6365 // Async-from-Sync Iterator instances are ordinary objects that inherit | 6361 // Async-from-Sync Iterator instances are ordinary objects that inherit |
6366 // properties from the %AsyncFromSyncIteratorPrototype% intrinsic object. | 6362 // properties from the %AsyncFromSyncIteratorPrototype% intrinsic object. |
6367 // Async-from-Sync Iterator instances are initially created with the internal | 6363 // Async-from-Sync Iterator instances are initially created with the internal |
6368 // slots listed in Table 4. | 6364 // slots listed in Table 4. |
6369 // (proposal-async-iteration/#table-async-from-sync-iterator-internal-slots) | 6365 // (proposal-async-iteration/#table-async-from-sync-iterator-internal-slots) |
6370 DECL_ACCESSORS(sync_iterator, JSReceiver) | 6366 DECL_ACCESSORS(sync_iterator, JSReceiver) |
6371 | 6367 |
6372 // Offsets of object fields. | 6368 // Offsets of object fields. |
6373 static const int kSyncIteratorOffset = JSObject::kHeaderSize; | 6369 static const int kSyncIteratorOffset = JSObject::kHeaderSize; |
6374 static const int kSize = kSyncIteratorOffset + kPointerSize; | 6370 static const int kSize = kSyncIteratorOffset + kPointerSize; |
6375 | 6371 |
6376 private: | 6372 private: |
6377 DISALLOW_IMPLICIT_CONSTRUCTORS(JSAsyncFromSyncIterator); | 6373 DISALLOW_IMPLICIT_CONSTRUCTORS(JSAsyncFromSyncIterator); |
6378 }; | 6374 }; |
6379 | 6375 |
6380 class JSStringIterator : public JSObject { | 6376 class JSStringIterator : public JSObject { |
6381 public: | 6377 public: |
6382 // Dispatched behavior. | 6378 // Dispatched behavior. |
6383 DECLARE_PRINTER(JSStringIterator) | 6379 DECL_PRINTER(JSStringIterator) |
6384 DECLARE_VERIFIER(JSStringIterator) | 6380 DECL_VERIFIER(JSStringIterator) |
6385 | 6381 |
6386 DECLARE_CAST(JSStringIterator) | 6382 DECL_CAST(JSStringIterator) |
6387 | 6383 |
6388 // [string]: the [[IteratedString]] inobject property. | 6384 // [string]: the [[IteratedString]] inobject property. |
6389 DECL_ACCESSORS(string, String) | 6385 DECL_ACCESSORS(string, String) |
6390 | 6386 |
6391 // [index]: The [[StringIteratorNextIndex]] inobject property. | 6387 // [index]: The [[StringIteratorNextIndex]] inobject property. |
6392 inline int index() const; | 6388 inline int index() const; |
6393 inline void set_index(int value); | 6389 inline void set_index(int value); |
6394 | 6390 |
6395 static const int kStringOffset = JSObject::kHeaderSize; | 6391 static const int kStringOffset = JSObject::kHeaderSize; |
6396 static const int kNextIndexOffset = kStringOffset + kPointerSize; | 6392 static const int kNextIndexOffset = kStringOffset + kPointerSize; |
6397 static const int kSize = kNextIndexOffset + kPointerSize; | 6393 static const int kSize = kNextIndexOffset + kPointerSize; |
6398 | 6394 |
6399 private: | 6395 private: |
6400 DISALLOW_IMPLICIT_CONSTRUCTORS(JSStringIterator); | 6396 DISALLOW_IMPLICIT_CONSTRUCTORS(JSStringIterator); |
6401 }; | 6397 }; |
6402 | 6398 |
6403 // Base class for both JSWeakMap and JSWeakSet | 6399 // Base class for both JSWeakMap and JSWeakSet |
6404 class JSWeakCollection: public JSObject { | 6400 class JSWeakCollection: public JSObject { |
6405 public: | 6401 public: |
6406 DECLARE_CAST(JSWeakCollection) | 6402 DECL_CAST(JSWeakCollection) |
6407 | 6403 |
6408 // [table]: the backing hash table mapping keys to values. | 6404 // [table]: the backing hash table mapping keys to values. |
6409 DECL_ACCESSORS(table, Object) | 6405 DECL_ACCESSORS(table, Object) |
6410 | 6406 |
6411 // [next]: linked list of encountered weak maps during GC. | 6407 // [next]: linked list of encountered weak maps during GC. |
6412 DECL_ACCESSORS(next, Object) | 6408 DECL_ACCESSORS(next, Object) |
6413 | 6409 |
6414 static void Initialize(Handle<JSWeakCollection> collection, Isolate* isolate); | 6410 static void Initialize(Handle<JSWeakCollection> collection, Isolate* isolate); |
6415 static void Set(Handle<JSWeakCollection> collection, Handle<Object> key, | 6411 static void Set(Handle<JSWeakCollection> collection, Handle<Object> key, |
6416 Handle<Object> value, int32_t hash); | 6412 Handle<Object> value, int32_t hash); |
(...skipping 21 matching lines...) Expand all Loading... |
6438 typedef BodyDescriptorImpl<kRespectWeakness> BodyDescriptorWeak; | 6434 typedef BodyDescriptorImpl<kRespectWeakness> BodyDescriptorWeak; |
6439 | 6435 |
6440 private: | 6436 private: |
6441 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakCollection); | 6437 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakCollection); |
6442 }; | 6438 }; |
6443 | 6439 |
6444 | 6440 |
6445 // The JSWeakMap describes EcmaScript Harmony weak maps | 6441 // The JSWeakMap describes EcmaScript Harmony weak maps |
6446 class JSWeakMap: public JSWeakCollection { | 6442 class JSWeakMap: public JSWeakCollection { |
6447 public: | 6443 public: |
6448 DECLARE_CAST(JSWeakMap) | 6444 DECL_CAST(JSWeakMap) |
6449 | 6445 |
6450 // Dispatched behavior. | 6446 // Dispatched behavior. |
6451 DECLARE_PRINTER(JSWeakMap) | 6447 DECL_PRINTER(JSWeakMap) |
6452 DECLARE_VERIFIER(JSWeakMap) | 6448 DECL_VERIFIER(JSWeakMap) |
6453 | 6449 |
6454 private: | 6450 private: |
6455 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakMap); | 6451 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakMap); |
6456 }; | 6452 }; |
6457 | 6453 |
6458 | 6454 |
6459 // The JSWeakSet describes EcmaScript Harmony weak sets | 6455 // The JSWeakSet describes EcmaScript Harmony weak sets |
6460 class JSWeakSet: public JSWeakCollection { | 6456 class JSWeakSet: public JSWeakCollection { |
6461 public: | 6457 public: |
6462 DECLARE_CAST(JSWeakSet) | 6458 DECL_CAST(JSWeakSet) |
6463 | 6459 |
6464 // Dispatched behavior. | 6460 // Dispatched behavior. |
6465 DECLARE_PRINTER(JSWeakSet) | 6461 DECL_PRINTER(JSWeakSet) |
6466 DECLARE_VERIFIER(JSWeakSet) | 6462 DECL_VERIFIER(JSWeakSet) |
6467 | 6463 |
6468 private: | 6464 private: |
6469 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakSet); | 6465 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakSet); |
6470 }; | 6466 }; |
6471 | 6467 |
6472 | 6468 |
6473 // Whether a JSArrayBuffer is a SharedArrayBuffer or not. | 6469 // Whether a JSArrayBuffer is a SharedArrayBuffer or not. |
6474 enum class SharedFlag { kNotShared, kShared }; | 6470 enum class SharedFlag { kNotShared, kShared }; |
6475 | 6471 |
6476 | 6472 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6510 inline void set_is_shared(bool value); | 6506 inline void set_is_shared(bool value); |
6511 | 6507 |
6512 inline bool has_guard_region() const; | 6508 inline bool has_guard_region() const; |
6513 inline void set_has_guard_region(bool value); | 6509 inline void set_has_guard_region(bool value); |
6514 | 6510 |
6515 // TODO(gdeepti): This flag is introduced to disable asm.js optimizations in | 6511 // TODO(gdeepti): This flag is introduced to disable asm.js optimizations in |
6516 // js-typer-lowering.cc, remove when the asm.js case is fixed. | 6512 // js-typer-lowering.cc, remove when the asm.js case is fixed. |
6517 inline bool is_wasm_buffer(); | 6513 inline bool is_wasm_buffer(); |
6518 inline void set_is_wasm_buffer(bool value); | 6514 inline void set_is_wasm_buffer(bool value); |
6519 | 6515 |
6520 DECLARE_CAST(JSArrayBuffer) | 6516 DECL_CAST(JSArrayBuffer) |
6521 | 6517 |
6522 void Neuter(); | 6518 void Neuter(); |
6523 | 6519 |
6524 inline ArrayBuffer::Allocator::AllocationMode allocation_mode() const; | 6520 inline ArrayBuffer::Allocator::AllocationMode allocation_mode() const; |
6525 | 6521 |
6526 void FreeBackingStore(); | 6522 void FreeBackingStore(); |
6527 | 6523 |
6528 V8_EXPORT_PRIVATE static void Setup( | 6524 V8_EXPORT_PRIVATE static void Setup( |
6529 Handle<JSArrayBuffer> array_buffer, Isolate* isolate, bool is_external, | 6525 Handle<JSArrayBuffer> array_buffer, Isolate* isolate, bool is_external, |
6530 void* data, size_t allocated_length, | 6526 void* data, size_t allocated_length, |
6531 SharedFlag shared = SharedFlag::kNotShared); | 6527 SharedFlag shared = SharedFlag::kNotShared); |
6532 | 6528 |
6533 V8_EXPORT_PRIVATE static void Setup( | 6529 V8_EXPORT_PRIVATE static void Setup( |
6534 Handle<JSArrayBuffer> array_buffer, Isolate* isolate, bool is_external, | 6530 Handle<JSArrayBuffer> array_buffer, Isolate* isolate, bool is_external, |
6535 void* allocation_base, size_t allocation_length, void* data, | 6531 void* allocation_base, size_t allocation_length, void* data, |
6536 size_t byte_length, SharedFlag shared = SharedFlag::kNotShared); | 6532 size_t byte_length, SharedFlag shared = SharedFlag::kNotShared); |
6537 | 6533 |
6538 // Returns false if array buffer contents could not be allocated. | 6534 // Returns false if array buffer contents could not be allocated. |
6539 // In this case, |array_buffer| will not be set up. | 6535 // In this case, |array_buffer| will not be set up. |
6540 static bool SetupAllocatingData( | 6536 static bool SetupAllocatingData( |
6541 Handle<JSArrayBuffer> array_buffer, Isolate* isolate, | 6537 Handle<JSArrayBuffer> array_buffer, Isolate* isolate, |
6542 size_t allocated_length, bool initialize = true, | 6538 size_t allocated_length, bool initialize = true, |
6543 SharedFlag shared = SharedFlag::kNotShared) WARN_UNUSED_RESULT; | 6539 SharedFlag shared = SharedFlag::kNotShared) WARN_UNUSED_RESULT; |
6544 | 6540 |
6545 // Dispatched behavior. | 6541 // Dispatched behavior. |
6546 DECLARE_PRINTER(JSArrayBuffer) | 6542 DECL_PRINTER(JSArrayBuffer) |
6547 DECLARE_VERIFIER(JSArrayBuffer) | 6543 DECL_VERIFIER(JSArrayBuffer) |
6548 | 6544 |
6549 static const int kByteLengthOffset = JSObject::kHeaderSize; | 6545 static const int kByteLengthOffset = JSObject::kHeaderSize; |
6550 // The rest of the fields are not JSObjects, so they are not iterated over in | 6546 // The rest of the fields are not JSObjects, so they are not iterated over in |
6551 // objects-body-descriptors-inl.h. | 6547 // objects-body-descriptors-inl.h. |
6552 static const int kBackingStoreOffset = kByteLengthOffset + kPointerSize; | 6548 static const int kBackingStoreOffset = kByteLengthOffset + kPointerSize; |
6553 static const int kAllocationBaseOffset = kBackingStoreOffset + kPointerSize; | 6549 static const int kAllocationBaseOffset = kBackingStoreOffset + kPointerSize; |
6554 static const int kAllocationLengthOffset = | 6550 static const int kAllocationLengthOffset = |
6555 kAllocationBaseOffset + kPointerSize; | 6551 kAllocationBaseOffset + kPointerSize; |
6556 static const int kBitFieldSlot = kAllocationLengthOffset + kSizetSize; | 6552 static const int kBitFieldSlot = kAllocationLengthOffset + kSizetSize; |
6557 #if V8_TARGET_LITTLE_ENDIAN || !V8_HOST_ARCH_64_BIT | 6553 #if V8_TARGET_LITTLE_ENDIAN || !V8_HOST_ARCH_64_BIT |
(...skipping 28 matching lines...) Expand all Loading... |
6586 public: | 6582 public: |
6587 // [buffer]: ArrayBuffer that this typed array views. | 6583 // [buffer]: ArrayBuffer that this typed array views. |
6588 DECL_ACCESSORS(buffer, Object) | 6584 DECL_ACCESSORS(buffer, Object) |
6589 | 6585 |
6590 // [byte_offset]: offset of typed array in bytes. | 6586 // [byte_offset]: offset of typed array in bytes. |
6591 DECL_ACCESSORS(byte_offset, Object) | 6587 DECL_ACCESSORS(byte_offset, Object) |
6592 | 6588 |
6593 // [byte_length]: length of typed array in bytes. | 6589 // [byte_length]: length of typed array in bytes. |
6594 DECL_ACCESSORS(byte_length, Object) | 6590 DECL_ACCESSORS(byte_length, Object) |
6595 | 6591 |
6596 DECLARE_CAST(JSArrayBufferView) | 6592 DECL_CAST(JSArrayBufferView) |
6597 | 6593 |
6598 DECLARE_VERIFIER(JSArrayBufferView) | 6594 DECL_VERIFIER(JSArrayBufferView) |
6599 | 6595 |
6600 inline bool WasNeutered() const; | 6596 inline bool WasNeutered() const; |
6601 | 6597 |
6602 static const int kBufferOffset = JSObject::kHeaderSize; | 6598 static const int kBufferOffset = JSObject::kHeaderSize; |
6603 static const int kByteOffsetOffset = kBufferOffset + kPointerSize; | 6599 static const int kByteOffsetOffset = kBufferOffset + kPointerSize; |
6604 static const int kByteLengthOffset = kByteOffsetOffset + kPointerSize; | 6600 static const int kByteLengthOffset = kByteOffsetOffset + kPointerSize; |
6605 static const int kViewSize = kByteLengthOffset + kPointerSize; | 6601 static const int kViewSize = kByteLengthOffset + kPointerSize; |
6606 | 6602 |
6607 private: | 6603 private: |
6608 #ifdef VERIFY_HEAP | 6604 #ifdef VERIFY_HEAP |
6609 DECL_ACCESSORS(raw_byte_offset, Object) | 6605 DECL_ACCESSORS(raw_byte_offset, Object) |
6610 DECL_ACCESSORS(raw_byte_length, Object) | 6606 DECL_ACCESSORS(raw_byte_length, Object) |
6611 #endif | 6607 #endif |
6612 | 6608 |
6613 DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayBufferView); | 6609 DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayBufferView); |
6614 }; | 6610 }; |
6615 | 6611 |
6616 | 6612 |
6617 class JSTypedArray: public JSArrayBufferView { | 6613 class JSTypedArray: public JSArrayBufferView { |
6618 public: | 6614 public: |
6619 // [length]: length of typed array in elements. | 6615 // [length]: length of typed array in elements. |
6620 DECL_ACCESSORS(length, Object) | 6616 DECL_ACCESSORS(length, Object) |
6621 inline uint32_t length_value() const; | 6617 inline uint32_t length_value() const; |
6622 | 6618 |
6623 // ES6 9.4.5.3 | 6619 // ES6 9.4.5.3 |
6624 MUST_USE_RESULT static Maybe<bool> DefineOwnProperty( | 6620 MUST_USE_RESULT static Maybe<bool> DefineOwnProperty( |
6625 Isolate* isolate, Handle<JSTypedArray> o, Handle<Object> key, | 6621 Isolate* isolate, Handle<JSTypedArray> o, Handle<Object> key, |
6626 PropertyDescriptor* desc, ShouldThrow should_throw); | 6622 PropertyDescriptor* desc, ShouldThrow should_throw); |
6627 | 6623 |
6628 DECLARE_CAST(JSTypedArray) | 6624 DECL_CAST(JSTypedArray) |
6629 | 6625 |
6630 ExternalArrayType type(); | 6626 ExternalArrayType type(); |
6631 V8_EXPORT_PRIVATE size_t element_size(); | 6627 V8_EXPORT_PRIVATE size_t element_size(); |
6632 | 6628 |
6633 Handle<JSArrayBuffer> GetBuffer(); | 6629 Handle<JSArrayBuffer> GetBuffer(); |
6634 | 6630 |
6635 static inline MaybeHandle<JSTypedArray> Validate(Isolate* isolate, | 6631 static inline MaybeHandle<JSTypedArray> Validate(Isolate* isolate, |
6636 Handle<Object> receiver, | 6632 Handle<Object> receiver, |
6637 const char* method_name); | 6633 const char* method_name); |
6638 // ES7 section 22.2.4.6 Create ( constructor, argumentList ) | 6634 // ES7 section 22.2.4.6 Create ( constructor, argumentList ) |
6639 static MaybeHandle<JSTypedArray> Create(Isolate* isolate, | 6635 static MaybeHandle<JSTypedArray> Create(Isolate* isolate, |
6640 Handle<Object> default_ctor, int argc, | 6636 Handle<Object> default_ctor, int argc, |
6641 Handle<Object>* argv, | 6637 Handle<Object>* argv, |
6642 const char* method_name); | 6638 const char* method_name); |
6643 // ES7 section 22.2.4.7 TypedArraySpeciesCreate ( exemplar, argumentList ) | 6639 // ES7 section 22.2.4.7 TypedArraySpeciesCreate ( exemplar, argumentList ) |
6644 static MaybeHandle<JSTypedArray> SpeciesCreate(Isolate* isolate, | 6640 static MaybeHandle<JSTypedArray> SpeciesCreate(Isolate* isolate, |
6645 Handle<JSTypedArray> exemplar, | 6641 Handle<JSTypedArray> exemplar, |
6646 int argc, Handle<Object>* argv, | 6642 int argc, Handle<Object>* argv, |
6647 const char* method_name); | 6643 const char* method_name); |
6648 | 6644 |
6649 // Dispatched behavior. | 6645 // Dispatched behavior. |
6650 DECLARE_PRINTER(JSTypedArray) | 6646 DECL_PRINTER(JSTypedArray) |
6651 DECLARE_VERIFIER(JSTypedArray) | 6647 DECL_VERIFIER(JSTypedArray) |
6652 | 6648 |
6653 static const int kLengthOffset = kViewSize + kPointerSize; | 6649 static const int kLengthOffset = kViewSize + kPointerSize; |
6654 static const int kSize = kLengthOffset + kPointerSize; | 6650 static const int kSize = kLengthOffset + kPointerSize; |
6655 | 6651 |
6656 static const int kSizeWithEmbedderFields = | 6652 static const int kSizeWithEmbedderFields = |
6657 kSize + v8::ArrayBufferView::kEmbedderFieldCount * kPointerSize; | 6653 kSize + v8::ArrayBufferView::kEmbedderFieldCount * kPointerSize; |
6658 | 6654 |
6659 private: | 6655 private: |
6660 static Handle<JSArrayBuffer> MaterializeArrayBuffer( | 6656 static Handle<JSArrayBuffer> MaterializeArrayBuffer( |
6661 Handle<JSTypedArray> typed_array); | 6657 Handle<JSTypedArray> typed_array); |
6662 #ifdef VERIFY_HEAP | 6658 #ifdef VERIFY_HEAP |
6663 DECL_ACCESSORS(raw_length, Object) | 6659 DECL_ACCESSORS(raw_length, Object) |
6664 #endif | 6660 #endif |
6665 | 6661 |
6666 DISALLOW_IMPLICIT_CONSTRUCTORS(JSTypedArray); | 6662 DISALLOW_IMPLICIT_CONSTRUCTORS(JSTypedArray); |
6667 }; | 6663 }; |
6668 | 6664 |
6669 | 6665 |
6670 class JSDataView: public JSArrayBufferView { | 6666 class JSDataView: public JSArrayBufferView { |
6671 public: | 6667 public: |
6672 DECLARE_CAST(JSDataView) | 6668 DECL_CAST(JSDataView) |
6673 | 6669 |
6674 // Dispatched behavior. | 6670 // Dispatched behavior. |
6675 DECLARE_PRINTER(JSDataView) | 6671 DECL_PRINTER(JSDataView) |
6676 DECLARE_VERIFIER(JSDataView) | 6672 DECL_VERIFIER(JSDataView) |
6677 | 6673 |
6678 static const int kSize = kViewSize; | 6674 static const int kSize = kViewSize; |
6679 | 6675 |
6680 static const int kSizeWithEmbedderFields = | 6676 static const int kSizeWithEmbedderFields = |
6681 kSize + v8::ArrayBufferView::kEmbedderFieldCount * kPointerSize; | 6677 kSize + v8::ArrayBufferView::kEmbedderFieldCount * kPointerSize; |
6682 | 6678 |
6683 private: | 6679 private: |
6684 DISALLOW_IMPLICIT_CONSTRUCTORS(JSDataView); | 6680 DISALLOW_IMPLICIT_CONSTRUCTORS(JSDataView); |
6685 }; | 6681 }; |
6686 | 6682 |
6687 | 6683 |
6688 // Foreign describes objects pointing from JavaScript to C structures. | 6684 // Foreign describes objects pointing from JavaScript to C structures. |
6689 class Foreign: public HeapObject { | 6685 class Foreign: public HeapObject { |
6690 public: | 6686 public: |
6691 // [address]: field containing the address. | 6687 // [address]: field containing the address. |
6692 inline Address foreign_address(); | 6688 inline Address foreign_address(); |
6693 inline void set_foreign_address(Address value); | 6689 inline void set_foreign_address(Address value); |
6694 | 6690 |
6695 DECLARE_CAST(Foreign) | 6691 DECL_CAST(Foreign) |
6696 | 6692 |
6697 // Dispatched behavior. | 6693 // Dispatched behavior. |
6698 DECLARE_PRINTER(Foreign) | 6694 DECL_PRINTER(Foreign) |
6699 DECLARE_VERIFIER(Foreign) | 6695 DECL_VERIFIER(Foreign) |
6700 | 6696 |
6701 // Layout description. | 6697 // Layout description. |
6702 | 6698 |
6703 static const int kForeignAddressOffset = HeapObject::kHeaderSize; | 6699 static const int kForeignAddressOffset = HeapObject::kHeaderSize; |
6704 static const int kSize = kForeignAddressOffset + kPointerSize; | 6700 static const int kSize = kForeignAddressOffset + kPointerSize; |
6705 | 6701 |
6706 STATIC_ASSERT(kForeignAddressOffset == Internals::kForeignAddressOffset); | 6702 STATIC_ASSERT(kForeignAddressOffset == Internals::kForeignAddressOffset); |
6707 | 6703 |
6708 class BodyDescriptor; | 6704 class BodyDescriptor; |
6709 // No weak fields. | 6705 // No weak fields. |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6762 Handle<JSArray> a, | 6758 Handle<JSArray> a, |
6763 PropertyDescriptor* desc, | 6759 PropertyDescriptor* desc, |
6764 ShouldThrow should_throw); | 6760 ShouldThrow should_throw); |
6765 | 6761 |
6766 // Checks whether the Array has the current realm's Array.prototype as its | 6762 // Checks whether the Array has the current realm's Array.prototype as its |
6767 // prototype. This function is best-effort and only gives a conservative | 6763 // prototype. This function is best-effort and only gives a conservative |
6768 // approximation, erring on the side of false, in particular with respect | 6764 // approximation, erring on the side of false, in particular with respect |
6769 // to Proxies and objects with a hidden prototype. | 6765 // to Proxies and objects with a hidden prototype. |
6770 inline bool HasArrayPrototype(Isolate* isolate); | 6766 inline bool HasArrayPrototype(Isolate* isolate); |
6771 | 6767 |
6772 DECLARE_CAST(JSArray) | 6768 DECL_CAST(JSArray) |
6773 | 6769 |
6774 // Dispatched behavior. | 6770 // Dispatched behavior. |
6775 DECLARE_PRINTER(JSArray) | 6771 DECL_PRINTER(JSArray) |
6776 DECLARE_VERIFIER(JSArray) | 6772 DECL_VERIFIER(JSArray) |
6777 | 6773 |
6778 // Number of element slots to pre-allocate for an empty array. | 6774 // Number of element slots to pre-allocate for an empty array. |
6779 static const int kPreallocatedArrayElements = 4; | 6775 static const int kPreallocatedArrayElements = 4; |
6780 | 6776 |
6781 // Layout description. | 6777 // Layout description. |
6782 static const int kLengthOffset = JSObject::kHeaderSize; | 6778 static const int kLengthOffset = JSObject::kHeaderSize; |
6783 static const int kSize = kLengthOffset + kPointerSize; | 6779 static const int kSize = kLengthOffset + kPointerSize; |
6784 | 6780 |
6785 // Max. number of elements being copied in Array builtins. | 6781 // Max. number of elements being copied in Array builtins. |
6786 static const int kMaxCopyElements = 100; | 6782 static const int kMaxCopyElements = 100; |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6839 // This either points at the same as above, or a trampoline in case we are | 6835 // This either points at the same as above, or a trampoline in case we are |
6840 // running with the simulator. Use these entries from generated code. | 6836 // running with the simulator. Use these entries from generated code. |
6841 DECL_ACCESSORS(js_getter, Object) | 6837 DECL_ACCESSORS(js_getter, Object) |
6842 DECL_ACCESSORS(data, Object) | 6838 DECL_ACCESSORS(data, Object) |
6843 | 6839 |
6844 static Address redirect(Isolate* isolate, Address address, | 6840 static Address redirect(Isolate* isolate, Address address, |
6845 AccessorComponent component); | 6841 AccessorComponent component); |
6846 Address redirected_getter() const; | 6842 Address redirected_getter() const; |
6847 | 6843 |
6848 // Dispatched behavior. | 6844 // Dispatched behavior. |
6849 DECLARE_PRINTER(AccessorInfo) | 6845 DECL_PRINTER(AccessorInfo) |
6850 | 6846 |
6851 inline bool all_can_read(); | 6847 inline bool all_can_read(); |
6852 inline void set_all_can_read(bool value); | 6848 inline void set_all_can_read(bool value); |
6853 | 6849 |
6854 inline bool all_can_write(); | 6850 inline bool all_can_write(); |
6855 inline void set_all_can_write(bool value); | 6851 inline void set_all_can_write(bool value); |
6856 | 6852 |
6857 inline bool is_special_data_property(); | 6853 inline bool is_special_data_property(); |
6858 inline void set_is_special_data_property(bool value); | 6854 inline void set_is_special_data_property(bool value); |
6859 | 6855 |
6860 inline bool replace_on_access(); | 6856 inline bool replace_on_access(); |
6861 inline void set_replace_on_access(bool value); | 6857 inline void set_replace_on_access(bool value); |
6862 | 6858 |
6863 inline bool is_sloppy(); | 6859 inline bool is_sloppy(); |
6864 inline void set_is_sloppy(bool value); | 6860 inline void set_is_sloppy(bool value); |
6865 | 6861 |
6866 inline PropertyAttributes property_attributes(); | 6862 inline PropertyAttributes property_attributes(); |
6867 inline void set_property_attributes(PropertyAttributes attributes); | 6863 inline void set_property_attributes(PropertyAttributes attributes); |
6868 | 6864 |
6869 // Checks whether the given receiver is compatible with this accessor. | 6865 // Checks whether the given receiver is compatible with this accessor. |
6870 static bool IsCompatibleReceiverMap(Isolate* isolate, | 6866 static bool IsCompatibleReceiverMap(Isolate* isolate, |
6871 Handle<AccessorInfo> info, | 6867 Handle<AccessorInfo> info, |
6872 Handle<Map> map); | 6868 Handle<Map> map); |
6873 inline bool IsCompatibleReceiver(Object* receiver); | 6869 inline bool IsCompatibleReceiver(Object* receiver); |
6874 | 6870 |
6875 DECLARE_CAST(AccessorInfo) | 6871 DECL_CAST(AccessorInfo) |
6876 | 6872 |
6877 // Dispatched behavior. | 6873 // Dispatched behavior. |
6878 DECLARE_VERIFIER(AccessorInfo) | 6874 DECL_VERIFIER(AccessorInfo) |
6879 | 6875 |
6880 // Append all descriptors to the array that are not already there. | 6876 // Append all descriptors to the array that are not already there. |
6881 // Return number added. | 6877 // Return number added. |
6882 static int AppendUnique(Handle<Object> descriptors, | 6878 static int AppendUnique(Handle<Object> descriptors, |
6883 Handle<FixedArray> array, | 6879 Handle<FixedArray> array, |
6884 int valid_descriptors); | 6880 int valid_descriptors); |
6885 | 6881 |
6886 static const int kNameOffset = HeapObject::kHeaderSize; | 6882 static const int kNameOffset = HeapObject::kHeaderSize; |
6887 static const int kFlagOffset = kNameOffset + kPointerSize; | 6883 static const int kFlagOffset = kNameOffset + kPointerSize; |
6888 static const int kExpectedReceiverTypeOffset = kFlagOffset + kPointerSize; | 6884 static const int kExpectedReceiverTypeOffset = kFlagOffset + kPointerSize; |
(...skipping 23 matching lines...) Expand all Loading... |
6912 // accessor can either be | 6908 // accessor can either be |
6913 // * a pointer to a JavaScript function or proxy: a real accessor | 6909 // * a pointer to a JavaScript function or proxy: a real accessor |
6914 // * undefined: considered an accessor by the spec, too, strangely enough | 6910 // * undefined: considered an accessor by the spec, too, strangely enough |
6915 // * the hole: an accessor which has not been set | 6911 // * the hole: an accessor which has not been set |
6916 // * a pointer to a map: a transition used to ensure map sharing | 6912 // * a pointer to a map: a transition used to ensure map sharing |
6917 class AccessorPair: public Struct { | 6913 class AccessorPair: public Struct { |
6918 public: | 6914 public: |
6919 DECL_ACCESSORS(getter, Object) | 6915 DECL_ACCESSORS(getter, Object) |
6920 DECL_ACCESSORS(setter, Object) | 6916 DECL_ACCESSORS(setter, Object) |
6921 | 6917 |
6922 DECLARE_CAST(AccessorPair) | 6918 DECL_CAST(AccessorPair) |
6923 | 6919 |
6924 static Handle<AccessorPair> Copy(Handle<AccessorPair> pair); | 6920 static Handle<AccessorPair> Copy(Handle<AccessorPair> pair); |
6925 | 6921 |
6926 inline Object* get(AccessorComponent component); | 6922 inline Object* get(AccessorComponent component); |
6927 inline void set(AccessorComponent component, Object* value); | 6923 inline void set(AccessorComponent component, Object* value); |
6928 | 6924 |
6929 // Note: Returns undefined instead in case of a hole. | 6925 // Note: Returns undefined instead in case of a hole. |
6930 static Handle<Object> GetComponent(Handle<AccessorPair> accessor_pair, | 6926 static Handle<Object> GetComponent(Handle<AccessorPair> accessor_pair, |
6931 AccessorComponent component); | 6927 AccessorComponent component); |
6932 | 6928 |
6933 // Set both components, skipping arguments which are a JavaScript null. | 6929 // Set both components, skipping arguments which are a JavaScript null. |
6934 inline void SetComponents(Object* getter, Object* setter); | 6930 inline void SetComponents(Object* getter, Object* setter); |
6935 | 6931 |
6936 inline bool Equals(AccessorPair* pair); | 6932 inline bool Equals(AccessorPair* pair); |
6937 inline bool Equals(Object* getter_value, Object* setter_value); | 6933 inline bool Equals(Object* getter_value, Object* setter_value); |
6938 | 6934 |
6939 inline bool ContainsAccessor(); | 6935 inline bool ContainsAccessor(); |
6940 | 6936 |
6941 // Dispatched behavior. | 6937 // Dispatched behavior. |
6942 DECLARE_PRINTER(AccessorPair) | 6938 DECL_PRINTER(AccessorPair) |
6943 DECLARE_VERIFIER(AccessorPair) | 6939 DECL_VERIFIER(AccessorPair) |
6944 | 6940 |
6945 static const int kGetterOffset = HeapObject::kHeaderSize; | 6941 static const int kGetterOffset = HeapObject::kHeaderSize; |
6946 static const int kSetterOffset = kGetterOffset + kPointerSize; | 6942 static const int kSetterOffset = kGetterOffset + kPointerSize; |
6947 static const int kSize = kSetterOffset + kPointerSize; | 6943 static const int kSize = kSetterOffset + kPointerSize; |
6948 | 6944 |
6949 private: | 6945 private: |
6950 // Strangely enough, in addition to functions and harmony proxies, the spec | 6946 // Strangely enough, in addition to functions and harmony proxies, the spec |
6951 // requires us to consider undefined as a kind of accessor, too: | 6947 // requires us to consider undefined as a kind of accessor, too: |
6952 // var obj = {}; | 6948 // var obj = {}; |
6953 // Object.defineProperty(obj, "foo", {get: undefined}); | 6949 // Object.defineProperty(obj, "foo", {get: undefined}); |
6954 // assertTrue("foo" in obj); | 6950 // assertTrue("foo" in obj); |
6955 inline bool IsJSAccessor(Object* obj); | 6951 inline bool IsJSAccessor(Object* obj); |
6956 | 6952 |
6957 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessorPair); | 6953 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessorPair); |
6958 }; | 6954 }; |
6959 | 6955 |
6960 | 6956 |
6961 class AccessCheckInfo: public Struct { | 6957 class AccessCheckInfo: public Struct { |
6962 public: | 6958 public: |
6963 DECL_ACCESSORS(callback, Object) | 6959 DECL_ACCESSORS(callback, Object) |
6964 DECL_ACCESSORS(named_interceptor, Object) | 6960 DECL_ACCESSORS(named_interceptor, Object) |
6965 DECL_ACCESSORS(indexed_interceptor, Object) | 6961 DECL_ACCESSORS(indexed_interceptor, Object) |
6966 DECL_ACCESSORS(data, Object) | 6962 DECL_ACCESSORS(data, Object) |
6967 | 6963 |
6968 DECLARE_CAST(AccessCheckInfo) | 6964 DECL_CAST(AccessCheckInfo) |
6969 | 6965 |
6970 // Dispatched behavior. | 6966 // Dispatched behavior. |
6971 DECLARE_PRINTER(AccessCheckInfo) | 6967 DECL_PRINTER(AccessCheckInfo) |
6972 DECLARE_VERIFIER(AccessCheckInfo) | 6968 DECL_VERIFIER(AccessCheckInfo) |
6973 | 6969 |
6974 static AccessCheckInfo* Get(Isolate* isolate, Handle<JSObject> receiver); | 6970 static AccessCheckInfo* Get(Isolate* isolate, Handle<JSObject> receiver); |
6975 | 6971 |
6976 static const int kCallbackOffset = HeapObject::kHeaderSize; | 6972 static const int kCallbackOffset = HeapObject::kHeaderSize; |
6977 static const int kNamedInterceptorOffset = kCallbackOffset + kPointerSize; | 6973 static const int kNamedInterceptorOffset = kCallbackOffset + kPointerSize; |
6978 static const int kIndexedInterceptorOffset = | 6974 static const int kIndexedInterceptorOffset = |
6979 kNamedInterceptorOffset + kPointerSize; | 6975 kNamedInterceptorOffset + kPointerSize; |
6980 static const int kDataOffset = kIndexedInterceptorOffset + kPointerSize; | 6976 static const int kDataOffset = kIndexedInterceptorOffset + kPointerSize; |
6981 static const int kSize = kDataOffset + kPointerSize; | 6977 static const int kSize = kDataOffset + kPointerSize; |
6982 | 6978 |
(...skipping 12 matching lines...) Expand all Loading... |
6995 DECL_ACCESSORS(enumerator, Object) | 6991 DECL_ACCESSORS(enumerator, Object) |
6996 DECL_ACCESSORS(definer, Object) | 6992 DECL_ACCESSORS(definer, Object) |
6997 DECL_ACCESSORS(data, Object) | 6993 DECL_ACCESSORS(data, Object) |
6998 DECL_BOOLEAN_ACCESSORS(can_intercept_symbols) | 6994 DECL_BOOLEAN_ACCESSORS(can_intercept_symbols) |
6999 DECL_BOOLEAN_ACCESSORS(all_can_read) | 6995 DECL_BOOLEAN_ACCESSORS(all_can_read) |
7000 DECL_BOOLEAN_ACCESSORS(non_masking) | 6996 DECL_BOOLEAN_ACCESSORS(non_masking) |
7001 | 6997 |
7002 inline int flags() const; | 6998 inline int flags() const; |
7003 inline void set_flags(int flags); | 6999 inline void set_flags(int flags); |
7004 | 7000 |
7005 DECLARE_CAST(InterceptorInfo) | 7001 DECL_CAST(InterceptorInfo) |
7006 | 7002 |
7007 // Dispatched behavior. | 7003 // Dispatched behavior. |
7008 DECLARE_PRINTER(InterceptorInfo) | 7004 DECL_PRINTER(InterceptorInfo) |
7009 DECLARE_VERIFIER(InterceptorInfo) | 7005 DECL_VERIFIER(InterceptorInfo) |
7010 | 7006 |
7011 static const int kGetterOffset = HeapObject::kHeaderSize; | 7007 static const int kGetterOffset = HeapObject::kHeaderSize; |
7012 static const int kSetterOffset = kGetterOffset + kPointerSize; | 7008 static const int kSetterOffset = kGetterOffset + kPointerSize; |
7013 static const int kQueryOffset = kSetterOffset + kPointerSize; | 7009 static const int kQueryOffset = kSetterOffset + kPointerSize; |
7014 static const int kDescriptorOffset = kQueryOffset + kPointerSize; | 7010 static const int kDescriptorOffset = kQueryOffset + kPointerSize; |
7015 static const int kDeleterOffset = kDescriptorOffset + kPointerSize; | 7011 static const int kDeleterOffset = kDescriptorOffset + kPointerSize; |
7016 static const int kEnumeratorOffset = kDeleterOffset + kPointerSize; | 7012 static const int kEnumeratorOffset = kDeleterOffset + kPointerSize; |
7017 static const int kDefinerOffset = kEnumeratorOffset + kPointerSize; | 7013 static const int kDefinerOffset = kEnumeratorOffset + kPointerSize; |
7018 static const int kDataOffset = kDefinerOffset + kPointerSize; | 7014 static const int kDataOffset = kDefinerOffset + kPointerSize; |
7019 static const int kFlagsOffset = kDataOffset + kPointerSize; | 7015 static const int kFlagsOffset = kDataOffset + kPointerSize; |
7020 static const int kSize = kFlagsOffset + kPointerSize; | 7016 static const int kSize = kFlagsOffset + kPointerSize; |
7021 | 7017 |
7022 static const int kCanInterceptSymbolsBit = 0; | 7018 static const int kCanInterceptSymbolsBit = 0; |
7023 static const int kAllCanReadBit = 1; | 7019 static const int kAllCanReadBit = 1; |
7024 static const int kNonMasking = 2; | 7020 static const int kNonMasking = 2; |
7025 | 7021 |
7026 private: | 7022 private: |
7027 DISALLOW_IMPLICIT_CONSTRUCTORS(InterceptorInfo); | 7023 DISALLOW_IMPLICIT_CONSTRUCTORS(InterceptorInfo); |
7028 }; | 7024 }; |
7029 | 7025 |
7030 class CallHandlerInfo : public Tuple2 { | 7026 class CallHandlerInfo : public Tuple2 { |
7031 public: | 7027 public: |
7032 DECL_ACCESSORS(callback, Object) | 7028 DECL_ACCESSORS(callback, Object) |
7033 DECL_ACCESSORS(data, Object) | 7029 DECL_ACCESSORS(data, Object) |
7034 | 7030 |
7035 DECLARE_CAST(CallHandlerInfo) | 7031 DECL_CAST(CallHandlerInfo) |
7036 | 7032 |
7037 static const int kCallbackOffset = kValue1Offset; | 7033 static const int kCallbackOffset = kValue1Offset; |
7038 static const int kDataOffset = kValue2Offset; | 7034 static const int kDataOffset = kValue2Offset; |
7039 | 7035 |
7040 private: | 7036 private: |
7041 DISALLOW_IMPLICIT_CONSTRUCTORS(CallHandlerInfo); | 7037 DISALLOW_IMPLICIT_CONSTRUCTORS(CallHandlerInfo); |
7042 }; | 7038 }; |
7043 | 7039 |
7044 | 7040 |
7045 class TemplateInfo: public Struct { | 7041 class TemplateInfo: public Struct { |
7046 public: | 7042 public: |
7047 DECL_ACCESSORS(tag, Object) | 7043 DECL_ACCESSORS(tag, Object) |
7048 DECL_ACCESSORS(serial_number, Object) | 7044 DECL_ACCESSORS(serial_number, Object) |
7049 DECL_INT_ACCESSORS(number_of_properties) | 7045 DECL_INT_ACCESSORS(number_of_properties) |
7050 DECL_ACCESSORS(property_list, Object) | 7046 DECL_ACCESSORS(property_list, Object) |
7051 DECL_ACCESSORS(property_accessors, Object) | 7047 DECL_ACCESSORS(property_accessors, Object) |
7052 | 7048 |
7053 DECLARE_VERIFIER(TemplateInfo) | 7049 DECL_VERIFIER(TemplateInfo) |
7054 | 7050 |
7055 DECLARE_CAST(TemplateInfo) | 7051 DECL_CAST(TemplateInfo) |
7056 | 7052 |
7057 static const int kTagOffset = HeapObject::kHeaderSize; | 7053 static const int kTagOffset = HeapObject::kHeaderSize; |
7058 static const int kSerialNumberOffset = kTagOffset + kPointerSize; | 7054 static const int kSerialNumberOffset = kTagOffset + kPointerSize; |
7059 static const int kNumberOfProperties = kSerialNumberOffset + kPointerSize; | 7055 static const int kNumberOfProperties = kSerialNumberOffset + kPointerSize; |
7060 static const int kPropertyListOffset = kNumberOfProperties + kPointerSize; | 7056 static const int kPropertyListOffset = kNumberOfProperties + kPointerSize; |
7061 static const int kPropertyAccessorsOffset = | 7057 static const int kPropertyAccessorsOffset = |
7062 kPropertyListOffset + kPointerSize; | 7058 kPropertyListOffset + kPointerSize; |
7063 static const int kHeaderSize = kPropertyAccessorsOffset + kPointerSize; | 7059 static const int kHeaderSize = kPropertyAccessorsOffset + kPointerSize; |
7064 | 7060 |
7065 static const int kFastTemplateInstantiationsCacheSize = 1 * KB; | 7061 static const int kFastTemplateInstantiationsCacheSize = 1 * KB; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7100 // If the bit is set, object instances created by this function | 7096 // If the bit is set, object instances created by this function |
7101 // requires access check. | 7097 // requires access check. |
7102 DECL_BOOLEAN_ACCESSORS(needs_access_check) | 7098 DECL_BOOLEAN_ACCESSORS(needs_access_check) |
7103 DECL_BOOLEAN_ACCESSORS(read_only_prototype) | 7099 DECL_BOOLEAN_ACCESSORS(read_only_prototype) |
7104 DECL_BOOLEAN_ACCESSORS(remove_prototype) | 7100 DECL_BOOLEAN_ACCESSORS(remove_prototype) |
7105 DECL_BOOLEAN_ACCESSORS(do_not_cache) | 7101 DECL_BOOLEAN_ACCESSORS(do_not_cache) |
7106 DECL_BOOLEAN_ACCESSORS(accept_any_receiver) | 7102 DECL_BOOLEAN_ACCESSORS(accept_any_receiver) |
7107 | 7103 |
7108 DECL_ACCESSORS(cached_property_name, Object) | 7104 DECL_ACCESSORS(cached_property_name, Object) |
7109 | 7105 |
7110 DECLARE_CAST(FunctionTemplateInfo) | 7106 DECL_CAST(FunctionTemplateInfo) |
7111 | 7107 |
7112 // Dispatched behavior. | 7108 // Dispatched behavior. |
7113 DECLARE_PRINTER(FunctionTemplateInfo) | 7109 DECL_PRINTER(FunctionTemplateInfo) |
7114 DECLARE_VERIFIER(FunctionTemplateInfo) | 7110 DECL_VERIFIER(FunctionTemplateInfo) |
7115 | 7111 |
7116 static const int kInvalidSerialNumber = 0; | 7112 static const int kInvalidSerialNumber = 0; |
7117 | 7113 |
7118 static const int kCallCodeOffset = TemplateInfo::kHeaderSize; | 7114 static const int kCallCodeOffset = TemplateInfo::kHeaderSize; |
7119 static const int kPrototypeTemplateOffset = | 7115 static const int kPrototypeTemplateOffset = |
7120 kCallCodeOffset + kPointerSize; | 7116 kCallCodeOffset + kPointerSize; |
7121 static const int kPrototypeProviderTemplateOffset = | 7117 static const int kPrototypeProviderTemplateOffset = |
7122 kPrototypeTemplateOffset + kPointerSize; | 7118 kPrototypeTemplateOffset + kPointerSize; |
7123 static const int kParentTemplateOffset = | 7119 static const int kParentTemplateOffset = |
7124 kPrototypeProviderTemplateOffset + kPointerSize; | 7120 kPrototypeProviderTemplateOffset + kPointerSize; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7167 }; | 7163 }; |
7168 | 7164 |
7169 | 7165 |
7170 class ObjectTemplateInfo: public TemplateInfo { | 7166 class ObjectTemplateInfo: public TemplateInfo { |
7171 public: | 7167 public: |
7172 DECL_ACCESSORS(constructor, Object) | 7168 DECL_ACCESSORS(constructor, Object) |
7173 DECL_ACCESSORS(data, Object) | 7169 DECL_ACCESSORS(data, Object) |
7174 DECL_INT_ACCESSORS(embedder_field_count) | 7170 DECL_INT_ACCESSORS(embedder_field_count) |
7175 DECL_BOOLEAN_ACCESSORS(immutable_proto) | 7171 DECL_BOOLEAN_ACCESSORS(immutable_proto) |
7176 | 7172 |
7177 DECLARE_CAST(ObjectTemplateInfo) | 7173 DECL_CAST(ObjectTemplateInfo) |
7178 | 7174 |
7179 // Dispatched behavior. | 7175 // Dispatched behavior. |
7180 DECLARE_PRINTER(ObjectTemplateInfo) | 7176 DECL_PRINTER(ObjectTemplateInfo) |
7181 DECLARE_VERIFIER(ObjectTemplateInfo) | 7177 DECL_VERIFIER(ObjectTemplateInfo) |
7182 | 7178 |
7183 static const int kConstructorOffset = TemplateInfo::kHeaderSize; | 7179 static const int kConstructorOffset = TemplateInfo::kHeaderSize; |
7184 // LSB is for immutable_proto, higher bits for embedder_field_count | 7180 // LSB is for immutable_proto, higher bits for embedder_field_count |
7185 static const int kDataOffset = kConstructorOffset + kPointerSize; | 7181 static const int kDataOffset = kConstructorOffset + kPointerSize; |
7186 static const int kSize = kDataOffset + kPointerSize; | 7182 static const int kSize = kDataOffset + kPointerSize; |
7187 | 7183 |
7188 // Starting from given object template's constructor walk up the inheritance | 7184 // Starting from given object template's constructor walk up the inheritance |
7189 // chain till a function template that has an instance template is found. | 7185 // chain till a function template that has an instance template is found. |
7190 inline ObjectTemplateInfo* GetParent(Isolate* isolate); | 7186 inline ObjectTemplateInfo* GetParent(Isolate* isolate); |
7191 | 7187 |
(...skipping 10 matching lines...) Expand all Loading... |
7202 DECL_INT_ACCESSORS(script_id) | 7198 DECL_INT_ACCESSORS(script_id) |
7203 DECL_ACCESSORS(script_name, Object) | 7199 DECL_ACCESSORS(script_name, Object) |
7204 DECL_ACCESSORS(script_name_or_source_url, Object) | 7200 DECL_ACCESSORS(script_name_or_source_url, Object) |
7205 DECL_ACCESSORS(function_name, Object) | 7201 DECL_ACCESSORS(function_name, Object) |
7206 DECL_BOOLEAN_ACCESSORS(is_eval) | 7202 DECL_BOOLEAN_ACCESSORS(is_eval) |
7207 DECL_BOOLEAN_ACCESSORS(is_constructor) | 7203 DECL_BOOLEAN_ACCESSORS(is_constructor) |
7208 DECL_BOOLEAN_ACCESSORS(is_wasm) | 7204 DECL_BOOLEAN_ACCESSORS(is_wasm) |
7209 DECL_INT_ACCESSORS(flag) | 7205 DECL_INT_ACCESSORS(flag) |
7210 DECL_INT_ACCESSORS(id) | 7206 DECL_INT_ACCESSORS(id) |
7211 | 7207 |
7212 DECLARE_CAST(StackFrameInfo) | 7208 DECL_CAST(StackFrameInfo) |
7213 | 7209 |
7214 // Dispatched behavior. | 7210 // Dispatched behavior. |
7215 DECLARE_PRINTER(StackFrameInfo) | 7211 DECL_PRINTER(StackFrameInfo) |
7216 DECLARE_VERIFIER(StackFrameInfo) | 7212 DECL_VERIFIER(StackFrameInfo) |
7217 | 7213 |
7218 static const int kLineNumberIndex = Struct::kHeaderSize; | 7214 static const int kLineNumberIndex = Struct::kHeaderSize; |
7219 static const int kColumnNumberIndex = kLineNumberIndex + kPointerSize; | 7215 static const int kColumnNumberIndex = kLineNumberIndex + kPointerSize; |
7220 static const int kScriptIdIndex = kColumnNumberIndex + kPointerSize; | 7216 static const int kScriptIdIndex = kColumnNumberIndex + kPointerSize; |
7221 static const int kScriptNameIndex = kScriptIdIndex + kPointerSize; | 7217 static const int kScriptNameIndex = kScriptIdIndex + kPointerSize; |
7222 static const int kScriptNameOrSourceUrlIndex = | 7218 static const int kScriptNameOrSourceUrlIndex = |
7223 kScriptNameIndex + kPointerSize; | 7219 kScriptNameIndex + kPointerSize; |
7224 static const int kFunctionNameIndex = | 7220 static const int kFunctionNameIndex = |
7225 kScriptNameOrSourceUrlIndex + kPointerSize; | 7221 kScriptNameOrSourceUrlIndex + kPointerSize; |
7226 static const int kFlagIndex = kFunctionNameIndex + kPointerSize; | 7222 static const int kFlagIndex = kFunctionNameIndex + kPointerSize; |
7227 static const int kIdIndex = kFlagIndex + kPointerSize; | 7223 static const int kIdIndex = kFlagIndex + kPointerSize; |
7228 static const int kSize = kIdIndex + kPointerSize; | 7224 static const int kSize = kIdIndex + kPointerSize; |
7229 | 7225 |
7230 private: | 7226 private: |
7231 // Bit position in the flag, from least significant bit position. | 7227 // Bit position in the flag, from least significant bit position. |
7232 static const int kIsEvalBit = 0; | 7228 static const int kIsEvalBit = 0; |
7233 static const int kIsConstructorBit = 1; | 7229 static const int kIsConstructorBit = 1; |
7234 static const int kIsWasmBit = 2; | 7230 static const int kIsWasmBit = 2; |
7235 | 7231 |
7236 DISALLOW_IMPLICIT_CONSTRUCTORS(StackFrameInfo); | 7232 DISALLOW_IMPLICIT_CONSTRUCTORS(StackFrameInfo); |
7237 }; | 7233 }; |
7238 | 7234 |
7239 class SourcePositionTableWithFrameCache : public Tuple2 { | 7235 class SourcePositionTableWithFrameCache : public Tuple2 { |
7240 public: | 7236 public: |
7241 DECL_ACCESSORS(source_position_table, ByteArray) | 7237 DECL_ACCESSORS(source_position_table, ByteArray) |
7242 DECL_ACCESSORS(stack_frame_cache, UnseededNumberDictionary) | 7238 DECL_ACCESSORS(stack_frame_cache, UnseededNumberDictionary) |
7243 | 7239 |
7244 DECLARE_CAST(SourcePositionTableWithFrameCache) | 7240 DECL_CAST(SourcePositionTableWithFrameCache) |
7245 | 7241 |
7246 static const int kSourcePositionTableIndex = Struct::kHeaderSize; | 7242 static const int kSourcePositionTableIndex = Struct::kHeaderSize; |
7247 static const int kStackFrameCacheIndex = | 7243 static const int kStackFrameCacheIndex = |
7248 kSourcePositionTableIndex + kPointerSize; | 7244 kSourcePositionTableIndex + kPointerSize; |
7249 static const int kSize = kStackFrameCacheIndex + kPointerSize; | 7245 static const int kSize = kStackFrameCacheIndex + kPointerSize; |
7250 | 7246 |
7251 private: | 7247 private: |
7252 DISALLOW_IMPLICIT_CONSTRUCTORS(SourcePositionTableWithFrameCache); | 7248 DISALLOW_IMPLICIT_CONSTRUCTORS(SourcePositionTableWithFrameCache); |
7253 }; | 7249 }; |
7254 | 7250 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7327 } | 7323 } |
7328 }; | 7324 }; |
7329 | 7325 |
7330 | 7326 |
7331 } // NOLINT, false-positive due to second-order macros. | 7327 } // NOLINT, false-positive due to second-order macros. |
7332 } // NOLINT, false-positive due to second-order macros. | 7328 } // NOLINT, false-positive due to second-order macros. |
7333 | 7329 |
7334 #include "src/objects/object-macros-undef.h" | 7330 #include "src/objects/object-macros-undef.h" |
7335 | 7331 |
7336 #endif // V8_OBJECTS_H_ | 7332 #endif // V8_OBJECTS_H_ |
OLD | NEW |