| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 // - JSDate | 79 // - JSDate |
| 80 // - JSMessageObject | 80 // - JSMessageObject |
| 81 // - JSProxy | 81 // - JSProxy |
| 82 // - JSFunctionProxy | 82 // - JSFunctionProxy |
| 83 // - FixedArrayBase | 83 // - FixedArrayBase |
| 84 // - ByteArray | 84 // - ByteArray |
| 85 // - FixedArray | 85 // - FixedArray |
| 86 // - DescriptorArray | 86 // - DescriptorArray |
| 87 // - HashTable | 87 // - HashTable |
| 88 // - Dictionary | 88 // - Dictionary |
| 89 // - NameDictionary | |
| 90 // - SeededNumberDictionary | |
| 91 // - UnseededNumberDictionary | |
| 92 // - ObjectHashSet | |
| 93 // - ObjectHashTable | |
| 94 // - StringTable | 89 // - StringTable |
| 95 // - CompilationCacheTable | 90 // - CompilationCacheTable |
| 96 // - CodeCacheHashTable | 91 // - CodeCacheHashTable |
| 97 // - MapCache | 92 // - MapCache |
| 98 // - Context | 93 // - Context |
| 99 // - JSFunctionResultCache | 94 // - JSFunctionResultCache |
| 100 // - ScopeInfo | 95 // - ScopeInfo |
| 101 // - TransitionArray | 96 // - TransitionArray |
| 102 // - FixedDoubleArray | 97 // - FixedDoubleArray |
| 103 // - ExternalArray | 98 // - ExternalArray |
| (...skipping 1430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1534 DISALLOW_IMPLICIT_CONSTRUCTORS(Object); | 1529 DISALLOW_IMPLICIT_CONSTRUCTORS(Object); |
| 1535 }; | 1530 }; |
| 1536 | 1531 |
| 1537 | 1532 |
| 1538 // Smi represents integer Numbers that can be stored in 31 bits. | 1533 // Smi represents integer Numbers that can be stored in 31 bits. |
| 1539 // Smis are immediate which means they are NOT allocated in the heap. | 1534 // Smis are immediate which means they are NOT allocated in the heap. |
| 1540 // The this pointer has the following format: [31 bit signed int] 0 | 1535 // The this pointer has the following format: [31 bit signed int] 0 |
| 1541 // For long smis it has the following format: | 1536 // For long smis it has the following format: |
| 1542 // [32 bit signed int] [31 bits zero padding] 0 | 1537 // [32 bit signed int] [31 bits zero padding] 0 |
| 1543 // Smi stands for small integer. | 1538 // Smi stands for small integer. |
| 1544 class Smi V8_FINAL : public Object { | 1539 class Smi: public Object { |
| 1545 public: | 1540 public: |
| 1546 // Returns the integer value. | 1541 // Returns the integer value. |
| 1547 inline int value(); | 1542 inline int value(); |
| 1548 | 1543 |
| 1549 // Convert a value to a Smi object. | 1544 // Convert a value to a Smi object. |
| 1550 static inline Smi* FromInt(int value); | 1545 static inline Smi* FromInt(int value); |
| 1551 | 1546 |
| 1552 static inline Smi* FromIntptr(intptr_t value); | 1547 static inline Smi* FromIntptr(intptr_t value); |
| 1553 | 1548 |
| 1554 // Returns whether value can be represented in a Smi. | 1549 // Returns whether value can be represented in a Smi. |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1595 // | 1590 // |
| 1596 // The next three bits, 4-6, are an allocation space tag 'sss'. The | 1591 // The next three bits, 4-6, are an allocation space tag 'sss'. The |
| 1597 // allocation space tag is 000 for all failure types except | 1592 // allocation space tag is 000 for all failure types except |
| 1598 // RETRY_AFTER_GC. For RETRY_AFTER_GC, the possible values are the | 1593 // RETRY_AFTER_GC. For RETRY_AFTER_GC, the possible values are the |
| 1599 // allocation spaces (the encoding is found in globals.h). | 1594 // allocation spaces (the encoding is found in globals.h). |
| 1600 | 1595 |
| 1601 // Failure type tag info. | 1596 // Failure type tag info. |
| 1602 const int kFailureTypeTagSize = 2; | 1597 const int kFailureTypeTagSize = 2; |
| 1603 const int kFailureTypeTagMask = (1 << kFailureTypeTagSize) - 1; | 1598 const int kFailureTypeTagMask = (1 << kFailureTypeTagSize) - 1; |
| 1604 | 1599 |
| 1605 class Failure V8_FINAL : public MaybeObject { | 1600 class Failure: public MaybeObject { |
| 1606 public: | 1601 public: |
| 1607 // RuntimeStubs assumes EXCEPTION = 1 in the compiler-generated code. | 1602 // RuntimeStubs assumes EXCEPTION = 1 in the compiler-generated code. |
| 1608 enum Type { | 1603 enum Type { |
| 1609 RETRY_AFTER_GC = 0, | 1604 RETRY_AFTER_GC = 0, |
| 1610 EXCEPTION = 1, // Returning this marker tells the real exception | 1605 EXCEPTION = 1, // Returning this marker tells the real exception |
| 1611 // is in Isolate::pending_exception. | 1606 // is in Isolate::pending_exception. |
| 1612 INTERNAL_ERROR = 2, | 1607 INTERNAL_ERROR = 2, |
| 1613 OUT_OF_MEMORY_EXCEPTION = 3 | 1608 OUT_OF_MEMORY_EXCEPTION = 3 |
| 1614 }; | 1609 }; |
| 1615 | 1610 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1645 static inline Failure* Construct(Type type, intptr_t value = 0); | 1640 static inline Failure* Construct(Type type, intptr_t value = 0); |
| 1646 | 1641 |
| 1647 DISALLOW_IMPLICIT_CONSTRUCTORS(Failure); | 1642 DISALLOW_IMPLICIT_CONSTRUCTORS(Failure); |
| 1648 }; | 1643 }; |
| 1649 | 1644 |
| 1650 | 1645 |
| 1651 // Heap objects typically have a map pointer in their first word. However, | 1646 // Heap objects typically have a map pointer in their first word. However, |
| 1652 // during GC other data (e.g. mark bits, forwarding addresses) is sometimes | 1647 // during GC other data (e.g. mark bits, forwarding addresses) is sometimes |
| 1653 // encoded in the first word. The class MapWord is an abstraction of the | 1648 // encoded in the first word. The class MapWord is an abstraction of the |
| 1654 // value in a heap object's first word. | 1649 // value in a heap object's first word. |
| 1655 class MapWord V8_FINAL BASE_EMBEDDED { | 1650 class MapWord BASE_EMBEDDED { |
| 1656 public: | 1651 public: |
| 1657 // Normal state: the map word contains a map pointer. | 1652 // Normal state: the map word contains a map pointer. |
| 1658 | 1653 |
| 1659 // Create a map word from a map pointer. | 1654 // Create a map word from a map pointer. |
| 1660 static inline MapWord FromMap(Map* map); | 1655 static inline MapWord FromMap(Map* map); |
| 1661 | 1656 |
| 1662 // View this map word as a map pointer. | 1657 // View this map word as a map pointer. |
| 1663 inline Map* ToMap(); | 1658 inline Map* ToMap(); |
| 1664 | 1659 |
| 1665 | 1660 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1690 friend class HeapObject; | 1685 friend class HeapObject; |
| 1691 | 1686 |
| 1692 explicit MapWord(uintptr_t value) : value_(value) {} | 1687 explicit MapWord(uintptr_t value) : value_(value) {} |
| 1693 | 1688 |
| 1694 uintptr_t value_; | 1689 uintptr_t value_; |
| 1695 }; | 1690 }; |
| 1696 | 1691 |
| 1697 | 1692 |
| 1698 // HeapObject is the superclass for all classes describing heap allocated | 1693 // HeapObject is the superclass for all classes describing heap allocated |
| 1699 // objects. | 1694 // objects. |
| 1700 class HeapObject : public Object { | 1695 class HeapObject: public Object { |
| 1701 public: | 1696 public: |
| 1702 // [map]: Contains a map which contains the object's reflective | 1697 // [map]: Contains a map which contains the object's reflective |
| 1703 // information. | 1698 // information. |
| 1704 inline Map* map(); | 1699 inline Map* map(); |
| 1705 inline void set_map(Map* value); | 1700 inline void set_map(Map* value); |
| 1706 // The no-write-barrier version. This is OK if the object is white and in | 1701 // The no-write-barrier version. This is OK if the object is white and in |
| 1707 // new space, or if the value is an immortal immutable object, like the maps | 1702 // new space, or if the value is an immortal immutable object, like the maps |
| 1708 // of primitive (non-JS) objects like strings, heap numbers etc. | 1703 // of primitive (non-JS) objects like strings, heap numbers etc. |
| 1709 inline void set_map_no_write_barrier(Map* value); | 1704 inline void set_map_no_write_barrier(Map* value); |
| 1710 | 1705 |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1834 template<typename StaticVisitor> | 1829 template<typename StaticVisitor> |
| 1835 static inline void IterateBody(HeapObject* obj, int object_size) { | 1830 static inline void IterateBody(HeapObject* obj, int object_size) { |
| 1836 StaticVisitor::VisitPointers(HeapObject::RawField(obj, start_offset), | 1831 StaticVisitor::VisitPointers(HeapObject::RawField(obj, start_offset), |
| 1837 HeapObject::RawField(obj, object_size)); | 1832 HeapObject::RawField(obj, object_size)); |
| 1838 } | 1833 } |
| 1839 }; | 1834 }; |
| 1840 | 1835 |
| 1841 | 1836 |
| 1842 // The HeapNumber class describes heap allocated numbers that cannot be | 1837 // The HeapNumber class describes heap allocated numbers that cannot be |
| 1843 // represented in a Smi (small integer) | 1838 // represented in a Smi (small integer) |
| 1844 class HeapNumber V8_FINAL : public HeapObject { | 1839 class HeapNumber: public HeapObject { |
| 1845 public: | 1840 public: |
| 1846 // [value]: number value. | 1841 // [value]: number value. |
| 1847 inline double value(); | 1842 inline double value(); |
| 1848 inline void set_value(double value); | 1843 inline void set_value(double value); |
| 1849 | 1844 |
| 1850 // Casting. | 1845 // Casting. |
| 1851 static inline HeapNumber* cast(Object* obj); | 1846 static inline HeapNumber* cast(Object* obj); |
| 1852 | 1847 |
| 1853 // Dispatched behavior. | 1848 // Dispatched behavior. |
| 1854 bool HeapNumberBooleanValue(); | 1849 bool HeapNumberBooleanValue(); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1909 | 1904 |
| 1910 // Indicator for one component of an AccessorPair. | 1905 // Indicator for one component of an AccessorPair. |
| 1911 enum AccessorComponent { | 1906 enum AccessorComponent { |
| 1912 ACCESSOR_GETTER, | 1907 ACCESSOR_GETTER, |
| 1913 ACCESSOR_SETTER | 1908 ACCESSOR_SETTER |
| 1914 }; | 1909 }; |
| 1915 | 1910 |
| 1916 | 1911 |
| 1917 // JSReceiver includes types on which properties can be defined, i.e., | 1912 // JSReceiver includes types on which properties can be defined, i.e., |
| 1918 // JSObject and JSProxy. | 1913 // JSObject and JSProxy. |
| 1919 class JSReceiver : public HeapObject { | 1914 class JSReceiver: public HeapObject { |
| 1920 public: | 1915 public: |
| 1921 enum DeleteMode { | 1916 enum DeleteMode { |
| 1922 NORMAL_DELETION, | 1917 NORMAL_DELETION, |
| 1923 STRICT_DELETION, | 1918 STRICT_DELETION, |
| 1924 FORCE_DELETION | 1919 FORCE_DELETION |
| 1925 }; | 1920 }; |
| 1926 | 1921 |
| 1927 // A non-keyed store is of the form a.x = foo or a["x"] = foo whereas | 1922 // A non-keyed store is of the form a.x = foo or a["x"] = foo whereas |
| 1928 // a keyed store is of the form a[expression] = foo. | 1923 // a keyed store is of the form a[expression] = foo. |
| 1929 enum StoreFromKeyed { | 1924 enum StoreFromKeyed { |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2042 Name* name, | 2037 Name* name, |
| 2043 bool continue_search); | 2038 bool continue_search); |
| 2044 | 2039 |
| 2045 DISALLOW_IMPLICIT_CONSTRUCTORS(JSReceiver); | 2040 DISALLOW_IMPLICIT_CONSTRUCTORS(JSReceiver); |
| 2046 }; | 2041 }; |
| 2047 | 2042 |
| 2048 // The JSObject describes real heap allocated JavaScript objects with | 2043 // The JSObject describes real heap allocated JavaScript objects with |
| 2049 // properties. | 2044 // properties. |
| 2050 // Note that the map of JSObject changes during execution to enable inline | 2045 // Note that the map of JSObject changes during execution to enable inline |
| 2051 // caching. | 2046 // caching. |
| 2052 class JSObject : public JSReceiver { | 2047 class JSObject: public JSReceiver { |
| 2053 public: | 2048 public: |
| 2054 // [properties]: Backing storage for properties. | 2049 // [properties]: Backing storage for properties. |
| 2055 // properties is a FixedArray in the fast case and a Dictionary in the | 2050 // properties is a FixedArray in the fast case and a Dictionary in the |
| 2056 // slow case. | 2051 // slow case. |
| 2057 DECL_ACCESSORS(properties, FixedArray) // Get and set fast properties. | 2052 DECL_ACCESSORS(properties, FixedArray) // Get and set fast properties. |
| 2058 inline void initialize_properties(); | 2053 inline void initialize_properties(); |
| 2059 inline bool HasFastProperties(); | 2054 inline bool HasFastProperties(); |
| 2060 inline NameDictionary* property_dictionary(); // Gets slow properties. | 2055 inline NameDictionary* property_dictionary(); // Gets slow properties. |
| 2061 | 2056 |
| 2062 // [elements]: The elements (properties with names that are integers). | 2057 // [elements]: The elements (properties with names that are integers). |
| (...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2674 #endif | 2669 #endif |
| 2675 | 2670 |
| 2676 void PrintElementsTransition( | 2671 void PrintElementsTransition( |
| 2677 FILE* file, ElementsKind from_kind, FixedArrayBase* from_elements, | 2672 FILE* file, ElementsKind from_kind, FixedArrayBase* from_elements, |
| 2678 ElementsKind to_kind, FixedArrayBase* to_elements); | 2673 ElementsKind to_kind, FixedArrayBase* to_elements); |
| 2679 | 2674 |
| 2680 void PrintInstanceMigration(FILE* file, Map* original_map, Map* new_map); | 2675 void PrintInstanceMigration(FILE* file, Map* original_map, Map* new_map); |
| 2681 | 2676 |
| 2682 #ifdef DEBUG | 2677 #ifdef DEBUG |
| 2683 // Structure for collecting spill information about JSObjects. | 2678 // Structure for collecting spill information about JSObjects. |
| 2684 class SpillInformation V8_FINAL { | 2679 class SpillInformation { |
| 2685 public: | 2680 public: |
| 2686 void Clear(); | 2681 void Clear(); |
| 2687 void Print(); | 2682 void Print(); |
| 2688 int number_of_objects_; | 2683 int number_of_objects_; |
| 2689 int number_of_objects_with_fast_properties_; | 2684 int number_of_objects_with_fast_properties_; |
| 2690 int number_of_objects_with_fast_elements_; | 2685 int number_of_objects_with_fast_elements_; |
| 2691 int number_of_fast_used_fields_; | 2686 int number_of_fast_used_fields_; |
| 2692 int number_of_fast_unused_fields_; | 2687 int number_of_fast_unused_fields_; |
| 2693 int number_of_slow_used_properties_; | 2688 int number_of_slow_used_properties_; |
| 2694 int number_of_slow_unused_properties_; | 2689 int number_of_slow_unused_properties_; |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2735 // to the same object requires fewer allocations and copies. | 2730 // to the same object requires fewer allocations and copies. |
| 2736 static const int kFieldsAdded = 3; | 2731 static const int kFieldsAdded = 3; |
| 2737 | 2732 |
| 2738 // Layout description. | 2733 // Layout description. |
| 2739 static const int kPropertiesOffset = HeapObject::kHeaderSize; | 2734 static const int kPropertiesOffset = HeapObject::kHeaderSize; |
| 2740 static const int kElementsOffset = kPropertiesOffset + kPointerSize; | 2735 static const int kElementsOffset = kPropertiesOffset + kPointerSize; |
| 2741 static const int kHeaderSize = kElementsOffset + kPointerSize; | 2736 static const int kHeaderSize = kElementsOffset + kPointerSize; |
| 2742 | 2737 |
| 2743 STATIC_CHECK(kHeaderSize == Internals::kJSObjectHeaderSize); | 2738 STATIC_CHECK(kHeaderSize == Internals::kJSObjectHeaderSize); |
| 2744 | 2739 |
| 2745 class BodyDescriptor V8_FINAL | 2740 class BodyDescriptor : public FlexibleBodyDescriptor<kPropertiesOffset> { |
| 2746 : public FlexibleBodyDescriptor<kPropertiesOffset> { | |
| 2747 public: | 2741 public: |
| 2748 static inline int SizeOf(Map* map, HeapObject* object); | 2742 static inline int SizeOf(Map* map, HeapObject* object); |
| 2749 }; | 2743 }; |
| 2750 | 2744 |
| 2751 // Enqueue change record for Object.observe. May cause GC. | 2745 // Enqueue change record for Object.observe. May cause GC. |
| 2752 static void EnqueueChangeRecord(Handle<JSObject> object, | 2746 static void EnqueueChangeRecord(Handle<JSObject> object, |
| 2753 const char* type, | 2747 const char* type, |
| 2754 Handle<Name> name, | 2748 Handle<Name> name, |
| 2755 Handle<Object> old_value); | 2749 Handle<Object> old_value); |
| 2756 | 2750 |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2880 // the inline-stored identity hash. | 2874 // the inline-stored identity hash. |
| 2881 MUST_USE_RESULT MaybeObject* SetHiddenPropertiesHashTable( | 2875 MUST_USE_RESULT MaybeObject* SetHiddenPropertiesHashTable( |
| 2882 Object* value); | 2876 Object* value); |
| 2883 | 2877 |
| 2884 DISALLOW_IMPLICIT_CONSTRUCTORS(JSObject); | 2878 DISALLOW_IMPLICIT_CONSTRUCTORS(JSObject); |
| 2885 }; | 2879 }; |
| 2886 | 2880 |
| 2887 | 2881 |
| 2888 // Common superclass for FixedArrays that allow implementations to share | 2882 // Common superclass for FixedArrays that allow implementations to share |
| 2889 // common accessors and some code paths. | 2883 // common accessors and some code paths. |
| 2890 class FixedArrayBase : public HeapObject { | 2884 class FixedArrayBase: public HeapObject { |
| 2891 public: | 2885 public: |
| 2892 // [length]: length of the array. | 2886 // [length]: length of the array. |
| 2893 inline int length(); | 2887 inline int length(); |
| 2894 inline void set_length(int value); | 2888 inline void set_length(int value); |
| 2895 | 2889 |
| 2896 inline static FixedArrayBase* cast(Object* object); | 2890 inline static FixedArrayBase* cast(Object* object); |
| 2897 | 2891 |
| 2898 // Layout description. | 2892 // Layout description. |
| 2899 // Length is smi tagged when it is stored. | 2893 // Length is smi tagged when it is stored. |
| 2900 static const int kLengthOffset = HeapObject::kHeaderSize; | 2894 static const int kLengthOffset = HeapObject::kHeaderSize; |
| 2901 static const int kHeaderSize = kLengthOffset + kPointerSize; | 2895 static const int kHeaderSize = kLengthOffset + kPointerSize; |
| 2902 }; | 2896 }; |
| 2903 | 2897 |
| 2904 | 2898 |
| 2905 class FixedDoubleArray; | 2899 class FixedDoubleArray; |
| 2906 class IncrementalMarking; | 2900 class IncrementalMarking; |
| 2907 | 2901 |
| 2908 | 2902 |
| 2909 // FixedArray describes fixed-sized arrays with element type Object*. | 2903 // FixedArray describes fixed-sized arrays with element type Object*. |
| 2910 class FixedArray : public FixedArrayBase { | 2904 class FixedArray: public FixedArrayBase { |
| 2911 public: | 2905 public: |
| 2912 // Setter and getter for elements. | 2906 // Setter and getter for elements. |
| 2913 inline Object* get(int index); | 2907 inline Object* get(int index); |
| 2914 // Setter that uses write barrier. | 2908 // Setter that uses write barrier. |
| 2915 inline void set(int index, Object* value); | 2909 inline void set(int index, Object* value); |
| 2916 inline bool is_the_hole(int index); | 2910 inline bool is_the_hole(int index); |
| 2917 | 2911 |
| 2918 // Setter that doesn't need write barrier. | 2912 // Setter that doesn't need write barrier. |
| 2919 inline void set(int index, Smi* value); | 2913 inline void set(int index, Smi* value); |
| 2920 // Setter with explicit barrier mode. | 2914 // Setter with explicit barrier mode. |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2975 // Swap two elements in a pair of arrays. If this array and the | 2969 // Swap two elements in a pair of arrays. If this array and the |
| 2976 // numbers array are the same object, the elements are only swapped | 2970 // numbers array are the same object, the elements are only swapped |
| 2977 // once. | 2971 // once. |
| 2978 void SwapPairs(FixedArray* numbers, int i, int j); | 2972 void SwapPairs(FixedArray* numbers, int i, int j); |
| 2979 | 2973 |
| 2980 // Sort prefix of this array and the numbers array as pairs wrt. the | 2974 // Sort prefix of this array and the numbers array as pairs wrt. the |
| 2981 // numbers. If the numbers array and the this array are the same | 2975 // numbers. If the numbers array and the this array are the same |
| 2982 // object, the prefix of this array is sorted. | 2976 // object, the prefix of this array is sorted. |
| 2983 void SortPairs(FixedArray* numbers, uint32_t len); | 2977 void SortPairs(FixedArray* numbers, uint32_t len); |
| 2984 | 2978 |
| 2985 class BodyDescriptor V8_FINAL : public FlexibleBodyDescriptor<kHeaderSize> { | 2979 class BodyDescriptor : public FlexibleBodyDescriptor<kHeaderSize> { |
| 2986 public: | 2980 public: |
| 2987 static inline int SizeOf(Map* map, HeapObject* object) { | 2981 static inline int SizeOf(Map* map, HeapObject* object) { |
| 2988 return SizeFor(reinterpret_cast<FixedArray*>(object)->length()); | 2982 return SizeFor(reinterpret_cast<FixedArray*>(object)->length()); |
| 2989 } | 2983 } |
| 2990 }; | 2984 }; |
| 2991 | 2985 |
| 2992 protected: | 2986 protected: |
| 2993 // Set operation on FixedArray without using write barriers. Can | 2987 // Set operation on FixedArray without using write barriers. Can |
| 2994 // only be used for storing old space objects or smis. | 2988 // only be used for storing old space objects or smis. |
| 2995 static inline void NoWriteBarrierSet(FixedArray* array, | 2989 static inline void NoWriteBarrierSet(FixedArray* array, |
| 2996 int index, | 2990 int index, |
| 2997 Object* value); | 2991 Object* value); |
| 2998 | 2992 |
| 2999 // Set operation on FixedArray without incremental write barrier. Can | 2993 // Set operation on FixedArray without incremental write barrier. Can |
| 3000 // only be used if the object is guaranteed to be white (whiteness witness | 2994 // only be used if the object is guaranteed to be white (whiteness witness |
| 3001 // is present). | 2995 // is present). |
| 3002 static inline void NoIncrementalWriteBarrierSet(FixedArray* array, | 2996 static inline void NoIncrementalWriteBarrierSet(FixedArray* array, |
| 3003 int index, | 2997 int index, |
| 3004 Object* value); | 2998 Object* value); |
| 3005 | 2999 |
| 3006 private: | 3000 private: |
| 3007 STATIC_CHECK(kHeaderSize == Internals::kFixedArrayHeaderSize); | 3001 STATIC_CHECK(kHeaderSize == Internals::kFixedArrayHeaderSize); |
| 3008 | 3002 |
| 3009 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedArray); | 3003 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedArray); |
| 3010 }; | 3004 }; |
| 3011 | 3005 |
| 3012 | 3006 |
| 3013 // FixedDoubleArray describes fixed-sized arrays with element type double. | 3007 // FixedDoubleArray describes fixed-sized arrays with element type double. |
| 3014 class FixedDoubleArray V8_FINAL : public FixedArrayBase { | 3008 class FixedDoubleArray: public FixedArrayBase { |
| 3015 public: | 3009 public: |
| 3016 // Setter and getter for elements. | 3010 // Setter and getter for elements. |
| 3017 inline double get_scalar(int index); | 3011 inline double get_scalar(int index); |
| 3018 inline int64_t get_representation(int index); | 3012 inline int64_t get_representation(int index); |
| 3019 MUST_USE_RESULT inline MaybeObject* get(int index); | 3013 MUST_USE_RESULT inline MaybeObject* get(int index); |
| 3020 inline void set(int index, double value); | 3014 inline void set(int index, double value); |
| 3021 inline void set_the_hole(int index); | 3015 inline void set_the_hole(int index); |
| 3022 | 3016 |
| 3023 // Checking for the hole. | 3017 // Checking for the hole. |
| 3024 inline bool is_the_hole(int index); | 3018 inline bool is_the_hole(int index); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3061 | 3055 |
| 3062 | 3056 |
| 3063 // DescriptorArrays are fixed arrays used to hold instance descriptors. | 3057 // DescriptorArrays are fixed arrays used to hold instance descriptors. |
| 3064 // The format of the these objects is: | 3058 // The format of the these objects is: |
| 3065 // [0]: Number of descriptors | 3059 // [0]: Number of descriptors |
| 3066 // [1]: Either Smi(0) if uninitialized, or a pointer to small fixed array: | 3060 // [1]: Either Smi(0) if uninitialized, or a pointer to small fixed array: |
| 3067 // [0]: pointer to fixed array with enum cache | 3061 // [0]: pointer to fixed array with enum cache |
| 3068 // [1]: either Smi(0) or pointer to fixed array with indices | 3062 // [1]: either Smi(0) or pointer to fixed array with indices |
| 3069 // [2]: first key | 3063 // [2]: first key |
| 3070 // [2 + number of descriptors * kDescriptorSize]: start of slack | 3064 // [2 + number of descriptors * kDescriptorSize]: start of slack |
| 3071 class DescriptorArray V8_FINAL : public FixedArray { | 3065 class DescriptorArray: public FixedArray { |
| 3072 public: | 3066 public: |
| 3073 // WhitenessWitness is used to prove that a descriptor array is white | 3067 // WhitenessWitness is used to prove that a descriptor array is white |
| 3074 // (unmarked), so incremental write barriers can be skipped because the | 3068 // (unmarked), so incremental write barriers can be skipped because the |
| 3075 // marking invariant cannot be broken and slots pointing into evacuation | 3069 // marking invariant cannot be broken and slots pointing into evacuation |
| 3076 // candidates will be discovered when the object is scanned. A witness is | 3070 // candidates will be discovered when the object is scanned. A witness is |
| 3077 // always stack-allocated right after creating an array. By allocating a | 3071 // always stack-allocated right after creating an array. By allocating a |
| 3078 // witness, incremental marking is globally disabled. The witness is then | 3072 // witness, incremental marking is globally disabled. The witness is then |
| 3079 // passed along wherever needed to statically prove that the array is known to | 3073 // passed along wherever needed to statically prove that the array is known to |
| 3080 // be white. | 3074 // be white. |
| 3081 class WhitenessWitness V8_FINAL { | 3075 class WhitenessWitness { |
| 3082 public: | 3076 public: |
| 3083 inline explicit WhitenessWitness(FixedArray* array); | 3077 inline explicit WhitenessWitness(FixedArray* array); |
| 3084 inline ~WhitenessWitness(); | 3078 inline ~WhitenessWitness(); |
| 3085 | 3079 |
| 3086 private: | 3080 private: |
| 3087 IncrementalMarking* marking_; | 3081 IncrementalMarking* marking_; |
| 3088 }; | 3082 }; |
| 3089 | 3083 |
| 3090 // Returns true for both shared empty_descriptor_array and for smis, which the | 3084 // Returns true for both shared empty_descriptor_array and for smis, which the |
| 3091 // map uses to encode additional bit fields when the descriptor array is not | 3085 // map uses to encode additional bit fields when the descriptor array is not |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3279 static const int kMaxNumberOfDescriptors = 1024 + 512; | 3273 static const int kMaxNumberOfDescriptors = 1024 + 512; |
| 3280 | 3274 |
| 3281 // Returns the fixed array length required to hold number_of_descriptors | 3275 // Returns the fixed array length required to hold number_of_descriptors |
| 3282 // descriptors. | 3276 // descriptors. |
| 3283 static int LengthFor(int number_of_descriptors) { | 3277 static int LengthFor(int number_of_descriptors) { |
| 3284 return ToKeyIndex(number_of_descriptors); | 3278 return ToKeyIndex(number_of_descriptors); |
| 3285 } | 3279 } |
| 3286 | 3280 |
| 3287 private: | 3281 private: |
| 3288 // An entry in a DescriptorArray, represented as an (array, index) pair. | 3282 // An entry in a DescriptorArray, represented as an (array, index) pair. |
| 3289 class Entry V8_FINAL { | 3283 class Entry { |
| 3290 public: | 3284 public: |
| 3291 inline explicit Entry(DescriptorArray* descs, int index) : | 3285 inline explicit Entry(DescriptorArray* descs, int index) : |
| 3292 descs_(descs), index_(index) { } | 3286 descs_(descs), index_(index) { } |
| 3293 | 3287 |
| 3294 inline PropertyType type() { return descs_->GetType(index_); } | 3288 inline PropertyType type() { return descs_->GetType(index_); } |
| 3295 inline Object* GetCallbackObject() { return descs_->GetValue(index_); } | 3289 inline Object* GetCallbackObject() { return descs_->GetValue(index_); } |
| 3296 | 3290 |
| 3297 private: | 3291 private: |
| 3298 DescriptorArray* descs_; | 3292 DescriptorArray* descs_; |
| 3299 int index_; | 3293 int index_; |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3378 return Hash(key); | 3372 return Hash(key); |
| 3379 } | 3373 } |
| 3380 static uint32_t HashForObject(Key key, Object* object) { return 0; } | 3374 static uint32_t HashForObject(Key key, Object* object) { return 0; } |
| 3381 static uint32_t SeededHashForObject(Key key, uint32_t seed, Object* object) { | 3375 static uint32_t SeededHashForObject(Key key, uint32_t seed, Object* object) { |
| 3382 ASSERT(UsesSeed); | 3376 ASSERT(UsesSeed); |
| 3383 return HashForObject(key, object); | 3377 return HashForObject(key, object); |
| 3384 } | 3378 } |
| 3385 }; | 3379 }; |
| 3386 | 3380 |
| 3387 template<typename Shape, typename Key> | 3381 template<typename Shape, typename Key> |
| 3388 class HashTable : public FixedArray { | 3382 class HashTable: public FixedArray { |
| 3389 public: | 3383 public: |
| 3390 enum MinimumCapacity { | 3384 enum MinimumCapacity { |
| 3391 USE_DEFAULT_MINIMUM_CAPACITY, | 3385 USE_DEFAULT_MINIMUM_CAPACITY, |
| 3392 USE_CUSTOM_MINIMUM_CAPACITY | 3386 USE_CUSTOM_MINIMUM_CAPACITY |
| 3393 }; | 3387 }; |
| 3394 | 3388 |
| 3395 // Wrapper methods | 3389 // Wrapper methods |
| 3396 inline uint32_t Hash(Key key) { | 3390 inline uint32_t Hash(Key key) { |
| 3397 if (Shape::UsesSeed) { | 3391 if (Shape::UsesSeed) { |
| 3398 return Shape::SeededHash(key, | 3392 return Shape::SeededHash(key, |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3565 // Returns the hash value for object. | 3559 // Returns the hash value for object. |
| 3566 virtual uint32_t HashForObject(Object* key) = 0; | 3560 virtual uint32_t HashForObject(Object* key) = 0; |
| 3567 // Returns the key object for storing into the hash table. | 3561 // Returns the key object for storing into the hash table. |
| 3568 // If allocations fails a failure object is returned. | 3562 // If allocations fails a failure object is returned. |
| 3569 MUST_USE_RESULT virtual MaybeObject* AsObject(Heap* heap) = 0; | 3563 MUST_USE_RESULT virtual MaybeObject* AsObject(Heap* heap) = 0; |
| 3570 // Required. | 3564 // Required. |
| 3571 virtual ~HashTableKey() {} | 3565 virtual ~HashTableKey() {} |
| 3572 }; | 3566 }; |
| 3573 | 3567 |
| 3574 | 3568 |
| 3575 class StringTableShape V8_FINAL : public BaseShape<HashTableKey*> { | 3569 class StringTableShape : public BaseShape<HashTableKey*> { |
| 3576 public: | 3570 public: |
| 3577 static inline bool IsMatch(HashTableKey* key, Object* value) { | 3571 static inline bool IsMatch(HashTableKey* key, Object* value) { |
| 3578 return key->IsMatch(value); | 3572 return key->IsMatch(value); |
| 3579 } | 3573 } |
| 3580 static inline uint32_t Hash(HashTableKey* key) { | 3574 static inline uint32_t Hash(HashTableKey* key) { |
| 3581 return key->Hash(); | 3575 return key->Hash(); |
| 3582 } | 3576 } |
| 3583 static inline uint32_t HashForObject(HashTableKey* key, Object* object) { | 3577 static inline uint32_t HashForObject(HashTableKey* key, Object* object) { |
| 3584 return key->HashForObject(object); | 3578 return key->HashForObject(object); |
| 3585 } | 3579 } |
| 3586 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, | 3580 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, |
| 3587 HashTableKey* key) { | 3581 HashTableKey* key) { |
| 3588 return key->AsObject(heap); | 3582 return key->AsObject(heap); |
| 3589 } | 3583 } |
| 3590 | 3584 |
| 3591 static const int kPrefixSize = 0; | 3585 static const int kPrefixSize = 0; |
| 3592 static const int kEntrySize = 1; | 3586 static const int kEntrySize = 1; |
| 3593 }; | 3587 }; |
| 3594 | 3588 |
| 3595 class SeqOneByteString; | 3589 class SeqOneByteString; |
| 3596 | 3590 |
| 3597 // StringTable. | 3591 // StringTable. |
| 3598 // | 3592 // |
| 3599 // No special elements in the prefix and the element size is 1 | 3593 // No special elements in the prefix and the element size is 1 |
| 3600 // because only the string itself (the key) needs to be stored. | 3594 // because only the string itself (the key) needs to be stored. |
| 3601 class StringTable V8_FINAL : public HashTable<StringTableShape, HashTableKey*> { | 3595 class StringTable: public HashTable<StringTableShape, HashTableKey*> { |
| 3602 public: | 3596 public: |
| 3603 // Find string in the string table. If it is not there yet, it is | 3597 // Find string in the string table. If it is not there yet, it is |
| 3604 // added. The return value is the string table which might have | 3598 // added. The return value is the string table which might have |
| 3605 // been enlarged. If the return value is not a failure, the string | 3599 // been enlarged. If the return value is not a failure, the string |
| 3606 // pointer *s is set to the string found. | 3600 // pointer *s is set to the string found. |
| 3607 MUST_USE_RESULT MaybeObject* LookupUtf8String( | 3601 MUST_USE_RESULT MaybeObject* LookupUtf8String( |
| 3608 Vector<const char> str, | 3602 Vector<const char> str, |
| 3609 Object** s); | 3603 Object** s); |
| 3610 MUST_USE_RESULT MaybeObject* LookupOneByteString( | 3604 MUST_USE_RESULT MaybeObject* LookupOneByteString( |
| 3611 Vector<const uint8_t> str, | 3605 Vector<const uint8_t> str, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 3631 | 3625 |
| 3632 private: | 3626 private: |
| 3633 MUST_USE_RESULT MaybeObject* LookupKey(HashTableKey* key, Object** s); | 3627 MUST_USE_RESULT MaybeObject* LookupKey(HashTableKey* key, Object** s); |
| 3634 | 3628 |
| 3635 template <bool seq_ascii> friend class JsonParser; | 3629 template <bool seq_ascii> friend class JsonParser; |
| 3636 | 3630 |
| 3637 DISALLOW_IMPLICIT_CONSTRUCTORS(StringTable); | 3631 DISALLOW_IMPLICIT_CONSTRUCTORS(StringTable); |
| 3638 }; | 3632 }; |
| 3639 | 3633 |
| 3640 | 3634 |
| 3641 class MapCacheShape V8_FINAL : public BaseShape<HashTableKey*> { | 3635 class MapCacheShape : public BaseShape<HashTableKey*> { |
| 3642 public: | 3636 public: |
| 3643 static inline bool IsMatch(HashTableKey* key, Object* value) { | 3637 static inline bool IsMatch(HashTableKey* key, Object* value) { |
| 3644 return key->IsMatch(value); | 3638 return key->IsMatch(value); |
| 3645 } | 3639 } |
| 3646 static inline uint32_t Hash(HashTableKey* key) { | 3640 static inline uint32_t Hash(HashTableKey* key) { |
| 3647 return key->Hash(); | 3641 return key->Hash(); |
| 3648 } | 3642 } |
| 3649 | 3643 |
| 3650 static inline uint32_t HashForObject(HashTableKey* key, Object* object) { | 3644 static inline uint32_t HashForObject(HashTableKey* key, Object* object) { |
| 3651 return key->HashForObject(object); | 3645 return key->HashForObject(object); |
| 3652 } | 3646 } |
| 3653 | 3647 |
| 3654 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, | 3648 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, |
| 3655 HashTableKey* key) { | 3649 HashTableKey* key) { |
| 3656 return key->AsObject(heap); | 3650 return key->AsObject(heap); |
| 3657 } | 3651 } |
| 3658 | 3652 |
| 3659 static const int kPrefixSize = 0; | 3653 static const int kPrefixSize = 0; |
| 3660 static const int kEntrySize = 2; | 3654 static const int kEntrySize = 2; |
| 3661 }; | 3655 }; |
| 3662 | 3656 |
| 3663 | 3657 |
| 3664 // MapCache. | 3658 // MapCache. |
| 3665 // | 3659 // |
| 3666 // Maps keys that are a fixed array of unique names to a map. | 3660 // Maps keys that are a fixed array of unique names to a map. |
| 3667 // Used for canonicalize maps for object literals. | 3661 // Used for canonicalize maps for object literals. |
| 3668 class MapCache V8_FINAL : public HashTable<MapCacheShape, HashTableKey*> { | 3662 class MapCache: public HashTable<MapCacheShape, HashTableKey*> { |
| 3669 public: | 3663 public: |
| 3670 // Find cached value for a name key, otherwise return null. | 3664 // Find cached value for a name key, otherwise return null. |
| 3671 Object* Lookup(FixedArray* key); | 3665 Object* Lookup(FixedArray* key); |
| 3672 MUST_USE_RESULT MaybeObject* Put(FixedArray* key, Map* value); | 3666 MUST_USE_RESULT MaybeObject* Put(FixedArray* key, Map* value); |
| 3673 static inline MapCache* cast(Object* obj); | 3667 static inline MapCache* cast(Object* obj); |
| 3674 | 3668 |
| 3675 private: | 3669 private: |
| 3676 DISALLOW_IMPLICIT_CONSTRUCTORS(MapCache); | 3670 DISALLOW_IMPLICIT_CONSTRUCTORS(MapCache); |
| 3677 }; | 3671 }; |
| 3678 | 3672 |
| 3679 | 3673 |
| 3680 template <typename Shape, typename Key> | 3674 template <typename Shape, typename Key> |
| 3681 class Dictionary : public HashTable<Shape, Key> { | 3675 class Dictionary: public HashTable<Shape, Key> { |
| 3682 public: | 3676 public: |
| 3683 static inline Dictionary<Shape, Key>* cast(Object* obj) { | 3677 static inline Dictionary<Shape, Key>* cast(Object* obj) { |
| 3684 return reinterpret_cast<Dictionary<Shape, Key>*>(obj); | 3678 return reinterpret_cast<Dictionary<Shape, Key>*>(obj); |
| 3685 } | 3679 } |
| 3686 | 3680 |
| 3687 // Returns the value at entry. | 3681 // Returns the value at entry. |
| 3688 Object* ValueAt(int entry) { | 3682 Object* ValueAt(int entry) { |
| 3689 return this->get(HashTable<Shape, Key>::EntryToIndex(entry) + 1); | 3683 return this->get(HashTable<Shape, Key>::EntryToIndex(entry) + 1); |
| 3690 } | 3684 } |
| 3691 | 3685 |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3785 uint32_t hash); | 3779 uint32_t hash); |
| 3786 | 3780 |
| 3787 // Generate new enumeration indices to avoid enumeration index overflow. | 3781 // Generate new enumeration indices to avoid enumeration index overflow. |
| 3788 MUST_USE_RESULT MaybeObject* GenerateNewEnumerationIndices(); | 3782 MUST_USE_RESULT MaybeObject* GenerateNewEnumerationIndices(); |
| 3789 static const int kMaxNumberKeyIndex = | 3783 static const int kMaxNumberKeyIndex = |
| 3790 HashTable<Shape, Key>::kPrefixStartIndex; | 3784 HashTable<Shape, Key>::kPrefixStartIndex; |
| 3791 static const int kNextEnumerationIndexIndex = kMaxNumberKeyIndex + 1; | 3785 static const int kNextEnumerationIndexIndex = kMaxNumberKeyIndex + 1; |
| 3792 }; | 3786 }; |
| 3793 | 3787 |
| 3794 | 3788 |
| 3795 class NameDictionaryShape V8_FINAL : public BaseShape<Name*> { | 3789 class NameDictionaryShape : public BaseShape<Name*> { |
| 3796 public: | 3790 public: |
| 3797 static inline bool IsMatch(Name* key, Object* other); | 3791 static inline bool IsMatch(Name* key, Object* other); |
| 3798 static inline uint32_t Hash(Name* key); | 3792 static inline uint32_t Hash(Name* key); |
| 3799 static inline uint32_t HashForObject(Name* key, Object* object); | 3793 static inline uint32_t HashForObject(Name* key, Object* object); |
| 3800 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, | 3794 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, |
| 3801 Name* key); | 3795 Name* key); |
| 3802 static const int kPrefixSize = 2; | 3796 static const int kPrefixSize = 2; |
| 3803 static const int kEntrySize = 3; | 3797 static const int kEntrySize = 3; |
| 3804 static const bool kIsEnumerable = true; | 3798 static const bool kIsEnumerable = true; |
| 3805 }; | 3799 }; |
| 3806 | 3800 |
| 3807 | 3801 |
| 3808 class NameDictionary V8_FINAL : public Dictionary<NameDictionaryShape, Name*> { | 3802 class NameDictionary: public Dictionary<NameDictionaryShape, Name*> { |
| 3809 public: | 3803 public: |
| 3810 static inline NameDictionary* cast(Object* obj) { | 3804 static inline NameDictionary* cast(Object* obj) { |
| 3811 ASSERT(obj->IsDictionary()); | 3805 ASSERT(obj->IsDictionary()); |
| 3812 return reinterpret_cast<NameDictionary*>(obj); | 3806 return reinterpret_cast<NameDictionary*>(obj); |
| 3813 } | 3807 } |
| 3814 | 3808 |
| 3815 // Copies enumerable keys to preallocated fixed array. | 3809 // Copies enumerable keys to preallocated fixed array. |
| 3816 FixedArray* CopyEnumKeysTo(FixedArray* storage); | 3810 FixedArray* CopyEnumKeysTo(FixedArray* storage); |
| 3817 static void DoGenerateNewEnumerationIndices( | 3811 static void DoGenerateNewEnumerationIndices( |
| 3818 Handle<NameDictionary> dictionary); | 3812 Handle<NameDictionary> dictionary); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 3831 class NumberDictionaryShape : public BaseShape<uint32_t> { | 3825 class NumberDictionaryShape : public BaseShape<uint32_t> { |
| 3832 public: | 3826 public: |
| 3833 static inline bool IsMatch(uint32_t key, Object* other); | 3827 static inline bool IsMatch(uint32_t key, Object* other); |
| 3834 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, | 3828 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, |
| 3835 uint32_t key); | 3829 uint32_t key); |
| 3836 static const int kEntrySize = 3; | 3830 static const int kEntrySize = 3; |
| 3837 static const bool kIsEnumerable = false; | 3831 static const bool kIsEnumerable = false; |
| 3838 }; | 3832 }; |
| 3839 | 3833 |
| 3840 | 3834 |
| 3841 class SeededNumberDictionaryShape V8_FINAL : public NumberDictionaryShape { | 3835 class SeededNumberDictionaryShape : public NumberDictionaryShape { |
| 3842 public: | 3836 public: |
| 3843 static const bool UsesSeed = true; | 3837 static const bool UsesSeed = true; |
| 3844 static const int kPrefixSize = 2; | 3838 static const int kPrefixSize = 2; |
| 3845 | 3839 |
| 3846 static inline uint32_t SeededHash(uint32_t key, uint32_t seed); | 3840 static inline uint32_t SeededHash(uint32_t key, uint32_t seed); |
| 3847 static inline uint32_t SeededHashForObject(uint32_t key, | 3841 static inline uint32_t SeededHashForObject(uint32_t key, |
| 3848 uint32_t seed, | 3842 uint32_t seed, |
| 3849 Object* object); | 3843 Object* object); |
| 3850 }; | 3844 }; |
| 3851 | 3845 |
| 3852 | 3846 |
| 3853 class UnseededNumberDictionaryShape V8_FINAL : public NumberDictionaryShape { | 3847 class UnseededNumberDictionaryShape : public NumberDictionaryShape { |
| 3854 public: | 3848 public: |
| 3855 static const int kPrefixSize = 0; | 3849 static const int kPrefixSize = 0; |
| 3856 | 3850 |
| 3857 static inline uint32_t Hash(uint32_t key); | 3851 static inline uint32_t Hash(uint32_t key); |
| 3858 static inline uint32_t HashForObject(uint32_t key, Object* object); | 3852 static inline uint32_t HashForObject(uint32_t key, Object* object); |
| 3859 }; | 3853 }; |
| 3860 | 3854 |
| 3861 | 3855 |
| 3862 class SeededNumberDictionary V8_FINAL | 3856 class SeededNumberDictionary |
| 3863 : public Dictionary<SeededNumberDictionaryShape, uint32_t> { | 3857 : public Dictionary<SeededNumberDictionaryShape, uint32_t> { |
| 3864 public: | 3858 public: |
| 3865 static SeededNumberDictionary* cast(Object* obj) { | 3859 static SeededNumberDictionary* cast(Object* obj) { |
| 3866 ASSERT(obj->IsDictionary()); | 3860 ASSERT(obj->IsDictionary()); |
| 3867 return reinterpret_cast<SeededNumberDictionary*>(obj); | 3861 return reinterpret_cast<SeededNumberDictionary*>(obj); |
| 3868 } | 3862 } |
| 3869 | 3863 |
| 3870 // Type specific at put (default NONE attributes is used when adding). | 3864 // Type specific at put (default NONE attributes is used when adding). |
| 3871 MUST_USE_RESULT MaybeObject* AtNumberPut(uint32_t key, Object* value); | 3865 MUST_USE_RESULT MaybeObject* AtNumberPut(uint32_t key, Object* value); |
| 3872 MUST_USE_RESULT MaybeObject* AddNumberEntry(uint32_t key, | 3866 MUST_USE_RESULT MaybeObject* AddNumberEntry(uint32_t key, |
| (...skipping 27 matching lines...) Expand all Loading... |
| 3900 // requires_slow_elements returns false. | 3894 // requires_slow_elements returns false. |
| 3901 inline uint32_t max_number_key(); | 3895 inline uint32_t max_number_key(); |
| 3902 | 3896 |
| 3903 // Bit masks. | 3897 // Bit masks. |
| 3904 static const int kRequiresSlowElementsMask = 1; | 3898 static const int kRequiresSlowElementsMask = 1; |
| 3905 static const int kRequiresSlowElementsTagSize = 1; | 3899 static const int kRequiresSlowElementsTagSize = 1; |
| 3906 static const uint32_t kRequiresSlowElementsLimit = (1 << 29) - 1; | 3900 static const uint32_t kRequiresSlowElementsLimit = (1 << 29) - 1; |
| 3907 }; | 3901 }; |
| 3908 | 3902 |
| 3909 | 3903 |
| 3910 class UnseededNumberDictionary V8_FINAL | 3904 class UnseededNumberDictionary |
| 3911 : public Dictionary<UnseededNumberDictionaryShape, uint32_t> { | 3905 : public Dictionary<UnseededNumberDictionaryShape, uint32_t> { |
| 3912 public: | 3906 public: |
| 3913 static UnseededNumberDictionary* cast(Object* obj) { | 3907 static UnseededNumberDictionary* cast(Object* obj) { |
| 3914 ASSERT(obj->IsDictionary()); | 3908 ASSERT(obj->IsDictionary()); |
| 3915 return reinterpret_cast<UnseededNumberDictionary*>(obj); | 3909 return reinterpret_cast<UnseededNumberDictionary*>(obj); |
| 3916 } | 3910 } |
| 3917 | 3911 |
| 3918 // Type specific at put (default NONE attributes is used when adding). | 3912 // Type specific at put (default NONE attributes is used when adding). |
| 3919 MUST_USE_RESULT MaybeObject* AtNumberPut(uint32_t key, Object* value); | 3913 MUST_USE_RESULT MaybeObject* AtNumberPut(uint32_t key, Object* value); |
| 3920 MUST_USE_RESULT MaybeObject* AddNumberEntry(uint32_t key, Object* value); | 3914 MUST_USE_RESULT MaybeObject* AddNumberEntry(uint32_t key, Object* value); |
| 3921 | 3915 |
| 3922 // Set an existing entry or add a new one if needed. | 3916 // Set an existing entry or add a new one if needed. |
| 3923 // Return the updated dictionary. | 3917 // Return the updated dictionary. |
| 3924 MUST_USE_RESULT static Handle<UnseededNumberDictionary> Set( | 3918 MUST_USE_RESULT static Handle<UnseededNumberDictionary> Set( |
| 3925 Handle<UnseededNumberDictionary> dictionary, | 3919 Handle<UnseededNumberDictionary> dictionary, |
| 3926 uint32_t index, | 3920 uint32_t index, |
| 3927 Handle<Object> value); | 3921 Handle<Object> value); |
| 3928 | 3922 |
| 3929 MUST_USE_RESULT MaybeObject* Set(uint32_t key, Object* value); | 3923 MUST_USE_RESULT MaybeObject* Set(uint32_t key, Object* value); |
| 3930 }; | 3924 }; |
| 3931 | 3925 |
| 3932 | 3926 |
| 3933 template <int entrysize> | 3927 template <int entrysize> |
| 3934 class ObjectHashTableShape V8_FINAL : public BaseShape<Object*> { | 3928 class ObjectHashTableShape : public BaseShape<Object*> { |
| 3935 public: | 3929 public: |
| 3936 static inline bool IsMatch(Object* key, Object* other); | 3930 static inline bool IsMatch(Object* key, Object* other); |
| 3937 static inline uint32_t Hash(Object* key); | 3931 static inline uint32_t Hash(Object* key); |
| 3938 static inline uint32_t HashForObject(Object* key, Object* object); | 3932 static inline uint32_t HashForObject(Object* key, Object* object); |
| 3939 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, | 3933 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, |
| 3940 Object* key); | 3934 Object* key); |
| 3941 static const int kPrefixSize = 0; | 3935 static const int kPrefixSize = 0; |
| 3942 static const int kEntrySize = entrysize; | 3936 static const int kEntrySize = entrysize; |
| 3943 }; | 3937 }; |
| 3944 | 3938 |
| 3945 | 3939 |
| 3946 // ObjectHashSet holds keys that are arbitrary objects by using the identity | 3940 // ObjectHashSet holds keys that are arbitrary objects by using the identity |
| 3947 // hash of the key for hashing purposes. | 3941 // hash of the key for hashing purposes. |
| 3948 class ObjectHashSet V8_FINAL | 3942 class ObjectHashSet: public HashTable<ObjectHashTableShape<1>, Object*> { |
| 3949 : public HashTable<ObjectHashTableShape<1>, Object*> { | |
| 3950 public: | 3943 public: |
| 3951 static inline ObjectHashSet* cast(Object* obj) { | 3944 static inline ObjectHashSet* cast(Object* obj) { |
| 3952 ASSERT(obj->IsHashTable()); | 3945 ASSERT(obj->IsHashTable()); |
| 3953 return reinterpret_cast<ObjectHashSet*>(obj); | 3946 return reinterpret_cast<ObjectHashSet*>(obj); |
| 3954 } | 3947 } |
| 3955 | 3948 |
| 3956 // Looks up whether the given key is part of this hash set. | 3949 // Looks up whether the given key is part of this hash set. |
| 3957 bool Contains(Object* key); | 3950 bool Contains(Object* key); |
| 3958 | 3951 |
| 3959 // Adds the given key to this hash set. | 3952 // Adds the given key to this hash set. |
| 3960 MUST_USE_RESULT MaybeObject* Add(Object* key); | 3953 MUST_USE_RESULT MaybeObject* Add(Object* key); |
| 3961 | 3954 |
| 3962 // Removes the given key from this hash set. | 3955 // Removes the given key from this hash set. |
| 3963 MUST_USE_RESULT MaybeObject* Remove(Object* key); | 3956 MUST_USE_RESULT MaybeObject* Remove(Object* key); |
| 3964 }; | 3957 }; |
| 3965 | 3958 |
| 3966 | 3959 |
| 3967 // ObjectHashTable maps keys that are arbitrary objects to object values by | 3960 // ObjectHashTable maps keys that are arbitrary objects to object values by |
| 3968 // using the identity hash of the key for hashing purposes. | 3961 // using the identity hash of the key for hashing purposes. |
| 3969 class ObjectHashTable V8_FINAL | 3962 class ObjectHashTable: public HashTable<ObjectHashTableShape<2>, Object*> { |
| 3970 : public HashTable<ObjectHashTableShape<2>, Object*> { | |
| 3971 public: | 3963 public: |
| 3972 static inline ObjectHashTable* cast(Object* obj) { | 3964 static inline ObjectHashTable* cast(Object* obj) { |
| 3973 ASSERT(obj->IsHashTable()); | 3965 ASSERT(obj->IsHashTable()); |
| 3974 return reinterpret_cast<ObjectHashTable*>(obj); | 3966 return reinterpret_cast<ObjectHashTable*>(obj); |
| 3975 } | 3967 } |
| 3976 | 3968 |
| 3977 // Looks up the value associated with the given key. The hole value is | 3969 // Looks up the value associated with the given key. The hole value is |
| 3978 // returned in case the key is not present. | 3970 // returned in case the key is not present. |
| 3979 Object* Lookup(Object* key); | 3971 Object* Lookup(Object* key); |
| 3980 | 3972 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 3995 }; | 3987 }; |
| 3996 | 3988 |
| 3997 | 3989 |
| 3998 // JSFunctionResultCache caches results of some JSFunction invocation. | 3990 // JSFunctionResultCache caches results of some JSFunction invocation. |
| 3999 // It is a fixed array with fixed structure: | 3991 // It is a fixed array with fixed structure: |
| 4000 // [0]: factory function | 3992 // [0]: factory function |
| 4001 // [1]: finger index | 3993 // [1]: finger index |
| 4002 // [2]: current cache size | 3994 // [2]: current cache size |
| 4003 // [3]: dummy field. | 3995 // [3]: dummy field. |
| 4004 // The rest of array are key/value pairs. | 3996 // The rest of array are key/value pairs. |
| 4005 class JSFunctionResultCache V8_FINAL : public FixedArray { | 3997 class JSFunctionResultCache: public FixedArray { |
| 4006 public: | 3998 public: |
| 4007 static const int kFactoryIndex = 0; | 3999 static const int kFactoryIndex = 0; |
| 4008 static const int kFingerIndex = kFactoryIndex + 1; | 4000 static const int kFingerIndex = kFactoryIndex + 1; |
| 4009 static const int kCacheSizeIndex = kFingerIndex + 1; | 4001 static const int kCacheSizeIndex = kFingerIndex + 1; |
| 4010 static const int kDummyIndex = kCacheSizeIndex + 1; | 4002 static const int kDummyIndex = kCacheSizeIndex + 1; |
| 4011 static const int kEntriesIndex = kDummyIndex + 1; | 4003 static const int kEntriesIndex = kDummyIndex + 1; |
| 4012 | 4004 |
| 4013 static const int kEntrySize = 2; // key + value | 4005 static const int kEntrySize = 2; // key + value |
| 4014 | 4006 |
| 4015 static const int kFactoryOffset = kHeaderSize; | 4007 static const int kFactoryOffset = kHeaderSize; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 4031 }; | 4023 }; |
| 4032 | 4024 |
| 4033 | 4025 |
| 4034 // ScopeInfo represents information about different scopes of a source | 4026 // ScopeInfo represents information about different scopes of a source |
| 4035 // program and the allocation of the scope's variables. Scope information | 4027 // program and the allocation of the scope's variables. Scope information |
| 4036 // is stored in a compressed form in ScopeInfo objects and is used | 4028 // is stored in a compressed form in ScopeInfo objects and is used |
| 4037 // at runtime (stack dumps, deoptimization, etc.). | 4029 // at runtime (stack dumps, deoptimization, etc.). |
| 4038 | 4030 |
| 4039 // This object provides quick access to scope info details for runtime | 4031 // This object provides quick access to scope info details for runtime |
| 4040 // routines. | 4032 // routines. |
| 4041 class ScopeInfo V8_FINAL : public FixedArray { | 4033 class ScopeInfo : public FixedArray { |
| 4042 public: | 4034 public: |
| 4043 static inline ScopeInfo* cast(Object* object); | 4035 static inline ScopeInfo* cast(Object* object); |
| 4044 | 4036 |
| 4045 // Return the type of this scope. | 4037 // Return the type of this scope. |
| 4046 ScopeType scope_type(); | 4038 ScopeType scope_type(); |
| 4047 | 4039 |
| 4048 // Does this scope call eval? | 4040 // Does this scope call eval? |
| 4049 bool CallsEval(); | 4041 bool CallsEval(); |
| 4050 | 4042 |
| 4051 // Return the language mode of this scope. | 4043 // Return the language mode of this scope. |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4235 // BitFields representing the encoded information for context locals in the | 4227 // BitFields representing the encoded information for context locals in the |
| 4236 // ContextLocalInfoEntries part. | 4228 // ContextLocalInfoEntries part. |
| 4237 class ContextLocalMode: public BitField<VariableMode, 0, 3> {}; | 4229 class ContextLocalMode: public BitField<VariableMode, 0, 3> {}; |
| 4238 class ContextLocalInitFlag: public BitField<InitializationFlag, 3, 1> {}; | 4230 class ContextLocalInitFlag: public BitField<InitializationFlag, 3, 1> {}; |
| 4239 }; | 4231 }; |
| 4240 | 4232 |
| 4241 | 4233 |
| 4242 // The cache for maps used by normalized (dictionary mode) objects. | 4234 // The cache for maps used by normalized (dictionary mode) objects. |
| 4243 // Such maps do not have property descriptors, so a typical program | 4235 // Such maps do not have property descriptors, so a typical program |
| 4244 // needs very limited number of distinct normalized maps. | 4236 // needs very limited number of distinct normalized maps. |
| 4245 class NormalizedMapCache V8_FINAL : public FixedArray { | 4237 class NormalizedMapCache: public FixedArray { |
| 4246 public: | 4238 public: |
| 4247 static const int kEntries = 64; | 4239 static const int kEntries = 64; |
| 4248 | 4240 |
| 4249 MUST_USE_RESULT MaybeObject* Get(JSObject* object, | 4241 MUST_USE_RESULT MaybeObject* Get(JSObject* object, |
| 4250 PropertyNormalizationMode mode); | 4242 PropertyNormalizationMode mode); |
| 4251 | 4243 |
| 4252 void Clear(); | 4244 void Clear(); |
| 4253 | 4245 |
| 4254 // Casting | 4246 // Casting |
| 4255 static inline NormalizedMapCache* cast(Object* obj); | 4247 static inline NormalizedMapCache* cast(Object* obj); |
| 4256 | 4248 |
| 4257 DECLARE_VERIFIER(NormalizedMapCache) | 4249 DECLARE_VERIFIER(NormalizedMapCache) |
| 4258 }; | 4250 }; |
| 4259 | 4251 |
| 4260 | 4252 |
| 4261 // ByteArray represents fixed sized byte arrays. Used for the relocation info | 4253 // ByteArray represents fixed sized byte arrays. Used for the relocation info |
| 4262 // that is attached to code objects. | 4254 // that is attached to code objects. |
| 4263 class ByteArray V8_FINAL : public FixedArrayBase { | 4255 class ByteArray: public FixedArrayBase { |
| 4264 public: | 4256 public: |
| 4265 inline int Size() { return RoundUp(length() + kHeaderSize, kPointerSize); } | 4257 inline int Size() { return RoundUp(length() + kHeaderSize, kPointerSize); } |
| 4266 | 4258 |
| 4267 // Setter and getter. | 4259 // Setter and getter. |
| 4268 inline byte get(int index); | 4260 inline byte get(int index); |
| 4269 inline void set(int index, byte value); | 4261 inline void set(int index, byte value); |
| 4270 | 4262 |
| 4271 // Treat contents as an int array. | 4263 // Treat contents as an int array. |
| 4272 inline int get_int(int index); | 4264 inline int get_int(int index); |
| 4273 | 4265 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4308 // Maximal length of a single ByteArray. | 4300 // Maximal length of a single ByteArray. |
| 4309 static const int kMaxLength = kMaxSize - kHeaderSize; | 4301 static const int kMaxLength = kMaxSize - kHeaderSize; |
| 4310 | 4302 |
| 4311 private: | 4303 private: |
| 4312 DISALLOW_IMPLICIT_CONSTRUCTORS(ByteArray); | 4304 DISALLOW_IMPLICIT_CONSTRUCTORS(ByteArray); |
| 4313 }; | 4305 }; |
| 4314 | 4306 |
| 4315 | 4307 |
| 4316 // FreeSpace represents fixed sized areas of the heap that are not currently in | 4308 // FreeSpace represents fixed sized areas of the heap that are not currently in |
| 4317 // use. Used by the heap and GC. | 4309 // use. Used by the heap and GC. |
| 4318 class FreeSpace V8_FINAL : public HeapObject { | 4310 class FreeSpace: public HeapObject { |
| 4319 public: | 4311 public: |
| 4320 // [size]: size of the free space including the header. | 4312 // [size]: size of the free space including the header. |
| 4321 inline int size(); | 4313 inline int size(); |
| 4322 inline void set_size(int value); | 4314 inline void set_size(int value); |
| 4323 | 4315 |
| 4324 inline int Size() { return size(); } | 4316 inline int Size() { return size(); } |
| 4325 | 4317 |
| 4326 // Casting. | 4318 // Casting. |
| 4327 static inline FreeSpace* cast(Object* obj); | 4319 static inline FreeSpace* cast(Object* obj); |
| 4328 | 4320 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 4346 // which live outside the JavaScript heap. Its subclasses are used to | 4338 // which live outside the JavaScript heap. Its subclasses are used to |
| 4347 // implement the CanvasArray types being defined in the WebGL | 4339 // implement the CanvasArray types being defined in the WebGL |
| 4348 // specification. As of this writing the first public draft is not yet | 4340 // specification. As of this writing the first public draft is not yet |
| 4349 // available, but Khronos members can access the draft at: | 4341 // available, but Khronos members can access the draft at: |
| 4350 // https://cvs.khronos.org/svn/repos/3dweb/trunk/doc/spec/WebGL-spec.html | 4342 // https://cvs.khronos.org/svn/repos/3dweb/trunk/doc/spec/WebGL-spec.html |
| 4351 // | 4343 // |
| 4352 // The semantics of these arrays differ from CanvasPixelArray. | 4344 // The semantics of these arrays differ from CanvasPixelArray. |
| 4353 // Out-of-range values passed to the setter are converted via a C | 4345 // Out-of-range values passed to the setter are converted via a C |
| 4354 // cast, not clamping. Out-of-range indices cause exceptions to be | 4346 // cast, not clamping. Out-of-range indices cause exceptions to be |
| 4355 // raised rather than being silently ignored. | 4347 // raised rather than being silently ignored. |
| 4356 class ExternalArray : public FixedArrayBase { | 4348 class ExternalArray: public FixedArrayBase { |
| 4357 public: | 4349 public: |
| 4358 inline bool is_the_hole(int index) { return false; } | 4350 inline bool is_the_hole(int index) { return false; } |
| 4359 | 4351 |
| 4360 // [external_pointer]: The pointer to the external memory area backing this | 4352 // [external_pointer]: The pointer to the external memory area backing this |
| 4361 // external array. | 4353 // external array. |
| 4362 DECL_ACCESSORS(external_pointer, void) // Pointer to the data store. | 4354 DECL_ACCESSORS(external_pointer, void) // Pointer to the data store. |
| 4363 | 4355 |
| 4364 // Casting. | 4356 // Casting. |
| 4365 static inline ExternalArray* cast(Object* obj); | 4357 static inline ExternalArray* cast(Object* obj); |
| 4366 | 4358 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 4379 | 4371 |
| 4380 | 4372 |
| 4381 // A ExternalPixelArray represents a fixed-size byte array with special | 4373 // A ExternalPixelArray represents a fixed-size byte array with special |
| 4382 // semantics used for implementing the CanvasPixelArray object. Please see the | 4374 // semantics used for implementing the CanvasPixelArray object. Please see the |
| 4383 // specification at: | 4375 // specification at: |
| 4384 | 4376 |
| 4385 // http://www.whatwg.org/specs/web-apps/current-work/ | 4377 // http://www.whatwg.org/specs/web-apps/current-work/ |
| 4386 // multipage/the-canvas-element.html#canvaspixelarray | 4378 // multipage/the-canvas-element.html#canvaspixelarray |
| 4387 // In particular, write access clamps the value written to 0 or 255 if the | 4379 // In particular, write access clamps the value written to 0 or 255 if the |
| 4388 // value written is outside this range. | 4380 // value written is outside this range. |
| 4389 class ExternalPixelArray V8_FINAL : public ExternalArray { | 4381 class ExternalPixelArray: public ExternalArray { |
| 4390 public: | 4382 public: |
| 4391 inline uint8_t* external_pixel_pointer(); | 4383 inline uint8_t* external_pixel_pointer(); |
| 4392 | 4384 |
| 4393 // Setter and getter. | 4385 // Setter and getter. |
| 4394 inline uint8_t get_scalar(int index); | 4386 inline uint8_t get_scalar(int index); |
| 4395 MUST_USE_RESULT inline MaybeObject* get(int index); | 4387 MUST_USE_RESULT inline MaybeObject* get(int index); |
| 4396 inline void set(int index, uint8_t value); | 4388 inline void set(int index, uint8_t value); |
| 4397 | 4389 |
| 4398 // This accessor applies the correct conversion from Smi, HeapNumber and | 4390 // This accessor applies the correct conversion from Smi, HeapNumber and |
| 4399 // undefined and clamps the converted value between 0 and 255. | 4391 // undefined and clamps the converted value between 0 and 255. |
| 4400 Object* SetValue(uint32_t index, Object* value); | 4392 Object* SetValue(uint32_t index, Object* value); |
| 4401 | 4393 |
| 4402 // Casting. | 4394 // Casting. |
| 4403 static inline ExternalPixelArray* cast(Object* obj); | 4395 static inline ExternalPixelArray* cast(Object* obj); |
| 4404 | 4396 |
| 4405 // Dispatched behavior. | 4397 // Dispatched behavior. |
| 4406 DECLARE_PRINTER(ExternalPixelArray) | 4398 DECLARE_PRINTER(ExternalPixelArray) |
| 4407 DECLARE_VERIFIER(ExternalPixelArray) | 4399 DECLARE_VERIFIER(ExternalPixelArray) |
| 4408 | 4400 |
| 4409 private: | 4401 private: |
| 4410 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalPixelArray); | 4402 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalPixelArray); |
| 4411 }; | 4403 }; |
| 4412 | 4404 |
| 4413 | 4405 |
| 4414 class ExternalByteArray V8_FINAL : public ExternalArray { | 4406 class ExternalByteArray: public ExternalArray { |
| 4415 public: | 4407 public: |
| 4416 // Setter and getter. | 4408 // Setter and getter. |
| 4417 inline int8_t get_scalar(int index); | 4409 inline int8_t get_scalar(int index); |
| 4418 MUST_USE_RESULT inline MaybeObject* get(int index); | 4410 MUST_USE_RESULT inline MaybeObject* get(int index); |
| 4419 inline void set(int index, int8_t value); | 4411 inline void set(int index, int8_t value); |
| 4420 | 4412 |
| 4421 // This accessor applies the correct conversion from Smi, HeapNumber | 4413 // This accessor applies the correct conversion from Smi, HeapNumber |
| 4422 // and undefined. | 4414 // and undefined. |
| 4423 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4415 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
| 4424 | 4416 |
| 4425 // Casting. | 4417 // Casting. |
| 4426 static inline ExternalByteArray* cast(Object* obj); | 4418 static inline ExternalByteArray* cast(Object* obj); |
| 4427 | 4419 |
| 4428 // Dispatched behavior. | 4420 // Dispatched behavior. |
| 4429 DECLARE_PRINTER(ExternalByteArray) | 4421 DECLARE_PRINTER(ExternalByteArray) |
| 4430 DECLARE_VERIFIER(ExternalByteArray) | 4422 DECLARE_VERIFIER(ExternalByteArray) |
| 4431 | 4423 |
| 4432 private: | 4424 private: |
| 4433 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalByteArray); | 4425 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalByteArray); |
| 4434 }; | 4426 }; |
| 4435 | 4427 |
| 4436 | 4428 |
| 4437 class ExternalUnsignedByteArray V8_FINAL : public ExternalArray { | 4429 class ExternalUnsignedByteArray: public ExternalArray { |
| 4438 public: | 4430 public: |
| 4439 // Setter and getter. | 4431 // Setter and getter. |
| 4440 inline uint8_t get_scalar(int index); | 4432 inline uint8_t get_scalar(int index); |
| 4441 MUST_USE_RESULT inline MaybeObject* get(int index); | 4433 MUST_USE_RESULT inline MaybeObject* get(int index); |
| 4442 inline void set(int index, uint8_t value); | 4434 inline void set(int index, uint8_t value); |
| 4443 | 4435 |
| 4444 // This accessor applies the correct conversion from Smi, HeapNumber | 4436 // This accessor applies the correct conversion from Smi, HeapNumber |
| 4445 // and undefined. | 4437 // and undefined. |
| 4446 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4438 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
| 4447 | 4439 |
| 4448 // Casting. | 4440 // Casting. |
| 4449 static inline ExternalUnsignedByteArray* cast(Object* obj); | 4441 static inline ExternalUnsignedByteArray* cast(Object* obj); |
| 4450 | 4442 |
| 4451 // Dispatched behavior. | 4443 // Dispatched behavior. |
| 4452 DECLARE_PRINTER(ExternalUnsignedByteArray) | 4444 DECLARE_PRINTER(ExternalUnsignedByteArray) |
| 4453 DECLARE_VERIFIER(ExternalUnsignedByteArray) | 4445 DECLARE_VERIFIER(ExternalUnsignedByteArray) |
| 4454 | 4446 |
| 4455 private: | 4447 private: |
| 4456 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedByteArray); | 4448 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedByteArray); |
| 4457 }; | 4449 }; |
| 4458 | 4450 |
| 4459 | 4451 |
| 4460 class ExternalShortArray V8_FINAL : public ExternalArray { | 4452 class ExternalShortArray: public ExternalArray { |
| 4461 public: | 4453 public: |
| 4462 // Setter and getter. | 4454 // Setter and getter. |
| 4463 inline int16_t get_scalar(int index); | 4455 inline int16_t get_scalar(int index); |
| 4464 MUST_USE_RESULT inline MaybeObject* get(int index); | 4456 MUST_USE_RESULT inline MaybeObject* get(int index); |
| 4465 inline void set(int index, int16_t value); | 4457 inline void set(int index, int16_t value); |
| 4466 | 4458 |
| 4467 // This accessor applies the correct conversion from Smi, HeapNumber | 4459 // This accessor applies the correct conversion from Smi, HeapNumber |
| 4468 // and undefined. | 4460 // and undefined. |
| 4469 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4461 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
| 4470 | 4462 |
| 4471 // Casting. | 4463 // Casting. |
| 4472 static inline ExternalShortArray* cast(Object* obj); | 4464 static inline ExternalShortArray* cast(Object* obj); |
| 4473 | 4465 |
| 4474 // Dispatched behavior. | 4466 // Dispatched behavior. |
| 4475 DECLARE_PRINTER(ExternalShortArray) | 4467 DECLARE_PRINTER(ExternalShortArray) |
| 4476 DECLARE_VERIFIER(ExternalShortArray) | 4468 DECLARE_VERIFIER(ExternalShortArray) |
| 4477 | 4469 |
| 4478 private: | 4470 private: |
| 4479 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalShortArray); | 4471 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalShortArray); |
| 4480 }; | 4472 }; |
| 4481 | 4473 |
| 4482 | 4474 |
| 4483 class ExternalUnsignedShortArray V8_FINAL : public ExternalArray { | 4475 class ExternalUnsignedShortArray: public ExternalArray { |
| 4484 public: | 4476 public: |
| 4485 // Setter and getter. | 4477 // Setter and getter. |
| 4486 inline uint16_t get_scalar(int index); | 4478 inline uint16_t get_scalar(int index); |
| 4487 MUST_USE_RESULT inline MaybeObject* get(int index); | 4479 MUST_USE_RESULT inline MaybeObject* get(int index); |
| 4488 inline void set(int index, uint16_t value); | 4480 inline void set(int index, uint16_t value); |
| 4489 | 4481 |
| 4490 // This accessor applies the correct conversion from Smi, HeapNumber | 4482 // This accessor applies the correct conversion from Smi, HeapNumber |
| 4491 // and undefined. | 4483 // and undefined. |
| 4492 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4484 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
| 4493 | 4485 |
| 4494 // Casting. | 4486 // Casting. |
| 4495 static inline ExternalUnsignedShortArray* cast(Object* obj); | 4487 static inline ExternalUnsignedShortArray* cast(Object* obj); |
| 4496 | 4488 |
| 4497 // Dispatched behavior. | 4489 // Dispatched behavior. |
| 4498 DECLARE_PRINTER(ExternalUnsignedShortArray) | 4490 DECLARE_PRINTER(ExternalUnsignedShortArray) |
| 4499 DECLARE_VERIFIER(ExternalUnsignedShortArray) | 4491 DECLARE_VERIFIER(ExternalUnsignedShortArray) |
| 4500 | 4492 |
| 4501 private: | 4493 private: |
| 4502 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedShortArray); | 4494 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedShortArray); |
| 4503 }; | 4495 }; |
| 4504 | 4496 |
| 4505 | 4497 |
| 4506 class ExternalIntArray V8_FINAL : public ExternalArray { | 4498 class ExternalIntArray: public ExternalArray { |
| 4507 public: | 4499 public: |
| 4508 // Setter and getter. | 4500 // Setter and getter. |
| 4509 inline int32_t get_scalar(int index); | 4501 inline int32_t get_scalar(int index); |
| 4510 MUST_USE_RESULT inline MaybeObject* get(int index); | 4502 MUST_USE_RESULT inline MaybeObject* get(int index); |
| 4511 inline void set(int index, int32_t value); | 4503 inline void set(int index, int32_t value); |
| 4512 | 4504 |
| 4513 // This accessor applies the correct conversion from Smi, HeapNumber | 4505 // This accessor applies the correct conversion from Smi, HeapNumber |
| 4514 // and undefined. | 4506 // and undefined. |
| 4515 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4507 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
| 4516 | 4508 |
| 4517 // Casting. | 4509 // Casting. |
| 4518 static inline ExternalIntArray* cast(Object* obj); | 4510 static inline ExternalIntArray* cast(Object* obj); |
| 4519 | 4511 |
| 4520 // Dispatched behavior. | 4512 // Dispatched behavior. |
| 4521 DECLARE_PRINTER(ExternalIntArray) | 4513 DECLARE_PRINTER(ExternalIntArray) |
| 4522 DECLARE_VERIFIER(ExternalIntArray) | 4514 DECLARE_VERIFIER(ExternalIntArray) |
| 4523 | 4515 |
| 4524 private: | 4516 private: |
| 4525 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalIntArray); | 4517 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalIntArray); |
| 4526 }; | 4518 }; |
| 4527 | 4519 |
| 4528 | 4520 |
| 4529 class ExternalUnsignedIntArray V8_FINAL : public ExternalArray { | 4521 class ExternalUnsignedIntArray: public ExternalArray { |
| 4530 public: | 4522 public: |
| 4531 // Setter and getter. | 4523 // Setter and getter. |
| 4532 inline uint32_t get_scalar(int index); | 4524 inline uint32_t get_scalar(int index); |
| 4533 MUST_USE_RESULT inline MaybeObject* get(int index); | 4525 MUST_USE_RESULT inline MaybeObject* get(int index); |
| 4534 inline void set(int index, uint32_t value); | 4526 inline void set(int index, uint32_t value); |
| 4535 | 4527 |
| 4536 // This accessor applies the correct conversion from Smi, HeapNumber | 4528 // This accessor applies the correct conversion from Smi, HeapNumber |
| 4537 // and undefined. | 4529 // and undefined. |
| 4538 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4530 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
| 4539 | 4531 |
| 4540 // Casting. | 4532 // Casting. |
| 4541 static inline ExternalUnsignedIntArray* cast(Object* obj); | 4533 static inline ExternalUnsignedIntArray* cast(Object* obj); |
| 4542 | 4534 |
| 4543 // Dispatched behavior. | 4535 // Dispatched behavior. |
| 4544 DECLARE_PRINTER(ExternalUnsignedIntArray) | 4536 DECLARE_PRINTER(ExternalUnsignedIntArray) |
| 4545 DECLARE_VERIFIER(ExternalUnsignedIntArray) | 4537 DECLARE_VERIFIER(ExternalUnsignedIntArray) |
| 4546 | 4538 |
| 4547 private: | 4539 private: |
| 4548 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedIntArray); | 4540 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedIntArray); |
| 4549 }; | 4541 }; |
| 4550 | 4542 |
| 4551 | 4543 |
| 4552 class ExternalFloatArray V8_FINAL : public ExternalArray { | 4544 class ExternalFloatArray: public ExternalArray { |
| 4553 public: | 4545 public: |
| 4554 // Setter and getter. | 4546 // Setter and getter. |
| 4555 inline float get_scalar(int index); | 4547 inline float get_scalar(int index); |
| 4556 MUST_USE_RESULT inline MaybeObject* get(int index); | 4548 MUST_USE_RESULT inline MaybeObject* get(int index); |
| 4557 inline void set(int index, float value); | 4549 inline void set(int index, float value); |
| 4558 | 4550 |
| 4559 // This accessor applies the correct conversion from Smi, HeapNumber | 4551 // This accessor applies the correct conversion from Smi, HeapNumber |
| 4560 // and undefined. | 4552 // and undefined. |
| 4561 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4553 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
| 4562 | 4554 |
| 4563 // Casting. | 4555 // Casting. |
| 4564 static inline ExternalFloatArray* cast(Object* obj); | 4556 static inline ExternalFloatArray* cast(Object* obj); |
| 4565 | 4557 |
| 4566 // Dispatched behavior. | 4558 // Dispatched behavior. |
| 4567 DECLARE_PRINTER(ExternalFloatArray) | 4559 DECLARE_PRINTER(ExternalFloatArray) |
| 4568 DECLARE_VERIFIER(ExternalFloatArray) | 4560 DECLARE_VERIFIER(ExternalFloatArray) |
| 4569 | 4561 |
| 4570 private: | 4562 private: |
| 4571 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloatArray); | 4563 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloatArray); |
| 4572 }; | 4564 }; |
| 4573 | 4565 |
| 4574 | 4566 |
| 4575 class ExternalDoubleArray V8_FINAL : public ExternalArray { | 4567 class ExternalDoubleArray: public ExternalArray { |
| 4576 public: | 4568 public: |
| 4577 // Setter and getter. | 4569 // Setter and getter. |
| 4578 inline double get_scalar(int index); | 4570 inline double get_scalar(int index); |
| 4579 MUST_USE_RESULT inline MaybeObject* get(int index); | 4571 MUST_USE_RESULT inline MaybeObject* get(int index); |
| 4580 inline void set(int index, double value); | 4572 inline void set(int index, double value); |
| 4581 | 4573 |
| 4582 // This accessor applies the correct conversion from Smi, HeapNumber | 4574 // This accessor applies the correct conversion from Smi, HeapNumber |
| 4583 // and undefined. | 4575 // and undefined. |
| 4584 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4576 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
| 4585 | 4577 |
| 4586 // Casting. | 4578 // Casting. |
| 4587 static inline ExternalDoubleArray* cast(Object* obj); | 4579 static inline ExternalDoubleArray* cast(Object* obj); |
| 4588 | 4580 |
| 4589 // Dispatched behavior. | 4581 // Dispatched behavior. |
| 4590 DECLARE_PRINTER(ExternalDoubleArray) | 4582 DECLARE_PRINTER(ExternalDoubleArray) |
| 4591 DECLARE_VERIFIER(ExternalDoubleArray) | 4583 DECLARE_VERIFIER(ExternalDoubleArray) |
| 4592 | 4584 |
| 4593 private: | 4585 private: |
| 4594 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalDoubleArray); | 4586 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalDoubleArray); |
| 4595 }; | 4587 }; |
| 4596 | 4588 |
| 4597 | 4589 |
| 4598 // DeoptimizationInputData is a fixed array used to hold the deoptimization | 4590 // DeoptimizationInputData is a fixed array used to hold the deoptimization |
| 4599 // data for code generated by the Hydrogen/Lithium compiler. It also | 4591 // data for code generated by the Hydrogen/Lithium compiler. It also |
| 4600 // contains information about functions that were inlined. If N different | 4592 // contains information about functions that were inlined. If N different |
| 4601 // functions were inlined then first N elements of the literal array will | 4593 // functions were inlined then first N elements of the literal array will |
| 4602 // contain these functions. | 4594 // contain these functions. |
| 4603 // | 4595 // |
| 4604 // It can be empty. | 4596 // It can be empty. |
| 4605 class DeoptimizationInputData V8_FINAL : public FixedArray { | 4597 class DeoptimizationInputData: public FixedArray { |
| 4606 public: | 4598 public: |
| 4607 // Layout description. Indices in the array. | 4599 // Layout description. Indices in the array. |
| 4608 static const int kTranslationByteArrayIndex = 0; | 4600 static const int kTranslationByteArrayIndex = 0; |
| 4609 static const int kInlinedFunctionCountIndex = 1; | 4601 static const int kInlinedFunctionCountIndex = 1; |
| 4610 static const int kLiteralArrayIndex = 2; | 4602 static const int kLiteralArrayIndex = 2; |
| 4611 static const int kOsrAstIdIndex = 3; | 4603 static const int kOsrAstIdIndex = 3; |
| 4612 static const int kOsrPcOffsetIndex = 4; | 4604 static const int kOsrPcOffsetIndex = 4; |
| 4613 static const int kFirstDeoptEntryIndex = 5; | 4605 static const int kFirstDeoptEntryIndex = 5; |
| 4614 | 4606 |
| 4615 // Offsets of deopt entry elements relative to the start of the entry. | 4607 // Offsets of deopt entry elements relative to the start of the entry. |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4684 return IndexForEntry(entry_count); | 4676 return IndexForEntry(entry_count); |
| 4685 } | 4677 } |
| 4686 }; | 4678 }; |
| 4687 | 4679 |
| 4688 | 4680 |
| 4689 // DeoptimizationOutputData is a fixed array used to hold the deoptimization | 4681 // DeoptimizationOutputData is a fixed array used to hold the deoptimization |
| 4690 // data for code generated by the full compiler. | 4682 // data for code generated by the full compiler. |
| 4691 // The format of the these objects is | 4683 // The format of the these objects is |
| 4692 // [i * 2]: Ast ID for ith deoptimization. | 4684 // [i * 2]: Ast ID for ith deoptimization. |
| 4693 // [i * 2 + 1]: PC and state of ith deoptimization | 4685 // [i * 2 + 1]: PC and state of ith deoptimization |
| 4694 class DeoptimizationOutputData V8_FINAL : public FixedArray { | 4686 class DeoptimizationOutputData: public FixedArray { |
| 4695 public: | 4687 public: |
| 4696 int DeoptPoints() { return length() / 2; } | 4688 int DeoptPoints() { return length() / 2; } |
| 4697 | 4689 |
| 4698 BailoutId AstId(int index) { | 4690 BailoutId AstId(int index) { |
| 4699 return BailoutId(Smi::cast(get(index * 2))->value()); | 4691 return BailoutId(Smi::cast(get(index * 2))->value()); |
| 4700 } | 4692 } |
| 4701 | 4693 |
| 4702 void SetAstId(int index, BailoutId id) { | 4694 void SetAstId(int index, BailoutId id) { |
| 4703 set(index * 2, Smi::FromInt(id.ToInt())); | 4695 set(index * 2, Smi::FromInt(id.ToInt())); |
| 4704 } | 4696 } |
| (...skipping 20 matching lines...) Expand all Loading... |
| 4725 | 4717 |
| 4726 // Forward declaration. | 4718 // Forward declaration. |
| 4727 class Cell; | 4719 class Cell; |
| 4728 class PropertyCell; | 4720 class PropertyCell; |
| 4729 | 4721 |
| 4730 // TypeFeedbackCells is a fixed array used to hold the association between | 4722 // TypeFeedbackCells is a fixed array used to hold the association between |
| 4731 // cache cells and AST ids for code generated by the full compiler. | 4723 // cache cells and AST ids for code generated by the full compiler. |
| 4732 // The format of the these objects is | 4724 // The format of the these objects is |
| 4733 // [i * 2]: Global property cell of ith cache cell. | 4725 // [i * 2]: Global property cell of ith cache cell. |
| 4734 // [i * 2 + 1]: Ast ID for ith cache cell. | 4726 // [i * 2 + 1]: Ast ID for ith cache cell. |
| 4735 class TypeFeedbackCells V8_FINAL : public FixedArray { | 4727 class TypeFeedbackCells: public FixedArray { |
| 4736 public: | 4728 public: |
| 4737 int CellCount() { return length() / 2; } | 4729 int CellCount() { return length() / 2; } |
| 4738 static int LengthOfFixedArray(int cell_count) { return cell_count * 2; } | 4730 static int LengthOfFixedArray(int cell_count) { return cell_count * 2; } |
| 4739 | 4731 |
| 4740 // Accessors for AST ids associated with cache values. | 4732 // Accessors for AST ids associated with cache values. |
| 4741 inline TypeFeedbackId AstId(int index); | 4733 inline TypeFeedbackId AstId(int index); |
| 4742 inline void SetAstId(int index, TypeFeedbackId id); | 4734 inline void SetAstId(int index, TypeFeedbackId id); |
| 4743 | 4735 |
| 4744 // Accessors for global property cells holding the cache values. | 4736 // Accessors for global property cells holding the cache values. |
| 4745 inline Cell* GetCell(int index); | 4737 inline Cell* GetCell(int index); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 4766 static const int kForInFastCaseMarker = 0; | 4758 static const int kForInFastCaseMarker = 0; |
| 4767 static const int kForInSlowCaseMarker = 1; | 4759 static const int kForInSlowCaseMarker = 1; |
| 4768 }; | 4760 }; |
| 4769 | 4761 |
| 4770 | 4762 |
| 4771 // Forward declaration. | 4763 // Forward declaration. |
| 4772 class SafepointEntry; | 4764 class SafepointEntry; |
| 4773 class TypeFeedbackInfo; | 4765 class TypeFeedbackInfo; |
| 4774 | 4766 |
| 4775 // Code describes objects with on-the-fly generated machine code. | 4767 // Code describes objects with on-the-fly generated machine code. |
| 4776 class Code V8_FINAL : public HeapObject { | 4768 class Code: public HeapObject { |
| 4777 public: | 4769 public: |
| 4778 // Opaque data type for encapsulating code flags like kind, inline | 4770 // Opaque data type for encapsulating code flags like kind, inline |
| 4779 // cache state, and arguments count. | 4771 // cache state, and arguments count. |
| 4780 typedef uint32_t Flags; | 4772 typedef uint32_t Flags; |
| 4781 | 4773 |
| 4782 #define NON_IC_KIND_LIST(V) \ | 4774 #define NON_IC_KIND_LIST(V) \ |
| 4783 V(FUNCTION) \ | 4775 V(FUNCTION) \ |
| 4784 V(OPTIMIZED_FUNCTION) \ | 4776 V(OPTIMIZED_FUNCTION) \ |
| 4785 V(STUB) \ | 4777 V(STUB) \ |
| 4786 V(BUILTIN) \ | 4778 V(BUILTIN) \ |
| (...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5337 // The first n elements are Smis, each of them specifies the number of codes | 5329 // The first n elements are Smis, each of them specifies the number of codes |
| 5338 // in the corresponding group. The subsequent elements contain grouped code | 5330 // in the corresponding group. The subsequent elements contain grouped code |
| 5339 // objects. The suffix of the array can be filled with the undefined value if | 5331 // objects. The suffix of the array can be filled with the undefined value if |
| 5340 // the number of codes is less than the length of the array. The order of the | 5332 // the number of codes is less than the length of the array. The order of the |
| 5341 // code objects within a group is not preserved. | 5333 // code objects within a group is not preserved. |
| 5342 // | 5334 // |
| 5343 // All code indexes used in the class are counted starting from the first | 5335 // All code indexes used in the class are counted starting from the first |
| 5344 // code object of the first group. In other words, code index 0 corresponds | 5336 // code object of the first group. In other words, code index 0 corresponds |
| 5345 // to array index n = kCodesStartIndex. | 5337 // to array index n = kCodesStartIndex. |
| 5346 | 5338 |
| 5347 class DependentCode V8_FINAL : public FixedArray { | 5339 class DependentCode: public FixedArray { |
| 5348 public: | 5340 public: |
| 5349 enum DependencyGroup { | 5341 enum DependencyGroup { |
| 5350 // Group of code that weakly embed this map and depend on being | 5342 // Group of code that weakly embed this map and depend on being |
| 5351 // deoptimized when the map is garbage collected. | 5343 // deoptimized when the map is garbage collected. |
| 5352 kWeaklyEmbeddedGroup, | 5344 kWeaklyEmbeddedGroup, |
| 5353 // Group of code that embed a transition to this map, and depend on being | 5345 // Group of code that embed a transition to this map, and depend on being |
| 5354 // deoptimized when the transition is replaced by a new version. | 5346 // deoptimized when the transition is replaced by a new version. |
| 5355 kTransitionGroup, | 5347 kTransitionGroup, |
| 5356 // Group of code that omit run-time prototype checks for prototypes | 5348 // Group of code that omit run-time prototype checks for prototypes |
| 5357 // described by this map. The group is deoptimized whenever an object | 5349 // described by this map. The group is deoptimized whenever an object |
| 5358 // described by this map changes shape (and transitions to a new map), | 5350 // described by this map changes shape (and transitions to a new map), |
| 5359 // possibly invalidating the assumptions embedded in the code. | 5351 // possibly invalidating the assumptions embedded in the code. |
| 5360 kPrototypeCheckGroup, | 5352 kPrototypeCheckGroup, |
| 5361 // Group of code that depends on elements not being added to objects with | 5353 // Group of code that depends on elements not being added to objects with |
| 5362 // this map. | 5354 // this map. |
| 5363 kElementsCantBeAddedGroup, | 5355 kElementsCantBeAddedGroup, |
| 5364 // Group of code that depends on global property values in property cells | 5356 // Group of code that depends on global property values in property cells |
| 5365 // not being changed. | 5357 // not being changed. |
| 5366 kPropertyCellChangedGroup, | 5358 kPropertyCellChangedGroup, |
| 5367 kGroupCount = kPropertyCellChangedGroup + 1 | 5359 kGroupCount = kPropertyCellChangedGroup + 1 |
| 5368 }; | 5360 }; |
| 5369 | 5361 |
| 5370 // Array for holding the index of the first code object of each group. | 5362 // Array for holding the index of the first code object of each group. |
| 5371 // The last element stores the total number of code objects. | 5363 // The last element stores the total number of code objects. |
| 5372 class GroupStartIndexes V8_FINAL { | 5364 class GroupStartIndexes { |
| 5373 public: | 5365 public: |
| 5374 explicit GroupStartIndexes(DependentCode* entries); | 5366 explicit GroupStartIndexes(DependentCode* entries); |
| 5375 void Recompute(DependentCode* entries); | 5367 void Recompute(DependentCode* entries); |
| 5376 int at(int i) { return start_indexes_[i]; } | 5368 int at(int i) { return start_indexes_[i]; } |
| 5377 int number_of_entries() { return start_indexes_[kGroupCount]; } | 5369 int number_of_entries() { return start_indexes_[kGroupCount]; } |
| 5378 private: | 5370 private: |
| 5379 int start_indexes_[kGroupCount + 1]; | 5371 int start_indexes_[kGroupCount + 1]; |
| 5380 }; | 5372 }; |
| 5381 | 5373 |
| 5382 bool Contains(DependencyGroup group, Code* code); | 5374 bool Contains(DependencyGroup group, Code* code); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5414 // code objects of the subsequent groups. | 5406 // code objects of the subsequent groups. |
| 5415 inline void ExtendGroup(DependencyGroup group); | 5407 inline void ExtendGroup(DependencyGroup group); |
| 5416 static const int kCodesStartIndex = kGroupCount; | 5408 static const int kCodesStartIndex = kGroupCount; |
| 5417 }; | 5409 }; |
| 5418 | 5410 |
| 5419 | 5411 |
| 5420 // All heap objects have a Map that describes their structure. | 5412 // All heap objects have a Map that describes their structure. |
| 5421 // A Map contains information about: | 5413 // A Map contains information about: |
| 5422 // - Size information about the object | 5414 // - Size information about the object |
| 5423 // - How to iterate over an object (for garbage collection) | 5415 // - How to iterate over an object (for garbage collection) |
| 5424 class Map : public HeapObject { | 5416 class Map: public HeapObject { |
| 5425 public: | 5417 public: |
| 5426 // Instance size. | 5418 // Instance size. |
| 5427 // Size in bytes or kVariableSizeSentinel if instances do not have | 5419 // Size in bytes or kVariableSizeSentinel if instances do not have |
| 5428 // a fixed size. | 5420 // a fixed size. |
| 5429 inline int instance_size(); | 5421 inline int instance_size(); |
| 5430 inline void set_instance_size(int value); | 5422 inline void set_instance_size(int value); |
| 5431 | 5423 |
| 5432 // Count of properties allocated in the object. | 5424 // Count of properties allocated in the object. |
| 5433 inline int inobject_properties(); | 5425 inline int inobject_properties(); |
| 5434 inline void set_inobject_properties(int value); | 5426 inline void set_inobject_properties(int value); |
| (...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6068 // It doesn't carry much functionality but allows struct classes to be | 6060 // It doesn't carry much functionality but allows struct classes to be |
| 6069 // identified in the type system. | 6061 // identified in the type system. |
| 6070 class Struct: public HeapObject { | 6062 class Struct: public HeapObject { |
| 6071 public: | 6063 public: |
| 6072 inline void InitializeBody(int object_size); | 6064 inline void InitializeBody(int object_size); |
| 6073 static inline Struct* cast(Object* that); | 6065 static inline Struct* cast(Object* that); |
| 6074 }; | 6066 }; |
| 6075 | 6067 |
| 6076 | 6068 |
| 6077 // A simple one-element struct, useful where smis need to be boxed. | 6069 // A simple one-element struct, useful where smis need to be boxed. |
| 6078 class Box V8_FINAL : public Struct { | 6070 class Box : public Struct { |
| 6079 public: | 6071 public: |
| 6080 // [value]: the boxed contents. | 6072 // [value]: the boxed contents. |
| 6081 DECL_ACCESSORS(value, Object) | 6073 DECL_ACCESSORS(value, Object) |
| 6082 | 6074 |
| 6083 static inline Box* cast(Object* obj); | 6075 static inline Box* cast(Object* obj); |
| 6084 | 6076 |
| 6085 // Dispatched behavior. | 6077 // Dispatched behavior. |
| 6086 DECLARE_PRINTER(Box) | 6078 DECLARE_PRINTER(Box) |
| 6087 DECLARE_VERIFIER(Box) | 6079 DECLARE_VERIFIER(Box) |
| 6088 | 6080 |
| 6089 static const int kValueOffset = HeapObject::kHeaderSize; | 6081 static const int kValueOffset = HeapObject::kHeaderSize; |
| 6090 static const int kSize = kValueOffset + kPointerSize; | 6082 static const int kSize = kValueOffset + kPointerSize; |
| 6091 | 6083 |
| 6092 private: | 6084 private: |
| 6093 DISALLOW_IMPLICIT_CONSTRUCTORS(Box); | 6085 DISALLOW_IMPLICIT_CONSTRUCTORS(Box); |
| 6094 }; | 6086 }; |
| 6095 | 6087 |
| 6096 | 6088 |
| 6097 // Script describes a script which has been added to the VM. | 6089 // Script describes a script which has been added to the VM. |
| 6098 class Script V8_FINAL : public Struct { | 6090 class Script: public Struct { |
| 6099 public: | 6091 public: |
| 6100 // Script types. | 6092 // Script types. |
| 6101 enum Type { | 6093 enum Type { |
| 6102 TYPE_NATIVE = 0, | 6094 TYPE_NATIVE = 0, |
| 6103 TYPE_EXTENSION = 1, | 6095 TYPE_EXTENSION = 1, |
| 6104 TYPE_NORMAL = 2 | 6096 TYPE_NORMAL = 2 |
| 6105 }; | 6097 }; |
| 6106 | 6098 |
| 6107 // Script compilation types. | 6099 // Script compilation types. |
| 6108 enum CompilationType { | 6100 enum CompilationType { |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6257 #undef DECLARE_FUNCTION_ID | 6249 #undef DECLARE_FUNCTION_ID |
| 6258 // Fake id for a special case of Math.pow. Note, it continues the | 6250 // Fake id for a special case of Math.pow. Note, it continues the |
| 6259 // list of math functions. | 6251 // list of math functions. |
| 6260 kMathPowHalf, | 6252 kMathPowHalf, |
| 6261 kFirstMathFunctionId = kMathFloor | 6253 kFirstMathFunctionId = kMathFloor |
| 6262 }; | 6254 }; |
| 6263 | 6255 |
| 6264 | 6256 |
| 6265 // SharedFunctionInfo describes the JSFunction information that can be | 6257 // SharedFunctionInfo describes the JSFunction information that can be |
| 6266 // shared by multiple instances of the function. | 6258 // shared by multiple instances of the function. |
| 6267 class SharedFunctionInfo V8_FINAL : public HeapObject { | 6259 class SharedFunctionInfo: public HeapObject { |
| 6268 public: | 6260 public: |
| 6269 // [name]: Function name. | 6261 // [name]: Function name. |
| 6270 DECL_ACCESSORS(name, Object) | 6262 DECL_ACCESSORS(name, Object) |
| 6271 | 6263 |
| 6272 // [code]: Function code. | 6264 // [code]: Function code. |
| 6273 DECL_ACCESSORS(code, Code) | 6265 DECL_ACCESSORS(code, Code) |
| 6274 inline void ReplaceCode(Code* code); | 6266 inline void ReplaceCode(Code* code); |
| 6275 | 6267 |
| 6276 // [optimized_code_map]: Map from native context to optimized code | 6268 // [optimized_code_map]: Map from native context to optimized code |
| 6277 // and a shared literals array or Smi(0) if none. | 6269 // and a shared literals array or Smi(0) if none. |
| (...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6836 ((kNative + kCompilerHintsSmiTagSize) / kBitsPerByte); | 6828 ((kNative + kCompilerHintsSmiTagSize) / kBitsPerByte); |
| 6837 #else | 6829 #else |
| 6838 #error Unknown byte ordering | 6830 #error Unknown byte ordering |
| 6839 #endif | 6831 #endif |
| 6840 | 6832 |
| 6841 private: | 6833 private: |
| 6842 DISALLOW_IMPLICIT_CONSTRUCTORS(SharedFunctionInfo); | 6834 DISALLOW_IMPLICIT_CONSTRUCTORS(SharedFunctionInfo); |
| 6843 }; | 6835 }; |
| 6844 | 6836 |
| 6845 | 6837 |
| 6846 class JSGeneratorObject V8_FINAL : public JSObject { | 6838 class JSGeneratorObject: public JSObject { |
| 6847 public: | 6839 public: |
| 6848 // [function]: The function corresponding to this generator object. | 6840 // [function]: The function corresponding to this generator object. |
| 6849 DECL_ACCESSORS(function, JSFunction) | 6841 DECL_ACCESSORS(function, JSFunction) |
| 6850 | 6842 |
| 6851 // [context]: The context of the suspended computation. | 6843 // [context]: The context of the suspended computation. |
| 6852 DECL_ACCESSORS(context, Context) | 6844 DECL_ACCESSORS(context, Context) |
| 6853 | 6845 |
| 6854 // [receiver]: The receiver of the suspended computation. | 6846 // [receiver]: The receiver of the suspended computation. |
| 6855 DECL_ACCESSORS(receiver, Object) | 6847 DECL_ACCESSORS(receiver, Object) |
| 6856 | 6848 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6904 static const int kResultDonePropertyOffset = | 6896 static const int kResultDonePropertyOffset = |
| 6905 kResultValuePropertyOffset + kPointerSize; | 6897 kResultValuePropertyOffset + kPointerSize; |
| 6906 static const int kResultSize = kResultDonePropertyOffset + kPointerSize; | 6898 static const int kResultSize = kResultDonePropertyOffset + kPointerSize; |
| 6907 | 6899 |
| 6908 private: | 6900 private: |
| 6909 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGeneratorObject); | 6901 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGeneratorObject); |
| 6910 }; | 6902 }; |
| 6911 | 6903 |
| 6912 | 6904 |
| 6913 // Representation for module instance objects. | 6905 // Representation for module instance objects. |
| 6914 class JSModule V8_FINAL : public JSObject { | 6906 class JSModule: public JSObject { |
| 6915 public: | 6907 public: |
| 6916 // [context]: the context holding the module's locals, or undefined if none. | 6908 // [context]: the context holding the module's locals, or undefined if none. |
| 6917 DECL_ACCESSORS(context, Object) | 6909 DECL_ACCESSORS(context, Object) |
| 6918 | 6910 |
| 6919 // [scope_info]: Scope info. | 6911 // [scope_info]: Scope info. |
| 6920 DECL_ACCESSORS(scope_info, ScopeInfo) | 6912 DECL_ACCESSORS(scope_info, ScopeInfo) |
| 6921 | 6913 |
| 6922 // Casting. | 6914 // Casting. |
| 6923 static inline JSModule* cast(Object* obj); | 6915 static inline JSModule* cast(Object* obj); |
| 6924 | 6916 |
| 6925 // Dispatched behavior. | 6917 // Dispatched behavior. |
| 6926 DECLARE_PRINTER(JSModule) | 6918 DECLARE_PRINTER(JSModule) |
| 6927 DECLARE_VERIFIER(JSModule) | 6919 DECLARE_VERIFIER(JSModule) |
| 6928 | 6920 |
| 6929 // Layout description. | 6921 // Layout description. |
| 6930 static const int kContextOffset = JSObject::kHeaderSize; | 6922 static const int kContextOffset = JSObject::kHeaderSize; |
| 6931 static const int kScopeInfoOffset = kContextOffset + kPointerSize; | 6923 static const int kScopeInfoOffset = kContextOffset + kPointerSize; |
| 6932 static const int kSize = kScopeInfoOffset + kPointerSize; | 6924 static const int kSize = kScopeInfoOffset + kPointerSize; |
| 6933 | 6925 |
| 6934 private: | 6926 private: |
| 6935 DISALLOW_IMPLICIT_CONSTRUCTORS(JSModule); | 6927 DISALLOW_IMPLICIT_CONSTRUCTORS(JSModule); |
| 6936 }; | 6928 }; |
| 6937 | 6929 |
| 6938 | 6930 |
| 6939 // JSFunction describes JavaScript functions. | 6931 // JSFunction describes JavaScript functions. |
| 6940 class JSFunction V8_FINAL : public JSObject { | 6932 class JSFunction: public JSObject { |
| 6941 public: | 6933 public: |
| 6942 // [prototype_or_initial_map]: | 6934 // [prototype_or_initial_map]: |
| 6943 DECL_ACCESSORS(prototype_or_initial_map, Object) | 6935 DECL_ACCESSORS(prototype_or_initial_map, Object) |
| 6944 | 6936 |
| 6945 // [shared]: The information about the function that | 6937 // [shared]: The information about the function that |
| 6946 // can be shared by instances. | 6938 // can be shared by instances. |
| 6947 DECL_ACCESSORS(shared, SharedFunctionInfo) | 6939 DECL_ACCESSORS(shared, SharedFunctionInfo) |
| 6948 | 6940 |
| 6949 // [context]: The context for this function. | 6941 // [context]: The context for this function. |
| 6950 inline Context* context(); | 6942 inline Context* context(); |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7117 | 7109 |
| 7118 | 7110 |
| 7119 // JSGlobalProxy's prototype must be a JSGlobalObject or null, | 7111 // JSGlobalProxy's prototype must be a JSGlobalObject or null, |
| 7120 // and the prototype is hidden. JSGlobalProxy always delegates | 7112 // and the prototype is hidden. JSGlobalProxy always delegates |
| 7121 // property accesses to its prototype if the prototype is not null. | 7113 // property accesses to its prototype if the prototype is not null. |
| 7122 // | 7114 // |
| 7123 // A JSGlobalProxy can be reinitialized which will preserve its identity. | 7115 // A JSGlobalProxy can be reinitialized which will preserve its identity. |
| 7124 // | 7116 // |
| 7125 // Accessing a JSGlobalProxy requires security check. | 7117 // Accessing a JSGlobalProxy requires security check. |
| 7126 | 7118 |
| 7127 class JSGlobalProxy V8_FINAL : public JSObject { | 7119 class JSGlobalProxy : public JSObject { |
| 7128 public: | 7120 public: |
| 7129 // [native_context]: the owner native context of this global proxy object. | 7121 // [native_context]: the owner native context of this global proxy object. |
| 7130 // It is null value if this object is not used by any context. | 7122 // It is null value if this object is not used by any context. |
| 7131 DECL_ACCESSORS(native_context, Object) | 7123 DECL_ACCESSORS(native_context, Object) |
| 7132 | 7124 |
| 7133 // Casting. | 7125 // Casting. |
| 7134 static inline JSGlobalProxy* cast(Object* obj); | 7126 static inline JSGlobalProxy* cast(Object* obj); |
| 7135 | 7127 |
| 7136 // Dispatched behavior. | 7128 // Dispatched behavior. |
| 7137 DECLARE_PRINTER(JSGlobalProxy) | 7129 DECLARE_PRINTER(JSGlobalProxy) |
| 7138 DECLARE_VERIFIER(JSGlobalProxy) | 7130 DECLARE_VERIFIER(JSGlobalProxy) |
| 7139 | 7131 |
| 7140 // Layout description. | 7132 // Layout description. |
| 7141 static const int kNativeContextOffset = JSObject::kHeaderSize; | 7133 static const int kNativeContextOffset = JSObject::kHeaderSize; |
| 7142 static const int kSize = kNativeContextOffset + kPointerSize; | 7134 static const int kSize = kNativeContextOffset + kPointerSize; |
| 7143 | 7135 |
| 7144 private: | 7136 private: |
| 7145 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalProxy); | 7137 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalProxy); |
| 7146 }; | 7138 }; |
| 7147 | 7139 |
| 7148 | 7140 |
| 7149 // Forward declaration. | 7141 // Forward declaration. |
| 7150 class JSBuiltinsObject; | 7142 class JSBuiltinsObject; |
| 7151 | 7143 |
| 7152 // Common super class for JavaScript global objects and the special | 7144 // Common super class for JavaScript global objects and the special |
| 7153 // builtins global objects. | 7145 // builtins global objects. |
| 7154 class GlobalObject : public JSObject { | 7146 class GlobalObject: public JSObject { |
| 7155 public: | 7147 public: |
| 7156 // [builtins]: the object holding the runtime routines written in JS. | 7148 // [builtins]: the object holding the runtime routines written in JS. |
| 7157 DECL_ACCESSORS(builtins, JSBuiltinsObject) | 7149 DECL_ACCESSORS(builtins, JSBuiltinsObject) |
| 7158 | 7150 |
| 7159 // [native context]: the natives corresponding to this global object. | 7151 // [native context]: the natives corresponding to this global object. |
| 7160 DECL_ACCESSORS(native_context, Context) | 7152 DECL_ACCESSORS(native_context, Context) |
| 7161 | 7153 |
| 7162 // [global context]: the most recent (i.e. innermost) global context. | 7154 // [global context]: the most recent (i.e. innermost) global context. |
| 7163 DECL_ACCESSORS(global_context, Context) | 7155 DECL_ACCESSORS(global_context, Context) |
| 7164 | 7156 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 7190 static const int kGlobalContextOffset = kNativeContextOffset + kPointerSize; | 7182 static const int kGlobalContextOffset = kNativeContextOffset + kPointerSize; |
| 7191 static const int kGlobalReceiverOffset = kGlobalContextOffset + kPointerSize; | 7183 static const int kGlobalReceiverOffset = kGlobalContextOffset + kPointerSize; |
| 7192 static const int kHeaderSize = kGlobalReceiverOffset + kPointerSize; | 7184 static const int kHeaderSize = kGlobalReceiverOffset + kPointerSize; |
| 7193 | 7185 |
| 7194 private: | 7186 private: |
| 7195 DISALLOW_IMPLICIT_CONSTRUCTORS(GlobalObject); | 7187 DISALLOW_IMPLICIT_CONSTRUCTORS(GlobalObject); |
| 7196 }; | 7188 }; |
| 7197 | 7189 |
| 7198 | 7190 |
| 7199 // JavaScript global object. | 7191 // JavaScript global object. |
| 7200 class JSGlobalObject V8_FINAL : public GlobalObject { | 7192 class JSGlobalObject: public GlobalObject { |
| 7201 public: | 7193 public: |
| 7202 // Casting. | 7194 // Casting. |
| 7203 static inline JSGlobalObject* cast(Object* obj); | 7195 static inline JSGlobalObject* cast(Object* obj); |
| 7204 | 7196 |
| 7205 // Dispatched behavior. | 7197 // Dispatched behavior. |
| 7206 DECLARE_PRINTER(JSGlobalObject) | 7198 DECLARE_PRINTER(JSGlobalObject) |
| 7207 DECLARE_VERIFIER(JSGlobalObject) | 7199 DECLARE_VERIFIER(JSGlobalObject) |
| 7208 | 7200 |
| 7209 // Layout description. | 7201 // Layout description. |
| 7210 static const int kSize = GlobalObject::kHeaderSize; | 7202 static const int kSize = GlobalObject::kHeaderSize; |
| 7211 | 7203 |
| 7212 private: | 7204 private: |
| 7213 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalObject); | 7205 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalObject); |
| 7214 }; | 7206 }; |
| 7215 | 7207 |
| 7216 | 7208 |
| 7217 // Builtins global object which holds the runtime routines written in | 7209 // Builtins global object which holds the runtime routines written in |
| 7218 // JavaScript. | 7210 // JavaScript. |
| 7219 class JSBuiltinsObject V8_FINAL : public GlobalObject { | 7211 class JSBuiltinsObject: public GlobalObject { |
| 7220 public: | 7212 public: |
| 7221 // Accessors for the runtime routines written in JavaScript. | 7213 // Accessors for the runtime routines written in JavaScript. |
| 7222 inline Object* javascript_builtin(Builtins::JavaScript id); | 7214 inline Object* javascript_builtin(Builtins::JavaScript id); |
| 7223 inline void set_javascript_builtin(Builtins::JavaScript id, Object* value); | 7215 inline void set_javascript_builtin(Builtins::JavaScript id, Object* value); |
| 7224 | 7216 |
| 7225 // Accessors for code of the runtime routines written in JavaScript. | 7217 // Accessors for code of the runtime routines written in JavaScript. |
| 7226 inline Code* javascript_builtin_code(Builtins::JavaScript id); | 7218 inline Code* javascript_builtin_code(Builtins::JavaScript id); |
| 7227 inline void set_javascript_builtin_code(Builtins::JavaScript id, Code* value); | 7219 inline void set_javascript_builtin_code(Builtins::JavaScript id, Code* value); |
| 7228 | 7220 |
| 7229 // Casting. | 7221 // Casting. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 7250 static int OffsetOfCodeWithId(Builtins::JavaScript id) { | 7242 static int OffsetOfCodeWithId(Builtins::JavaScript id) { |
| 7251 return kJSBuiltinsCodeOffset + id * kPointerSize; | 7243 return kJSBuiltinsCodeOffset + id * kPointerSize; |
| 7252 } | 7244 } |
| 7253 | 7245 |
| 7254 private: | 7246 private: |
| 7255 DISALLOW_IMPLICIT_CONSTRUCTORS(JSBuiltinsObject); | 7247 DISALLOW_IMPLICIT_CONSTRUCTORS(JSBuiltinsObject); |
| 7256 }; | 7248 }; |
| 7257 | 7249 |
| 7258 | 7250 |
| 7259 // Representation for JS Wrapper objects, String, Number, Boolean, etc. | 7251 // Representation for JS Wrapper objects, String, Number, Boolean, etc. |
| 7260 class JSValue V8_FINAL : public JSObject { | 7252 class JSValue: public JSObject { |
| 7261 public: | 7253 public: |
| 7262 // [value]: the object being wrapped. | 7254 // [value]: the object being wrapped. |
| 7263 DECL_ACCESSORS(value, Object) | 7255 DECL_ACCESSORS(value, Object) |
| 7264 | 7256 |
| 7265 // Casting. | 7257 // Casting. |
| 7266 static inline JSValue* cast(Object* obj); | 7258 static inline JSValue* cast(Object* obj); |
| 7267 | 7259 |
| 7268 // Dispatched behavior. | 7260 // Dispatched behavior. |
| 7269 DECLARE_PRINTER(JSValue) | 7261 DECLARE_PRINTER(JSValue) |
| 7270 DECLARE_VERIFIER(JSValue) | 7262 DECLARE_VERIFIER(JSValue) |
| 7271 | 7263 |
| 7272 // Layout description. | 7264 // Layout description. |
| 7273 static const int kValueOffset = JSObject::kHeaderSize; | 7265 static const int kValueOffset = JSObject::kHeaderSize; |
| 7274 static const int kSize = kValueOffset + kPointerSize; | 7266 static const int kSize = kValueOffset + kPointerSize; |
| 7275 | 7267 |
| 7276 private: | 7268 private: |
| 7277 DISALLOW_IMPLICIT_CONSTRUCTORS(JSValue); | 7269 DISALLOW_IMPLICIT_CONSTRUCTORS(JSValue); |
| 7278 }; | 7270 }; |
| 7279 | 7271 |
| 7280 | 7272 |
| 7281 class DateCache; | 7273 class DateCache; |
| 7282 | 7274 |
| 7283 // Representation for JS date objects. | 7275 // Representation for JS date objects. |
| 7284 class JSDate V8_FINAL : public JSObject { | 7276 class JSDate: public JSObject { |
| 7285 public: | 7277 public: |
| 7286 // If one component is NaN, all of them are, indicating a NaN time value. | 7278 // If one component is NaN, all of them are, indicating a NaN time value. |
| 7287 // [value]: the time value. | 7279 // [value]: the time value. |
| 7288 DECL_ACCESSORS(value, Object) | 7280 DECL_ACCESSORS(value, Object) |
| 7289 // [year]: caches year. Either undefined, smi, or NaN. | 7281 // [year]: caches year. Either undefined, smi, or NaN. |
| 7290 DECL_ACCESSORS(year, Object) | 7282 DECL_ACCESSORS(year, Object) |
| 7291 // [month]: caches month. Either undefined, smi, or NaN. | 7283 // [month]: caches month. Either undefined, smi, or NaN. |
| 7292 DECL_ACCESSORS(month, Object) | 7284 DECL_ACCESSORS(month, Object) |
| 7293 // [day]: caches day. Either undefined, smi, or NaN. | 7285 // [day]: caches day. Either undefined, smi, or NaN. |
| 7294 DECL_ACCESSORS(day, Object) | 7286 DECL_ACCESSORS(day, Object) |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7371 DISALLOW_IMPLICIT_CONSTRUCTORS(JSDate); | 7363 DISALLOW_IMPLICIT_CONSTRUCTORS(JSDate); |
| 7372 }; | 7364 }; |
| 7373 | 7365 |
| 7374 | 7366 |
| 7375 // Representation of message objects used for error reporting through | 7367 // Representation of message objects used for error reporting through |
| 7376 // the API. The messages are formatted in JavaScript so this object is | 7368 // the API. The messages are formatted in JavaScript so this object is |
| 7377 // a real JavaScript object. The information used for formatting the | 7369 // a real JavaScript object. The information used for formatting the |
| 7378 // error messages are not directly accessible from JavaScript to | 7370 // error messages are not directly accessible from JavaScript to |
| 7379 // prevent leaking information to user code called during error | 7371 // prevent leaking information to user code called during error |
| 7380 // formatting. | 7372 // formatting. |
| 7381 class JSMessageObject V8_FINAL : public JSObject { | 7373 class JSMessageObject: public JSObject { |
| 7382 public: | 7374 public: |
| 7383 // [type]: the type of error message. | 7375 // [type]: the type of error message. |
| 7384 DECL_ACCESSORS(type, String) | 7376 DECL_ACCESSORS(type, String) |
| 7385 | 7377 |
| 7386 // [arguments]: the arguments for formatting the error message. | 7378 // [arguments]: the arguments for formatting the error message. |
| 7387 DECL_ACCESSORS(arguments, JSArray) | 7379 DECL_ACCESSORS(arguments, JSArray) |
| 7388 | 7380 |
| 7389 // [script]: the script from which the error message originated. | 7381 // [script]: the script from which the error message originated. |
| 7390 DECL_ACCESSORS(script, Object) | 7382 DECL_ACCESSORS(script, Object) |
| 7391 | 7383 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7435 // - reference to the original flag string | 7427 // - reference to the original flag string |
| 7436 // If it is an atom regexp | 7428 // If it is an atom regexp |
| 7437 // - a reference to a literal string to search for | 7429 // - a reference to a literal string to search for |
| 7438 // If it is an irregexp regexp: | 7430 // If it is an irregexp regexp: |
| 7439 // - a reference to code for ASCII inputs (bytecode or compiled), or a smi | 7431 // - a reference to code for ASCII inputs (bytecode or compiled), or a smi |
| 7440 // used for tracking the last usage (used for code flushing). | 7432 // used for tracking the last usage (used for code flushing). |
| 7441 // - a reference to code for UC16 inputs (bytecode or compiled), or a smi | 7433 // - a reference to code for UC16 inputs (bytecode or compiled), or a smi |
| 7442 // used for tracking the last usage (used for code flushing).. | 7434 // used for tracking the last usage (used for code flushing).. |
| 7443 // - max number of registers used by irregexp implementations. | 7435 // - max number of registers used by irregexp implementations. |
| 7444 // - number of capture registers (output values) of the regexp. | 7436 // - number of capture registers (output values) of the regexp. |
| 7445 class JSRegExp V8_FINAL : public JSObject { | 7437 class JSRegExp: public JSObject { |
| 7446 public: | 7438 public: |
| 7447 // Meaning of Type: | 7439 // Meaning of Type: |
| 7448 // NOT_COMPILED: Initial value. No data has been stored in the JSRegExp yet. | 7440 // NOT_COMPILED: Initial value. No data has been stored in the JSRegExp yet. |
| 7449 // ATOM: A simple string to match against using an indexOf operation. | 7441 // ATOM: A simple string to match against using an indexOf operation. |
| 7450 // IRREGEXP: Compiled with Irregexp. | 7442 // IRREGEXP: Compiled with Irregexp. |
| 7451 // IRREGEXP_NATIVE: Compiled to native code with Irregexp. | 7443 // IRREGEXP_NATIVE: Compiled to native code with Irregexp. |
| 7452 enum Type { NOT_COMPILED, ATOM, IRREGEXP }; | 7444 enum Type { NOT_COMPILED, ATOM, IRREGEXP }; |
| 7453 enum Flag { NONE = 0, GLOBAL = 1, IGNORE_CASE = 2, MULTILINE = 4 }; | 7445 enum Flag { NONE = 0, GLOBAL = 1, IGNORE_CASE = 2, MULTILINE = 4 }; |
| 7454 | 7446 |
| 7455 class Flags { | 7447 class Flags { |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7558 // object is in the saved code field. | 7550 // object is in the saved code field. |
| 7559 static const int kCompilationErrorValue = -2; | 7551 static const int kCompilationErrorValue = -2; |
| 7560 | 7552 |
| 7561 // When we store the sweep generation at which we moved the code from the | 7553 // When we store the sweep generation at which we moved the code from the |
| 7562 // code index to the saved code index we mask it of to be in the [0:255] | 7554 // code index to the saved code index we mask it of to be in the [0:255] |
| 7563 // range. | 7555 // range. |
| 7564 static const int kCodeAgeMask = 0xff; | 7556 static const int kCodeAgeMask = 0xff; |
| 7565 }; | 7557 }; |
| 7566 | 7558 |
| 7567 | 7559 |
| 7568 class CompilationCacheShape V8_FINAL : public BaseShape<HashTableKey*> { | 7560 class CompilationCacheShape : public BaseShape<HashTableKey*> { |
| 7569 public: | 7561 public: |
| 7570 static inline bool IsMatch(HashTableKey* key, Object* value) { | 7562 static inline bool IsMatch(HashTableKey* key, Object* value) { |
| 7571 return key->IsMatch(value); | 7563 return key->IsMatch(value); |
| 7572 } | 7564 } |
| 7573 | 7565 |
| 7574 static inline uint32_t Hash(HashTableKey* key) { | 7566 static inline uint32_t Hash(HashTableKey* key) { |
| 7575 return key->Hash(); | 7567 return key->Hash(); |
| 7576 } | 7568 } |
| 7577 | 7569 |
| 7578 static inline uint32_t HashForObject(HashTableKey* key, Object* object) { | 7570 static inline uint32_t HashForObject(HashTableKey* key, Object* object) { |
| 7579 return key->HashForObject(object); | 7571 return key->HashForObject(object); |
| 7580 } | 7572 } |
| 7581 | 7573 |
| 7582 MUST_USE_RESULT static MaybeObject* AsObject(Heap* heap, | 7574 MUST_USE_RESULT static MaybeObject* AsObject(Heap* heap, |
| 7583 HashTableKey* key) { | 7575 HashTableKey* key) { |
| 7584 return key->AsObject(heap); | 7576 return key->AsObject(heap); |
| 7585 } | 7577 } |
| 7586 | 7578 |
| 7587 static const int kPrefixSize = 0; | 7579 static const int kPrefixSize = 0; |
| 7588 static const int kEntrySize = 2; | 7580 static const int kEntrySize = 2; |
| 7589 }; | 7581 }; |
| 7590 | 7582 |
| 7591 | 7583 |
| 7592 class CompilationCacheTable V8_FINAL : public HashTable<CompilationCacheShape, | 7584 class CompilationCacheTable: public HashTable<CompilationCacheShape, |
| 7593 HashTableKey*> { | 7585 HashTableKey*> { |
| 7594 public: | 7586 public: |
| 7595 // Find cached value for a string key, otherwise return null. | 7587 // Find cached value for a string key, otherwise return null. |
| 7596 Object* Lookup(String* src, Context* context); | 7588 Object* Lookup(String* src, Context* context); |
| 7597 Object* LookupEval(String* src, | 7589 Object* LookupEval(String* src, |
| 7598 Context* context, | 7590 Context* context, |
| 7599 LanguageMode language_mode, | 7591 LanguageMode language_mode, |
| 7600 int scope_position); | 7592 int scope_position); |
| 7601 Object* LookupRegExp(String* source, JSRegExp::Flags flags); | 7593 Object* LookupRegExp(String* source, JSRegExp::Flags flags); |
| 7602 MUST_USE_RESULT MaybeObject* Put(String* src, | 7594 MUST_USE_RESULT MaybeObject* Put(String* src, |
| 7603 Context* context, | 7595 Context* context, |
| 7604 Object* value); | 7596 Object* value); |
| 7605 MUST_USE_RESULT MaybeObject* PutEval(String* src, | 7597 MUST_USE_RESULT MaybeObject* PutEval(String* src, |
| 7606 Context* context, | 7598 Context* context, |
| 7607 SharedFunctionInfo* value, | 7599 SharedFunctionInfo* value, |
| 7608 int scope_position); | 7600 int scope_position); |
| 7609 MUST_USE_RESULT MaybeObject* PutRegExp(String* src, | 7601 MUST_USE_RESULT MaybeObject* PutRegExp(String* src, |
| 7610 JSRegExp::Flags flags, | 7602 JSRegExp::Flags flags, |
| 7611 FixedArray* value); | 7603 FixedArray* value); |
| 7612 | 7604 |
| 7613 // Remove given value from cache. | 7605 // Remove given value from cache. |
| 7614 void Remove(Object* value); | 7606 void Remove(Object* value); |
| 7615 | 7607 |
| 7616 static inline CompilationCacheTable* cast(Object* obj); | 7608 static inline CompilationCacheTable* cast(Object* obj); |
| 7617 | 7609 |
| 7618 private: | 7610 private: |
| 7619 DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheTable); | 7611 DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheTable); |
| 7620 }; | 7612 }; |
| 7621 | 7613 |
| 7622 | 7614 |
| 7623 class CodeCache V8_FINAL : public Struct { | 7615 class CodeCache: public Struct { |
| 7624 public: | 7616 public: |
| 7625 DECL_ACCESSORS(default_cache, FixedArray) | 7617 DECL_ACCESSORS(default_cache, FixedArray) |
| 7626 DECL_ACCESSORS(normal_type_cache, Object) | 7618 DECL_ACCESSORS(normal_type_cache, Object) |
| 7627 | 7619 |
| 7628 // Add the code object to the cache. | 7620 // Add the code object to the cache. |
| 7629 MUST_USE_RESULT MaybeObject* Update(Name* name, Code* code); | 7621 MUST_USE_RESULT MaybeObject* Update(Name* name, Code* code); |
| 7630 | 7622 |
| 7631 // Lookup code object in the cache. Returns code object if found and undefined | 7623 // Lookup code object in the cache. Returns code object if found and undefined |
| 7632 // if not. | 7624 // if not. |
| 7633 Object* Lookup(Name* name, Code::Flags flags); | 7625 Object* Lookup(Name* name, Code::Flags flags); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 7661 // Code cache layout of the default cache. Elements are alternating name and | 7653 // Code cache layout of the default cache. Elements are alternating name and |
| 7662 // code objects for non normal load/store/call IC's. | 7654 // code objects for non normal load/store/call IC's. |
| 7663 static const int kCodeCacheEntrySize = 2; | 7655 static const int kCodeCacheEntrySize = 2; |
| 7664 static const int kCodeCacheEntryNameOffset = 0; | 7656 static const int kCodeCacheEntryNameOffset = 0; |
| 7665 static const int kCodeCacheEntryCodeOffset = 1; | 7657 static const int kCodeCacheEntryCodeOffset = 1; |
| 7666 | 7658 |
| 7667 DISALLOW_IMPLICIT_CONSTRUCTORS(CodeCache); | 7659 DISALLOW_IMPLICIT_CONSTRUCTORS(CodeCache); |
| 7668 }; | 7660 }; |
| 7669 | 7661 |
| 7670 | 7662 |
| 7671 class CodeCacheHashTableShape V8_FINAL : public BaseShape<HashTableKey*> { | 7663 class CodeCacheHashTableShape : public BaseShape<HashTableKey*> { |
| 7672 public: | 7664 public: |
| 7673 static inline bool IsMatch(HashTableKey* key, Object* value) { | 7665 static inline bool IsMatch(HashTableKey* key, Object* value) { |
| 7674 return key->IsMatch(value); | 7666 return key->IsMatch(value); |
| 7675 } | 7667 } |
| 7676 | 7668 |
| 7677 static inline uint32_t Hash(HashTableKey* key) { | 7669 static inline uint32_t Hash(HashTableKey* key) { |
| 7678 return key->Hash(); | 7670 return key->Hash(); |
| 7679 } | 7671 } |
| 7680 | 7672 |
| 7681 static inline uint32_t HashForObject(HashTableKey* key, Object* object) { | 7673 static inline uint32_t HashForObject(HashTableKey* key, Object* object) { |
| 7682 return key->HashForObject(object); | 7674 return key->HashForObject(object); |
| 7683 } | 7675 } |
| 7684 | 7676 |
| 7685 MUST_USE_RESULT static MaybeObject* AsObject(Heap* heap, | 7677 MUST_USE_RESULT static MaybeObject* AsObject(Heap* heap, |
| 7686 HashTableKey* key) { | 7678 HashTableKey* key) { |
| 7687 return key->AsObject(heap); | 7679 return key->AsObject(heap); |
| 7688 } | 7680 } |
| 7689 | 7681 |
| 7690 static const int kPrefixSize = 0; | 7682 static const int kPrefixSize = 0; |
| 7691 static const int kEntrySize = 2; | 7683 static const int kEntrySize = 2; |
| 7692 }; | 7684 }; |
| 7693 | 7685 |
| 7694 | 7686 |
| 7695 class CodeCacheHashTable V8_FINAL : public HashTable<CodeCacheHashTableShape, | 7687 class CodeCacheHashTable: public HashTable<CodeCacheHashTableShape, |
| 7696 HashTableKey*> { | 7688 HashTableKey*> { |
| 7697 public: | 7689 public: |
| 7698 Object* Lookup(Name* name, Code::Flags flags); | 7690 Object* Lookup(Name* name, Code::Flags flags); |
| 7699 MUST_USE_RESULT MaybeObject* Put(Name* name, Code* code); | 7691 MUST_USE_RESULT MaybeObject* Put(Name* name, Code* code); |
| 7700 | 7692 |
| 7701 int GetIndex(Name* name, Code::Flags flags); | 7693 int GetIndex(Name* name, Code::Flags flags); |
| 7702 void RemoveByIndex(int index); | 7694 void RemoveByIndex(int index); |
| 7703 | 7695 |
| 7704 static inline CodeCacheHashTable* cast(Object* obj); | 7696 static inline CodeCacheHashTable* cast(Object* obj); |
| 7705 | 7697 |
| 7706 // Initial size of the fixed array backing the hash table. | 7698 // Initial size of the fixed array backing the hash table. |
| 7707 static const int kInitialSize = 64; | 7699 static const int kInitialSize = 64; |
| 7708 | 7700 |
| 7709 private: | 7701 private: |
| 7710 DISALLOW_IMPLICIT_CONSTRUCTORS(CodeCacheHashTable); | 7702 DISALLOW_IMPLICIT_CONSTRUCTORS(CodeCacheHashTable); |
| 7711 }; | 7703 }; |
| 7712 | 7704 |
| 7713 | 7705 |
| 7714 class PolymorphicCodeCache V8_FINAL : public Struct { | 7706 class PolymorphicCodeCache: public Struct { |
| 7715 public: | 7707 public: |
| 7716 DECL_ACCESSORS(cache, Object) | 7708 DECL_ACCESSORS(cache, Object) |
| 7717 | 7709 |
| 7718 static void Update(Handle<PolymorphicCodeCache> cache, | 7710 static void Update(Handle<PolymorphicCodeCache> cache, |
| 7719 MapHandleList* maps, | 7711 MapHandleList* maps, |
| 7720 Code::Flags flags, | 7712 Code::Flags flags, |
| 7721 Handle<Code> code); | 7713 Handle<Code> code); |
| 7722 | 7714 |
| 7723 MUST_USE_RESULT MaybeObject* Update(MapHandleList* maps, | 7715 MUST_USE_RESULT MaybeObject* Update(MapHandleList* maps, |
| 7724 Code::Flags flags, | 7716 Code::Flags flags, |
| 7725 Code* code); | 7717 Code* code); |
| 7726 | 7718 |
| 7727 // Returns an undefined value if the entry is not found. | 7719 // Returns an undefined value if the entry is not found. |
| 7728 Handle<Object> Lookup(MapHandleList* maps, Code::Flags flags); | 7720 Handle<Object> Lookup(MapHandleList* maps, Code::Flags flags); |
| 7729 | 7721 |
| 7730 static inline PolymorphicCodeCache* cast(Object* obj); | 7722 static inline PolymorphicCodeCache* cast(Object* obj); |
| 7731 | 7723 |
| 7732 // Dispatched behavior. | 7724 // Dispatched behavior. |
| 7733 DECLARE_PRINTER(PolymorphicCodeCache) | 7725 DECLARE_PRINTER(PolymorphicCodeCache) |
| 7734 DECLARE_VERIFIER(PolymorphicCodeCache) | 7726 DECLARE_VERIFIER(PolymorphicCodeCache) |
| 7735 | 7727 |
| 7736 static const int kCacheOffset = HeapObject::kHeaderSize; | 7728 static const int kCacheOffset = HeapObject::kHeaderSize; |
| 7737 static const int kSize = kCacheOffset + kPointerSize; | 7729 static const int kSize = kCacheOffset + kPointerSize; |
| 7738 | 7730 |
| 7739 private: | 7731 private: |
| 7740 DISALLOW_IMPLICIT_CONSTRUCTORS(PolymorphicCodeCache); | 7732 DISALLOW_IMPLICIT_CONSTRUCTORS(PolymorphicCodeCache); |
| 7741 }; | 7733 }; |
| 7742 | 7734 |
| 7743 | 7735 |
| 7744 class PolymorphicCodeCacheHashTable V8_FINAL | 7736 class PolymorphicCodeCacheHashTable |
| 7745 : public HashTable<CodeCacheHashTableShape, HashTableKey*> { | 7737 : public HashTable<CodeCacheHashTableShape, HashTableKey*> { |
| 7746 public: | 7738 public: |
| 7747 Object* Lookup(MapHandleList* maps, int code_kind); | 7739 Object* Lookup(MapHandleList* maps, int code_kind); |
| 7748 | 7740 |
| 7749 MUST_USE_RESULT MaybeObject* Put(MapHandleList* maps, | 7741 MUST_USE_RESULT MaybeObject* Put(MapHandleList* maps, |
| 7750 int code_kind, | 7742 int code_kind, |
| 7751 Code* code); | 7743 Code* code); |
| 7752 | 7744 |
| 7753 static inline PolymorphicCodeCacheHashTable* cast(Object* obj); | 7745 static inline PolymorphicCodeCacheHashTable* cast(Object* obj); |
| 7754 | 7746 |
| 7755 static const int kInitialSize = 64; | 7747 static const int kInitialSize = 64; |
| 7756 private: | 7748 private: |
| 7757 DISALLOW_IMPLICIT_CONSTRUCTORS(PolymorphicCodeCacheHashTable); | 7749 DISALLOW_IMPLICIT_CONSTRUCTORS(PolymorphicCodeCacheHashTable); |
| 7758 }; | 7750 }; |
| 7759 | 7751 |
| 7760 | 7752 |
| 7761 class TypeFeedbackInfo V8_FINAL : public Struct { | 7753 class TypeFeedbackInfo: public Struct { |
| 7762 public: | 7754 public: |
| 7763 inline int ic_total_count(); | 7755 inline int ic_total_count(); |
| 7764 inline void set_ic_total_count(int count); | 7756 inline void set_ic_total_count(int count); |
| 7765 | 7757 |
| 7766 inline int ic_with_type_info_count(); | 7758 inline int ic_with_type_info_count(); |
| 7767 inline void change_ic_with_type_info_count(int count); | 7759 inline void change_ic_with_type_info_count(int count); |
| 7768 | 7760 |
| 7769 inline void initialize_storage(); | 7761 inline void initialize_storage(); |
| 7770 | 7762 |
| 7771 inline void change_own_type_change_checksum(); | 7763 inline void change_own_type_change_checksum(); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7805 }; | 7797 }; |
| 7806 | 7798 |
| 7807 | 7799 |
| 7808 enum AllocationSiteMode { | 7800 enum AllocationSiteMode { |
| 7809 DONT_TRACK_ALLOCATION_SITE, | 7801 DONT_TRACK_ALLOCATION_SITE, |
| 7810 TRACK_ALLOCATION_SITE, | 7802 TRACK_ALLOCATION_SITE, |
| 7811 LAST_ALLOCATION_SITE_MODE = TRACK_ALLOCATION_SITE | 7803 LAST_ALLOCATION_SITE_MODE = TRACK_ALLOCATION_SITE |
| 7812 }; | 7804 }; |
| 7813 | 7805 |
| 7814 | 7806 |
| 7815 class AllocationSite V8_FINAL : public Struct { | 7807 class AllocationSite: public Struct { |
| 7816 public: | 7808 public: |
| 7817 static const uint32_t kMaximumArrayBytesToPretransition = 8 * 1024; | 7809 static const uint32_t kMaximumArrayBytesToPretransition = 8 * 1024; |
| 7818 | 7810 |
| 7819 DECL_ACCESSORS(transition_info, Object) | 7811 DECL_ACCESSORS(transition_info, Object) |
| 7820 DECL_ACCESSORS(weak_next, Object) | 7812 DECL_ACCESSORS(weak_next, Object) |
| 7821 | 7813 |
| 7822 void Initialize() { | 7814 void Initialize() { |
| 7823 SetElementsKind(GetInitialFastElementsKind()); | 7815 SetElementsKind(GetInitialFastElementsKind()); |
| 7824 } | 7816 } |
| 7825 | 7817 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 7853 | 7845 |
| 7854 typedef FixedBodyDescriptor<HeapObject::kHeaderSize, | 7846 typedef FixedBodyDescriptor<HeapObject::kHeaderSize, |
| 7855 kTransitionInfoOffset + kPointerSize, | 7847 kTransitionInfoOffset + kPointerSize, |
| 7856 kSize> BodyDescriptor; | 7848 kSize> BodyDescriptor; |
| 7857 | 7849 |
| 7858 private: | 7850 private: |
| 7859 DISALLOW_IMPLICIT_CONSTRUCTORS(AllocationSite); | 7851 DISALLOW_IMPLICIT_CONSTRUCTORS(AllocationSite); |
| 7860 }; | 7852 }; |
| 7861 | 7853 |
| 7862 | 7854 |
| 7863 class AllocationMemento V8_FINAL : public Struct { | 7855 class AllocationMemento: public Struct { |
| 7864 public: | 7856 public: |
| 7865 static const int kAllocationSiteOffset = HeapObject::kHeaderSize; | 7857 static const int kAllocationSiteOffset = HeapObject::kHeaderSize; |
| 7866 static const int kSize = kAllocationSiteOffset + kPointerSize; | 7858 static const int kSize = kAllocationSiteOffset + kPointerSize; |
| 7867 | 7859 |
| 7868 DECL_ACCESSORS(allocation_site, Object) | 7860 DECL_ACCESSORS(allocation_site, Object) |
| 7869 | 7861 |
| 7870 bool IsValid() { return allocation_site()->IsAllocationSite(); } | 7862 bool IsValid() { return allocation_site()->IsAllocationSite(); } |
| 7871 AllocationSite* GetAllocationSite() { | 7863 AllocationSite* GetAllocationSite() { |
| 7872 ASSERT(IsValid()); | 7864 ASSERT(IsValid()); |
| 7873 return AllocationSite::cast(allocation_site()); | 7865 return AllocationSite::cast(allocation_site()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 7886 | 7878 |
| 7887 | 7879 |
| 7888 // Representation of a slow alias as part of a non-strict arguments objects. | 7880 // Representation of a slow alias as part of a non-strict arguments objects. |
| 7889 // For fast aliases (if HasNonStrictArgumentsElements()): | 7881 // For fast aliases (if HasNonStrictArgumentsElements()): |
| 7890 // - the parameter map contains an index into the context | 7882 // - the parameter map contains an index into the context |
| 7891 // - all attributes of the element have default values | 7883 // - all attributes of the element have default values |
| 7892 // For slow aliases (if HasDictionaryArgumentsElements()): | 7884 // For slow aliases (if HasDictionaryArgumentsElements()): |
| 7893 // - the parameter map contains no fast alias mapping (i.e. the hole) | 7885 // - the parameter map contains no fast alias mapping (i.e. the hole) |
| 7894 // - this struct (in the slow backing store) contains an index into the context | 7886 // - this struct (in the slow backing store) contains an index into the context |
| 7895 // - all attributes are available as part if the property details | 7887 // - all attributes are available as part if the property details |
| 7896 class AliasedArgumentsEntry V8_FINAL : public Struct { | 7888 class AliasedArgumentsEntry: public Struct { |
| 7897 public: | 7889 public: |
| 7898 inline int aliased_context_slot(); | 7890 inline int aliased_context_slot(); |
| 7899 inline void set_aliased_context_slot(int count); | 7891 inline void set_aliased_context_slot(int count); |
| 7900 | 7892 |
| 7901 static inline AliasedArgumentsEntry* cast(Object* obj); | 7893 static inline AliasedArgumentsEntry* cast(Object* obj); |
| 7902 | 7894 |
| 7903 // Dispatched behavior. | 7895 // Dispatched behavior. |
| 7904 DECLARE_PRINTER(AliasedArgumentsEntry) | 7896 DECLARE_PRINTER(AliasedArgumentsEntry) |
| 7905 DECLARE_VERIFIER(AliasedArgumentsEntry) | 7897 DECLARE_VERIFIER(AliasedArgumentsEntry) |
| 7906 | 7898 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7974 // few bits of information is moderately expensive, involving two memory | 7966 // few bits of information is moderately expensive, involving two memory |
| 7975 // loads where the second is dependent on the first. To improve efficiency | 7967 // loads where the second is dependent on the first. To improve efficiency |
| 7976 // the shape of the string is given its own class so that it can be retrieved | 7968 // the shape of the string is given its own class so that it can be retrieved |
| 7977 // once and used for several string operations. A StringShape is small enough | 7969 // once and used for several string operations. A StringShape is small enough |
| 7978 // to be passed by value and is immutable, but be aware that flattening a | 7970 // to be passed by value and is immutable, but be aware that flattening a |
| 7979 // string can potentially alter its shape. Also be aware that a GC caused by | 7971 // string can potentially alter its shape. Also be aware that a GC caused by |
| 7980 // something else can alter the shape of a string due to ConsString | 7972 // something else can alter the shape of a string due to ConsString |
| 7981 // shortcutting. Keeping these restrictions in mind has proven to be error- | 7973 // shortcutting. Keeping these restrictions in mind has proven to be error- |
| 7982 // prone and so we no longer put StringShapes in variables unless there is a | 7974 // prone and so we no longer put StringShapes in variables unless there is a |
| 7983 // concrete performance benefit at that particular point in the code. | 7975 // concrete performance benefit at that particular point in the code. |
| 7984 class StringShape V8_FINAL BASE_EMBEDDED { | 7976 class StringShape BASE_EMBEDDED { |
| 7985 public: | 7977 public: |
| 7986 inline explicit StringShape(String* s); | 7978 inline explicit StringShape(String* s); |
| 7987 inline explicit StringShape(Map* s); | 7979 inline explicit StringShape(Map* s); |
| 7988 inline explicit StringShape(InstanceType t); | 7980 inline explicit StringShape(InstanceType t); |
| 7989 inline bool IsSequential(); | 7981 inline bool IsSequential(); |
| 7990 inline bool IsExternal(); | 7982 inline bool IsExternal(); |
| 7991 inline bool IsCons(); | 7983 inline bool IsCons(); |
| 7992 inline bool IsSliced(); | 7984 inline bool IsSliced(); |
| 7993 inline bool IsIndirect(); | 7985 inline bool IsIndirect(); |
| 7994 inline bool IsExternalAscii(); | 7986 inline bool IsExternalAscii(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 8014 inline void set_valid() { valid_ = true; } | 8006 inline void set_valid() { valid_ = true; } |
| 8015 bool valid_; | 8007 bool valid_; |
| 8016 #else | 8008 #else |
| 8017 inline void set_valid() { } | 8009 inline void set_valid() { } |
| 8018 #endif | 8010 #endif |
| 8019 }; | 8011 }; |
| 8020 | 8012 |
| 8021 | 8013 |
| 8022 // The Name abstract class captures anything that can be used as a property | 8014 // The Name abstract class captures anything that can be used as a property |
| 8023 // name, i.e., strings and symbols. All names store a hash value. | 8015 // name, i.e., strings and symbols. All names store a hash value. |
| 8024 class Name : public HeapObject { | 8016 class Name: public HeapObject { |
| 8025 public: | 8017 public: |
| 8026 // Get and set the hash field of the name. | 8018 // Get and set the hash field of the name. |
| 8027 inline uint32_t hash_field(); | 8019 inline uint32_t hash_field(); |
| 8028 inline void set_hash_field(uint32_t value); | 8020 inline void set_hash_field(uint32_t value); |
| 8029 | 8021 |
| 8030 // Tells whether the hash code has been computed. | 8022 // Tells whether the hash code has been computed. |
| 8031 inline bool HasHashCode(); | 8023 inline bool HasHashCode(); |
| 8032 | 8024 |
| 8033 // Returns a hash value used for the property table | 8025 // Returns a hash value used for the property table |
| 8034 inline uint32_t Hash(); | 8026 inline uint32_t Hash(); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8099 | 8091 |
| 8100 protected: | 8092 protected: |
| 8101 static inline bool IsHashFieldComputed(uint32_t field); | 8093 static inline bool IsHashFieldComputed(uint32_t field); |
| 8102 | 8094 |
| 8103 private: | 8095 private: |
| 8104 DISALLOW_IMPLICIT_CONSTRUCTORS(Name); | 8096 DISALLOW_IMPLICIT_CONSTRUCTORS(Name); |
| 8105 }; | 8097 }; |
| 8106 | 8098 |
| 8107 | 8099 |
| 8108 // ES6 symbols. | 8100 // ES6 symbols. |
| 8109 class Symbol V8_FINAL : public Name { | 8101 class Symbol: public Name { |
| 8110 public: | 8102 public: |
| 8111 // [name]: the print name of a symbol, or undefined if none. | 8103 // [name]: the print name of a symbol, or undefined if none. |
| 8112 DECL_ACCESSORS(name, Object) | 8104 DECL_ACCESSORS(name, Object) |
| 8113 | 8105 |
| 8114 // Casting. | 8106 // Casting. |
| 8115 static inline Symbol* cast(Object* obj); | 8107 static inline Symbol* cast(Object* obj); |
| 8116 | 8108 |
| 8117 // Dispatched behavior. | 8109 // Dispatched behavior. |
| 8118 DECLARE_PRINTER(Symbol) | 8110 DECLARE_PRINTER(Symbol) |
| 8119 DECLARE_VERIFIER(Symbol) | 8111 DECLARE_VERIFIER(Symbol) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 8133 class ConsString; | 8125 class ConsString; |
| 8134 | 8126 |
| 8135 // The String abstract class captures JavaScript string values: | 8127 // The String abstract class captures JavaScript string values: |
| 8136 // | 8128 // |
| 8137 // Ecma-262: | 8129 // Ecma-262: |
| 8138 // 4.3.16 String Value | 8130 // 4.3.16 String Value |
| 8139 // A string value is a member of the type String and is a finite | 8131 // A string value is a member of the type String and is a finite |
| 8140 // ordered sequence of zero or more 16-bit unsigned integer values. | 8132 // ordered sequence of zero or more 16-bit unsigned integer values. |
| 8141 // | 8133 // |
| 8142 // All string values have a length field. | 8134 // All string values have a length field. |
| 8143 class String : public Name { | 8135 class String: public Name { |
| 8144 public: | 8136 public: |
| 8145 enum Encoding { ONE_BYTE_ENCODING, TWO_BYTE_ENCODING }; | 8137 enum Encoding { ONE_BYTE_ENCODING, TWO_BYTE_ENCODING }; |
| 8146 | 8138 |
| 8147 // Representation of the flat content of a String. | 8139 // Representation of the flat content of a String. |
| 8148 // A non-flat string doesn't have flat content. | 8140 // A non-flat string doesn't have flat content. |
| 8149 // A flat string has content that's encoded as a sequence of either | 8141 // A flat string has content that's encoded as a sequence of either |
| 8150 // ASCII chars or two-byte UC16. | 8142 // ASCII chars or two-byte UC16. |
| 8151 // Returned by String::GetFlatContent(). | 8143 // Returned by String::GetFlatContent(). |
| 8152 class FlatContent { | 8144 class FlatContent { |
| 8153 public: | 8145 public: |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8448 bool SlowAsArrayIndex(uint32_t* index); | 8440 bool SlowAsArrayIndex(uint32_t* index); |
| 8449 | 8441 |
| 8450 // Compute and set the hash code. | 8442 // Compute and set the hash code. |
| 8451 uint32_t ComputeAndSetHash(); | 8443 uint32_t ComputeAndSetHash(); |
| 8452 | 8444 |
| 8453 DISALLOW_IMPLICIT_CONSTRUCTORS(String); | 8445 DISALLOW_IMPLICIT_CONSTRUCTORS(String); |
| 8454 }; | 8446 }; |
| 8455 | 8447 |
| 8456 | 8448 |
| 8457 // The SeqString abstract class captures sequential string values. | 8449 // The SeqString abstract class captures sequential string values. |
| 8458 class SeqString : public String { | 8450 class SeqString: public String { |
| 8459 public: | 8451 public: |
| 8460 // Casting. | 8452 // Casting. |
| 8461 static inline SeqString* cast(Object* obj); | 8453 static inline SeqString* cast(Object* obj); |
| 8462 | 8454 |
| 8463 // Layout description. | 8455 // Layout description. |
| 8464 static const int kHeaderSize = String::kSize; | 8456 static const int kHeaderSize = String::kSize; |
| 8465 | 8457 |
| 8466 // Truncate the string in-place if possible and return the result. | 8458 // Truncate the string in-place if possible and return the result. |
| 8467 // In case of new_length == 0, the empty string is returned without | 8459 // In case of new_length == 0, the empty string is returned without |
| 8468 // truncating the original string. | 8460 // truncating the original string. |
| 8469 MUST_USE_RESULT static Handle<String> Truncate(Handle<SeqString> string, | 8461 MUST_USE_RESULT static Handle<String> Truncate(Handle<SeqString> string, |
| 8470 int new_length); | 8462 int new_length); |
| 8471 private: | 8463 private: |
| 8472 DISALLOW_IMPLICIT_CONSTRUCTORS(SeqString); | 8464 DISALLOW_IMPLICIT_CONSTRUCTORS(SeqString); |
| 8473 }; | 8465 }; |
| 8474 | 8466 |
| 8475 | 8467 |
| 8476 // The AsciiString class captures sequential ASCII string objects. | 8468 // The AsciiString class captures sequential ASCII string objects. |
| 8477 // Each character in the AsciiString is an ASCII character. | 8469 // Each character in the AsciiString is an ASCII character. |
| 8478 class SeqOneByteString V8_FINAL : public SeqString { | 8470 class SeqOneByteString: public SeqString { |
| 8479 public: | 8471 public: |
| 8480 static const bool kHasAsciiEncoding = true; | 8472 static const bool kHasAsciiEncoding = true; |
| 8481 | 8473 |
| 8482 // Dispatched behavior. | 8474 // Dispatched behavior. |
| 8483 inline uint16_t SeqOneByteStringGet(int index); | 8475 inline uint16_t SeqOneByteStringGet(int index); |
| 8484 inline void SeqOneByteStringSet(int index, uint16_t value); | 8476 inline void SeqOneByteStringSet(int index, uint16_t value); |
| 8485 | 8477 |
| 8486 // Get the address of the characters in this string. | 8478 // Get the address of the characters in this string. |
| 8487 inline Address GetCharsAddress(); | 8479 inline Address GetCharsAddress(); |
| 8488 | 8480 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 8507 // Q.v. String::kMaxLength which is the maximal size of concatenated strings. | 8499 // Q.v. String::kMaxLength which is the maximal size of concatenated strings. |
| 8508 static const int kMaxLength = (kMaxSize - kHeaderSize); | 8500 static const int kMaxLength = (kMaxSize - kHeaderSize); |
| 8509 | 8501 |
| 8510 private: | 8502 private: |
| 8511 DISALLOW_IMPLICIT_CONSTRUCTORS(SeqOneByteString); | 8503 DISALLOW_IMPLICIT_CONSTRUCTORS(SeqOneByteString); |
| 8512 }; | 8504 }; |
| 8513 | 8505 |
| 8514 | 8506 |
| 8515 // The TwoByteString class captures sequential unicode string objects. | 8507 // The TwoByteString class captures sequential unicode string objects. |
| 8516 // Each character in the TwoByteString is a two-byte uint16_t. | 8508 // Each character in the TwoByteString is a two-byte uint16_t. |
| 8517 class SeqTwoByteString V8_FINAL : public SeqString { | 8509 class SeqTwoByteString: public SeqString { |
| 8518 public: | 8510 public: |
| 8519 static const bool kHasAsciiEncoding = false; | 8511 static const bool kHasAsciiEncoding = false; |
| 8520 | 8512 |
| 8521 // Dispatched behavior. | 8513 // Dispatched behavior. |
| 8522 inline uint16_t SeqTwoByteStringGet(int index); | 8514 inline uint16_t SeqTwoByteStringGet(int index); |
| 8523 inline void SeqTwoByteStringSet(int index, uint16_t value); | 8515 inline void SeqTwoByteStringSet(int index, uint16_t value); |
| 8524 | 8516 |
| 8525 // Get the address of the characters in this string. | 8517 // Get the address of the characters in this string. |
| 8526 inline Address GetCharsAddress(); | 8518 inline Address GetCharsAddress(); |
| 8527 | 8519 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 8555 | 8547 |
| 8556 | 8548 |
| 8557 // The ConsString class describes string values built by using the | 8549 // The ConsString class describes string values built by using the |
| 8558 // addition operator on strings. A ConsString is a pair where the | 8550 // addition operator on strings. A ConsString is a pair where the |
| 8559 // first and second components are pointers to other string values. | 8551 // first and second components are pointers to other string values. |
| 8560 // One or both components of a ConsString can be pointers to other | 8552 // One or both components of a ConsString can be pointers to other |
| 8561 // ConsStrings, creating a binary tree of ConsStrings where the leaves | 8553 // ConsStrings, creating a binary tree of ConsStrings where the leaves |
| 8562 // are non-ConsString string values. The string value represented by | 8554 // are non-ConsString string values. The string value represented by |
| 8563 // a ConsString can be obtained by concatenating the leaf string | 8555 // a ConsString can be obtained by concatenating the leaf string |
| 8564 // values in a left-to-right depth-first traversal of the tree. | 8556 // values in a left-to-right depth-first traversal of the tree. |
| 8565 class ConsString V8_FINAL : public String { | 8557 class ConsString: public String { |
| 8566 public: | 8558 public: |
| 8567 // First string of the cons cell. | 8559 // First string of the cons cell. |
| 8568 inline String* first(); | 8560 inline String* first(); |
| 8569 // Doesn't check that the result is a string, even in debug mode. This is | 8561 // Doesn't check that the result is a string, even in debug mode. This is |
| 8570 // useful during GC where the mark bits confuse the checks. | 8562 // useful during GC where the mark bits confuse the checks. |
| 8571 inline Object* unchecked_first(); | 8563 inline Object* unchecked_first(); |
| 8572 inline void set_first(String* first, | 8564 inline void set_first(String* first, |
| 8573 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); | 8565 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); |
| 8574 | 8566 |
| 8575 // Second string of the cons cell. | 8567 // Second string of the cons cell. |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8609 // a substring. A Sliced String is described as a pointer to the parent, | 8601 // a substring. A Sliced String is described as a pointer to the parent, |
| 8610 // the offset from the start of the parent string and the length. Using | 8602 // the offset from the start of the parent string and the length. Using |
| 8611 // a Sliced String therefore requires unpacking of the parent string and | 8603 // a Sliced String therefore requires unpacking of the parent string and |
| 8612 // adding the offset to the start address. A substring of a Sliced String | 8604 // adding the offset to the start address. A substring of a Sliced String |
| 8613 // are not nested since the double indirection is simplified when creating | 8605 // are not nested since the double indirection is simplified when creating |
| 8614 // such a substring. | 8606 // such a substring. |
| 8615 // Currently missing features are: | 8607 // Currently missing features are: |
| 8616 // - handling externalized parent strings | 8608 // - handling externalized parent strings |
| 8617 // - external strings as parent | 8609 // - external strings as parent |
| 8618 // - truncating sliced string to enable otherwise unneeded parent to be GC'ed. | 8610 // - truncating sliced string to enable otherwise unneeded parent to be GC'ed. |
| 8619 class SlicedString V8_FINAL : public String { | 8611 class SlicedString: public String { |
| 8620 public: | 8612 public: |
| 8621 inline String* parent(); | 8613 inline String* parent(); |
| 8622 inline void set_parent(String* parent, | 8614 inline void set_parent(String* parent, |
| 8623 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); | 8615 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); |
| 8624 inline int offset(); | 8616 inline int offset(); |
| 8625 inline void set_offset(int offset); | 8617 inline void set_offset(int offset); |
| 8626 | 8618 |
| 8627 // Dispatched behavior. | 8619 // Dispatched behavior. |
| 8628 uint16_t SlicedStringGet(int index); | 8620 uint16_t SlicedStringGet(int index); |
| 8629 | 8621 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 8651 | 8643 |
| 8652 // The ExternalString class describes string values that are backed by | 8644 // The ExternalString class describes string values that are backed by |
| 8653 // a string resource that lies outside the V8 heap. ExternalStrings | 8645 // a string resource that lies outside the V8 heap. ExternalStrings |
| 8654 // consist of the length field common to all strings, a pointer to the | 8646 // consist of the length field common to all strings, a pointer to the |
| 8655 // external resource. It is important to ensure (externally) that the | 8647 // external resource. It is important to ensure (externally) that the |
| 8656 // resource is not deallocated while the ExternalString is live in the | 8648 // resource is not deallocated while the ExternalString is live in the |
| 8657 // V8 heap. | 8649 // V8 heap. |
| 8658 // | 8650 // |
| 8659 // The API expects that all ExternalStrings are created through the | 8651 // The API expects that all ExternalStrings are created through the |
| 8660 // API. Therefore, ExternalStrings should not be used internally. | 8652 // API. Therefore, ExternalStrings should not be used internally. |
| 8661 class ExternalString : public String { | 8653 class ExternalString: public String { |
| 8662 public: | 8654 public: |
| 8663 // Casting | 8655 // Casting |
| 8664 static inline ExternalString* cast(Object* obj); | 8656 static inline ExternalString* cast(Object* obj); |
| 8665 | 8657 |
| 8666 // Layout description. | 8658 // Layout description. |
| 8667 static const int kResourceOffset = POINTER_SIZE_ALIGN(String::kSize); | 8659 static const int kResourceOffset = POINTER_SIZE_ALIGN(String::kSize); |
| 8668 static const int kShortSize = kResourceOffset + kPointerSize; | 8660 static const int kShortSize = kResourceOffset + kPointerSize; |
| 8669 static const int kResourceDataOffset = kResourceOffset + kPointerSize; | 8661 static const int kResourceDataOffset = kResourceOffset + kPointerSize; |
| 8670 static const int kSize = kResourceDataOffset + kPointerSize; | 8662 static const int kSize = kResourceDataOffset + kPointerSize; |
| 8671 | 8663 |
| 8672 static const int kMaxShortLength = | 8664 static const int kMaxShortLength = |
| 8673 (kShortSize - SeqString::kHeaderSize) / kCharSize; | 8665 (kShortSize - SeqString::kHeaderSize) / kCharSize; |
| 8674 | 8666 |
| 8675 // Return whether external string is short (data pointer is not cached). | 8667 // Return whether external string is short (data pointer is not cached). |
| 8676 inline bool is_short(); | 8668 inline bool is_short(); |
| 8677 | 8669 |
| 8678 STATIC_CHECK(kResourceOffset == Internals::kStringResourceOffset); | 8670 STATIC_CHECK(kResourceOffset == Internals::kStringResourceOffset); |
| 8679 | 8671 |
| 8680 private: | 8672 private: |
| 8681 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalString); | 8673 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalString); |
| 8682 }; | 8674 }; |
| 8683 | 8675 |
| 8684 | 8676 |
| 8685 // The ExternalAsciiString class is an external string backed by an | 8677 // The ExternalAsciiString class is an external string backed by an |
| 8686 // ASCII string. | 8678 // ASCII string. |
| 8687 class ExternalAsciiString V8_FINAL : public ExternalString { | 8679 class ExternalAsciiString: public ExternalString { |
| 8688 public: | 8680 public: |
| 8689 static const bool kHasAsciiEncoding = true; | 8681 static const bool kHasAsciiEncoding = true; |
| 8690 | 8682 |
| 8691 typedef v8::String::ExternalAsciiStringResource Resource; | 8683 typedef v8::String::ExternalAsciiStringResource Resource; |
| 8692 | 8684 |
| 8693 // The underlying resource. | 8685 // The underlying resource. |
| 8694 inline const Resource* resource(); | 8686 inline const Resource* resource(); |
| 8695 inline void set_resource(const Resource* buffer); | 8687 inline void set_resource(const Resource* buffer); |
| 8696 | 8688 |
| 8697 // Update the pointer cache to the external character array. | 8689 // Update the pointer cache to the external character array. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 8714 template<typename StaticVisitor> | 8706 template<typename StaticVisitor> |
| 8715 inline void ExternalAsciiStringIterateBody(); | 8707 inline void ExternalAsciiStringIterateBody(); |
| 8716 | 8708 |
| 8717 private: | 8709 private: |
| 8718 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalAsciiString); | 8710 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalAsciiString); |
| 8719 }; | 8711 }; |
| 8720 | 8712 |
| 8721 | 8713 |
| 8722 // The ExternalTwoByteString class is an external string backed by a UTF-16 | 8714 // The ExternalTwoByteString class is an external string backed by a UTF-16 |
| 8723 // encoded string. | 8715 // encoded string. |
| 8724 class ExternalTwoByteString V8_FINAL : public ExternalString { | 8716 class ExternalTwoByteString: public ExternalString { |
| 8725 public: | 8717 public: |
| 8726 static const bool kHasAsciiEncoding = false; | 8718 static const bool kHasAsciiEncoding = false; |
| 8727 | 8719 |
| 8728 typedef v8::String::ExternalStringResource Resource; | 8720 typedef v8::String::ExternalStringResource Resource; |
| 8729 | 8721 |
| 8730 // The underlying string resource. | 8722 // The underlying string resource. |
| 8731 inline const Resource* resource(); | 8723 inline const Resource* resource(); |
| 8732 inline void set_resource(const Resource* buffer); | 8724 inline void set_resource(const Resource* buffer); |
| 8733 | 8725 |
| 8734 // Update the pointer cache to the external character array. | 8726 // Update the pointer cache to the external character array. |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8778 static char* Iterate(ObjectVisitor* v, char* t); | 8770 static char* Iterate(ObjectVisitor* v, char* t); |
| 8779 private: | 8771 private: |
| 8780 Isolate* isolate_; | 8772 Isolate* isolate_; |
| 8781 Relocatable* prev_; | 8773 Relocatable* prev_; |
| 8782 }; | 8774 }; |
| 8783 | 8775 |
| 8784 | 8776 |
| 8785 // A flat string reader provides random access to the contents of a | 8777 // A flat string reader provides random access to the contents of a |
| 8786 // string independent of the character width of the string. The handle | 8778 // string independent of the character width of the string. The handle |
| 8787 // must be valid as long as the reader is being used. | 8779 // must be valid as long as the reader is being used. |
| 8788 class FlatStringReader V8_FINAL : public Relocatable { | 8780 class FlatStringReader : public Relocatable { |
| 8789 public: | 8781 public: |
| 8790 FlatStringReader(Isolate* isolate, Handle<String> str); | 8782 FlatStringReader(Isolate* isolate, Handle<String> str); |
| 8791 FlatStringReader(Isolate* isolate, Vector<const char> input); | 8783 FlatStringReader(Isolate* isolate, Vector<const char> input); |
| 8792 void PostGarbageCollection(); | 8784 void PostGarbageCollection(); |
| 8793 inline uc32 Get(int index); | 8785 inline uc32 Get(int index); |
| 8794 int length() { return length_; } | 8786 int length() { return length_; } |
| 8795 private: | 8787 private: |
| 8796 String** str_; | 8788 String** str_; |
| 8797 bool is_ascii_; | 8789 bool is_ascii_; |
| 8798 int length_; | 8790 int length_; |
| 8799 const void* start_; | 8791 const void* start_; |
| 8800 }; | 8792 }; |
| 8801 | 8793 |
| 8802 | 8794 |
| 8803 // A ConsStringOp that returns null. | 8795 // A ConsStringOp that returns null. |
| 8804 // Useful when the operation to apply on a ConsString | 8796 // Useful when the operation to apply on a ConsString |
| 8805 // requires an expensive data structure. | 8797 // requires an expensive data structure. |
| 8806 class ConsStringNullOp V8_FINAL { | 8798 class ConsStringNullOp { |
| 8807 public: | 8799 public: |
| 8808 inline ConsStringNullOp() {} | 8800 inline ConsStringNullOp() {} |
| 8809 static inline String* Operate(String*, unsigned*, int32_t*, unsigned*); | 8801 static inline String* Operate(String*, unsigned*, int32_t*, unsigned*); |
| 8810 private: | 8802 private: |
| 8811 DISALLOW_COPY_AND_ASSIGN(ConsStringNullOp); | 8803 DISALLOW_COPY_AND_ASSIGN(ConsStringNullOp); |
| 8812 }; | 8804 }; |
| 8813 | 8805 |
| 8814 | 8806 |
| 8815 // This maintains an off-stack representation of the stack frames required | 8807 // This maintains an off-stack representation of the stack frames required |
| 8816 // to traverse a ConsString, allowing an entirely iterative and restartable | 8808 // to traverse a ConsString, allowing an entirely iterative and restartable |
| 8817 // traversal of the entire string | 8809 // traversal of the entire string |
| 8818 // Note: this class is not GC-safe. | 8810 // Note: this class is not GC-safe. |
| 8819 class ConsStringIteratorOp V8_FINAL { | 8811 class ConsStringIteratorOp { |
| 8820 public: | 8812 public: |
| 8821 inline ConsStringIteratorOp() {} | 8813 inline ConsStringIteratorOp() {} |
| 8822 String* Operate(String* string, | 8814 String* Operate(String* string, |
| 8823 unsigned* offset_out, | 8815 unsigned* offset_out, |
| 8824 int32_t* type_out, | 8816 int32_t* type_out, |
| 8825 unsigned* length_out); | 8817 unsigned* length_out); |
| 8826 inline String* ContinueOperation(int32_t* type_out, unsigned* length_out); | 8818 inline String* ContinueOperation(int32_t* type_out, unsigned* length_out); |
| 8827 inline void Reset(); | 8819 inline void Reset(); |
| 8828 inline bool HasMore(); | 8820 inline bool HasMore(); |
| 8829 | 8821 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 8849 // Stack must always contain only frames for which right traversal | 8841 // Stack must always contain only frames for which right traversal |
| 8850 // has not yet been performed. | 8842 // has not yet been performed. |
| 8851 ConsString* frames_[kStackSize]; | 8843 ConsString* frames_[kStackSize]; |
| 8852 unsigned consumed_; | 8844 unsigned consumed_; |
| 8853 ConsString* root_; | 8845 ConsString* root_; |
| 8854 DISALLOW_COPY_AND_ASSIGN(ConsStringIteratorOp); | 8846 DISALLOW_COPY_AND_ASSIGN(ConsStringIteratorOp); |
| 8855 }; | 8847 }; |
| 8856 | 8848 |
| 8857 | 8849 |
| 8858 // Note: this class is not GC-safe. | 8850 // Note: this class is not GC-safe. |
| 8859 class StringCharacterStream V8_FINAL { | 8851 class StringCharacterStream { |
| 8860 public: | 8852 public: |
| 8861 inline StringCharacterStream(String* string, | 8853 inline StringCharacterStream(String* string, |
| 8862 ConsStringIteratorOp* op, | 8854 ConsStringIteratorOp* op, |
| 8863 unsigned offset = 0); | 8855 unsigned offset = 0); |
| 8864 inline uint16_t GetNext(); | 8856 inline uint16_t GetNext(); |
| 8865 inline bool HasMore(); | 8857 inline bool HasMore(); |
| 8866 inline void Reset(String* string, unsigned offset = 0); | 8858 inline void Reset(String* string, unsigned offset = 0); |
| 8867 inline void VisitOneByteString(const uint8_t* chars, unsigned length); | 8859 inline void VisitOneByteString(const uint8_t* chars, unsigned length); |
| 8868 inline void VisitTwoByteString(const uint16_t* chars, unsigned length); | 8860 inline void VisitTwoByteString(const uint16_t* chars, unsigned length); |
| 8869 | 8861 |
| 8870 private: | 8862 private: |
| 8871 bool is_one_byte_; | 8863 bool is_one_byte_; |
| 8872 union { | 8864 union { |
| 8873 const uint8_t* buffer8_; | 8865 const uint8_t* buffer8_; |
| 8874 const uint16_t* buffer16_; | 8866 const uint16_t* buffer16_; |
| 8875 }; | 8867 }; |
| 8876 const uint8_t* end_; | 8868 const uint8_t* end_; |
| 8877 ConsStringIteratorOp* op_; | 8869 ConsStringIteratorOp* op_; |
| 8878 DISALLOW_COPY_AND_ASSIGN(StringCharacterStream); | 8870 DISALLOW_COPY_AND_ASSIGN(StringCharacterStream); |
| 8879 }; | 8871 }; |
| 8880 | 8872 |
| 8881 | 8873 |
| 8882 template <typename T> | 8874 template <typename T> |
| 8883 class VectorIterator V8_FINAL { | 8875 class VectorIterator { |
| 8884 public: | 8876 public: |
| 8885 VectorIterator(T* d, int l) : data_(Vector<const T>(d, l)), index_(0) { } | 8877 VectorIterator(T* d, int l) : data_(Vector<const T>(d, l)), index_(0) { } |
| 8886 explicit VectorIterator(Vector<const T> data) : data_(data), index_(0) { } | 8878 explicit VectorIterator(Vector<const T> data) : data_(data), index_(0) { } |
| 8887 T GetNext() { return data_[index_++]; } | 8879 T GetNext() { return data_[index_++]; } |
| 8888 bool has_more() { return index_ < data_.length(); } | 8880 bool has_more() { return index_ < data_.length(); } |
| 8889 private: | 8881 private: |
| 8890 Vector<const T> data_; | 8882 Vector<const T> data_; |
| 8891 int index_; | 8883 int index_; |
| 8892 }; | 8884 }; |
| 8893 | 8885 |
| 8894 | 8886 |
| 8895 // The Oddball describes objects null, undefined, true, and false. | 8887 // The Oddball describes objects null, undefined, true, and false. |
| 8896 class Oddball V8_FINAL : public HeapObject { | 8888 class Oddball: public HeapObject { |
| 8897 public: | 8889 public: |
| 8898 // [to_string]: Cached to_string computed at startup. | 8890 // [to_string]: Cached to_string computed at startup. |
| 8899 DECL_ACCESSORS(to_string, String) | 8891 DECL_ACCESSORS(to_string, String) |
| 8900 | 8892 |
| 8901 // [to_number]: Cached to_number computed at startup. | 8893 // [to_number]: Cached to_number computed at startup. |
| 8902 DECL_ACCESSORS(to_number, Object) | 8894 DECL_ACCESSORS(to_number, Object) |
| 8903 | 8895 |
| 8904 inline byte kind(); | 8896 inline byte kind(); |
| 8905 inline void set_kind(byte kind); | 8897 inline void set_kind(byte kind); |
| 8906 | 8898 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 8937 | 8929 |
| 8938 STATIC_CHECK(kKindOffset == Internals::kOddballKindOffset); | 8930 STATIC_CHECK(kKindOffset == Internals::kOddballKindOffset); |
| 8939 STATIC_CHECK(kNull == Internals::kNullOddballKind); | 8931 STATIC_CHECK(kNull == Internals::kNullOddballKind); |
| 8940 STATIC_CHECK(kUndefined == Internals::kUndefinedOddballKind); | 8932 STATIC_CHECK(kUndefined == Internals::kUndefinedOddballKind); |
| 8941 | 8933 |
| 8942 private: | 8934 private: |
| 8943 DISALLOW_IMPLICIT_CONSTRUCTORS(Oddball); | 8935 DISALLOW_IMPLICIT_CONSTRUCTORS(Oddball); |
| 8944 }; | 8936 }; |
| 8945 | 8937 |
| 8946 | 8938 |
| 8947 class Cell : public HeapObject { | 8939 class Cell: public HeapObject { |
| 8948 public: | 8940 public: |
| 8949 // [value]: value of the global property. | 8941 // [value]: value of the global property. |
| 8950 DECL_ACCESSORS(value, Object) | 8942 DECL_ACCESSORS(value, Object) |
| 8951 | 8943 |
| 8952 // Casting. | 8944 // Casting. |
| 8953 static inline Cell* cast(Object* obj); | 8945 static inline Cell* cast(Object* obj); |
| 8954 | 8946 |
| 8955 static inline Cell* FromValueAddress(Address value) { | 8947 static inline Cell* FromValueAddress(Address value) { |
| 8956 Object* result = FromAddress(value - kValueOffset); | 8948 Object* result = FromAddress(value - kValueOffset); |
| 8957 ASSERT(result->IsCell() || result->IsPropertyCell()); | 8949 ASSERT(result->IsCell() || result->IsPropertyCell()); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 8972 | 8964 |
| 8973 typedef FixedBodyDescriptor<kValueOffset, | 8965 typedef FixedBodyDescriptor<kValueOffset, |
| 8974 kValueOffset + kPointerSize, | 8966 kValueOffset + kPointerSize, |
| 8975 kSize> BodyDescriptor; | 8967 kSize> BodyDescriptor; |
| 8976 | 8968 |
| 8977 private: | 8969 private: |
| 8978 DISALLOW_IMPLICIT_CONSTRUCTORS(Cell); | 8970 DISALLOW_IMPLICIT_CONSTRUCTORS(Cell); |
| 8979 }; | 8971 }; |
| 8980 | 8972 |
| 8981 | 8973 |
| 8982 class PropertyCell V8_FINAL : public Cell { | 8974 class PropertyCell: public Cell { |
| 8983 public: | 8975 public: |
| 8984 // [type]: type of the global property. | 8976 // [type]: type of the global property. |
| 8985 Type* type(); | 8977 Type* type(); |
| 8986 void set_type(Type* value, WriteBarrierMode mode = UPDATE_WRITE_BARRIER); | 8978 void set_type(Type* value, WriteBarrierMode mode = UPDATE_WRITE_BARRIER); |
| 8987 | 8979 |
| 8988 // [dependent_code]: dependent code that depends on the type of the global | 8980 // [dependent_code]: dependent code that depends on the type of the global |
| 8989 // property. | 8981 // property. |
| 8990 DECL_ACCESSORS(dependent_code, DependentCode) | 8982 DECL_ACCESSORS(dependent_code, DependentCode) |
| 8991 | 8983 |
| 8992 // Sets the value of the cell and updates the type field to be the union | 8984 // Sets the value of the cell and updates the type field to be the union |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9027 static Type* UpdateType(Handle<PropertyCell> cell, | 9019 static Type* UpdateType(Handle<PropertyCell> cell, |
| 9028 Handle<Object> value); | 9020 Handle<Object> value); |
| 9029 | 9021 |
| 9030 private: | 9022 private: |
| 9031 DECL_ACCESSORS(type_raw, Object) | 9023 DECL_ACCESSORS(type_raw, Object) |
| 9032 DISALLOW_IMPLICIT_CONSTRUCTORS(PropertyCell); | 9024 DISALLOW_IMPLICIT_CONSTRUCTORS(PropertyCell); |
| 9033 }; | 9025 }; |
| 9034 | 9026 |
| 9035 | 9027 |
| 9036 // The JSProxy describes EcmaScript Harmony proxies | 9028 // The JSProxy describes EcmaScript Harmony proxies |
| 9037 class JSProxy : public JSReceiver { | 9029 class JSProxy: public JSReceiver { |
| 9038 public: | 9030 public: |
| 9039 // [handler]: The handler property. | 9031 // [handler]: The handler property. |
| 9040 DECL_ACCESSORS(handler, Object) | 9032 DECL_ACCESSORS(handler, Object) |
| 9041 | 9033 |
| 9042 // [hash]: The hash code property (undefined if not initialized yet). | 9034 // [hash]: The hash code property (undefined if not initialized yet). |
| 9043 DECL_ACCESSORS(hash, Object) | 9035 DECL_ACCESSORS(hash, Object) |
| 9044 | 9036 |
| 9045 // Casting. | 9037 // Casting. |
| 9046 static inline JSProxy* cast(Object* obj); | 9038 static inline JSProxy* cast(Object* obj); |
| 9047 | 9039 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9128 Handle<Name> name, | 9120 Handle<Name> name, |
| 9129 DeleteMode mode); | 9121 DeleteMode mode); |
| 9130 static Handle<Object> DeleteElementWithHandler(Handle<JSProxy> object, | 9122 static Handle<Object> DeleteElementWithHandler(Handle<JSProxy> object, |
| 9131 uint32_t index, | 9123 uint32_t index, |
| 9132 DeleteMode mode); | 9124 DeleteMode mode); |
| 9133 | 9125 |
| 9134 DISALLOW_IMPLICIT_CONSTRUCTORS(JSProxy); | 9126 DISALLOW_IMPLICIT_CONSTRUCTORS(JSProxy); |
| 9135 }; | 9127 }; |
| 9136 | 9128 |
| 9137 | 9129 |
| 9138 class JSFunctionProxy V8_FINAL : public JSProxy { | 9130 class JSFunctionProxy: public JSProxy { |
| 9139 public: | 9131 public: |
| 9140 // [call_trap]: The call trap. | 9132 // [call_trap]: The call trap. |
| 9141 DECL_ACCESSORS(call_trap, Object) | 9133 DECL_ACCESSORS(call_trap, Object) |
| 9142 | 9134 |
| 9143 // [construct_trap]: The construct trap. | 9135 // [construct_trap]: The construct trap. |
| 9144 DECL_ACCESSORS(construct_trap, Object) | 9136 DECL_ACCESSORS(construct_trap, Object) |
| 9145 | 9137 |
| 9146 // Casting. | 9138 // Casting. |
| 9147 static inline JSFunctionProxy* cast(Object* obj); | 9139 static inline JSFunctionProxy* cast(Object* obj); |
| 9148 | 9140 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 9162 typedef FixedBodyDescriptor<kHandlerOffset, | 9154 typedef FixedBodyDescriptor<kHandlerOffset, |
| 9163 kConstructTrapOffset + kPointerSize, | 9155 kConstructTrapOffset + kPointerSize, |
| 9164 kSize> BodyDescriptor; | 9156 kSize> BodyDescriptor; |
| 9165 | 9157 |
| 9166 private: | 9158 private: |
| 9167 DISALLOW_IMPLICIT_CONSTRUCTORS(JSFunctionProxy); | 9159 DISALLOW_IMPLICIT_CONSTRUCTORS(JSFunctionProxy); |
| 9168 }; | 9160 }; |
| 9169 | 9161 |
| 9170 | 9162 |
| 9171 // The JSSet describes EcmaScript Harmony sets | 9163 // The JSSet describes EcmaScript Harmony sets |
| 9172 class JSSet V8_FINAL : public JSObject { | 9164 class JSSet: public JSObject { |
| 9173 public: | 9165 public: |
| 9174 // [set]: the backing hash set containing keys. | 9166 // [set]: the backing hash set containing keys. |
| 9175 DECL_ACCESSORS(table, Object) | 9167 DECL_ACCESSORS(table, Object) |
| 9176 | 9168 |
| 9177 // Casting. | 9169 // Casting. |
| 9178 static inline JSSet* cast(Object* obj); | 9170 static inline JSSet* cast(Object* obj); |
| 9179 | 9171 |
| 9180 // Dispatched behavior. | 9172 // Dispatched behavior. |
| 9181 DECLARE_PRINTER(JSSet) | 9173 DECLARE_PRINTER(JSSet) |
| 9182 DECLARE_VERIFIER(JSSet) | 9174 DECLARE_VERIFIER(JSSet) |
| 9183 | 9175 |
| 9184 static const int kTableOffset = JSObject::kHeaderSize; | 9176 static const int kTableOffset = JSObject::kHeaderSize; |
| 9185 static const int kSize = kTableOffset + kPointerSize; | 9177 static const int kSize = kTableOffset + kPointerSize; |
| 9186 | 9178 |
| 9187 private: | 9179 private: |
| 9188 DISALLOW_IMPLICIT_CONSTRUCTORS(JSSet); | 9180 DISALLOW_IMPLICIT_CONSTRUCTORS(JSSet); |
| 9189 }; | 9181 }; |
| 9190 | 9182 |
| 9191 | 9183 |
| 9192 // The JSMap describes EcmaScript Harmony maps | 9184 // The JSMap describes EcmaScript Harmony maps |
| 9193 class JSMap V8_FINAL : public JSObject { | 9185 class JSMap: public JSObject { |
| 9194 public: | 9186 public: |
| 9195 // [table]: the backing hash table mapping keys to values. | 9187 // [table]: the backing hash table mapping keys to values. |
| 9196 DECL_ACCESSORS(table, Object) | 9188 DECL_ACCESSORS(table, Object) |
| 9197 | 9189 |
| 9198 // Casting. | 9190 // Casting. |
| 9199 static inline JSMap* cast(Object* obj); | 9191 static inline JSMap* cast(Object* obj); |
| 9200 | 9192 |
| 9201 // Dispatched behavior. | 9193 // Dispatched behavior. |
| 9202 DECLARE_PRINTER(JSMap) | 9194 DECLARE_PRINTER(JSMap) |
| 9203 DECLARE_VERIFIER(JSMap) | 9195 DECLARE_VERIFIER(JSMap) |
| 9204 | 9196 |
| 9205 static const int kTableOffset = JSObject::kHeaderSize; | 9197 static const int kTableOffset = JSObject::kHeaderSize; |
| 9206 static const int kSize = kTableOffset + kPointerSize; | 9198 static const int kSize = kTableOffset + kPointerSize; |
| 9207 | 9199 |
| 9208 private: | 9200 private: |
| 9209 DISALLOW_IMPLICIT_CONSTRUCTORS(JSMap); | 9201 DISALLOW_IMPLICIT_CONSTRUCTORS(JSMap); |
| 9210 }; | 9202 }; |
| 9211 | 9203 |
| 9212 | 9204 |
| 9213 // Base class for both JSWeakMap and JSWeakSet | 9205 // Base class for both JSWeakMap and JSWeakSet |
| 9214 class JSWeakCollection : public JSObject { | 9206 class JSWeakCollection: public JSObject { |
| 9215 public: | 9207 public: |
| 9216 // [table]: the backing hash table mapping keys to values. | 9208 // [table]: the backing hash table mapping keys to values. |
| 9217 DECL_ACCESSORS(table, Object) | 9209 DECL_ACCESSORS(table, Object) |
| 9218 | 9210 |
| 9219 // [next]: linked list of encountered weak maps during GC. | 9211 // [next]: linked list of encountered weak maps during GC. |
| 9220 DECL_ACCESSORS(next, Object) | 9212 DECL_ACCESSORS(next, Object) |
| 9221 | 9213 |
| 9222 static const int kTableOffset = JSObject::kHeaderSize; | 9214 static const int kTableOffset = JSObject::kHeaderSize; |
| 9223 static const int kNextOffset = kTableOffset + kPointerSize; | 9215 static const int kNextOffset = kTableOffset + kPointerSize; |
| 9224 static const int kSize = kNextOffset + kPointerSize; | 9216 static const int kSize = kNextOffset + kPointerSize; |
| 9225 | 9217 |
| 9226 private: | 9218 private: |
| 9227 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakCollection); | 9219 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakCollection); |
| 9228 }; | 9220 }; |
| 9229 | 9221 |
| 9230 | 9222 |
| 9231 // The JSWeakMap describes EcmaScript Harmony weak maps | 9223 // The JSWeakMap describes EcmaScript Harmony weak maps |
| 9232 class JSWeakMap V8_FINAL : public JSWeakCollection { | 9224 class JSWeakMap: public JSWeakCollection { |
| 9233 public: | 9225 public: |
| 9234 // Casting. | 9226 // Casting. |
| 9235 static inline JSWeakMap* cast(Object* obj); | 9227 static inline JSWeakMap* cast(Object* obj); |
| 9236 | 9228 |
| 9237 // Dispatched behavior. | 9229 // Dispatched behavior. |
| 9238 DECLARE_PRINTER(JSWeakMap) | 9230 DECLARE_PRINTER(JSWeakMap) |
| 9239 DECLARE_VERIFIER(JSWeakMap) | 9231 DECLARE_VERIFIER(JSWeakMap) |
| 9240 | 9232 |
| 9241 private: | 9233 private: |
| 9242 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakMap); | 9234 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakMap); |
| 9243 }; | 9235 }; |
| 9244 | 9236 |
| 9245 | 9237 |
| 9246 // The JSWeakSet describes EcmaScript Harmony weak sets | 9238 // The JSWeakSet describes EcmaScript Harmony weak sets |
| 9247 class JSWeakSet V8_FINAL : public JSWeakCollection { | 9239 class JSWeakSet: public JSWeakCollection { |
| 9248 public: | 9240 public: |
| 9249 // Casting. | 9241 // Casting. |
| 9250 static inline JSWeakSet* cast(Object* obj); | 9242 static inline JSWeakSet* cast(Object* obj); |
| 9251 | 9243 |
| 9252 // Dispatched behavior. | 9244 // Dispatched behavior. |
| 9253 DECLARE_PRINTER(JSWeakSet) | 9245 DECLARE_PRINTER(JSWeakSet) |
| 9254 DECLARE_VERIFIER(JSWeakSet) | 9246 DECLARE_VERIFIER(JSWeakSet) |
| 9255 | 9247 |
| 9256 private: | 9248 private: |
| 9257 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakSet); | 9249 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakSet); |
| 9258 }; | 9250 }; |
| 9259 | 9251 |
| 9260 | 9252 |
| 9261 class JSArrayBuffer : public JSObject { | 9253 class JSArrayBuffer: public JSObject { |
| 9262 public: | 9254 public: |
| 9263 // [backing_store]: backing memory for this array | 9255 // [backing_store]: backing memory for this array |
| 9264 DECL_ACCESSORS(backing_store, void) | 9256 DECL_ACCESSORS(backing_store, void) |
| 9265 | 9257 |
| 9266 // [byte_length]: length in bytes | 9258 // [byte_length]: length in bytes |
| 9267 DECL_ACCESSORS(byte_length, Object) | 9259 DECL_ACCESSORS(byte_length, Object) |
| 9268 | 9260 |
| 9269 // [flags] | 9261 // [flags] |
| 9270 DECL_ACCESSORS(flag, Smi) | 9262 DECL_ACCESSORS(flag, Smi) |
| 9271 | 9263 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 9299 kSize + v8::ArrayBuffer::kInternalFieldCount * kPointerSize; | 9291 kSize + v8::ArrayBuffer::kInternalFieldCount * kPointerSize; |
| 9300 | 9292 |
| 9301 private: | 9293 private: |
| 9302 // Bit position in a flag | 9294 // Bit position in a flag |
| 9303 static const int kIsExternalBit = 0; | 9295 static const int kIsExternalBit = 0; |
| 9304 | 9296 |
| 9305 DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayBuffer); | 9297 DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayBuffer); |
| 9306 }; | 9298 }; |
| 9307 | 9299 |
| 9308 | 9300 |
| 9309 class JSArrayBufferView : public JSObject { | 9301 class JSArrayBufferView: public JSObject { |
| 9310 public: | 9302 public: |
| 9311 // [buffer]: ArrayBuffer that this typed array views. | 9303 // [buffer]: ArrayBuffer that this typed array views. |
| 9312 DECL_ACCESSORS(buffer, Object) | 9304 DECL_ACCESSORS(buffer, Object) |
| 9313 | 9305 |
| 9314 // [byte_length]: offset of typed array in bytes. | 9306 // [byte_length]: offset of typed array in bytes. |
| 9315 DECL_ACCESSORS(byte_offset, Object) | 9307 DECL_ACCESSORS(byte_offset, Object) |
| 9316 | 9308 |
| 9317 // [byte_length]: length of typed array in bytes. | 9309 // [byte_length]: length of typed array in bytes. |
| 9318 DECL_ACCESSORS(byte_length, Object) | 9310 DECL_ACCESSORS(byte_length, Object) |
| 9319 | 9311 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 9332 static const int kViewSize = kWeakNextOffset + kPointerSize; | 9324 static const int kViewSize = kWeakNextOffset + kPointerSize; |
| 9333 | 9325 |
| 9334 protected: | 9326 protected: |
| 9335 void NeuterView(); | 9327 void NeuterView(); |
| 9336 | 9328 |
| 9337 private: | 9329 private: |
| 9338 DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayBufferView); | 9330 DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayBufferView); |
| 9339 }; | 9331 }; |
| 9340 | 9332 |
| 9341 | 9333 |
| 9342 class JSTypedArray V8_FINAL : public JSArrayBufferView { | 9334 class JSTypedArray: public JSArrayBufferView { |
| 9343 public: | 9335 public: |
| 9344 // [length]: length of typed array in elements. | 9336 // [length]: length of typed array in elements. |
| 9345 DECL_ACCESSORS(length, Object) | 9337 DECL_ACCESSORS(length, Object) |
| 9346 | 9338 |
| 9347 // Neutering. Only neuters this typed array. | 9339 // Neutering. Only neuters this typed array. |
| 9348 void Neuter(); | 9340 void Neuter(); |
| 9349 | 9341 |
| 9350 // Casting. | 9342 // Casting. |
| 9351 static inline JSTypedArray* cast(Object* obj); | 9343 static inline JSTypedArray* cast(Object* obj); |
| 9352 | 9344 |
| 9353 ExternalArrayType type(); | 9345 ExternalArrayType type(); |
| 9354 size_t element_size(); | 9346 size_t element_size(); |
| 9355 | 9347 |
| 9356 // Dispatched behavior. | 9348 // Dispatched behavior. |
| 9357 DECLARE_PRINTER(JSTypedArray) | 9349 DECLARE_PRINTER(JSTypedArray) |
| 9358 DECLARE_VERIFIER(JSTypedArray) | 9350 DECLARE_VERIFIER(JSTypedArray) |
| 9359 | 9351 |
| 9360 static const int kLengthOffset = kViewSize + kPointerSize; | 9352 static const int kLengthOffset = kViewSize + kPointerSize; |
| 9361 static const int kSize = kLengthOffset + kPointerSize; | 9353 static const int kSize = kLengthOffset + kPointerSize; |
| 9362 | 9354 |
| 9363 static const int kSizeWithInternalFields = | 9355 static const int kSizeWithInternalFields = |
| 9364 kSize + v8::ArrayBufferView::kInternalFieldCount * kPointerSize; | 9356 kSize + v8::ArrayBufferView::kInternalFieldCount * kPointerSize; |
| 9365 | 9357 |
| 9366 private: | 9358 private: |
| 9367 DISALLOW_IMPLICIT_CONSTRUCTORS(JSTypedArray); | 9359 DISALLOW_IMPLICIT_CONSTRUCTORS(JSTypedArray); |
| 9368 }; | 9360 }; |
| 9369 | 9361 |
| 9370 | 9362 |
| 9371 class JSDataView V8_FINAL : public JSArrayBufferView { | 9363 class JSDataView: public JSArrayBufferView { |
| 9372 public: | 9364 public: |
| 9373 // Only neuters this DataView | 9365 // Only neuters this DataView |
| 9374 void Neuter(); | 9366 void Neuter(); |
| 9375 | 9367 |
| 9376 // Casting. | 9368 // Casting. |
| 9377 static inline JSDataView* cast(Object* obj); | 9369 static inline JSDataView* cast(Object* obj); |
| 9378 | 9370 |
| 9379 // Dispatched behavior. | 9371 // Dispatched behavior. |
| 9380 DECLARE_PRINTER(JSDataView) | 9372 DECLARE_PRINTER(JSDataView) |
| 9381 DECLARE_VERIFIER(JSDataView) | 9373 DECLARE_VERIFIER(JSDataView) |
| 9382 | 9374 |
| 9383 static const int kSize = kViewSize; | 9375 static const int kSize = kViewSize; |
| 9384 | 9376 |
| 9385 static const int kSizeWithInternalFields = | 9377 static const int kSizeWithInternalFields = |
| 9386 kSize + v8::ArrayBufferView::kInternalFieldCount * kPointerSize; | 9378 kSize + v8::ArrayBufferView::kInternalFieldCount * kPointerSize; |
| 9387 | 9379 |
| 9388 private: | 9380 private: |
| 9389 DISALLOW_IMPLICIT_CONSTRUCTORS(JSDataView); | 9381 DISALLOW_IMPLICIT_CONSTRUCTORS(JSDataView); |
| 9390 }; | 9382 }; |
| 9391 | 9383 |
| 9392 | 9384 |
| 9393 // Foreign describes objects pointing from JavaScript to C structures. | 9385 // Foreign describes objects pointing from JavaScript to C structures. |
| 9394 // Since they cannot contain references to JS HeapObjects they can be | 9386 // Since they cannot contain references to JS HeapObjects they can be |
| 9395 // placed in old_data_space. | 9387 // placed in old_data_space. |
| 9396 class Foreign V8_FINAL : public HeapObject { | 9388 class Foreign: public HeapObject { |
| 9397 public: | 9389 public: |
| 9398 // [address]: field containing the address. | 9390 // [address]: field containing the address. |
| 9399 inline Address foreign_address(); | 9391 inline Address foreign_address(); |
| 9400 inline void set_foreign_address(Address value); | 9392 inline void set_foreign_address(Address value); |
| 9401 | 9393 |
| 9402 // Casting. | 9394 // Casting. |
| 9403 static inline Foreign* cast(Object* obj); | 9395 static inline Foreign* cast(Object* obj); |
| 9404 | 9396 |
| 9405 // Dispatched behavior. | 9397 // Dispatched behavior. |
| 9406 inline void ForeignIterateBody(ObjectVisitor* v); | 9398 inline void ForeignIterateBody(ObjectVisitor* v); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 9422 private: | 9414 private: |
| 9423 DISALLOW_IMPLICIT_CONSTRUCTORS(Foreign); | 9415 DISALLOW_IMPLICIT_CONSTRUCTORS(Foreign); |
| 9424 }; | 9416 }; |
| 9425 | 9417 |
| 9426 | 9418 |
| 9427 // The JSArray describes JavaScript Arrays | 9419 // The JSArray describes JavaScript Arrays |
| 9428 // Such an array can be in one of two modes: | 9420 // Such an array can be in one of two modes: |
| 9429 // - fast, backing storage is a FixedArray and length <= elements.length(); | 9421 // - fast, backing storage is a FixedArray and length <= elements.length(); |
| 9430 // Please note: push and pop can be used to grow and shrink the array. | 9422 // Please note: push and pop can be used to grow and shrink the array. |
| 9431 // - slow, backing storage is a HashTable with numbers as keys. | 9423 // - slow, backing storage is a HashTable with numbers as keys. |
| 9432 class JSArray : public JSObject { | 9424 class JSArray: public JSObject { |
| 9433 public: | 9425 public: |
| 9434 // [length]: The length property. | 9426 // [length]: The length property. |
| 9435 DECL_ACCESSORS(length, Object) | 9427 DECL_ACCESSORS(length, Object) |
| 9436 | 9428 |
| 9437 // Overload the length setter to skip write barrier when the length | 9429 // Overload the length setter to skip write barrier when the length |
| 9438 // is set to a smi. This matches the set function on FixedArray. | 9430 // is set to a smi. This matches the set function on FixedArray. |
| 9439 inline void set_length(Smi* length); | 9431 inline void set_length(Smi* length); |
| 9440 | 9432 |
| 9441 MUST_USE_RESULT MaybeObject* JSArrayUpdateLengthFromIndex(uint32_t index, | 9433 MUST_USE_RESULT MaybeObject* JSArrayUpdateLengthFromIndex(uint32_t index, |
| 9442 Object* value); | 9434 Object* value); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9484 Handle<Object> CacheInitialJSArrayMaps(Handle<Context> native_context, | 9476 Handle<Object> CacheInitialJSArrayMaps(Handle<Context> native_context, |
| 9485 Handle<Map> initial_map); | 9477 Handle<Map> initial_map); |
| 9486 | 9478 |
| 9487 | 9479 |
| 9488 // JSRegExpResult is just a JSArray with a specific initial map. | 9480 // JSRegExpResult is just a JSArray with a specific initial map. |
| 9489 // This initial map adds in-object properties for "index" and "input" | 9481 // This initial map adds in-object properties for "index" and "input" |
| 9490 // properties, as assigned by RegExp.prototype.exec, which allows | 9482 // properties, as assigned by RegExp.prototype.exec, which allows |
| 9491 // faster creation of RegExp exec results. | 9483 // faster creation of RegExp exec results. |
| 9492 // This class just holds constants used when creating the result. | 9484 // This class just holds constants used when creating the result. |
| 9493 // After creation the result must be treated as a JSArray in all regards. | 9485 // After creation the result must be treated as a JSArray in all regards. |
| 9494 class JSRegExpResult V8_FINAL : public JSArray { | 9486 class JSRegExpResult: public JSArray { |
| 9495 public: | 9487 public: |
| 9496 // Offsets of object fields. | 9488 // Offsets of object fields. |
| 9497 static const int kIndexOffset = JSArray::kSize; | 9489 static const int kIndexOffset = JSArray::kSize; |
| 9498 static const int kInputOffset = kIndexOffset + kPointerSize; | 9490 static const int kInputOffset = kIndexOffset + kPointerSize; |
| 9499 static const int kSize = kInputOffset + kPointerSize; | 9491 static const int kSize = kInputOffset + kPointerSize; |
| 9500 // Indices of in-object properties. | 9492 // Indices of in-object properties. |
| 9501 static const int kIndexIndex = 0; | 9493 static const int kIndexIndex = 0; |
| 9502 static const int kInputIndex = 1; | 9494 static const int kInputIndex = 1; |
| 9503 private: | 9495 private: |
| 9504 DISALLOW_IMPLICIT_CONSTRUCTORS(JSRegExpResult); | 9496 DISALLOW_IMPLICIT_CONSTRUCTORS(JSRegExpResult); |
| 9505 }; | 9497 }; |
| 9506 | 9498 |
| 9507 | 9499 |
| 9508 class AccessorInfo : public Struct { | 9500 class AccessorInfo: public Struct { |
| 9509 public: | 9501 public: |
| 9510 DECL_ACCESSORS(name, Object) | 9502 DECL_ACCESSORS(name, Object) |
| 9511 DECL_ACCESSORS(flag, Smi) | 9503 DECL_ACCESSORS(flag, Smi) |
| 9512 DECL_ACCESSORS(expected_receiver_type, Object) | 9504 DECL_ACCESSORS(expected_receiver_type, Object) |
| 9513 | 9505 |
| 9514 inline bool all_can_read(); | 9506 inline bool all_can_read(); |
| 9515 inline void set_all_can_read(bool value); | 9507 inline void set_all_can_read(bool value); |
| 9516 | 9508 |
| 9517 inline bool all_can_write(); | 9509 inline bool all_can_write(); |
| 9518 inline void set_all_can_write(bool value); | 9510 inline void set_all_can_write(bool value); |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9595 struct PrimitiveValueDescriptor primitive_value_descriptor; | 9587 struct PrimitiveValueDescriptor primitive_value_descriptor; |
| 9596 struct ObjectDerefenceDescriptor object_dereference_descriptor; | 9588 struct ObjectDerefenceDescriptor object_dereference_descriptor; |
| 9597 struct PointerShiftDescriptor pointer_shift_descriptor; | 9589 struct PointerShiftDescriptor pointer_shift_descriptor; |
| 9598 }; | 9590 }; |
| 9599 }; | 9591 }; |
| 9600 | 9592 |
| 9601 | 9593 |
| 9602 class DeclaredAccessorDescriptor; | 9594 class DeclaredAccessorDescriptor; |
| 9603 | 9595 |
| 9604 | 9596 |
| 9605 class DeclaredAccessorDescriptorIterator V8_FINAL { | 9597 class DeclaredAccessorDescriptorIterator { |
| 9606 public: | 9598 public: |
| 9607 explicit DeclaredAccessorDescriptorIterator( | 9599 explicit DeclaredAccessorDescriptorIterator( |
| 9608 DeclaredAccessorDescriptor* descriptor); | 9600 DeclaredAccessorDescriptor* descriptor); |
| 9609 const DeclaredAccessorDescriptorData* Next(); | 9601 const DeclaredAccessorDescriptorData* Next(); |
| 9610 bool Complete() const { return length_ == offset_; } | 9602 bool Complete() const { return length_ == offset_; } |
| 9611 private: | 9603 private: |
| 9612 uint8_t* array_; | 9604 uint8_t* array_; |
| 9613 const int length_; | 9605 const int length_; |
| 9614 int offset_; | 9606 int offset_; |
| 9615 DISALLOW_IMPLICIT_CONSTRUCTORS(DeclaredAccessorDescriptorIterator); | 9607 DISALLOW_IMPLICIT_CONSTRUCTORS(DeclaredAccessorDescriptorIterator); |
| 9616 }; | 9608 }; |
| 9617 | 9609 |
| 9618 | 9610 |
| 9619 class DeclaredAccessorDescriptor V8_FINAL : public Struct { | 9611 class DeclaredAccessorDescriptor: public Struct { |
| 9620 public: | 9612 public: |
| 9621 DECL_ACCESSORS(serialized_data, ByteArray) | 9613 DECL_ACCESSORS(serialized_data, ByteArray) |
| 9622 | 9614 |
| 9623 static inline DeclaredAccessorDescriptor* cast(Object* obj); | 9615 static inline DeclaredAccessorDescriptor* cast(Object* obj); |
| 9624 | 9616 |
| 9625 static Handle<DeclaredAccessorDescriptor> Create( | 9617 static Handle<DeclaredAccessorDescriptor> Create( |
| 9626 Isolate* isolate, | 9618 Isolate* isolate, |
| 9627 const DeclaredAccessorDescriptorData& data, | 9619 const DeclaredAccessorDescriptorData& data, |
| 9628 Handle<DeclaredAccessorDescriptor> previous); | 9620 Handle<DeclaredAccessorDescriptor> previous); |
| 9629 | 9621 |
| 9630 // Dispatched behavior. | 9622 // Dispatched behavior. |
| 9631 DECLARE_PRINTER(DeclaredAccessorDescriptor) | 9623 DECLARE_PRINTER(DeclaredAccessorDescriptor) |
| 9632 DECLARE_VERIFIER(DeclaredAccessorDescriptor) | 9624 DECLARE_VERIFIER(DeclaredAccessorDescriptor) |
| 9633 | 9625 |
| 9634 static const int kSerializedDataOffset = HeapObject::kHeaderSize; | 9626 static const int kSerializedDataOffset = HeapObject::kHeaderSize; |
| 9635 static const int kSize = kSerializedDataOffset + kPointerSize; | 9627 static const int kSize = kSerializedDataOffset + kPointerSize; |
| 9636 | 9628 |
| 9637 private: | 9629 private: |
| 9638 DISALLOW_IMPLICIT_CONSTRUCTORS(DeclaredAccessorDescriptor); | 9630 DISALLOW_IMPLICIT_CONSTRUCTORS(DeclaredAccessorDescriptor); |
| 9639 }; | 9631 }; |
| 9640 | 9632 |
| 9641 | 9633 |
| 9642 class DeclaredAccessorInfo V8_FINAL : public AccessorInfo { | 9634 class DeclaredAccessorInfo: public AccessorInfo { |
| 9643 public: | 9635 public: |
| 9644 DECL_ACCESSORS(descriptor, DeclaredAccessorDescriptor) | 9636 DECL_ACCESSORS(descriptor, DeclaredAccessorDescriptor) |
| 9645 | 9637 |
| 9646 static inline DeclaredAccessorInfo* cast(Object* obj); | 9638 static inline DeclaredAccessorInfo* cast(Object* obj); |
| 9647 | 9639 |
| 9648 // Dispatched behavior. | 9640 // Dispatched behavior. |
| 9649 DECLARE_PRINTER(DeclaredAccessorInfo) | 9641 DECLARE_PRINTER(DeclaredAccessorInfo) |
| 9650 DECLARE_VERIFIER(DeclaredAccessorInfo) | 9642 DECLARE_VERIFIER(DeclaredAccessorInfo) |
| 9651 | 9643 |
| 9652 static const int kDescriptorOffset = AccessorInfo::kSize; | 9644 static const int kDescriptorOffset = AccessorInfo::kSize; |
| 9653 static const int kSize = kDescriptorOffset + kPointerSize; | 9645 static const int kSize = kDescriptorOffset + kPointerSize; |
| 9654 | 9646 |
| 9655 private: | 9647 private: |
| 9656 DISALLOW_IMPLICIT_CONSTRUCTORS(DeclaredAccessorInfo); | 9648 DISALLOW_IMPLICIT_CONSTRUCTORS(DeclaredAccessorInfo); |
| 9657 }; | 9649 }; |
| 9658 | 9650 |
| 9659 | 9651 |
| 9660 // An accessor must have a getter, but can have no setter. | 9652 // An accessor must have a getter, but can have no setter. |
| 9661 // | 9653 // |
| 9662 // When setting a property, V8 searches accessors in prototypes. | 9654 // When setting a property, V8 searches accessors in prototypes. |
| 9663 // If an accessor was found and it does not have a setter, | 9655 // If an accessor was found and it does not have a setter, |
| 9664 // the request is ignored. | 9656 // the request is ignored. |
| 9665 // | 9657 // |
| 9666 // If the accessor in the prototype has the READ_ONLY property attribute, then | 9658 // If the accessor in the prototype has the READ_ONLY property attribute, then |
| 9667 // a new value is added to the local object when the property is set. | 9659 // a new value is added to the local object when the property is set. |
| 9668 // This shadows the accessor in the prototype. | 9660 // This shadows the accessor in the prototype. |
| 9669 class ExecutableAccessorInfo V8_FINAL : public AccessorInfo { | 9661 class ExecutableAccessorInfo: public AccessorInfo { |
| 9670 public: | 9662 public: |
| 9671 DECL_ACCESSORS(getter, Object) | 9663 DECL_ACCESSORS(getter, Object) |
| 9672 DECL_ACCESSORS(setter, Object) | 9664 DECL_ACCESSORS(setter, Object) |
| 9673 DECL_ACCESSORS(data, Object) | 9665 DECL_ACCESSORS(data, Object) |
| 9674 | 9666 |
| 9675 static inline ExecutableAccessorInfo* cast(Object* obj); | 9667 static inline ExecutableAccessorInfo* cast(Object* obj); |
| 9676 | 9668 |
| 9677 // Dispatched behavior. | 9669 // Dispatched behavior. |
| 9678 DECLARE_PRINTER(ExecutableAccessorInfo) | 9670 DECLARE_PRINTER(ExecutableAccessorInfo) |
| 9679 DECLARE_VERIFIER(ExecutableAccessorInfo) | 9671 DECLARE_VERIFIER(ExecutableAccessorInfo) |
| 9680 | 9672 |
| 9681 static const int kGetterOffset = AccessorInfo::kSize; | 9673 static const int kGetterOffset = AccessorInfo::kSize; |
| 9682 static const int kSetterOffset = kGetterOffset + kPointerSize; | 9674 static const int kSetterOffset = kGetterOffset + kPointerSize; |
| 9683 static const int kDataOffset = kSetterOffset + kPointerSize; | 9675 static const int kDataOffset = kSetterOffset + kPointerSize; |
| 9684 static const int kSize = kDataOffset + kPointerSize; | 9676 static const int kSize = kDataOffset + kPointerSize; |
| 9685 | 9677 |
| 9686 private: | 9678 private: |
| 9687 DISALLOW_IMPLICIT_CONSTRUCTORS(ExecutableAccessorInfo); | 9679 DISALLOW_IMPLICIT_CONSTRUCTORS(ExecutableAccessorInfo); |
| 9688 }; | 9680 }; |
| 9689 | 9681 |
| 9690 | 9682 |
| 9691 // Support for JavaScript accessors: A pair of a getter and a setter. Each | 9683 // Support for JavaScript accessors: A pair of a getter and a setter. Each |
| 9692 // accessor can either be | 9684 // accessor can either be |
| 9693 // * a pointer to a JavaScript function or proxy: a real accessor | 9685 // * a pointer to a JavaScript function or proxy: a real accessor |
| 9694 // * undefined: considered an accessor by the spec, too, strangely enough | 9686 // * undefined: considered an accessor by the spec, too, strangely enough |
| 9695 // * the hole: an accessor which has not been set | 9687 // * the hole: an accessor which has not been set |
| 9696 // * a pointer to a map: a transition used to ensure map sharing | 9688 // * a pointer to a map: a transition used to ensure map sharing |
| 9697 class AccessorPair V8_FINAL : public Struct { | 9689 class AccessorPair: public Struct { |
| 9698 public: | 9690 public: |
| 9699 DECL_ACCESSORS(getter, Object) | 9691 DECL_ACCESSORS(getter, Object) |
| 9700 DECL_ACCESSORS(setter, Object) | 9692 DECL_ACCESSORS(setter, Object) |
| 9701 | 9693 |
| 9702 static inline AccessorPair* cast(Object* obj); | 9694 static inline AccessorPair* cast(Object* obj); |
| 9703 | 9695 |
| 9704 static Handle<AccessorPair> Copy(Handle<AccessorPair> pair); | 9696 static Handle<AccessorPair> Copy(Handle<AccessorPair> pair); |
| 9705 | 9697 |
| 9706 Object* get(AccessorComponent component) { | 9698 Object* get(AccessorComponent component) { |
| 9707 return component == ACCESSOR_GETTER ? getter() : setter(); | 9699 return component == ACCESSOR_GETTER ? getter() : setter(); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9743 // Object.defineProperty(obj, "foo", {get: undefined}); | 9735 // Object.defineProperty(obj, "foo", {get: undefined}); |
| 9744 // assertTrue("foo" in obj); | 9736 // assertTrue("foo" in obj); |
| 9745 bool IsJSAccessor(Object* obj) { | 9737 bool IsJSAccessor(Object* obj) { |
| 9746 return obj->IsSpecFunction() || obj->IsUndefined(); | 9738 return obj->IsSpecFunction() || obj->IsUndefined(); |
| 9747 } | 9739 } |
| 9748 | 9740 |
| 9749 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessorPair); | 9741 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessorPair); |
| 9750 }; | 9742 }; |
| 9751 | 9743 |
| 9752 | 9744 |
| 9753 class AccessCheckInfo V8_FINAL : public Struct { | 9745 class AccessCheckInfo: public Struct { |
| 9754 public: | 9746 public: |
| 9755 DECL_ACCESSORS(named_callback, Object) | 9747 DECL_ACCESSORS(named_callback, Object) |
| 9756 DECL_ACCESSORS(indexed_callback, Object) | 9748 DECL_ACCESSORS(indexed_callback, Object) |
| 9757 DECL_ACCESSORS(data, Object) | 9749 DECL_ACCESSORS(data, Object) |
| 9758 | 9750 |
| 9759 static inline AccessCheckInfo* cast(Object* obj); | 9751 static inline AccessCheckInfo* cast(Object* obj); |
| 9760 | 9752 |
| 9761 // Dispatched behavior. | 9753 // Dispatched behavior. |
| 9762 DECLARE_PRINTER(AccessCheckInfo) | 9754 DECLARE_PRINTER(AccessCheckInfo) |
| 9763 DECLARE_VERIFIER(AccessCheckInfo) | 9755 DECLARE_VERIFIER(AccessCheckInfo) |
| 9764 | 9756 |
| 9765 static const int kNamedCallbackOffset = HeapObject::kHeaderSize; | 9757 static const int kNamedCallbackOffset = HeapObject::kHeaderSize; |
| 9766 static const int kIndexedCallbackOffset = kNamedCallbackOffset + kPointerSize; | 9758 static const int kIndexedCallbackOffset = kNamedCallbackOffset + kPointerSize; |
| 9767 static const int kDataOffset = kIndexedCallbackOffset + kPointerSize; | 9759 static const int kDataOffset = kIndexedCallbackOffset + kPointerSize; |
| 9768 static const int kSize = kDataOffset + kPointerSize; | 9760 static const int kSize = kDataOffset + kPointerSize; |
| 9769 | 9761 |
| 9770 private: | 9762 private: |
| 9771 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessCheckInfo); | 9763 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessCheckInfo); |
| 9772 }; | 9764 }; |
| 9773 | 9765 |
| 9774 | 9766 |
| 9775 class InterceptorInfo V8_FINAL : public Struct { | 9767 class InterceptorInfo: public Struct { |
| 9776 public: | 9768 public: |
| 9777 DECL_ACCESSORS(getter, Object) | 9769 DECL_ACCESSORS(getter, Object) |
| 9778 DECL_ACCESSORS(setter, Object) | 9770 DECL_ACCESSORS(setter, Object) |
| 9779 DECL_ACCESSORS(query, Object) | 9771 DECL_ACCESSORS(query, Object) |
| 9780 DECL_ACCESSORS(deleter, Object) | 9772 DECL_ACCESSORS(deleter, Object) |
| 9781 DECL_ACCESSORS(enumerator, Object) | 9773 DECL_ACCESSORS(enumerator, Object) |
| 9782 DECL_ACCESSORS(data, Object) | 9774 DECL_ACCESSORS(data, Object) |
| 9783 | 9775 |
| 9784 static inline InterceptorInfo* cast(Object* obj); | 9776 static inline InterceptorInfo* cast(Object* obj); |
| 9785 | 9777 |
| 9786 // Dispatched behavior. | 9778 // Dispatched behavior. |
| 9787 DECLARE_PRINTER(InterceptorInfo) | 9779 DECLARE_PRINTER(InterceptorInfo) |
| 9788 DECLARE_VERIFIER(InterceptorInfo) | 9780 DECLARE_VERIFIER(InterceptorInfo) |
| 9789 | 9781 |
| 9790 static const int kGetterOffset = HeapObject::kHeaderSize; | 9782 static const int kGetterOffset = HeapObject::kHeaderSize; |
| 9791 static const int kSetterOffset = kGetterOffset + kPointerSize; | 9783 static const int kSetterOffset = kGetterOffset + kPointerSize; |
| 9792 static const int kQueryOffset = kSetterOffset + kPointerSize; | 9784 static const int kQueryOffset = kSetterOffset + kPointerSize; |
| 9793 static const int kDeleterOffset = kQueryOffset + kPointerSize; | 9785 static const int kDeleterOffset = kQueryOffset + kPointerSize; |
| 9794 static const int kEnumeratorOffset = kDeleterOffset + kPointerSize; | 9786 static const int kEnumeratorOffset = kDeleterOffset + kPointerSize; |
| 9795 static const int kDataOffset = kEnumeratorOffset + kPointerSize; | 9787 static const int kDataOffset = kEnumeratorOffset + kPointerSize; |
| 9796 static const int kSize = kDataOffset + kPointerSize; | 9788 static const int kSize = kDataOffset + kPointerSize; |
| 9797 | 9789 |
| 9798 private: | 9790 private: |
| 9799 DISALLOW_IMPLICIT_CONSTRUCTORS(InterceptorInfo); | 9791 DISALLOW_IMPLICIT_CONSTRUCTORS(InterceptorInfo); |
| 9800 }; | 9792 }; |
| 9801 | 9793 |
| 9802 | 9794 |
| 9803 class CallHandlerInfo V8_FINAL : public Struct { | 9795 class CallHandlerInfo: public Struct { |
| 9804 public: | 9796 public: |
| 9805 DECL_ACCESSORS(callback, Object) | 9797 DECL_ACCESSORS(callback, Object) |
| 9806 DECL_ACCESSORS(data, Object) | 9798 DECL_ACCESSORS(data, Object) |
| 9807 | 9799 |
| 9808 static inline CallHandlerInfo* cast(Object* obj); | 9800 static inline CallHandlerInfo* cast(Object* obj); |
| 9809 | 9801 |
| 9810 // Dispatched behavior. | 9802 // Dispatched behavior. |
| 9811 DECLARE_PRINTER(CallHandlerInfo) | 9803 DECLARE_PRINTER(CallHandlerInfo) |
| 9812 DECLARE_VERIFIER(CallHandlerInfo) | 9804 DECLARE_VERIFIER(CallHandlerInfo) |
| 9813 | 9805 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 9829 | 9821 |
| 9830 static const int kTagOffset = HeapObject::kHeaderSize; | 9822 static const int kTagOffset = HeapObject::kHeaderSize; |
| 9831 static const int kPropertyListOffset = kTagOffset + kPointerSize; | 9823 static const int kPropertyListOffset = kTagOffset + kPointerSize; |
| 9832 static const int kHeaderSize = kPropertyListOffset + kPointerSize; | 9824 static const int kHeaderSize = kPropertyListOffset + kPointerSize; |
| 9833 | 9825 |
| 9834 private: | 9826 private: |
| 9835 DISALLOW_IMPLICIT_CONSTRUCTORS(TemplateInfo); | 9827 DISALLOW_IMPLICIT_CONSTRUCTORS(TemplateInfo); |
| 9836 }; | 9828 }; |
| 9837 | 9829 |
| 9838 | 9830 |
| 9839 class FunctionTemplateInfo V8_FINAL : public TemplateInfo { | 9831 class FunctionTemplateInfo: public TemplateInfo { |
| 9840 public: | 9832 public: |
| 9841 DECL_ACCESSORS(serial_number, Object) | 9833 DECL_ACCESSORS(serial_number, Object) |
| 9842 DECL_ACCESSORS(call_code, Object) | 9834 DECL_ACCESSORS(call_code, Object) |
| 9843 DECL_ACCESSORS(property_accessors, Object) | 9835 DECL_ACCESSORS(property_accessors, Object) |
| 9844 DECL_ACCESSORS(prototype_template, Object) | 9836 DECL_ACCESSORS(prototype_template, Object) |
| 9845 DECL_ACCESSORS(parent_template, Object) | 9837 DECL_ACCESSORS(parent_template, Object) |
| 9846 DECL_ACCESSORS(named_property_handler, Object) | 9838 DECL_ACCESSORS(named_property_handler, Object) |
| 9847 DECL_ACCESSORS(indexed_property_handler, Object) | 9839 DECL_ACCESSORS(indexed_property_handler, Object) |
| 9848 DECL_ACCESSORS(instance_template, Object) | 9840 DECL_ACCESSORS(instance_template, Object) |
| 9849 DECL_ACCESSORS(class_name, Object) | 9841 DECL_ACCESSORS(class_name, Object) |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9895 // Bit position in the flag, from least significant bit position. | 9887 // Bit position in the flag, from least significant bit position. |
| 9896 static const int kHiddenPrototypeBit = 0; | 9888 static const int kHiddenPrototypeBit = 0; |
| 9897 static const int kUndetectableBit = 1; | 9889 static const int kUndetectableBit = 1; |
| 9898 static const int kNeedsAccessCheckBit = 2; | 9890 static const int kNeedsAccessCheckBit = 2; |
| 9899 static const int kReadOnlyPrototypeBit = 3; | 9891 static const int kReadOnlyPrototypeBit = 3; |
| 9900 | 9892 |
| 9901 DISALLOW_IMPLICIT_CONSTRUCTORS(FunctionTemplateInfo); | 9893 DISALLOW_IMPLICIT_CONSTRUCTORS(FunctionTemplateInfo); |
| 9902 }; | 9894 }; |
| 9903 | 9895 |
| 9904 | 9896 |
| 9905 class ObjectTemplateInfo V8_FINAL : public TemplateInfo { | 9897 class ObjectTemplateInfo: public TemplateInfo { |
| 9906 public: | 9898 public: |
| 9907 DECL_ACCESSORS(constructor, Object) | 9899 DECL_ACCESSORS(constructor, Object) |
| 9908 DECL_ACCESSORS(internal_field_count, Object) | 9900 DECL_ACCESSORS(internal_field_count, Object) |
| 9909 | 9901 |
| 9910 static inline ObjectTemplateInfo* cast(Object* obj); | 9902 static inline ObjectTemplateInfo* cast(Object* obj); |
| 9911 | 9903 |
| 9912 // Dispatched behavior. | 9904 // Dispatched behavior. |
| 9913 DECLARE_PRINTER(ObjectTemplateInfo) | 9905 DECLARE_PRINTER(ObjectTemplateInfo) |
| 9914 DECLARE_VERIFIER(ObjectTemplateInfo) | 9906 DECLARE_VERIFIER(ObjectTemplateInfo) |
| 9915 | 9907 |
| 9916 static const int kConstructorOffset = TemplateInfo::kHeaderSize; | 9908 static const int kConstructorOffset = TemplateInfo::kHeaderSize; |
| 9917 static const int kInternalFieldCountOffset = | 9909 static const int kInternalFieldCountOffset = |
| 9918 kConstructorOffset + kPointerSize; | 9910 kConstructorOffset + kPointerSize; |
| 9919 static const int kSize = kInternalFieldCountOffset + kPointerSize; | 9911 static const int kSize = kInternalFieldCountOffset + kPointerSize; |
| 9920 }; | 9912 }; |
| 9921 | 9913 |
| 9922 | 9914 |
| 9923 class SignatureInfo V8_FINAL : public Struct { | 9915 class SignatureInfo: public Struct { |
| 9924 public: | 9916 public: |
| 9925 DECL_ACCESSORS(receiver, Object) | 9917 DECL_ACCESSORS(receiver, Object) |
| 9926 DECL_ACCESSORS(args, Object) | 9918 DECL_ACCESSORS(args, Object) |
| 9927 | 9919 |
| 9928 static inline SignatureInfo* cast(Object* obj); | 9920 static inline SignatureInfo* cast(Object* obj); |
| 9929 | 9921 |
| 9930 // Dispatched behavior. | 9922 // Dispatched behavior. |
| 9931 DECLARE_PRINTER(SignatureInfo) | 9923 DECLARE_PRINTER(SignatureInfo) |
| 9932 DECLARE_VERIFIER(SignatureInfo) | 9924 DECLARE_VERIFIER(SignatureInfo) |
| 9933 | 9925 |
| 9934 static const int kReceiverOffset = Struct::kHeaderSize; | 9926 static const int kReceiverOffset = Struct::kHeaderSize; |
| 9935 static const int kArgsOffset = kReceiverOffset + kPointerSize; | 9927 static const int kArgsOffset = kReceiverOffset + kPointerSize; |
| 9936 static const int kSize = kArgsOffset + kPointerSize; | 9928 static const int kSize = kArgsOffset + kPointerSize; |
| 9937 | 9929 |
| 9938 private: | 9930 private: |
| 9939 DISALLOW_IMPLICIT_CONSTRUCTORS(SignatureInfo); | 9931 DISALLOW_IMPLICIT_CONSTRUCTORS(SignatureInfo); |
| 9940 }; | 9932 }; |
| 9941 | 9933 |
| 9942 | 9934 |
| 9943 class TypeSwitchInfo V8_FINAL : public Struct { | 9935 class TypeSwitchInfo: public Struct { |
| 9944 public: | 9936 public: |
| 9945 DECL_ACCESSORS(types, Object) | 9937 DECL_ACCESSORS(types, Object) |
| 9946 | 9938 |
| 9947 static inline TypeSwitchInfo* cast(Object* obj); | 9939 static inline TypeSwitchInfo* cast(Object* obj); |
| 9948 | 9940 |
| 9949 // Dispatched behavior. | 9941 // Dispatched behavior. |
| 9950 DECLARE_PRINTER(TypeSwitchInfo) | 9942 DECLARE_PRINTER(TypeSwitchInfo) |
| 9951 DECLARE_VERIFIER(TypeSwitchInfo) | 9943 DECLARE_VERIFIER(TypeSwitchInfo) |
| 9952 | 9944 |
| 9953 static const int kTypesOffset = Struct::kHeaderSize; | 9945 static const int kTypesOffset = Struct::kHeaderSize; |
| 9954 static const int kSize = kTypesOffset + kPointerSize; | 9946 static const int kSize = kTypesOffset + kPointerSize; |
| 9955 }; | 9947 }; |
| 9956 | 9948 |
| 9957 | 9949 |
| 9958 #ifdef ENABLE_DEBUGGER_SUPPORT | 9950 #ifdef ENABLE_DEBUGGER_SUPPORT |
| 9959 // The DebugInfo class holds additional information for a function being | 9951 // The DebugInfo class holds additional information for a function being |
| 9960 // debugged. | 9952 // debugged. |
| 9961 class DebugInfo V8_FINAL : public Struct { | 9953 class DebugInfo: public Struct { |
| 9962 public: | 9954 public: |
| 9963 // The shared function info for the source being debugged. | 9955 // The shared function info for the source being debugged. |
| 9964 DECL_ACCESSORS(shared, SharedFunctionInfo) | 9956 DECL_ACCESSORS(shared, SharedFunctionInfo) |
| 9965 // Code object for the original code. | 9957 // Code object for the original code. |
| 9966 DECL_ACCESSORS(original_code, Code) | 9958 DECL_ACCESSORS(original_code, Code) |
| 9967 // Code object for the patched code. This code object is the code object | 9959 // Code object for the patched code. This code object is the code object |
| 9968 // currently active for the function. | 9960 // currently active for the function. |
| 9969 DECL_ACCESSORS(code, Code) | 9961 DECL_ACCESSORS(code, Code) |
| 9970 // Fixed array holding status information for each active break point. | 9962 // Fixed array holding status information for each active break point. |
| 9971 DECL_ACCESSORS(break_points, FixedArray) | 9963 DECL_ACCESSORS(break_points, FixedArray) |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10011 // Lookup the index in the break_points array for a code position. | 10003 // Lookup the index in the break_points array for a code position. |
| 10012 int GetBreakPointInfoIndex(int code_position); | 10004 int GetBreakPointInfoIndex(int code_position); |
| 10013 | 10005 |
| 10014 DISALLOW_IMPLICIT_CONSTRUCTORS(DebugInfo); | 10006 DISALLOW_IMPLICIT_CONSTRUCTORS(DebugInfo); |
| 10015 }; | 10007 }; |
| 10016 | 10008 |
| 10017 | 10009 |
| 10018 // The BreakPointInfo class holds information for break points set in a | 10010 // The BreakPointInfo class holds information for break points set in a |
| 10019 // function. The DebugInfo object holds a BreakPointInfo object for each code | 10011 // function. The DebugInfo object holds a BreakPointInfo object for each code |
| 10020 // position with one or more break points. | 10012 // position with one or more break points. |
| 10021 class BreakPointInfo V8_FINAL : public Struct { | 10013 class BreakPointInfo: public Struct { |
| 10022 public: | 10014 public: |
| 10023 // The position in the code for the break point. | 10015 // The position in the code for the break point. |
| 10024 DECL_ACCESSORS(code_position, Smi) | 10016 DECL_ACCESSORS(code_position, Smi) |
| 10025 // The position in the source for the break position. | 10017 // The position in the source for the break position. |
| 10026 DECL_ACCESSORS(source_position, Smi) | 10018 DECL_ACCESSORS(source_position, Smi) |
| 10027 // The position in the source for the last statement before this break | 10019 // The position in the source for the last statement before this break |
| 10028 // position. | 10020 // position. |
| 10029 DECL_ACCESSORS(statement_position, Smi) | 10021 DECL_ACCESSORS(statement_position, Smi) |
| 10030 // List of related JavaScript break points. | 10022 // List of related JavaScript break points. |
| 10031 DECL_ACCESSORS(break_point_objects, Object) | 10023 DECL_ACCESSORS(break_point_objects, Object) |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10076 V(kRelocatable, "relocatable", "(Relocatable)") \ | 10068 V(kRelocatable, "relocatable", "(Relocatable)") \ |
| 10077 V(kDebug, "debug", "(Debugger)") \ | 10069 V(kDebug, "debug", "(Debugger)") \ |
| 10078 V(kCompilationCache, "compilationcache", "(Compilation cache)") \ | 10070 V(kCompilationCache, "compilationcache", "(Compilation cache)") \ |
| 10079 V(kHandleScope, "handlescope", "(Handle scope)") \ | 10071 V(kHandleScope, "handlescope", "(Handle scope)") \ |
| 10080 V(kBuiltins, "builtins", "(Builtins)") \ | 10072 V(kBuiltins, "builtins", "(Builtins)") \ |
| 10081 V(kGlobalHandles, "globalhandles", "(Global handles)") \ | 10073 V(kGlobalHandles, "globalhandles", "(Global handles)") \ |
| 10082 V(kEternalHandles, "eternalhandles", "(Eternal handles)") \ | 10074 V(kEternalHandles, "eternalhandles", "(Eternal handles)") \ |
| 10083 V(kThreadManager, "threadmanager", "(Thread manager)") \ | 10075 V(kThreadManager, "threadmanager", "(Thread manager)") \ |
| 10084 V(kExtensions, "Extensions", "(Extensions)") | 10076 V(kExtensions, "Extensions", "(Extensions)") |
| 10085 | 10077 |
| 10086 class VisitorSynchronization V8_FINAL : public AllStatic { | 10078 class VisitorSynchronization : public AllStatic { |
| 10087 public: | 10079 public: |
| 10088 #define DECLARE_ENUM(enum_item, ignore1, ignore2) enum_item, | 10080 #define DECLARE_ENUM(enum_item, ignore1, ignore2) enum_item, |
| 10089 enum SyncTag { | 10081 enum SyncTag { |
| 10090 VISITOR_SYNCHRONIZATION_TAGS_LIST(DECLARE_ENUM) | 10082 VISITOR_SYNCHRONIZATION_TAGS_LIST(DECLARE_ENUM) |
| 10091 kNumberOfSyncTags | 10083 kNumberOfSyncTags |
| 10092 }; | 10084 }; |
| 10093 #undef DECLARE_ENUM | 10085 #undef DECLARE_ENUM |
| 10094 | 10086 |
| 10095 static const char* const kTags[kNumberOfSyncTags]; | 10087 static const char* const kTags[kNumberOfSyncTags]; |
| 10096 static const char* const kTagNames[kNumberOfSyncTags]; | 10088 static const char* const kTagNames[kNumberOfSyncTags]; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10154 // Visits a handle that has an embedder-assigned class ID. | 10146 // Visits a handle that has an embedder-assigned class ID. |
| 10155 virtual void VisitEmbedderReference(Object** p, uint16_t class_id) {} | 10147 virtual void VisitEmbedderReference(Object** p, uint16_t class_id) {} |
| 10156 | 10148 |
| 10157 // Intended for serialization/deserialization checking: insert, or | 10149 // Intended for serialization/deserialization checking: insert, or |
| 10158 // check for the presence of, a tag at this position in the stream. | 10150 // check for the presence of, a tag at this position in the stream. |
| 10159 // Also used for marking up GC roots in heap snapshots. | 10151 // Also used for marking up GC roots in heap snapshots. |
| 10160 virtual void Synchronize(VisitorSynchronization::SyncTag tag) {} | 10152 virtual void Synchronize(VisitorSynchronization::SyncTag tag) {} |
| 10161 }; | 10153 }; |
| 10162 | 10154 |
| 10163 | 10155 |
| 10164 class StructBodyDescriptor V8_FINAL : public | 10156 class StructBodyDescriptor : public |
| 10165 FlexibleBodyDescriptor<HeapObject::kHeaderSize> { | 10157 FlexibleBodyDescriptor<HeapObject::kHeaderSize> { |
| 10166 public: | 10158 public: |
| 10167 static inline int SizeOf(Map* map, HeapObject* object) { | 10159 static inline int SizeOf(Map* map, HeapObject* object) { |
| 10168 return map->instance_size(); | 10160 return map->instance_size(); |
| 10169 } | 10161 } |
| 10170 }; | 10162 }; |
| 10171 | 10163 |
| 10172 | 10164 |
| 10173 // BooleanBit is a helper class for setting and getting a bit in an | 10165 // BooleanBit is a helper class for setting and getting a bit in an |
| 10174 // integer or Smi. | 10166 // integer or Smi. |
| 10175 class BooleanBit V8_FINAL : public AllStatic { | 10167 class BooleanBit : public AllStatic { |
| 10176 public: | 10168 public: |
| 10177 static inline bool get(Smi* smi, int bit_position) { | 10169 static inline bool get(Smi* smi, int bit_position) { |
| 10178 return get(smi->value(), bit_position); | 10170 return get(smi->value(), bit_position); |
| 10179 } | 10171 } |
| 10180 | 10172 |
| 10181 static inline bool get(int value, int bit_position) { | 10173 static inline bool get(int value, int bit_position) { |
| 10182 return (value & (1 << bit_position)) != 0; | 10174 return (value & (1 << bit_position)) != 0; |
| 10183 } | 10175 } |
| 10184 | 10176 |
| 10185 static inline Smi* set(Smi* smi, int bit_position, bool v) { | 10177 static inline Smi* set(Smi* smi, int bit_position, bool v) { |
| 10186 return Smi::FromInt(set(smi->value(), bit_position, v)); | 10178 return Smi::FromInt(set(smi->value(), bit_position, v)); |
| 10187 } | 10179 } |
| 10188 | 10180 |
| 10189 static inline int set(int value, int bit_position, bool v) { | 10181 static inline int set(int value, int bit_position, bool v) { |
| 10190 if (v) { | 10182 if (v) { |
| 10191 value |= (1 << bit_position); | 10183 value |= (1 << bit_position); |
| 10192 } else { | 10184 } else { |
| 10193 value &= ~(1 << bit_position); | 10185 value &= ~(1 << bit_position); |
| 10194 } | 10186 } |
| 10195 return value; | 10187 return value; |
| 10196 } | 10188 } |
| 10197 }; | 10189 }; |
| 10198 | 10190 |
| 10199 } } // namespace v8::internal | 10191 } } // namespace v8::internal |
| 10200 | 10192 |
| 10201 #endif // V8_OBJECTS_H_ | 10193 #endif // V8_OBJECTS_H_ |
| OLD | NEW |