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 2182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2193 inline bool HasExternalUint8Elements(); | 2193 inline bool HasExternalUint8Elements(); |
2194 inline bool HasExternalInt16Elements(); | 2194 inline bool HasExternalInt16Elements(); |
2195 inline bool HasExternalUint16Elements(); | 2195 inline bool HasExternalUint16Elements(); |
2196 inline bool HasExternalInt32Elements(); | 2196 inline bool HasExternalInt32Elements(); |
2197 inline bool HasExternalUint32Elements(); | 2197 inline bool HasExternalUint32Elements(); |
2198 inline bool HasExternalFloat32Elements(); | 2198 inline bool HasExternalFloat32Elements(); |
2199 inline bool HasExternalFloat64Elements(); | 2199 inline bool HasExternalFloat64Elements(); |
2200 | 2200 |
2201 inline bool HasFixedTypedArrayElements(); | 2201 inline bool HasFixedTypedArrayElements(); |
2202 | 2202 |
| 2203 inline bool HasFixedUint8ClampedElements(); |
| 2204 inline bool HasFixedArrayElements(); |
| 2205 inline bool HasFixedInt8Elements(); |
| 2206 inline bool HasFixedUint8Elements(); |
| 2207 inline bool HasFixedInt16Elements(); |
| 2208 inline bool HasFixedUint16Elements(); |
| 2209 inline bool HasFixedInt32Elements(); |
| 2210 inline bool HasFixedUint32Elements(); |
| 2211 inline bool HasFixedFloat32Elements(); |
| 2212 inline bool HasFixedFloat64Elements(); |
| 2213 |
2203 bool HasFastArgumentsElements(); | 2214 bool HasFastArgumentsElements(); |
2204 bool HasDictionaryArgumentsElements(); | 2215 bool HasDictionaryArgumentsElements(); |
2205 inline SeededNumberDictionary* element_dictionary(); // Gets slow elements. | 2216 inline SeededNumberDictionary* element_dictionary(); // Gets slow elements. |
2206 | 2217 |
2207 inline void set_map_and_elements( | 2218 inline void set_map_and_elements( |
2208 Map* map, | 2219 Map* map, |
2209 FixedArrayBase* value, | 2220 FixedArrayBase* value, |
2210 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); | 2221 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); |
2211 | 2222 |
2212 // Requires: HasFastElements(). | 2223 // Requires: HasFastElements(). |
(...skipping 2704 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4917 | 4928 |
4918 class FixedTypedArrayBase: public FixedArrayBase { | 4929 class FixedTypedArrayBase: public FixedArrayBase { |
4919 public: | 4930 public: |
4920 // Casting: | 4931 // Casting: |
4921 static inline FixedTypedArrayBase* cast(Object* obj); | 4932 static inline FixedTypedArrayBase* cast(Object* obj); |
4922 | 4933 |
4923 static const int kDataOffset = kHeaderSize; | 4934 static const int kDataOffset = kHeaderSize; |
4924 | 4935 |
4925 inline int size(); | 4936 inline int size(); |
4926 | 4937 |
| 4938 // Use with care: returns raw pointer into heap. |
| 4939 inline void* DataPtr(); |
| 4940 |
| 4941 inline int DataSize(); |
| 4942 |
4927 private: | 4943 private: |
4928 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedTypedArrayBase); | 4944 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedTypedArrayBase); |
4929 }; | 4945 }; |
4930 | 4946 |
4931 | 4947 |
4932 template <class Traits> | 4948 template <class Traits> |
4933 class FixedTypedArray: public FixedTypedArrayBase { | 4949 class FixedTypedArray: public FixedTypedArrayBase { |
4934 public: | 4950 public: |
4935 typedef typename Traits::ElementType ElementType; | 4951 typedef typename Traits::ElementType ElementType; |
4936 static const InstanceType kInstanceType = Traits::kInstanceType; | 4952 static const InstanceType kInstanceType = Traits::kInstanceType; |
4937 | 4953 |
4938 // Casting: | 4954 // Casting: |
4939 static inline FixedTypedArray<Traits>* cast(Object* obj); | 4955 static inline FixedTypedArray<Traits>* cast(Object* obj); |
4940 | 4956 |
4941 static inline int ElementOffset(int index) { | 4957 static inline int ElementOffset(int index) { |
4942 return kDataOffset + index * sizeof(ElementType); | 4958 return kDataOffset + index * sizeof(ElementType); |
4943 } | 4959 } |
4944 | 4960 |
4945 static inline int SizeFor(int length) { | 4961 static inline int SizeFor(int length) { |
4946 return ElementOffset(length); | 4962 return ElementOffset(length); |
4947 } | 4963 } |
4948 | 4964 |
4949 inline ElementType get_scalar(int index); | 4965 inline ElementType get_scalar(int index); |
4950 MUST_USE_RESULT inline MaybeObject* get(int index); | 4966 MUST_USE_RESULT inline MaybeObject* get(int index); |
4951 inline void set(int index, ElementType value); | 4967 inline void set(int index, ElementType value); |
4952 | 4968 |
| 4969 static inline ElementType from_int(int value); |
| 4970 static inline ElementType from_double(double value); |
| 4971 |
4953 // This accessor applies the correct conversion from Smi, HeapNumber | 4972 // This accessor applies the correct conversion from Smi, HeapNumber |
4954 // and undefined. | 4973 // and undefined. |
4955 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4974 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4956 | 4975 |
4957 static Handle<Object> SetValue(Handle<FixedTypedArray<Traits> > array, | 4976 static Handle<Object> SetValue(Handle<FixedTypedArray<Traits> > array, |
4958 uint32_t index, | 4977 uint32_t index, |
4959 Handle<Object> value); | 4978 Handle<Object> value); |
4960 | 4979 |
4961 DECLARE_PRINTER(FixedTypedArray) | 4980 DECLARE_PRINTER(FixedTypedArray) |
4962 DECLARE_VERIFIER(FixedTypedArray) | 4981 DECLARE_VERIFIER(FixedTypedArray) |
4963 | 4982 |
4964 private: | 4983 private: |
4965 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedTypedArray); | 4984 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedTypedArray); |
4966 }; | 4985 }; |
4967 | 4986 |
4968 #define FIXED_TYPED_ARRAY_TRAITS(Type, type, TYPE, elementType, size) \ | 4987 #define FIXED_TYPED_ARRAY_TRAITS(Type, type, TYPE, elementType, size) \ |
4969 class Type##ArrayTraits { \ | 4988 class Type##ArrayTraits { \ |
4970 public: \ | 4989 public: \ |
4971 typedef elementType ElementType; \ | 4990 typedef elementType ElementType; \ |
4972 static const InstanceType kInstanceType = FIXED_##TYPE##_ARRAY_TYPE; \ | 4991 static const InstanceType kInstanceType = FIXED_##TYPE##_ARRAY_TYPE; \ |
4973 static const char* Designator() { return #type " array"; } \ | 4992 static const char* Designator() { return #type " array"; } \ |
4974 static inline MaybeObject* ToObject(Heap* heap, elementType scalar); \ | 4993 static inline MaybeObject* ToObject(Heap* heap, elementType scalar); \ |
4975 static elementType defaultValue() { return 0; } \ | 4994 static inline elementType defaultValue(); \ |
4976 }; \ | 4995 }; \ |
4977 \ | 4996 \ |
4978 typedef FixedTypedArray<Type##ArrayTraits> Fixed##Type##Array; | 4997 typedef FixedTypedArray<Type##ArrayTraits> Fixed##Type##Array; |
4979 | 4998 |
4980 TYPED_ARRAYS(FIXED_TYPED_ARRAY_TRAITS) | 4999 TYPED_ARRAYS(FIXED_TYPED_ARRAY_TRAITS) |
4981 | 5000 |
4982 #undef FIXED_TYPED_ARRAY_TRAITS | 5001 #undef FIXED_TYPED_ARRAY_TRAITS |
4983 | 5002 |
4984 // DeoptimizationInputData is a fixed array used to hold the deoptimization | 5003 // DeoptimizationInputData is a fixed array used to hold the deoptimization |
4985 // data for code generated by the Hydrogen/Lithium compiler. It also | 5004 // data for code generated by the Hydrogen/Lithium compiler. It also |
(...skipping 1195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6181 TransitionFlag flag); | 6200 TransitionFlag flag); |
6182 MUST_USE_RESULT MaybeObject* CopyInsertDescriptor(Descriptor* descriptor, | 6201 MUST_USE_RESULT MaybeObject* CopyInsertDescriptor(Descriptor* descriptor, |
6183 TransitionFlag flag); | 6202 TransitionFlag flag); |
6184 MUST_USE_RESULT MaybeObject* CopyReplaceDescriptor( | 6203 MUST_USE_RESULT MaybeObject* CopyReplaceDescriptor( |
6185 DescriptorArray* descriptors, | 6204 DescriptorArray* descriptors, |
6186 Descriptor* descriptor, | 6205 Descriptor* descriptor, |
6187 int index, | 6206 int index, |
6188 TransitionFlag flag); | 6207 TransitionFlag flag); |
6189 MUST_USE_RESULT MaybeObject* AsElementsKind(ElementsKind kind); | 6208 MUST_USE_RESULT MaybeObject* AsElementsKind(ElementsKind kind); |
6190 | 6209 |
| 6210 static Handle<Map> AsElementsKind(Handle<Map> map, ElementsKind kind); |
| 6211 |
6191 MUST_USE_RESULT MaybeObject* CopyAsElementsKind(ElementsKind kind, | 6212 MUST_USE_RESULT MaybeObject* CopyAsElementsKind(ElementsKind kind, |
6192 TransitionFlag flag); | 6213 TransitionFlag flag); |
6193 | 6214 |
6194 static Handle<Map> CopyForObserved(Handle<Map> map); | 6215 static Handle<Map> CopyForObserved(Handle<Map> map); |
6195 | 6216 |
6196 static Handle<Map> CopyNormalized(Handle<Map> map, | 6217 static Handle<Map> CopyNormalized(Handle<Map> map, |
6197 PropertyNormalizationMode mode, | 6218 PropertyNormalizationMode mode, |
6198 NormalizedMapSharingMode sharing); | 6219 NormalizedMapSharingMode sharing); |
6199 | 6220 |
6200 inline void AppendDescriptor(Descriptor* desc, | 6221 inline void AppendDescriptor(Descriptor* desc, |
(...skipping 3703 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9904 | 9925 |
9905 // Neutering. Only neuters this typed array. | 9926 // Neutering. Only neuters this typed array. |
9906 void Neuter(); | 9927 void Neuter(); |
9907 | 9928 |
9908 // Casting. | 9929 // Casting. |
9909 static inline JSTypedArray* cast(Object* obj); | 9930 static inline JSTypedArray* cast(Object* obj); |
9910 | 9931 |
9911 ExternalArrayType type(); | 9932 ExternalArrayType type(); |
9912 size_t element_size(); | 9933 size_t element_size(); |
9913 | 9934 |
| 9935 Handle<JSArrayBuffer> GetBuffer(); |
| 9936 |
9914 // Dispatched behavior. | 9937 // Dispatched behavior. |
9915 DECLARE_PRINTER(JSTypedArray) | 9938 DECLARE_PRINTER(JSTypedArray) |
9916 DECLARE_VERIFIER(JSTypedArray) | 9939 DECLARE_VERIFIER(JSTypedArray) |
9917 | 9940 |
9918 static const int kLengthOffset = kViewSize + kPointerSize; | 9941 static const int kLengthOffset = kViewSize + kPointerSize; |
9919 static const int kSize = kLengthOffset + kPointerSize; | 9942 static const int kSize = kLengthOffset + kPointerSize; |
9920 | 9943 |
9921 static const int kSizeWithInternalFields = | 9944 static const int kSizeWithInternalFields = |
9922 kSize + v8::ArrayBufferView::kInternalFieldCount * kPointerSize; | 9945 kSize + v8::ArrayBufferView::kInternalFieldCount * kPointerSize; |
9923 | 9946 |
9924 private: | 9947 private: |
| 9948 static Handle<JSArrayBuffer> MaterializeArrayBuffer( |
| 9949 Handle<JSTypedArray> typed_array); |
| 9950 |
9925 DISALLOW_IMPLICIT_CONSTRUCTORS(JSTypedArray); | 9951 DISALLOW_IMPLICIT_CONSTRUCTORS(JSTypedArray); |
9926 }; | 9952 }; |
9927 | 9953 |
9928 | 9954 |
9929 class JSDataView: public JSArrayBufferView { | 9955 class JSDataView: public JSArrayBufferView { |
9930 public: | 9956 public: |
9931 // Only neuters this DataView | 9957 // Only neuters this DataView |
9932 void Neuter(); | 9958 void Neuter(); |
9933 | 9959 |
9934 // Casting. | 9960 // Casting. |
(...skipping 842 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10777 } else { | 10803 } else { |
10778 value &= ~(1 << bit_position); | 10804 value &= ~(1 << bit_position); |
10779 } | 10805 } |
10780 return value; | 10806 return value; |
10781 } | 10807 } |
10782 }; | 10808 }; |
10783 | 10809 |
10784 } } // namespace v8::internal | 10810 } } // namespace v8::internal |
10785 | 10811 |
10786 #endif // V8_OBJECTS_H_ | 10812 #endif // V8_OBJECTS_H_ |
OLD | NEW |