OLD | NEW |
---|---|
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
64 // - ByteArray | 64 // - ByteArray |
65 // - ExternalArray | 65 // - ExternalArray |
66 // - ExternalPixelArray | 66 // - ExternalPixelArray |
67 // - ExternalByteArray | 67 // - ExternalByteArray |
68 // - ExternalUnsignedByteArray | 68 // - ExternalUnsignedByteArray |
69 // - ExternalShortArray | 69 // - ExternalShortArray |
70 // - ExternalUnsignedShortArray | 70 // - ExternalUnsignedShortArray |
71 // - ExternalIntArray | 71 // - ExternalIntArray |
72 // - ExternalUnsignedIntArray | 72 // - ExternalUnsignedIntArray |
73 // - ExternalFloatArray | 73 // - ExternalFloatArray |
74 // - FixedArray | 74 // - FixedArray |
Lasse Reichstein
2011/08/02 12:23:46
I suddently remembered that this documentation is
danno
2011/08/02 13:37:46
Done.
| |
75 // - DescriptorArray | 75 // - DescriptorArray |
76 // - HashTable | 76 // - HashTable |
77 // - Dictionary | 77 // - Dictionary |
78 // - SymbolTable | 78 // - SymbolTable |
79 // - CompilationCacheTable | 79 // - CompilationCacheTable |
80 // - CodeCacheHashTable | 80 // - CodeCacheHashTable |
81 // - MapCache | 81 // - MapCache |
82 // - Context | 82 // - Context |
83 // - JSFunctionResultCache | 83 // - JSFunctionResultCache |
84 // - SerializedScopeInfo | 84 // - SerializedScopeInfo |
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
623 inline bool name(); \ | 623 inline bool name(); \ |
624 inline void set_##name(bool value); \ | 624 inline void set_##name(bool value); \ |
625 | 625 |
626 | 626 |
627 #define DECL_ACCESSORS(name, type) \ | 627 #define DECL_ACCESSORS(name, type) \ |
628 inline type* name(); \ | 628 inline type* name(); \ |
629 inline void set_##name(type* value, \ | 629 inline void set_##name(type* value, \ |
630 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); \ | 630 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); \ |
631 | 631 |
632 | 632 |
633 class ElementsHandler; | |
633 class StringStream; | 634 class StringStream; |
634 class ObjectVisitor; | 635 class ObjectVisitor; |
636 class DictionaryElementsHandlerImpl; | |
635 | 637 |
636 struct ValueInfo : public Malloced { | 638 struct ValueInfo : public Malloced { |
637 ValueInfo() : type(FIRST_TYPE), ptr(NULL), str(NULL), number(0) { } | 639 ValueInfo() : type(FIRST_TYPE), ptr(NULL), str(NULL), number(0) { } |
638 InstanceType type; | 640 InstanceType type; |
639 Object* ptr; | 641 Object* ptr; |
640 const char* str; | 642 const char* str; |
641 double number; | 643 double number; |
642 }; | 644 }; |
643 | 645 |
644 | 646 |
(...skipping 836 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1481 // writing to any element the array must be copied. Use | 1483 // writing to any element the array must be copied. Use |
1482 // EnsureWritableFastElements in this case. | 1484 // EnsureWritableFastElements in this case. |
1483 // | 1485 // |
1484 // In the slow mode the elements is either a NumberDictionary, an | 1486 // In the slow mode the elements is either a NumberDictionary, an |
1485 // ExternalArray, or a FixedArray parameter map for a (non-strict) | 1487 // ExternalArray, or a FixedArray parameter map for a (non-strict) |
1486 // arguments object. | 1488 // arguments object. |
1487 DECL_ACCESSORS(elements, HeapObject) | 1489 DECL_ACCESSORS(elements, HeapObject) |
1488 inline void initialize_elements(); | 1490 inline void initialize_elements(); |
1489 MUST_USE_RESULT inline MaybeObject* ResetElements(); | 1491 MUST_USE_RESULT inline MaybeObject* ResetElements(); |
1490 inline ElementsKind GetElementsKind(); | 1492 inline ElementsKind GetElementsKind(); |
1493 inline ElementsHandler* GetElementsHandler(); | |
1491 inline bool HasFastElements(); | 1494 inline bool HasFastElements(); |
1492 inline bool HasFastDoubleElements(); | 1495 inline bool HasFastDoubleElements(); |
1493 inline bool HasDictionaryElements(); | 1496 inline bool HasDictionaryElements(); |
1494 inline bool HasExternalPixelElements(); | 1497 inline bool HasExternalPixelElements(); |
1495 inline bool HasExternalArrayElements(); | 1498 inline bool HasExternalArrayElements(); |
1496 inline bool HasExternalByteElements(); | 1499 inline bool HasExternalByteElements(); |
1497 inline bool HasExternalUnsignedByteElements(); | 1500 inline bool HasExternalUnsignedByteElements(); |
1498 inline bool HasExternalShortElements(); | 1501 inline bool HasExternalShortElements(); |
1499 inline bool HasExternalUnsignedShortElements(); | 1502 inline bool HasExternalUnsignedShortElements(); |
1500 inline bool HasExternalIntElements(); | 1503 inline bool HasExternalIntElements(); |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1726 MUST_USE_RESULT MaybeObject* SetElement(uint32_t index, | 1729 MUST_USE_RESULT MaybeObject* SetElement(uint32_t index, |
1727 Object* value, | 1730 Object* value, |
1728 StrictModeFlag strict_mode, | 1731 StrictModeFlag strict_mode, |
1729 bool check_prototype); | 1732 bool check_prototype); |
1730 | 1733 |
1731 // Returns the index'th element. | 1734 // Returns the index'th element. |
1732 // The undefined object if index is out of bounds. | 1735 // The undefined object if index is out of bounds. |
1733 MaybeObject* GetElementWithReceiver(Object* receiver, uint32_t index); | 1736 MaybeObject* GetElementWithReceiver(Object* receiver, uint32_t index); |
1734 MaybeObject* GetElementWithInterceptor(Object* receiver, uint32_t index); | 1737 MaybeObject* GetElementWithInterceptor(Object* receiver, uint32_t index); |
1735 | 1738 |
1736 // Get external element value at index if there is one and undefined | |
1737 // otherwise. Can return a failure if allocation of a heap number | |
1738 // failed. | |
1739 MaybeObject* GetExternalElement(uint32_t index); | |
1740 | |
1741 // Replace the elements' backing store with fast elements of the given | 1739 // Replace the elements' backing store with fast elements of the given |
1742 // capacity. Update the length for JSArrays. Returns the new backing | 1740 // capacity. Update the length for JSArrays. Returns the new backing |
1743 // store. | 1741 // store. |
1744 MUST_USE_RESULT MaybeObject* SetFastElementsCapacityAndLength(int capacity, | 1742 MUST_USE_RESULT MaybeObject* SetFastElementsCapacityAndLength(int capacity, |
1745 int length); | 1743 int length); |
1746 MUST_USE_RESULT MaybeObject* SetFastDoubleElementsCapacityAndLength( | 1744 MUST_USE_RESULT MaybeObject* SetFastDoubleElementsCapacityAndLength( |
1747 int capacity, | 1745 int capacity, |
1748 int length); | 1746 int length); |
1749 MUST_USE_RESULT MaybeObject* SetSlowElements(Object* length); | 1747 MUST_USE_RESULT MaybeObject* SetSlowElements(Object* length); |
1750 | 1748 |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1994 static const int kHeaderSize = kElementsOffset + kPointerSize; | 1992 static const int kHeaderSize = kElementsOffset + kPointerSize; |
1995 | 1993 |
1996 STATIC_CHECK(kHeaderSize == Internals::kJSObjectHeaderSize); | 1994 STATIC_CHECK(kHeaderSize == Internals::kJSObjectHeaderSize); |
1997 | 1995 |
1998 class BodyDescriptor : public FlexibleBodyDescriptor<kPropertiesOffset> { | 1996 class BodyDescriptor : public FlexibleBodyDescriptor<kPropertiesOffset> { |
1999 public: | 1997 public: |
2000 static inline int SizeOf(Map* map, HeapObject* object); | 1998 static inline int SizeOf(Map* map, HeapObject* object); |
2001 }; | 1999 }; |
2002 | 2000 |
2003 private: | 2001 private: |
2002 friend class DictionaryElementsHandlerImpl; | |
2003 | |
2004 MUST_USE_RESULT MaybeObject* GetElementWithCallback(Object* receiver, | 2004 MUST_USE_RESULT MaybeObject* GetElementWithCallback(Object* receiver, |
2005 Object* structure, | 2005 Object* structure, |
2006 uint32_t index, | 2006 uint32_t index, |
2007 Object* holder); | 2007 Object* holder); |
2008 MaybeObject* SetElementWithCallback(Object* structure, | 2008 MaybeObject* SetElementWithCallback(Object* structure, |
2009 uint32_t index, | 2009 uint32_t index, |
2010 Object* value, | 2010 Object* value, |
2011 JSObject* holder, | 2011 JSObject* holder, |
2012 StrictModeFlag strict_mode); | 2012 StrictModeFlag strict_mode); |
2013 MUST_USE_RESULT MaybeObject* SetElementWithInterceptor( | 2013 MUST_USE_RESULT MaybeObject* SetElementWithInterceptor( |
2014 uint32_t index, | 2014 uint32_t index, |
2015 Object* value, | 2015 Object* value, |
2016 StrictModeFlag strict_mode, | 2016 StrictModeFlag strict_mode, |
2017 bool check_prototype); | 2017 bool check_prototype); |
2018 MUST_USE_RESULT MaybeObject* SetElementWithoutInterceptor( | 2018 MUST_USE_RESULT MaybeObject* SetElementWithoutInterceptor( |
2019 uint32_t index, | 2019 uint32_t index, |
2020 Object* value, | 2020 Object* value, |
2021 StrictModeFlag strict_mode, | 2021 StrictModeFlag strict_mode, |
2022 bool check_prototype); | 2022 bool check_prototype); |
2023 | 2023 |
2024 MaybeObject* GetElementPostInterceptor(Object* receiver, uint32_t index); | |
2025 | |
2026 MUST_USE_RESULT MaybeObject* DeletePropertyPostInterceptor(String* name, | 2024 MUST_USE_RESULT MaybeObject* DeletePropertyPostInterceptor(String* name, |
2027 DeleteMode mode); | 2025 DeleteMode mode); |
2028 MUST_USE_RESULT MaybeObject* DeletePropertyWithInterceptor(String* name); | 2026 MUST_USE_RESULT MaybeObject* DeletePropertyWithInterceptor(String* name); |
2029 | 2027 |
2030 MUST_USE_RESULT MaybeObject* DeleteElementPostInterceptor(uint32_t index, | 2028 MUST_USE_RESULT MaybeObject* DeleteElementPostInterceptor(uint32_t index, |
2031 DeleteMode mode); | 2029 DeleteMode mode); |
2032 MUST_USE_RESULT MaybeObject* DeleteElementWithInterceptor(uint32_t index); | 2030 MUST_USE_RESULT MaybeObject* DeleteElementWithInterceptor(uint32_t index); |
2033 | 2031 |
2034 MUST_USE_RESULT MaybeObject* DeleteFastElement(uint32_t index); | 2032 MUST_USE_RESULT MaybeObject* DeleteFastElement(uint32_t index); |
2035 MUST_USE_RESULT MaybeObject* DeleteDictionaryElement(uint32_t index, | 2033 MUST_USE_RESULT MaybeObject* DeleteDictionaryElement(uint32_t index, |
(...skipping 26 matching lines...) Expand all Loading... | |
2062 PropertyAttributes attributes); | 2060 PropertyAttributes attributes); |
2063 | 2061 |
2064 void LookupInDescriptor(String* name, LookupResult* result); | 2062 void LookupInDescriptor(String* name, LookupResult* result); |
2065 | 2063 |
2066 DISALLOW_IMPLICIT_CONSTRUCTORS(JSObject); | 2064 DISALLOW_IMPLICIT_CONSTRUCTORS(JSObject); |
2067 }; | 2065 }; |
2068 | 2066 |
2069 | 2067 |
2070 // Common superclass for FixedArrays that allow implementations to share | 2068 // Common superclass for FixedArrays that allow implementations to share |
2071 // common accessors and some code paths. | 2069 // common accessors and some code paths. |
2072 class FixedArrayBase: public HeapObject { | 2070 class FixedArrayBase: public HeapObject { |
Lasse Reichstein
2011/08/01 09:35:54
Preferably this should be called FixedArray, as th
danno
2011/08/02 13:37:46
That's a reasonable observation, but I think I'll
| |
2073 public: | 2071 public: |
2074 // [length]: length of the array. | 2072 // [length]: length of the array. |
2075 inline int length(); | 2073 inline int length(); |
2076 inline void set_length(int value); | 2074 inline void set_length(int value); |
2077 | 2075 |
2078 inline static FixedArrayBase* cast(Object* object); | 2076 inline static FixedArrayBase* cast(Object* object); |
2079 | 2077 |
2080 // Layout description. | 2078 // Layout description. |
2081 // Length is smi tagged when it is stored. | 2079 // Length is smi tagged when it is stored. |
2082 static const int kLengthOffset = HeapObject::kHeaderSize; | 2080 static const int kLengthOffset = HeapObject::kHeaderSize; |
2083 static const int kHeaderSize = kLengthOffset + kPointerSize; | 2081 static const int kHeaderSize = kLengthOffset + kPointerSize; |
2084 }; | 2082 }; |
2085 | 2083 |
2086 class FixedDoubleArray; | 2084 class FixedDoubleArray; |
2087 | 2085 |
2088 // FixedArray describes fixed-sized arrays with element type Object*. | 2086 // FixedArray describes fixed-sized arrays with element type Object*. |
2089 class FixedArray: public FixedArrayBase { | 2087 class FixedArray: public FixedArrayBase { |
2090 public: | 2088 public: |
2091 // Setter and getter for elements. | 2089 // Setter and getter for elements. |
2092 inline Object* get(int index); | 2090 inline Object* get(int index); |
2093 // Setter that uses write barrier. | 2091 // Setter that uses write barrier. |
2094 inline void set(int index, Object* value); | 2092 inline void set(int index, Object* value); |
2093 inline bool is_the_hole(int index); | |
2095 | 2094 |
2096 // Setter that doesn't need write barrier). | 2095 // Setter that doesn't need write barrier). |
2097 inline void set(int index, Smi* value); | 2096 inline void set(int index, Smi* value); |
2098 // Setter with explicit barrier mode. | 2097 // Setter with explicit barrier mode. |
2099 inline void set(int index, Object* value, WriteBarrierMode mode); | 2098 inline void set(int index, Object* value, WriteBarrierMode mode); |
2100 | 2099 |
2101 // Setters for frequently used oddballs located in old space. | 2100 // Setters for frequently used oddballs located in old space. |
2102 inline void set_undefined(int index); | 2101 inline void set_undefined(int index); |
2103 // TODO(isolates): duplicate. | 2102 // TODO(isolates): duplicate. |
2104 inline void set_undefined(Heap* heap, int index); | 2103 inline void set_undefined(Heap* heap, int index); |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2190 | 2189 |
2191 | 2190 |
2192 // FixedDoubleArray describes fixed-sized arrays with element type double. | 2191 // FixedDoubleArray describes fixed-sized arrays with element type double. |
2193 class FixedDoubleArray: public FixedArrayBase { | 2192 class FixedDoubleArray: public FixedArrayBase { |
2194 public: | 2193 public: |
2195 inline void Initialize(FixedArray* from); | 2194 inline void Initialize(FixedArray* from); |
2196 inline void Initialize(FixedDoubleArray* from); | 2195 inline void Initialize(FixedDoubleArray* from); |
2197 inline void Initialize(NumberDictionary* from); | 2196 inline void Initialize(NumberDictionary* from); |
2198 | 2197 |
2199 // Setter and getter for elements. | 2198 // Setter and getter for elements. |
2200 inline double get(int index); | 2199 inline double get_scalar(int index); |
2200 inline MaybeObject* get(int index); | |
2201 inline void set(int index, double value); | 2201 inline void set(int index, double value); |
2202 inline void set_the_hole(int index); | 2202 inline void set_the_hole(int index); |
2203 | 2203 |
2204 // Checking for the hole. | 2204 // Checking for the hole. |
2205 inline bool is_the_hole(int index); | 2205 inline bool is_the_hole(int index); |
2206 | 2206 |
2207 // Garbage collection support. | 2207 // Garbage collection support. |
2208 inline static int SizeFor(int length) { | 2208 inline static int SizeFor(int length) { |
2209 return kHeaderSize + length * kDoubleSize; | 2209 return kHeaderSize + length * kDoubleSize; |
2210 } | 2210 } |
(...skipping 911 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3122 // The semantics of these arrays differ from CanvasPixelArray. | 3122 // The semantics of these arrays differ from CanvasPixelArray. |
3123 // Out-of-range values passed to the setter are converted via a C | 3123 // Out-of-range values passed to the setter are converted via a C |
3124 // cast, not clamping. Out-of-range indices cause exceptions to be | 3124 // cast, not clamping. Out-of-range indices cause exceptions to be |
3125 // raised rather than being silently ignored. | 3125 // raised rather than being silently ignored. |
3126 class ExternalArray: public HeapObject { | 3126 class ExternalArray: public HeapObject { |
3127 public: | 3127 public: |
3128 // [length]: length of the array. | 3128 // [length]: length of the array. |
3129 inline int length(); | 3129 inline int length(); |
3130 inline void set_length(int value); | 3130 inline void set_length(int value); |
3131 | 3131 |
3132 inline bool is_the_hole(int index) { return false; } | |
3133 | |
3132 // [external_pointer]: The pointer to the external memory area backing this | 3134 // [external_pointer]: The pointer to the external memory area backing this |
3133 // external array. | 3135 // external array. |
3134 DECL_ACCESSORS(external_pointer, void) // Pointer to the data store. | 3136 DECL_ACCESSORS(external_pointer, void) // Pointer to the data store. |
3135 | 3137 |
3136 // Casting. | 3138 // Casting. |
3137 static inline ExternalArray* cast(Object* obj); | 3139 static inline ExternalArray* cast(Object* obj); |
3138 | 3140 |
3139 // Maximal acceptable length for an external array. | 3141 // Maximal acceptable length for an external array. |
3140 static const int kMaxLength = 0x3fffffff; | 3142 static const int kMaxLength = 0x3fffffff; |
3141 | 3143 |
(...skipping 15 matching lines...) Expand all Loading... | |
3157 | 3159 |
3158 // http://www.whatwg.org/specs/web-apps/current-work/ | 3160 // http://www.whatwg.org/specs/web-apps/current-work/ |
3159 // multipage/the-canvas-element.html#canvaspixelarray | 3161 // multipage/the-canvas-element.html#canvaspixelarray |
3160 // In particular, write access clamps the value written to 0 or 255 if the | 3162 // In particular, write access clamps the value written to 0 or 255 if the |
3161 // value written is outside this range. | 3163 // value written is outside this range. |
3162 class ExternalPixelArray: public ExternalArray { | 3164 class ExternalPixelArray: public ExternalArray { |
3163 public: | 3165 public: |
3164 inline uint8_t* external_pixel_pointer(); | 3166 inline uint8_t* external_pixel_pointer(); |
3165 | 3167 |
3166 // Setter and getter. | 3168 // Setter and getter. |
3167 inline uint8_t get(int index); | 3169 inline uint8_t get_scalar(int index); |
3170 inline MaybeObject* get(int index); | |
3168 inline void set(int index, uint8_t value); | 3171 inline void set(int index, uint8_t value); |
3169 | 3172 |
3170 // This accessor applies the correct conversion from Smi, HeapNumber and | 3173 // This accessor applies the correct conversion from Smi, HeapNumber and |
3171 // undefined and clamps the converted value between 0 and 255. | 3174 // undefined and clamps the converted value between 0 and 255. |
3172 Object* SetValue(uint32_t index, Object* value); | 3175 Object* SetValue(uint32_t index, Object* value); |
3173 | 3176 |
3174 // Casting. | 3177 // Casting. |
3175 static inline ExternalPixelArray* cast(Object* obj); | 3178 static inline ExternalPixelArray* cast(Object* obj); |
3176 | 3179 |
3177 #ifdef OBJECT_PRINT | 3180 #ifdef OBJECT_PRINT |
3178 inline void ExternalPixelArrayPrint() { | 3181 inline void ExternalPixelArrayPrint() { |
3179 ExternalPixelArrayPrint(stdout); | 3182 ExternalPixelArrayPrint(stdout); |
3180 } | 3183 } |
3181 void ExternalPixelArrayPrint(FILE* out); | 3184 void ExternalPixelArrayPrint(FILE* out); |
3182 #endif | 3185 #endif |
3183 #ifdef DEBUG | 3186 #ifdef DEBUG |
3184 void ExternalPixelArrayVerify(); | 3187 void ExternalPixelArrayVerify(); |
3185 #endif // DEBUG | 3188 #endif // DEBUG |
3186 | 3189 |
3187 private: | 3190 private: |
3188 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalPixelArray); | 3191 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalPixelArray); |
3189 }; | 3192 }; |
3190 | 3193 |
3191 | 3194 |
3192 class ExternalByteArray: public ExternalArray { | 3195 class ExternalByteArray: public ExternalArray { |
3193 public: | 3196 public: |
3194 // Setter and getter. | 3197 // Setter and getter. |
3195 inline int8_t get(int index); | 3198 inline int8_t get_scalar(int index); |
3199 inline MaybeObject* get(int index); | |
3196 inline void set(int index, int8_t value); | 3200 inline void set(int index, int8_t value); |
3197 | 3201 |
3198 // This accessor applies the correct conversion from Smi, HeapNumber | 3202 // This accessor applies the correct conversion from Smi, HeapNumber |
3199 // and undefined. | 3203 // and undefined. |
3200 MaybeObject* SetValue(uint32_t index, Object* value); | 3204 MaybeObject* SetValue(uint32_t index, Object* value); |
3201 | 3205 |
3202 // Casting. | 3206 // Casting. |
3203 static inline ExternalByteArray* cast(Object* obj); | 3207 static inline ExternalByteArray* cast(Object* obj); |
3204 | 3208 |
3205 #ifdef OBJECT_PRINT | 3209 #ifdef OBJECT_PRINT |
3206 inline void ExternalByteArrayPrint() { | 3210 inline void ExternalByteArrayPrint() { |
3207 ExternalByteArrayPrint(stdout); | 3211 ExternalByteArrayPrint(stdout); |
3208 } | 3212 } |
3209 void ExternalByteArrayPrint(FILE* out); | 3213 void ExternalByteArrayPrint(FILE* out); |
3210 #endif | 3214 #endif |
3211 #ifdef DEBUG | 3215 #ifdef DEBUG |
3212 void ExternalByteArrayVerify(); | 3216 void ExternalByteArrayVerify(); |
3213 #endif // DEBUG | 3217 #endif // DEBUG |
3214 | 3218 |
3215 private: | 3219 private: |
3216 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalByteArray); | 3220 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalByteArray); |
3217 }; | 3221 }; |
3218 | 3222 |
3219 | 3223 |
3220 class ExternalUnsignedByteArray: public ExternalArray { | 3224 class ExternalUnsignedByteArray: public ExternalArray { |
3221 public: | 3225 public: |
3222 // Setter and getter. | 3226 // Setter and getter. |
3223 inline uint8_t get(int index); | 3227 inline uint8_t get_scalar(int index); |
3228 inline MaybeObject* get(int index); | |
3224 inline void set(int index, uint8_t value); | 3229 inline void set(int index, uint8_t value); |
3225 | 3230 |
3226 // This accessor applies the correct conversion from Smi, HeapNumber | 3231 // This accessor applies the correct conversion from Smi, HeapNumber |
3227 // and undefined. | 3232 // and undefined. |
3228 MaybeObject* SetValue(uint32_t index, Object* value); | 3233 MaybeObject* SetValue(uint32_t index, Object* value); |
3229 | 3234 |
3230 // Casting. | 3235 // Casting. |
3231 static inline ExternalUnsignedByteArray* cast(Object* obj); | 3236 static inline ExternalUnsignedByteArray* cast(Object* obj); |
3232 | 3237 |
3233 #ifdef OBJECT_PRINT | 3238 #ifdef OBJECT_PRINT |
3234 inline void ExternalUnsignedByteArrayPrint() { | 3239 inline void ExternalUnsignedByteArrayPrint() { |
3235 ExternalUnsignedByteArrayPrint(stdout); | 3240 ExternalUnsignedByteArrayPrint(stdout); |
3236 } | 3241 } |
3237 void ExternalUnsignedByteArrayPrint(FILE* out); | 3242 void ExternalUnsignedByteArrayPrint(FILE* out); |
3238 #endif | 3243 #endif |
3239 #ifdef DEBUG | 3244 #ifdef DEBUG |
3240 void ExternalUnsignedByteArrayVerify(); | 3245 void ExternalUnsignedByteArrayVerify(); |
3241 #endif // DEBUG | 3246 #endif // DEBUG |
3242 | 3247 |
3243 private: | 3248 private: |
3244 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedByteArray); | 3249 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedByteArray); |
3245 }; | 3250 }; |
3246 | 3251 |
3247 | 3252 |
3248 class ExternalShortArray: public ExternalArray { | 3253 class ExternalShortArray: public ExternalArray { |
3249 public: | 3254 public: |
3250 // Setter and getter. | 3255 // Setter and getter. |
3251 inline int16_t get(int index); | 3256 inline int16_t get_scalar(int index); |
3257 inline MaybeObject* get(int index); | |
3252 inline void set(int index, int16_t value); | 3258 inline void set(int index, int16_t value); |
3253 | 3259 |
3254 // This accessor applies the correct conversion from Smi, HeapNumber | 3260 // This accessor applies the correct conversion from Smi, HeapNumber |
3255 // and undefined. | 3261 // and undefined. |
3256 MaybeObject* SetValue(uint32_t index, Object* value); | 3262 MaybeObject* SetValue(uint32_t index, Object* value); |
3257 | 3263 |
3258 // Casting. | 3264 // Casting. |
3259 static inline ExternalShortArray* cast(Object* obj); | 3265 static inline ExternalShortArray* cast(Object* obj); |
3260 | 3266 |
3261 #ifdef OBJECT_PRINT | 3267 #ifdef OBJECT_PRINT |
3262 inline void ExternalShortArrayPrint() { | 3268 inline void ExternalShortArrayPrint() { |
3263 ExternalShortArrayPrint(stdout); | 3269 ExternalShortArrayPrint(stdout); |
3264 } | 3270 } |
3265 void ExternalShortArrayPrint(FILE* out); | 3271 void ExternalShortArrayPrint(FILE* out); |
3266 #endif | 3272 #endif |
3267 #ifdef DEBUG | 3273 #ifdef DEBUG |
3268 void ExternalShortArrayVerify(); | 3274 void ExternalShortArrayVerify(); |
3269 #endif // DEBUG | 3275 #endif // DEBUG |
3270 | 3276 |
3271 private: | 3277 private: |
3272 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalShortArray); | 3278 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalShortArray); |
3273 }; | 3279 }; |
3274 | 3280 |
3275 | 3281 |
3276 class ExternalUnsignedShortArray: public ExternalArray { | 3282 class ExternalUnsignedShortArray: public ExternalArray { |
3277 public: | 3283 public: |
3278 // Setter and getter. | 3284 // Setter and getter. |
3279 inline uint16_t get(int index); | 3285 inline uint16_t get_scalar(int index); |
3286 inline MaybeObject* get(int index); | |
3280 inline void set(int index, uint16_t value); | 3287 inline void set(int index, uint16_t value); |
3281 | 3288 |
3282 // This accessor applies the correct conversion from Smi, HeapNumber | 3289 // This accessor applies the correct conversion from Smi, HeapNumber |
3283 // and undefined. | 3290 // and undefined. |
3284 MaybeObject* SetValue(uint32_t index, Object* value); | 3291 MaybeObject* SetValue(uint32_t index, Object* value); |
3285 | 3292 |
3286 // Casting. | 3293 // Casting. |
3287 static inline ExternalUnsignedShortArray* cast(Object* obj); | 3294 static inline ExternalUnsignedShortArray* cast(Object* obj); |
3288 | 3295 |
3289 #ifdef OBJECT_PRINT | 3296 #ifdef OBJECT_PRINT |
3290 inline void ExternalUnsignedShortArrayPrint() { | 3297 inline void ExternalUnsignedShortArrayPrint() { |
3291 ExternalUnsignedShortArrayPrint(stdout); | 3298 ExternalUnsignedShortArrayPrint(stdout); |
3292 } | 3299 } |
3293 void ExternalUnsignedShortArrayPrint(FILE* out); | 3300 void ExternalUnsignedShortArrayPrint(FILE* out); |
3294 #endif | 3301 #endif |
3295 #ifdef DEBUG | 3302 #ifdef DEBUG |
3296 void ExternalUnsignedShortArrayVerify(); | 3303 void ExternalUnsignedShortArrayVerify(); |
3297 #endif // DEBUG | 3304 #endif // DEBUG |
3298 | 3305 |
3299 private: | 3306 private: |
3300 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedShortArray); | 3307 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedShortArray); |
3301 }; | 3308 }; |
3302 | 3309 |
3303 | 3310 |
3304 class ExternalIntArray: public ExternalArray { | 3311 class ExternalIntArray: public ExternalArray { |
3305 public: | 3312 public: |
3306 // Setter and getter. | 3313 // Setter and getter. |
3307 inline int32_t get(int index); | 3314 inline int32_t get_scalar(int index); |
3315 inline MaybeObject* get(int index); | |
3308 inline void set(int index, int32_t value); | 3316 inline void set(int index, int32_t value); |
3309 | 3317 |
3310 // This accessor applies the correct conversion from Smi, HeapNumber | 3318 // This accessor applies the correct conversion from Smi, HeapNumber |
3311 // and undefined. | 3319 // and undefined. |
3312 MaybeObject* SetValue(uint32_t index, Object* value); | 3320 MaybeObject* SetValue(uint32_t index, Object* value); |
3313 | 3321 |
3314 // Casting. | 3322 // Casting. |
3315 static inline ExternalIntArray* cast(Object* obj); | 3323 static inline ExternalIntArray* cast(Object* obj); |
3316 | 3324 |
3317 #ifdef OBJECT_PRINT | 3325 #ifdef OBJECT_PRINT |
3318 inline void ExternalIntArrayPrint() { | 3326 inline void ExternalIntArrayPrint() { |
3319 ExternalIntArrayPrint(stdout); | 3327 ExternalIntArrayPrint(stdout); |
3320 } | 3328 } |
3321 void ExternalIntArrayPrint(FILE* out); | 3329 void ExternalIntArrayPrint(FILE* out); |
3322 #endif | 3330 #endif |
3323 #ifdef DEBUG | 3331 #ifdef DEBUG |
3324 void ExternalIntArrayVerify(); | 3332 void ExternalIntArrayVerify(); |
3325 #endif // DEBUG | 3333 #endif // DEBUG |
3326 | 3334 |
3327 private: | 3335 private: |
3328 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalIntArray); | 3336 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalIntArray); |
3329 }; | 3337 }; |
3330 | 3338 |
3331 | 3339 |
3332 class ExternalUnsignedIntArray: public ExternalArray { | 3340 class ExternalUnsignedIntArray: public ExternalArray { |
3333 public: | 3341 public: |
3334 // Setter and getter. | 3342 // Setter and getter. |
3335 inline uint32_t get(int index); | 3343 inline uint32_t get_scalar(int index); |
3344 inline MaybeObject* get(int index); | |
3336 inline void set(int index, uint32_t value); | 3345 inline void set(int index, uint32_t value); |
3337 | 3346 |
3338 // This accessor applies the correct conversion from Smi, HeapNumber | 3347 // This accessor applies the correct conversion from Smi, HeapNumber |
3339 // and undefined. | 3348 // and undefined. |
3340 MaybeObject* SetValue(uint32_t index, Object* value); | 3349 MaybeObject* SetValue(uint32_t index, Object* value); |
3341 | 3350 |
3342 // Casting. | 3351 // Casting. |
3343 static inline ExternalUnsignedIntArray* cast(Object* obj); | 3352 static inline ExternalUnsignedIntArray* cast(Object* obj); |
3344 | 3353 |
3345 #ifdef OBJECT_PRINT | 3354 #ifdef OBJECT_PRINT |
3346 inline void ExternalUnsignedIntArrayPrint() { | 3355 inline void ExternalUnsignedIntArrayPrint() { |
3347 ExternalUnsignedIntArrayPrint(stdout); | 3356 ExternalUnsignedIntArrayPrint(stdout); |
3348 } | 3357 } |
3349 void ExternalUnsignedIntArrayPrint(FILE* out); | 3358 void ExternalUnsignedIntArrayPrint(FILE* out); |
3350 #endif | 3359 #endif |
3351 #ifdef DEBUG | 3360 #ifdef DEBUG |
3352 void ExternalUnsignedIntArrayVerify(); | 3361 void ExternalUnsignedIntArrayVerify(); |
3353 #endif // DEBUG | 3362 #endif // DEBUG |
3354 | 3363 |
3355 private: | 3364 private: |
3356 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedIntArray); | 3365 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedIntArray); |
3357 }; | 3366 }; |
3358 | 3367 |
3359 | 3368 |
3360 class ExternalFloatArray: public ExternalArray { | 3369 class ExternalFloatArray: public ExternalArray { |
3361 public: | 3370 public: |
3362 // Setter and getter. | 3371 // Setter and getter. |
3363 inline float get(int index); | 3372 inline float get_scalar(int index); |
3373 inline MaybeObject* get(int index); | |
3364 inline void set(int index, float value); | 3374 inline void set(int index, float value); |
3365 | 3375 |
3366 // This accessor applies the correct conversion from Smi, HeapNumber | 3376 // This accessor applies the correct conversion from Smi, HeapNumber |
3367 // and undefined. | 3377 // and undefined. |
3368 MaybeObject* SetValue(uint32_t index, Object* value); | 3378 MaybeObject* SetValue(uint32_t index, Object* value); |
3369 | 3379 |
3370 // Casting. | 3380 // Casting. |
3371 static inline ExternalFloatArray* cast(Object* obj); | 3381 static inline ExternalFloatArray* cast(Object* obj); |
3372 | 3382 |
3373 #ifdef OBJECT_PRINT | 3383 #ifdef OBJECT_PRINT |
3374 inline void ExternalFloatArrayPrint() { | 3384 inline void ExternalFloatArrayPrint() { |
3375 ExternalFloatArrayPrint(stdout); | 3385 ExternalFloatArrayPrint(stdout); |
3376 } | 3386 } |
3377 void ExternalFloatArrayPrint(FILE* out); | 3387 void ExternalFloatArrayPrint(FILE* out); |
3378 #endif | 3388 #endif |
3379 #ifdef DEBUG | 3389 #ifdef DEBUG |
3380 void ExternalFloatArrayVerify(); | 3390 void ExternalFloatArrayVerify(); |
3381 #endif // DEBUG | 3391 #endif // DEBUG |
3382 | 3392 |
3383 private: | 3393 private: |
3384 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloatArray); | 3394 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloatArray); |
3385 }; | 3395 }; |
3386 | 3396 |
3387 | 3397 |
3388 class ExternalDoubleArray: public ExternalArray { | 3398 class ExternalDoubleArray: public ExternalArray { |
3389 public: | 3399 public: |
3390 // Setter and getter. | 3400 // Setter and getter. |
3391 inline double get(int index); | 3401 inline double get_scalar(int index); |
3402 inline MaybeObject* get(int index); | |
3392 inline void set(int index, double value); | 3403 inline void set(int index, double value); |
3393 | 3404 |
3394 // This accessor applies the correct conversion from Smi, HeapNumber | 3405 // This accessor applies the correct conversion from Smi, HeapNumber |
3395 // and undefined. | 3406 // and undefined. |
3396 MaybeObject* SetValue(uint32_t index, Object* value); | 3407 MaybeObject* SetValue(uint32_t index, Object* value); |
3397 | 3408 |
3398 // Casting. | 3409 // Casting. |
3399 static inline ExternalDoubleArray* cast(Object* obj); | 3410 static inline ExternalDoubleArray* cast(Object* obj); |
3400 | 3411 |
3401 #ifdef OBJECT_PRINT | 3412 #ifdef OBJECT_PRINT |
(...skipping 3854 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7256 } else { | 7267 } else { |
7257 value &= ~(1 << bit_position); | 7268 value &= ~(1 << bit_position); |
7258 } | 7269 } |
7259 return value; | 7270 return value; |
7260 } | 7271 } |
7261 }; | 7272 }; |
7262 | 7273 |
7263 } } // namespace v8::internal | 7274 } } // namespace v8::internal |
7264 | 7275 |
7265 #endif // V8_OBJECTS_H_ | 7276 #endif // V8_OBJECTS_H_ |
OLD | NEW |