OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_OBJECTS_H_ | 5 #ifndef V8_OBJECTS_H_ |
6 #define V8_OBJECTS_H_ | 6 #define V8_OBJECTS_H_ |
7 | 7 |
8 #include <iosfwd> | 8 #include <iosfwd> |
9 | 9 |
10 #include "src/allocation.h" | 10 #include "src/allocation.h" |
(...skipping 4632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4643 inline uint8_t* external_uint8_clamped_pointer(); | 4643 inline uint8_t* external_uint8_clamped_pointer(); |
4644 | 4644 |
4645 // Setter and getter. | 4645 // Setter and getter. |
4646 inline uint8_t get_scalar(int index); | 4646 inline uint8_t get_scalar(int index); |
4647 static inline Handle<Object> get(Handle<ExternalUint8ClampedArray> array, | 4647 static inline Handle<Object> get(Handle<ExternalUint8ClampedArray> array, |
4648 int index); | 4648 int index); |
4649 inline void set(int index, uint8_t value); | 4649 inline void set(int index, uint8_t value); |
4650 | 4650 |
4651 // This accessor applies the correct conversion from Smi, HeapNumber | 4651 // This accessor applies the correct conversion from Smi, HeapNumber |
4652 // and undefined and clamps the converted value between 0 and 255. | 4652 // and undefined and clamps the converted value between 0 and 255. |
4653 static Handle<Object> SetValue(Handle<JSObject> holder, | 4653 static Handle<Object> SetValue(Handle<ExternalUint8ClampedArray> array, |
4654 Handle<ExternalUint8ClampedArray> array, | 4654 uint32_t index, |
4655 uint32_t index, Handle<Object> value); | 4655 Handle<Object> value); |
4656 | 4656 |
4657 DECLARE_CAST(ExternalUint8ClampedArray) | 4657 DECLARE_CAST(ExternalUint8ClampedArray) |
4658 | 4658 |
4659 // Dispatched behavior. | 4659 // Dispatched behavior. |
4660 DECLARE_PRINTER(ExternalUint8ClampedArray) | 4660 DECLARE_PRINTER(ExternalUint8ClampedArray) |
4661 DECLARE_VERIFIER(ExternalUint8ClampedArray) | 4661 DECLARE_VERIFIER(ExternalUint8ClampedArray) |
4662 | 4662 |
4663 private: | 4663 private: |
4664 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUint8ClampedArray); | 4664 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUint8ClampedArray); |
4665 }; | 4665 }; |
4666 | 4666 |
4667 | 4667 |
4668 class ExternalInt8Array: public ExternalArray { | 4668 class ExternalInt8Array: public ExternalArray { |
4669 public: | 4669 public: |
4670 // Setter and getter. | 4670 // Setter and getter. |
4671 inline int8_t get_scalar(int index); | 4671 inline int8_t get_scalar(int index); |
4672 static inline Handle<Object> get(Handle<ExternalInt8Array> array, int index); | 4672 static inline Handle<Object> get(Handle<ExternalInt8Array> array, int index); |
4673 inline void set(int index, int8_t value); | 4673 inline void set(int index, int8_t value); |
4674 | 4674 |
4675 // This accessor applies the correct conversion from Smi, HeapNumber | 4675 // This accessor applies the correct conversion from Smi, HeapNumber |
4676 // and undefined. | 4676 // and undefined. |
4677 static Handle<Object> SetValue(Handle<JSObject> holder, | 4677 static Handle<Object> SetValue(Handle<ExternalInt8Array> array, |
4678 Handle<ExternalInt8Array> array, | 4678 uint32_t index, |
4679 uint32_t index, Handle<Object> value); | 4679 Handle<Object> value); |
4680 | 4680 |
4681 DECLARE_CAST(ExternalInt8Array) | 4681 DECLARE_CAST(ExternalInt8Array) |
4682 | 4682 |
4683 // Dispatched behavior. | 4683 // Dispatched behavior. |
4684 DECLARE_PRINTER(ExternalInt8Array) | 4684 DECLARE_PRINTER(ExternalInt8Array) |
4685 DECLARE_VERIFIER(ExternalInt8Array) | 4685 DECLARE_VERIFIER(ExternalInt8Array) |
4686 | 4686 |
4687 private: | 4687 private: |
4688 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalInt8Array); | 4688 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalInt8Array); |
4689 }; | 4689 }; |
4690 | 4690 |
4691 | 4691 |
4692 class ExternalUint8Array: public ExternalArray { | 4692 class ExternalUint8Array: public ExternalArray { |
4693 public: | 4693 public: |
4694 // Setter and getter. | 4694 // Setter and getter. |
4695 inline uint8_t get_scalar(int index); | 4695 inline uint8_t get_scalar(int index); |
4696 static inline Handle<Object> get(Handle<ExternalUint8Array> array, int index); | 4696 static inline Handle<Object> get(Handle<ExternalUint8Array> array, int index); |
4697 inline void set(int index, uint8_t value); | 4697 inline void set(int index, uint8_t value); |
4698 | 4698 |
4699 // This accessor applies the correct conversion from Smi, HeapNumber | 4699 // This accessor applies the correct conversion from Smi, HeapNumber |
4700 // and undefined. | 4700 // and undefined. |
4701 static Handle<Object> SetValue(Handle<JSObject> holder, | 4701 static Handle<Object> SetValue(Handle<ExternalUint8Array> array, |
4702 Handle<ExternalUint8Array> array, | 4702 uint32_t index, |
4703 uint32_t index, Handle<Object> value); | 4703 Handle<Object> value); |
4704 | 4704 |
4705 DECLARE_CAST(ExternalUint8Array) | 4705 DECLARE_CAST(ExternalUint8Array) |
4706 | 4706 |
4707 // Dispatched behavior. | 4707 // Dispatched behavior. |
4708 DECLARE_PRINTER(ExternalUint8Array) | 4708 DECLARE_PRINTER(ExternalUint8Array) |
4709 DECLARE_VERIFIER(ExternalUint8Array) | 4709 DECLARE_VERIFIER(ExternalUint8Array) |
4710 | 4710 |
4711 private: | 4711 private: |
4712 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUint8Array); | 4712 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUint8Array); |
4713 }; | 4713 }; |
4714 | 4714 |
4715 | 4715 |
4716 class ExternalInt16Array: public ExternalArray { | 4716 class ExternalInt16Array: public ExternalArray { |
4717 public: | 4717 public: |
4718 // Setter and getter. | 4718 // Setter and getter. |
4719 inline int16_t get_scalar(int index); | 4719 inline int16_t get_scalar(int index); |
4720 static inline Handle<Object> get(Handle<ExternalInt16Array> array, int index); | 4720 static inline Handle<Object> get(Handle<ExternalInt16Array> array, int index); |
4721 inline void set(int index, int16_t value); | 4721 inline void set(int index, int16_t value); |
4722 | 4722 |
4723 // This accessor applies the correct conversion from Smi, HeapNumber | 4723 // This accessor applies the correct conversion from Smi, HeapNumber |
4724 // and undefined. | 4724 // and undefined. |
4725 static Handle<Object> SetValue(Handle<JSObject> holder, | 4725 static Handle<Object> SetValue(Handle<ExternalInt16Array> array, |
4726 Handle<ExternalInt16Array> array, | 4726 uint32_t index, |
4727 uint32_t index, Handle<Object> value); | 4727 Handle<Object> value); |
4728 | 4728 |
4729 DECLARE_CAST(ExternalInt16Array) | 4729 DECLARE_CAST(ExternalInt16Array) |
4730 | 4730 |
4731 // Dispatched behavior. | 4731 // Dispatched behavior. |
4732 DECLARE_PRINTER(ExternalInt16Array) | 4732 DECLARE_PRINTER(ExternalInt16Array) |
4733 DECLARE_VERIFIER(ExternalInt16Array) | 4733 DECLARE_VERIFIER(ExternalInt16Array) |
4734 | 4734 |
4735 private: | 4735 private: |
4736 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalInt16Array); | 4736 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalInt16Array); |
4737 }; | 4737 }; |
4738 | 4738 |
4739 | 4739 |
4740 class ExternalUint16Array: public ExternalArray { | 4740 class ExternalUint16Array: public ExternalArray { |
4741 public: | 4741 public: |
4742 // Setter and getter. | 4742 // Setter and getter. |
4743 inline uint16_t get_scalar(int index); | 4743 inline uint16_t get_scalar(int index); |
4744 static inline Handle<Object> get(Handle<ExternalUint16Array> array, | 4744 static inline Handle<Object> get(Handle<ExternalUint16Array> array, |
4745 int index); | 4745 int index); |
4746 inline void set(int index, uint16_t value); | 4746 inline void set(int index, uint16_t value); |
4747 | 4747 |
4748 // This accessor applies the correct conversion from Smi, HeapNumber | 4748 // This accessor applies the correct conversion from Smi, HeapNumber |
4749 // and undefined. | 4749 // and undefined. |
4750 static Handle<Object> SetValue(Handle<JSObject> holder, | 4750 static Handle<Object> SetValue(Handle<ExternalUint16Array> array, |
4751 Handle<ExternalUint16Array> array, | 4751 uint32_t index, |
4752 uint32_t index, Handle<Object> value); | 4752 Handle<Object> value); |
4753 | 4753 |
4754 DECLARE_CAST(ExternalUint16Array) | 4754 DECLARE_CAST(ExternalUint16Array) |
4755 | 4755 |
4756 // Dispatched behavior. | 4756 // Dispatched behavior. |
4757 DECLARE_PRINTER(ExternalUint16Array) | 4757 DECLARE_PRINTER(ExternalUint16Array) |
4758 DECLARE_VERIFIER(ExternalUint16Array) | 4758 DECLARE_VERIFIER(ExternalUint16Array) |
4759 | 4759 |
4760 private: | 4760 private: |
4761 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUint16Array); | 4761 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUint16Array); |
4762 }; | 4762 }; |
4763 | 4763 |
4764 | 4764 |
4765 class ExternalInt32Array: public ExternalArray { | 4765 class ExternalInt32Array: public ExternalArray { |
4766 public: | 4766 public: |
4767 // Setter and getter. | 4767 // Setter and getter. |
4768 inline int32_t get_scalar(int index); | 4768 inline int32_t get_scalar(int index); |
4769 static inline Handle<Object> get(Handle<ExternalInt32Array> array, int index); | 4769 static inline Handle<Object> get(Handle<ExternalInt32Array> array, int index); |
4770 inline void set(int index, int32_t value); | 4770 inline void set(int index, int32_t value); |
4771 | 4771 |
4772 // This accessor applies the correct conversion from Smi, HeapNumber | 4772 // This accessor applies the correct conversion from Smi, HeapNumber |
4773 // and undefined. | 4773 // and undefined. |
4774 static Handle<Object> SetValue(Handle<JSObject> holder, | 4774 static Handle<Object> SetValue(Handle<ExternalInt32Array> array, |
4775 Handle<ExternalInt32Array> array, | 4775 uint32_t index, |
4776 uint32_t index, Handle<Object> value); | 4776 Handle<Object> value); |
4777 | 4777 |
4778 DECLARE_CAST(ExternalInt32Array) | 4778 DECLARE_CAST(ExternalInt32Array) |
4779 | 4779 |
4780 // Dispatched behavior. | 4780 // Dispatched behavior. |
4781 DECLARE_PRINTER(ExternalInt32Array) | 4781 DECLARE_PRINTER(ExternalInt32Array) |
4782 DECLARE_VERIFIER(ExternalInt32Array) | 4782 DECLARE_VERIFIER(ExternalInt32Array) |
4783 | 4783 |
4784 private: | 4784 private: |
4785 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalInt32Array); | 4785 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalInt32Array); |
4786 }; | 4786 }; |
4787 | 4787 |
4788 | 4788 |
4789 class ExternalUint32Array: public ExternalArray { | 4789 class ExternalUint32Array: public ExternalArray { |
4790 public: | 4790 public: |
4791 // Setter and getter. | 4791 // Setter and getter. |
4792 inline uint32_t get_scalar(int index); | 4792 inline uint32_t get_scalar(int index); |
4793 static inline Handle<Object> get(Handle<ExternalUint32Array> array, | 4793 static inline Handle<Object> get(Handle<ExternalUint32Array> array, |
4794 int index); | 4794 int index); |
4795 inline void set(int index, uint32_t value); | 4795 inline void set(int index, uint32_t value); |
4796 | 4796 |
4797 // This accessor applies the correct conversion from Smi, HeapNumber | 4797 // This accessor applies the correct conversion from Smi, HeapNumber |
4798 // and undefined. | 4798 // and undefined. |
4799 static Handle<Object> SetValue(Handle<JSObject> holder, | 4799 static Handle<Object> SetValue(Handle<ExternalUint32Array> array, |
4800 Handle<ExternalUint32Array> array, | 4800 uint32_t index, |
4801 uint32_t index, Handle<Object> value); | 4801 Handle<Object> value); |
4802 | 4802 |
4803 DECLARE_CAST(ExternalUint32Array) | 4803 DECLARE_CAST(ExternalUint32Array) |
4804 | 4804 |
4805 // Dispatched behavior. | 4805 // Dispatched behavior. |
4806 DECLARE_PRINTER(ExternalUint32Array) | 4806 DECLARE_PRINTER(ExternalUint32Array) |
4807 DECLARE_VERIFIER(ExternalUint32Array) | 4807 DECLARE_VERIFIER(ExternalUint32Array) |
4808 | 4808 |
4809 private: | 4809 private: |
4810 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUint32Array); | 4810 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUint32Array); |
4811 }; | 4811 }; |
4812 | 4812 |
4813 | 4813 |
4814 class ExternalFloat32Array: public ExternalArray { | 4814 class ExternalFloat32Array: public ExternalArray { |
4815 public: | 4815 public: |
4816 // Setter and getter. | 4816 // Setter and getter. |
4817 inline float get_scalar(int index); | 4817 inline float get_scalar(int index); |
4818 static inline Handle<Object> get(Handle<ExternalFloat32Array> array, | 4818 static inline Handle<Object> get(Handle<ExternalFloat32Array> array, |
4819 int index); | 4819 int index); |
4820 inline void set(int index, float value); | 4820 inline void set(int index, float value); |
4821 | 4821 |
4822 // This accessor applies the correct conversion from Smi, HeapNumber | 4822 // This accessor applies the correct conversion from Smi, HeapNumber |
4823 // and undefined. | 4823 // and undefined. |
4824 static Handle<Object> SetValue(Handle<JSObject> holder, | 4824 static Handle<Object> SetValue(Handle<ExternalFloat32Array> array, |
4825 Handle<ExternalFloat32Array> array, | 4825 uint32_t index, |
4826 uint32_t index, Handle<Object> value); | 4826 Handle<Object> value); |
4827 | 4827 |
4828 DECLARE_CAST(ExternalFloat32Array) | 4828 DECLARE_CAST(ExternalFloat32Array) |
4829 | 4829 |
4830 // Dispatched behavior. | 4830 // Dispatched behavior. |
4831 DECLARE_PRINTER(ExternalFloat32Array) | 4831 DECLARE_PRINTER(ExternalFloat32Array) |
4832 DECLARE_VERIFIER(ExternalFloat32Array) | 4832 DECLARE_VERIFIER(ExternalFloat32Array) |
4833 | 4833 |
4834 private: | 4834 private: |
4835 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloat32Array); | 4835 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloat32Array); |
4836 }; | 4836 }; |
4837 | 4837 |
4838 | 4838 |
4839 class ExternalFloat64Array: public ExternalArray { | 4839 class ExternalFloat64Array: public ExternalArray { |
4840 public: | 4840 public: |
4841 // Setter and getter. | 4841 // Setter and getter. |
4842 inline double get_scalar(int index); | 4842 inline double get_scalar(int index); |
4843 static inline Handle<Object> get(Handle<ExternalFloat64Array> array, | 4843 static inline Handle<Object> get(Handle<ExternalFloat64Array> array, |
4844 int index); | 4844 int index); |
4845 inline void set(int index, double value); | 4845 inline void set(int index, double value); |
4846 | 4846 |
4847 // This accessor applies the correct conversion from Smi, HeapNumber | 4847 // This accessor applies the correct conversion from Smi, HeapNumber |
4848 // and undefined. | 4848 // and undefined. |
4849 static Handle<Object> SetValue(Handle<JSObject> holder, | 4849 static Handle<Object> SetValue(Handle<ExternalFloat64Array> array, |
4850 Handle<ExternalFloat64Array> array, | 4850 uint32_t index, |
4851 uint32_t index, Handle<Object> value); | 4851 Handle<Object> value); |
4852 | 4852 |
4853 DECLARE_CAST(ExternalFloat64Array) | 4853 DECLARE_CAST(ExternalFloat64Array) |
4854 | 4854 |
4855 // Dispatched behavior. | 4855 // Dispatched behavior. |
4856 DECLARE_PRINTER(ExternalFloat64Array) | 4856 DECLARE_PRINTER(ExternalFloat64Array) |
4857 DECLARE_VERIFIER(ExternalFloat64Array) | 4857 DECLARE_VERIFIER(ExternalFloat64Array) |
4858 | 4858 |
4859 private: | 4859 private: |
4860 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloat64Array); | 4860 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloat64Array); |
4861 }; | 4861 }; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4904 | 4904 |
4905 inline ElementType get_scalar(int index); | 4905 inline ElementType get_scalar(int index); |
4906 static inline Handle<Object> get(Handle<FixedTypedArray> array, int index); | 4906 static inline Handle<Object> get(Handle<FixedTypedArray> array, int index); |
4907 inline void set(int index, ElementType value); | 4907 inline void set(int index, ElementType value); |
4908 | 4908 |
4909 static inline ElementType from_int(int value); | 4909 static inline ElementType from_int(int value); |
4910 static inline ElementType from_double(double value); | 4910 static inline ElementType from_double(double value); |
4911 | 4911 |
4912 // This accessor applies the correct conversion from Smi, HeapNumber | 4912 // This accessor applies the correct conversion from Smi, HeapNumber |
4913 // and undefined. | 4913 // and undefined. |
4914 static Handle<Object> SetValue(Handle<JSObject> holder, | 4914 static Handle<Object> SetValue(Handle<FixedTypedArray<Traits> > array, |
4915 Handle<FixedTypedArray<Traits> > array, | 4915 uint32_t index, |
4916 uint32_t index, Handle<Object> value); | 4916 Handle<Object> value); |
4917 | 4917 |
4918 DECLARE_PRINTER(FixedTypedArray) | 4918 DECLARE_PRINTER(FixedTypedArray) |
4919 DECLARE_VERIFIER(FixedTypedArray) | 4919 DECLARE_VERIFIER(FixedTypedArray) |
4920 | 4920 |
4921 private: | 4921 private: |
4922 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedTypedArray); | 4922 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedTypedArray); |
4923 }; | 4923 }; |
4924 | 4924 |
4925 #define FIXED_TYPED_ARRAY_TRAITS(Type, type, TYPE, elementType, size) \ | 4925 #define FIXED_TYPED_ARRAY_TRAITS(Type, type, TYPE, elementType, size) \ |
4926 class Type##ArrayTraits { \ | 4926 class Type##ArrayTraits { \ |
(...skipping 5300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10227 | 10227 |
10228 inline bool is_external(); | 10228 inline bool is_external(); |
10229 inline void set_is_external(bool value); | 10229 inline void set_is_external(bool value); |
10230 | 10230 |
10231 inline bool should_be_freed(); | 10231 inline bool should_be_freed(); |
10232 inline void set_should_be_freed(bool value); | 10232 inline void set_should_be_freed(bool value); |
10233 | 10233 |
10234 inline bool is_neuterable(); | 10234 inline bool is_neuterable(); |
10235 inline void set_is_neuterable(bool value); | 10235 inline void set_is_neuterable(bool value); |
10236 | 10236 |
10237 inline bool was_neutered(); | |
10238 inline void set_was_neutered(bool value); | |
10239 | |
10240 // [weak_next]: linked list of array buffers. | 10237 // [weak_next]: linked list of array buffers. |
10241 DECL_ACCESSORS(weak_next, Object) | 10238 DECL_ACCESSORS(weak_next, Object) |
10242 | 10239 |
| 10240 // [weak_first_array]: weak linked list of views. |
| 10241 DECL_ACCESSORS(weak_first_view, Object) |
| 10242 |
10243 DECLARE_CAST(JSArrayBuffer) | 10243 DECLARE_CAST(JSArrayBuffer) |
10244 | 10244 |
| 10245 // Neutering. Only neuters the buffer, not associated typed arrays. |
10245 void Neuter(); | 10246 void Neuter(); |
10246 | 10247 |
10247 // Dispatched behavior. | 10248 // Dispatched behavior. |
10248 DECLARE_PRINTER(JSArrayBuffer) | 10249 DECLARE_PRINTER(JSArrayBuffer) |
10249 DECLARE_VERIFIER(JSArrayBuffer) | 10250 DECLARE_VERIFIER(JSArrayBuffer) |
10250 | 10251 |
10251 static const int kBackingStoreOffset = JSObject::kHeaderSize; | 10252 static const int kBackingStoreOffset = JSObject::kHeaderSize; |
10252 static const int kByteLengthOffset = kBackingStoreOffset + kPointerSize; | 10253 static const int kByteLengthOffset = kBackingStoreOffset + kPointerSize; |
10253 static const int kFlagOffset = kByteLengthOffset + kPointerSize; | 10254 static const int kFlagOffset = kByteLengthOffset + kPointerSize; |
10254 static const int kWeakNextOffset = kFlagOffset + kPointerSize; | 10255 static const int kWeakNextOffset = kFlagOffset + kPointerSize; |
10255 static const int kSize = kWeakNextOffset + kPointerSize; | 10256 static const int kWeakFirstViewOffset = kWeakNextOffset + kPointerSize; |
| 10257 static const int kSize = kWeakFirstViewOffset + kPointerSize; |
10256 | 10258 |
10257 static const int kSizeWithInternalFields = | 10259 static const int kSizeWithInternalFields = |
10258 kSize + v8::ArrayBuffer::kInternalFieldCount * kPointerSize; | 10260 kSize + v8::ArrayBuffer::kInternalFieldCount * kPointerSize; |
10259 | 10261 |
| 10262 private: |
10260 // Bit position in a flag | 10263 // Bit position in a flag |
10261 static const int kIsExternalBit = 0; | 10264 static const int kIsExternalBit = 0; |
10262 static const int kShouldBeFreed = 1; | 10265 static const int kShouldBeFreed = 1; |
10263 static const int kIsNeuterableBit = 2; | 10266 static const int kIsNeuterableBit = 2; |
10264 static const int kWasNeuteredBit = 3; | |
10265 | 10267 |
10266 private: | |
10267 DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayBuffer); | 10268 DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayBuffer); |
10268 }; | 10269 }; |
10269 | 10270 |
10270 | 10271 |
10271 class JSArrayBufferView: public JSObject { | 10272 class JSArrayBufferView: public JSObject { |
10272 public: | 10273 public: |
10273 // [buffer]: ArrayBuffer that this typed array views. | 10274 // [buffer]: ArrayBuffer that this typed array views. |
10274 DECL_ACCESSORS(buffer, Object) | 10275 DECL_ACCESSORS(buffer, Object) |
10275 | 10276 |
10276 // [byte_length]: offset of typed array in bytes. | 10277 // [byte_length]: offset of typed array in bytes. |
10277 DECL_ACCESSORS(byte_offset, Object) | 10278 DECL_ACCESSORS(byte_offset, Object) |
10278 | 10279 |
10279 // [byte_length]: length of typed array in bytes. | 10280 // [byte_length]: length of typed array in bytes. |
10280 DECL_ACCESSORS(byte_length, Object) | 10281 DECL_ACCESSORS(byte_length, Object) |
10281 | 10282 |
| 10283 // [weak_next]: linked list of typed arrays over the same array buffer. |
| 10284 DECL_ACCESSORS(weak_next, Object) |
| 10285 |
10282 DECLARE_CAST(JSArrayBufferView) | 10286 DECLARE_CAST(JSArrayBufferView) |
10283 | 10287 |
10284 DECLARE_VERIFIER(JSArrayBufferView) | 10288 DECLARE_VERIFIER(JSArrayBufferView) |
10285 | 10289 |
10286 inline bool WasNeutered() const; | |
10287 | |
10288 static const int kBufferOffset = JSObject::kHeaderSize; | 10290 static const int kBufferOffset = JSObject::kHeaderSize; |
10289 static const int kByteOffsetOffset = kBufferOffset + kPointerSize; | 10291 static const int kByteOffsetOffset = kBufferOffset + kPointerSize; |
10290 static const int kByteLengthOffset = kByteOffsetOffset + kPointerSize; | 10292 static const int kByteLengthOffset = kByteOffsetOffset + kPointerSize; |
10291 static const int kViewSize = kByteLengthOffset + kPointerSize; | 10293 static const int kWeakNextOffset = kByteLengthOffset + kPointerSize; |
| 10294 static const int kViewSize = kWeakNextOffset + kPointerSize; |
| 10295 |
| 10296 protected: |
| 10297 void NeuterView(); |
10292 | 10298 |
10293 private: | 10299 private: |
10294 #ifdef VERIFY_HEAP | |
10295 DECL_ACCESSORS(raw_byte_offset, Object) | |
10296 DECL_ACCESSORS(raw_byte_length, Object) | |
10297 #endif | |
10298 | |
10299 DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayBufferView); | 10300 DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayBufferView); |
10300 }; | 10301 }; |
10301 | 10302 |
10302 | 10303 |
10303 class JSTypedArray: public JSArrayBufferView { | 10304 class JSTypedArray: public JSArrayBufferView { |
10304 public: | 10305 public: |
10305 // [length]: length of typed array in elements. | 10306 // [length]: length of typed array in elements. |
10306 DECL_ACCESSORS(length, Object) | 10307 DECL_ACCESSORS(length, Object) |
10307 | 10308 |
| 10309 // Neutering. Only neuters this typed array. |
| 10310 void Neuter(); |
| 10311 |
10308 DECLARE_CAST(JSTypedArray) | 10312 DECLARE_CAST(JSTypedArray) |
10309 | 10313 |
10310 ExternalArrayType type(); | 10314 ExternalArrayType type(); |
10311 size_t element_size(); | 10315 size_t element_size(); |
10312 | 10316 |
10313 Handle<JSArrayBuffer> GetBuffer(); | 10317 Handle<JSArrayBuffer> GetBuffer(); |
10314 | 10318 |
10315 // Dispatched behavior. | 10319 // Dispatched behavior. |
10316 DECLARE_PRINTER(JSTypedArray) | 10320 DECLARE_PRINTER(JSTypedArray) |
10317 DECLARE_VERIFIER(JSTypedArray) | 10321 DECLARE_VERIFIER(JSTypedArray) |
10318 | 10322 |
10319 static const int kLengthOffset = kViewSize + kPointerSize; | 10323 static const int kLengthOffset = kViewSize + kPointerSize; |
10320 static const int kSize = kLengthOffset + kPointerSize; | 10324 static const int kSize = kLengthOffset + kPointerSize; |
10321 | 10325 |
10322 static const int kSizeWithInternalFields = | 10326 static const int kSizeWithInternalFields = |
10323 kSize + v8::ArrayBufferView::kInternalFieldCount * kPointerSize; | 10327 kSize + v8::ArrayBufferView::kInternalFieldCount * kPointerSize; |
10324 | 10328 |
10325 private: | 10329 private: |
10326 static Handle<JSArrayBuffer> MaterializeArrayBuffer( | 10330 static Handle<JSArrayBuffer> MaterializeArrayBuffer( |
10327 Handle<JSTypedArray> typed_array); | 10331 Handle<JSTypedArray> typed_array); |
10328 #ifdef VERIFY_HEAP | |
10329 DECL_ACCESSORS(raw_length, Object) | |
10330 #endif | |
10331 | 10332 |
10332 DISALLOW_IMPLICIT_CONSTRUCTORS(JSTypedArray); | 10333 DISALLOW_IMPLICIT_CONSTRUCTORS(JSTypedArray); |
10333 }; | 10334 }; |
10334 | 10335 |
10335 | 10336 |
10336 class JSDataView: public JSArrayBufferView { | 10337 class JSDataView: public JSArrayBufferView { |
10337 public: | 10338 public: |
| 10339 // Only neuters this DataView |
| 10340 void Neuter(); |
| 10341 |
10338 DECLARE_CAST(JSDataView) | 10342 DECLARE_CAST(JSDataView) |
10339 | 10343 |
10340 // Dispatched behavior. | 10344 // Dispatched behavior. |
10341 DECLARE_PRINTER(JSDataView) | 10345 DECLARE_PRINTER(JSDataView) |
10342 DECLARE_VERIFIER(JSDataView) | 10346 DECLARE_VERIFIER(JSDataView) |
10343 | 10347 |
10344 static const int kSize = kViewSize; | 10348 static const int kSize = kViewSize; |
10345 | 10349 |
10346 static const int kSizeWithInternalFields = | 10350 static const int kSizeWithInternalFields = |
10347 kSize + v8::ArrayBufferView::kInternalFieldCount * kPointerSize; | 10351 kSize + v8::ArrayBufferView::kInternalFieldCount * kPointerSize; |
(...skipping 735 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11083 } else { | 11087 } else { |
11084 value &= ~(1 << bit_position); | 11088 value &= ~(1 << bit_position); |
11085 } | 11089 } |
11086 return value; | 11090 return value; |
11087 } | 11091 } |
11088 }; | 11092 }; |
11089 | 11093 |
11090 } } // namespace v8::internal | 11094 } } // namespace v8::internal |
11091 | 11095 |
11092 #endif // V8_OBJECTS_H_ | 11096 #endif // V8_OBJECTS_H_ |
OLD | NEW |