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 2199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2210 inline bool HasExternalUint8Elements(); | 2210 inline bool HasExternalUint8Elements(); |
2211 inline bool HasExternalInt16Elements(); | 2211 inline bool HasExternalInt16Elements(); |
2212 inline bool HasExternalUint16Elements(); | 2212 inline bool HasExternalUint16Elements(); |
2213 inline bool HasExternalInt32Elements(); | 2213 inline bool HasExternalInt32Elements(); |
2214 inline bool HasExternalUint32Elements(); | 2214 inline bool HasExternalUint32Elements(); |
2215 inline bool HasExternalFloat32Elements(); | 2215 inline bool HasExternalFloat32Elements(); |
2216 inline bool HasExternalFloat64Elements(); | 2216 inline bool HasExternalFloat64Elements(); |
2217 | 2217 |
2218 inline bool HasFixedTypedArrayElements(); | 2218 inline bool HasFixedTypedArrayElements(); |
2219 | 2219 |
2220 inline bool HasFixedUint8ClampedElements(); | |
2221 inline bool HasFixedArrayElements(); | |
2222 inline bool HasFixedInt8Elements(); | |
2223 inline bool HasFixedUint8Elements(); | |
2224 inline bool HasFixedInt16Elements(); | |
2225 inline bool HasFixedUint16Elements(); | |
2226 inline bool HasFixedInt32Elements(); | |
2227 inline bool HasFixedUint32Elements(); | |
2228 inline bool HasFixedFloat32Elements(); | |
2229 inline bool HasFixedFloat64Elements(); | |
2230 | |
2231 bool HasFastArgumentsElements(); | 2220 bool HasFastArgumentsElements(); |
2232 bool HasDictionaryArgumentsElements(); | 2221 bool HasDictionaryArgumentsElements(); |
2233 inline SeededNumberDictionary* element_dictionary(); // Gets slow elements. | 2222 inline SeededNumberDictionary* element_dictionary(); // Gets slow elements. |
2234 | 2223 |
2235 inline void set_map_and_elements( | 2224 inline void set_map_and_elements( |
2236 Map* map, | 2225 Map* map, |
2237 FixedArrayBase* value, | 2226 FixedArrayBase* value, |
2238 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); | 2227 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); |
2239 | 2228 |
2240 // Requires: HasFastElements(). | 2229 // Requires: HasFastElements(). |
(...skipping 2725 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4966 | 4955 |
4967 class FixedTypedArrayBase: public FixedArrayBase { | 4956 class FixedTypedArrayBase: public FixedArrayBase { |
4968 public: | 4957 public: |
4969 // Casting: | 4958 // Casting: |
4970 static inline FixedTypedArrayBase* cast(Object* obj); | 4959 static inline FixedTypedArrayBase* cast(Object* obj); |
4971 | 4960 |
4972 static const int kDataOffset = kHeaderSize; | 4961 static const int kDataOffset = kHeaderSize; |
4973 | 4962 |
4974 inline int size(); | 4963 inline int size(); |
4975 | 4964 |
4976 // Use with care: returns raw pointer into heap. | |
4977 inline void* DataPtr(); | |
4978 | |
4979 inline int DataSize(); | |
4980 | |
4981 private: | 4965 private: |
4982 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedTypedArrayBase); | 4966 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedTypedArrayBase); |
4983 }; | 4967 }; |
4984 | 4968 |
4985 | 4969 |
4986 template <class Traits> | 4970 template <class Traits> |
4987 class FixedTypedArray: public FixedTypedArrayBase { | 4971 class FixedTypedArray: public FixedTypedArrayBase { |
4988 public: | 4972 public: |
4989 typedef typename Traits::ElementType ElementType; | 4973 typedef typename Traits::ElementType ElementType; |
4990 static const InstanceType kInstanceType = Traits::kInstanceType; | 4974 static const InstanceType kInstanceType = Traits::kInstanceType; |
4991 | 4975 |
4992 // Casting: | 4976 // Casting: |
4993 static inline FixedTypedArray<Traits>* cast(Object* obj); | 4977 static inline FixedTypedArray<Traits>* cast(Object* obj); |
4994 | 4978 |
4995 static inline int ElementOffset(int index) { | 4979 static inline int ElementOffset(int index) { |
4996 return kDataOffset + index * sizeof(ElementType); | 4980 return kDataOffset + index * sizeof(ElementType); |
4997 } | 4981 } |
4998 | 4982 |
4999 static inline int SizeFor(int length) { | 4983 static inline int SizeFor(int length) { |
5000 return ElementOffset(length); | 4984 return ElementOffset(length); |
5001 } | 4985 } |
5002 | 4986 |
5003 inline ElementType get_scalar(int index); | 4987 inline ElementType get_scalar(int index); |
5004 MUST_USE_RESULT inline MaybeObject* get(int index); | 4988 MUST_USE_RESULT inline MaybeObject* get(int index); |
5005 inline void set(int index, ElementType value); | 4989 inline void set(int index, ElementType value); |
5006 | 4990 |
5007 static inline ElementType from_int(int value); | |
5008 static inline ElementType from_double(double value); | |
5009 | |
5010 // This accessor applies the correct conversion from Smi, HeapNumber | 4991 // This accessor applies the correct conversion from Smi, HeapNumber |
5011 // and undefined. | 4992 // and undefined. |
5012 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4993 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
5013 | 4994 |
5014 static Handle<Object> SetValue(Handle<FixedTypedArray<Traits> > array, | 4995 static Handle<Object> SetValue(Handle<FixedTypedArray<Traits> > array, |
5015 uint32_t index, | 4996 uint32_t index, |
5016 Handle<Object> value); | 4997 Handle<Object> value); |
5017 | 4998 |
5018 DECLARE_PRINTER(FixedTypedArray) | 4999 DECLARE_PRINTER(FixedTypedArray) |
5019 DECLARE_VERIFIER(FixedTypedArray) | 5000 DECLARE_VERIFIER(FixedTypedArray) |
5020 | 5001 |
5021 private: | 5002 private: |
5022 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedTypedArray); | 5003 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedTypedArray); |
5023 }; | 5004 }; |
5024 | 5005 |
5025 #define FIXED_TYPED_ARRAY_TRAITS(Type, type, TYPE, elementType, size) \ | 5006 #define FIXED_TYPED_ARRAY_TRAITS(Type, type, TYPE, elementType, size) \ |
5026 class Type##ArrayTraits { \ | 5007 class Type##ArrayTraits { \ |
5027 public: \ | 5008 public: \ |
5028 typedef elementType ElementType; \ | 5009 typedef elementType ElementType; \ |
5029 static const InstanceType kInstanceType = FIXED_##TYPE##_ARRAY_TYPE; \ | 5010 static const InstanceType kInstanceType = FIXED_##TYPE##_ARRAY_TYPE; \ |
5030 static const char* Designator() { return #type " array"; } \ | 5011 static const char* Designator() { return #type " array"; } \ |
5031 static inline MaybeObject* ToObject(Heap* heap, elementType scalar); \ | 5012 static inline MaybeObject* ToObject(Heap* heap, elementType scalar); \ |
5032 static inline elementType defaultValue(); \ | 5013 static elementType defaultValue() { return 0; } \ |
5033 }; \ | 5014 }; \ |
5034 \ | 5015 \ |
5035 typedef FixedTypedArray<Type##ArrayTraits> Fixed##Type##Array; | 5016 typedef FixedTypedArray<Type##ArrayTraits> Fixed##Type##Array; |
5036 | 5017 |
5037 TYPED_ARRAYS(FIXED_TYPED_ARRAY_TRAITS) | 5018 TYPED_ARRAYS(FIXED_TYPED_ARRAY_TRAITS) |
5038 | 5019 |
5039 #undef FIXED_TYPED_ARRAY_TRAITS | 5020 #undef FIXED_TYPED_ARRAY_TRAITS |
5040 | 5021 |
5041 // DeoptimizationInputData is a fixed array used to hold the deoptimization | 5022 // DeoptimizationInputData is a fixed array used to hold the deoptimization |
5042 // data for code generated by the Hydrogen/Lithium compiler. It also | 5023 // data for code generated by the Hydrogen/Lithium compiler. It also |
(...skipping 1199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6242 Descriptor* descriptor); | 6223 Descriptor* descriptor); |
6243 MUST_USE_RESULT MaybeObject* CopyAddDescriptor(Descriptor* descriptor, | 6224 MUST_USE_RESULT MaybeObject* CopyAddDescriptor(Descriptor* descriptor, |
6244 TransitionFlag flag); | 6225 TransitionFlag flag); |
6245 MUST_USE_RESULT MaybeObject* CopyInsertDescriptor(Descriptor* descriptor, | 6226 MUST_USE_RESULT MaybeObject* CopyInsertDescriptor(Descriptor* descriptor, |
6246 TransitionFlag flag); | 6227 TransitionFlag flag); |
6247 MUST_USE_RESULT MaybeObject* CopyReplaceDescriptor( | 6228 MUST_USE_RESULT MaybeObject* CopyReplaceDescriptor( |
6248 DescriptorArray* descriptors, | 6229 DescriptorArray* descriptors, |
6249 Descriptor* descriptor, | 6230 Descriptor* descriptor, |
6250 int index, | 6231 int index, |
6251 TransitionFlag flag); | 6232 TransitionFlag flag); |
6252 | 6233 static Handle<Map> AsElementsKind(Handle<Map> map, ElementsKind kind); |
6253 MUST_USE_RESULT MaybeObject* AsElementsKind(ElementsKind kind); | 6234 MUST_USE_RESULT MaybeObject* AsElementsKind(ElementsKind kind); |
6254 | 6235 |
6255 static Handle<Map> AsElementsKind(Handle<Map> map, ElementsKind kind); | |
6256 | |
6257 MUST_USE_RESULT MaybeObject* CopyAsElementsKind(ElementsKind kind, | 6236 MUST_USE_RESULT MaybeObject* CopyAsElementsKind(ElementsKind kind, |
6258 TransitionFlag flag); | 6237 TransitionFlag flag); |
6259 | 6238 |
6260 static Handle<Map> CopyForObserved(Handle<Map> map); | 6239 static Handle<Map> CopyForObserved(Handle<Map> map); |
6261 | 6240 |
6262 static Handle<Map> CopyNormalized(Handle<Map> map, | 6241 static Handle<Map> CopyNormalized(Handle<Map> map, |
6263 PropertyNormalizationMode mode, | 6242 PropertyNormalizationMode mode, |
6264 NormalizedMapSharingMode sharing); | 6243 NormalizedMapSharingMode sharing); |
6265 | 6244 |
6266 inline void AppendDescriptor(Descriptor* desc, | 6245 inline void AppendDescriptor(Descriptor* desc, |
(...skipping 3668 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9935 | 9914 |
9936 // Neutering. Only neuters this typed array. | 9915 // Neutering. Only neuters this typed array. |
9937 void Neuter(); | 9916 void Neuter(); |
9938 | 9917 |
9939 // Casting. | 9918 // Casting. |
9940 static inline JSTypedArray* cast(Object* obj); | 9919 static inline JSTypedArray* cast(Object* obj); |
9941 | 9920 |
9942 ExternalArrayType type(); | 9921 ExternalArrayType type(); |
9943 size_t element_size(); | 9922 size_t element_size(); |
9944 | 9923 |
9945 Handle<JSArrayBuffer> GetBuffer(); | |
9946 | |
9947 // Dispatched behavior. | 9924 // Dispatched behavior. |
9948 DECLARE_PRINTER(JSTypedArray) | 9925 DECLARE_PRINTER(JSTypedArray) |
9949 DECLARE_VERIFIER(JSTypedArray) | 9926 DECLARE_VERIFIER(JSTypedArray) |
9950 | 9927 |
9951 static const int kLengthOffset = kViewSize + kPointerSize; | 9928 static const int kLengthOffset = kViewSize + kPointerSize; |
9952 static const int kSize = kLengthOffset + kPointerSize; | 9929 static const int kSize = kLengthOffset + kPointerSize; |
9953 | 9930 |
9954 static const int kSizeWithInternalFields = | 9931 static const int kSizeWithInternalFields = |
9955 kSize + v8::ArrayBufferView::kInternalFieldCount * kPointerSize; | 9932 kSize + v8::ArrayBufferView::kInternalFieldCount * kPointerSize; |
9956 | 9933 |
9957 private: | 9934 private: |
9958 static Handle<JSArrayBuffer> MaterializeArrayBuffer( | |
9959 Handle<JSTypedArray> typed_array); | |
9960 | |
9961 DISALLOW_IMPLICIT_CONSTRUCTORS(JSTypedArray); | 9935 DISALLOW_IMPLICIT_CONSTRUCTORS(JSTypedArray); |
9962 }; | 9936 }; |
9963 | 9937 |
9964 | 9938 |
9965 class JSDataView: public JSArrayBufferView { | 9939 class JSDataView: public JSArrayBufferView { |
9966 public: | 9940 public: |
9967 // Only neuters this DataView | 9941 // Only neuters this DataView |
9968 void Neuter(); | 9942 void Neuter(); |
9969 | 9943 |
9970 // Casting. | 9944 // Casting. |
(...skipping 846 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10817 } else { | 10791 } else { |
10818 value &= ~(1 << bit_position); | 10792 value &= ~(1 << bit_position); |
10819 } | 10793 } |
10820 return value; | 10794 return value; |
10821 } | 10795 } |
10822 }; | 10796 }; |
10823 | 10797 |
10824 } } // namespace v8::internal | 10798 } } // namespace v8::internal |
10825 | 10799 |
10826 #endif // V8_OBJECTS_H_ | 10800 #endif // V8_OBJECTS_H_ |
OLD | NEW |