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 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 // - StringTable | 89 // - StringTable |
90 // - CompilationCacheTable | 90 // - CompilationCacheTable |
91 // - CodeCacheHashTable | 91 // - CodeCacheHashTable |
92 // - MapCache | 92 // - MapCache |
93 // - Context | 93 // - Context |
94 // - JSFunctionResultCache | 94 // - JSFunctionResultCache |
95 // - ScopeInfo | 95 // - ScopeInfo |
96 // - TransitionArray | 96 // - TransitionArray |
97 // - FixedDoubleArray | 97 // - FixedDoubleArray |
98 // - ExternalArray | 98 // - ExternalArray |
99 // - ExternalPixelArray | 99 // - ExternalUint8ClampedArray |
100 // - ExternalByteArray | 100 // - ExternalInt8Array |
101 // - ExternalUnsignedByteArray | 101 // - ExternalUint8Array |
102 // - ExternalShortArray | 102 // - ExternalInt16Array |
103 // - ExternalUnsignedShortArray | 103 // - ExternalUint16Array |
104 // - ExternalIntArray | 104 // - ExternalInt32Array |
105 // - ExternalUnsignedIntArray | 105 // - ExternalUint32Array |
106 // - ExternalFloatArray | 106 // - ExternalFloat32Array |
107 // - Name | 107 // - Name |
108 // - String | 108 // - String |
109 // - SeqString | 109 // - SeqString |
110 // - SeqOneByteString | 110 // - SeqOneByteString |
111 // - SeqTwoByteString | 111 // - SeqTwoByteString |
112 // - SlicedString | 112 // - SlicedString |
113 // - ConsString | 113 // - ConsString |
114 // - ExternalString | 114 // - ExternalString |
115 // - ExternalAsciiString | 115 // - ExternalAsciiString |
116 // - ExternalTwoByteString | 116 // - ExternalTwoByteString |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
370 V(CELL_TYPE) \ | 370 V(CELL_TYPE) \ |
371 V(PROPERTY_CELL_TYPE) \ | 371 V(PROPERTY_CELL_TYPE) \ |
372 \ | 372 \ |
373 V(HEAP_NUMBER_TYPE) \ | 373 V(HEAP_NUMBER_TYPE) \ |
374 V(FOREIGN_TYPE) \ | 374 V(FOREIGN_TYPE) \ |
375 V(BYTE_ARRAY_TYPE) \ | 375 V(BYTE_ARRAY_TYPE) \ |
376 V(FREE_SPACE_TYPE) \ | 376 V(FREE_SPACE_TYPE) \ |
377 /* Note: the order of these external array */ \ | 377 /* Note: the order of these external array */ \ |
378 /* types is relied upon in */ \ | 378 /* types is relied upon in */ \ |
379 /* Object::IsExternalArray(). */ \ | 379 /* Object::IsExternalArray(). */ \ |
380 V(EXTERNAL_BYTE_ARRAY_TYPE) \ | 380 V(EXTERNAL_INT8_ARRAY_TYPE) \ |
381 V(EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE) \ | 381 V(EXTERNAL_UINT8_ARRAY_TYPE) \ |
382 V(EXTERNAL_SHORT_ARRAY_TYPE) \ | 382 V(EXTERNAL_INT16_ARRAY_TYPE) \ |
383 V(EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE) \ | 383 V(EXTERNAL_UINT16_ARRAY_TYPE) \ |
384 V(EXTERNAL_INT_ARRAY_TYPE) \ | 384 V(EXTERNAL_INT32_ARRAY_TYPE) \ |
385 V(EXTERNAL_UNSIGNED_INT_ARRAY_TYPE) \ | 385 V(EXTERNAL_UINT32_ARRAY_TYPE) \ |
386 V(EXTERNAL_FLOAT_ARRAY_TYPE) \ | 386 V(EXTERNAL_FLOAT32_ARRAY_TYPE) \ |
387 V(EXTERNAL_DOUBLE_ARRAY_TYPE) \ | 387 V(EXTERNAL_FLOAT64_ARRAY_TYPE) \ |
388 V(EXTERNAL_PIXEL_ARRAY_TYPE) \ | 388 V(EXTERNAL_UINT8_CLAMPED_ARRAY_TYPE) \ |
389 \ | 389 \ |
390 V(FIXED_INT8_ARRAY_TYPE) \ | 390 V(FIXED_INT8_ARRAY_TYPE) \ |
391 V(FIXED_UINT8_ARRAY_TYPE) \ | 391 V(FIXED_UINT8_ARRAY_TYPE) \ |
392 V(FIXED_INT16_ARRAY_TYPE) \ | 392 V(FIXED_INT16_ARRAY_TYPE) \ |
393 V(FIXED_UINT16_ARRAY_TYPE) \ | 393 V(FIXED_UINT16_ARRAY_TYPE) \ |
394 V(FIXED_INT32_ARRAY_TYPE) \ | 394 V(FIXED_INT32_ARRAY_TYPE) \ |
395 V(FIXED_UINT32_ARRAY_TYPE) \ | 395 V(FIXED_UINT32_ARRAY_TYPE) \ |
396 V(FIXED_FLOAT32_ARRAY_TYPE) \ | 396 V(FIXED_FLOAT32_ARRAY_TYPE) \ |
397 V(FIXED_FLOAT64_ARRAY_TYPE) \ | 397 V(FIXED_FLOAT64_ARRAY_TYPE) \ |
398 V(FIXED_UINT8_CLAMPED_ARRAY_TYPE) \ | 398 V(FIXED_UINT8_CLAMPED_ARRAY_TYPE) \ |
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
715 ODDBALL_TYPE, | 715 ODDBALL_TYPE, |
716 CELL_TYPE, | 716 CELL_TYPE, |
717 PROPERTY_CELL_TYPE, | 717 PROPERTY_CELL_TYPE, |
718 | 718 |
719 // "Data", objects that cannot contain non-map-word pointers to heap | 719 // "Data", objects that cannot contain non-map-word pointers to heap |
720 // objects. | 720 // objects. |
721 HEAP_NUMBER_TYPE, | 721 HEAP_NUMBER_TYPE, |
722 FOREIGN_TYPE, | 722 FOREIGN_TYPE, |
723 BYTE_ARRAY_TYPE, | 723 BYTE_ARRAY_TYPE, |
724 FREE_SPACE_TYPE, | 724 FREE_SPACE_TYPE, |
725 EXTERNAL_BYTE_ARRAY_TYPE, // FIRST_EXTERNAL_ARRAY_TYPE | 725 |
726 EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE, | 726 EXTERNAL_INT8_ARRAY_TYPE, // FIRST_EXTERNAL_ARRAY_TYPE |
727 EXTERNAL_SHORT_ARRAY_TYPE, | 727 EXTERNAL_UINT8_ARRAY_TYPE, |
728 EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE, | 728 EXTERNAL_INT16_ARRAY_TYPE, |
729 EXTERNAL_INT_ARRAY_TYPE, | 729 EXTERNAL_UINT16_ARRAY_TYPE, |
730 EXTERNAL_UNSIGNED_INT_ARRAY_TYPE, | 730 EXTERNAL_INT32_ARRAY_TYPE, |
731 EXTERNAL_FLOAT_ARRAY_TYPE, | 731 EXTERNAL_UINT32_ARRAY_TYPE, |
732 EXTERNAL_DOUBLE_ARRAY_TYPE, | 732 EXTERNAL_FLOAT32_ARRAY_TYPE, |
733 EXTERNAL_PIXEL_ARRAY_TYPE, // LAST_EXTERNAL_ARRAY_TYPE | 733 EXTERNAL_FLOAT64_ARRAY_TYPE, |
| 734 EXTERNAL_UINT8_CLAMPED_ARRAY_TYPE, // LAST_EXTERNAL_ARRAY_TYPE |
734 | 735 |
735 FIXED_INT8_ARRAY_TYPE, // FIRST_FIXED_TYPED_ARRAY_TYPE | 736 FIXED_INT8_ARRAY_TYPE, // FIRST_FIXED_TYPED_ARRAY_TYPE |
736 FIXED_UINT8_ARRAY_TYPE, | 737 FIXED_UINT8_ARRAY_TYPE, |
737 FIXED_INT16_ARRAY_TYPE, | 738 FIXED_INT16_ARRAY_TYPE, |
738 FIXED_UINT16_ARRAY_TYPE, | 739 FIXED_UINT16_ARRAY_TYPE, |
739 FIXED_INT32_ARRAY_TYPE, | 740 FIXED_INT32_ARRAY_TYPE, |
740 FIXED_UINT32_ARRAY_TYPE, | 741 FIXED_UINT32_ARRAY_TYPE, |
741 FIXED_FLOAT32_ARRAY_TYPE, | 742 FIXED_FLOAT32_ARRAY_TYPE, |
742 FIXED_FLOAT64_ARRAY_TYPE, | 743 FIXED_FLOAT64_ARRAY_TYPE, |
743 FIXED_UINT8_CLAMPED_ARRAY_TYPE, // LAST_FIXED_TYPED_ARRAY_TYPE | 744 FIXED_UINT8_CLAMPED_ARRAY_TYPE, // LAST_FIXED_TYPED_ARRAY_TYPE |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
810 | 811 |
811 // Pseudo-types | 812 // Pseudo-types |
812 FIRST_TYPE = 0x0, | 813 FIRST_TYPE = 0x0, |
813 LAST_TYPE = JS_FUNCTION_TYPE, | 814 LAST_TYPE = JS_FUNCTION_TYPE, |
814 FIRST_NAME_TYPE = FIRST_TYPE, | 815 FIRST_NAME_TYPE = FIRST_TYPE, |
815 LAST_NAME_TYPE = SYMBOL_TYPE, | 816 LAST_NAME_TYPE = SYMBOL_TYPE, |
816 FIRST_UNIQUE_NAME_TYPE = INTERNALIZED_STRING_TYPE, | 817 FIRST_UNIQUE_NAME_TYPE = INTERNALIZED_STRING_TYPE, |
817 LAST_UNIQUE_NAME_TYPE = SYMBOL_TYPE, | 818 LAST_UNIQUE_NAME_TYPE = SYMBOL_TYPE, |
818 FIRST_NONSTRING_TYPE = SYMBOL_TYPE, | 819 FIRST_NONSTRING_TYPE = SYMBOL_TYPE, |
819 // Boundaries for testing for an external array. | 820 // Boundaries for testing for an external array. |
820 FIRST_EXTERNAL_ARRAY_TYPE = EXTERNAL_BYTE_ARRAY_TYPE, | 821 FIRST_EXTERNAL_ARRAY_TYPE = EXTERNAL_INT8_ARRAY_TYPE, |
821 LAST_EXTERNAL_ARRAY_TYPE = EXTERNAL_PIXEL_ARRAY_TYPE, | 822 LAST_EXTERNAL_ARRAY_TYPE = EXTERNAL_UINT8_CLAMPED_ARRAY_TYPE, |
822 // Boundaries for testing for a fixed typed array. | 823 // Boundaries for testing for a fixed typed array. |
823 FIRST_FIXED_TYPED_ARRAY_TYPE = FIXED_INT8_ARRAY_TYPE, | 824 FIRST_FIXED_TYPED_ARRAY_TYPE = FIXED_INT8_ARRAY_TYPE, |
824 LAST_FIXED_TYPED_ARRAY_TYPE = FIXED_UINT8_CLAMPED_ARRAY_TYPE, | 825 LAST_FIXED_TYPED_ARRAY_TYPE = FIXED_UINT8_CLAMPED_ARRAY_TYPE, |
825 // Boundary for promotion to old data space/old pointer space. | 826 // Boundary for promotion to old data space/old pointer space. |
826 LAST_DATA_TYPE = FILLER_TYPE, | 827 LAST_DATA_TYPE = FILLER_TYPE, |
827 // Boundary for objects represented as JSReceiver (i.e. JSObject or JSProxy). | 828 // Boundary for objects represented as JSReceiver (i.e. JSObject or JSProxy). |
828 // Note that there is no range for JSObject or JSProxy, since their subtypes | 829 // Note that there is no range for JSObject or JSProxy, since their subtypes |
829 // are not continuous in this enum! The enum ranges instead reflect the | 830 // are not continuous in this enum! The enum ranges instead reflect the |
830 // external class names, where proxies are treated as either ordinary objects, | 831 // external class names, where proxies are treated as either ordinary objects, |
831 // or functions. | 832 // or functions. |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
998 V(ConsString) \ | 999 V(ConsString) \ |
999 V(SlicedString) \ | 1000 V(SlicedString) \ |
1000 V(ExternalTwoByteString) \ | 1001 V(ExternalTwoByteString) \ |
1001 V(ExternalAsciiString) \ | 1002 V(ExternalAsciiString) \ |
1002 V(SeqTwoByteString) \ | 1003 V(SeqTwoByteString) \ |
1003 V(SeqOneByteString) \ | 1004 V(SeqOneByteString) \ |
1004 V(InternalizedString) \ | 1005 V(InternalizedString) \ |
1005 V(Symbol) \ | 1006 V(Symbol) \ |
1006 \ | 1007 \ |
1007 V(ExternalArray) \ | 1008 V(ExternalArray) \ |
1008 V(ExternalByteArray) \ | 1009 V(ExternalInt8Array) \ |
1009 V(ExternalUnsignedByteArray) \ | 1010 V(ExternalUint8Array) \ |
1010 V(ExternalShortArray) \ | 1011 V(ExternalInt16Array) \ |
1011 V(ExternalUnsignedShortArray) \ | 1012 V(ExternalUint16Array) \ |
1012 V(ExternalIntArray) \ | 1013 V(ExternalInt32Array) \ |
1013 V(ExternalUnsignedIntArray) \ | 1014 V(ExternalUint32Array) \ |
1014 V(ExternalFloatArray) \ | 1015 V(ExternalFloat32Array) \ |
1015 V(ExternalDoubleArray) \ | 1016 V(ExternalFloat64Array) \ |
1016 V(ExternalPixelArray) \ | 1017 V(ExternalUint8ClampedArray) \ |
1017 V(FixedTypedArrayBase) \ | 1018 V(FixedTypedArrayBase) \ |
1018 V(FixedUint8Array) \ | 1019 V(FixedUint8Array) \ |
1019 V(FixedInt8Array) \ | 1020 V(FixedInt8Array) \ |
1020 V(FixedUint16Array) \ | 1021 V(FixedUint16Array) \ |
1021 V(FixedInt16Array) \ | 1022 V(FixedInt16Array) \ |
1022 V(FixedUint32Array) \ | 1023 V(FixedUint32Array) \ |
1023 V(FixedInt32Array) \ | 1024 V(FixedInt32Array) \ |
1024 V(FixedFloat32Array) \ | 1025 V(FixedFloat32Array) \ |
1025 V(FixedFloat64Array) \ | 1026 V(FixedFloat64Array) \ |
1026 V(FixedUint8ClampedArray) \ | 1027 V(FixedUint8ClampedArray) \ |
(...skipping 1109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2136 inline bool HasFastElements(); | 2137 inline bool HasFastElements(); |
2137 // Returns true if an object has elements of FAST_DOUBLE_ELEMENTS | 2138 // Returns true if an object has elements of FAST_DOUBLE_ELEMENTS |
2138 // ElementsKind. | 2139 // ElementsKind. |
2139 inline bool HasFastDoubleElements(); | 2140 inline bool HasFastDoubleElements(); |
2140 // Returns true if an object has elements of FAST_HOLEY_*_ELEMENTS | 2141 // Returns true if an object has elements of FAST_HOLEY_*_ELEMENTS |
2141 // ElementsKind. | 2142 // ElementsKind. |
2142 inline bool HasFastHoleyElements(); | 2143 inline bool HasFastHoleyElements(); |
2143 inline bool HasNonStrictArgumentsElements(); | 2144 inline bool HasNonStrictArgumentsElements(); |
2144 inline bool HasDictionaryElements(); | 2145 inline bool HasDictionaryElements(); |
2145 | 2146 |
2146 inline bool HasExternalPixelElements(); | 2147 inline bool HasExternalUint8ClampedElements(); |
2147 inline bool HasExternalArrayElements(); | 2148 inline bool HasExternalArrayElements(); |
2148 inline bool HasExternalByteElements(); | 2149 inline bool HasExternalInt8Elements(); |
2149 inline bool HasExternalUnsignedByteElements(); | 2150 inline bool HasExternalUint8Elements(); |
2150 inline bool HasExternalShortElements(); | 2151 inline bool HasExternalInt16Elements(); |
2151 inline bool HasExternalUnsignedShortElements(); | 2152 inline bool HasExternalUint16Elements(); |
2152 inline bool HasExternalIntElements(); | 2153 inline bool HasExternalInt32Elements(); |
2153 inline bool HasExternalUnsignedIntElements(); | 2154 inline bool HasExternalUint32Elements(); |
2154 inline bool HasExternalFloatElements(); | 2155 inline bool HasExternalFloat32Elements(); |
2155 inline bool HasExternalDoubleElements(); | 2156 inline bool HasExternalFloat64Elements(); |
2156 | 2157 |
2157 inline bool HasFixedTypedArrayElements(); | 2158 inline bool HasFixedTypedArrayElements(); |
2158 | 2159 |
2159 bool HasFastArgumentsElements(); | 2160 bool HasFastArgumentsElements(); |
2160 bool HasDictionaryArgumentsElements(); | 2161 bool HasDictionaryArgumentsElements(); |
2161 inline SeededNumberDictionary* element_dictionary(); // Gets slow elements. | 2162 inline SeededNumberDictionary* element_dictionary(); // Gets slow elements. |
2162 | 2163 |
2163 inline void set_map_and_elements( | 2164 inline void set_map_and_elements( |
2164 Map* map, | 2165 Map* map, |
2165 FixedArrayBase* value, | 2166 FixedArrayBase* value, |
(...skipping 2395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4561 static const int kSizeOffset = HeapObject::kHeaderSize; | 4562 static const int kSizeOffset = HeapObject::kHeaderSize; |
4562 static const int kHeaderSize = kSizeOffset + kPointerSize; | 4563 static const int kHeaderSize = kSizeOffset + kPointerSize; |
4563 | 4564 |
4564 static const int kAlignedSize = OBJECT_POINTER_ALIGN(kHeaderSize); | 4565 static const int kAlignedSize = OBJECT_POINTER_ALIGN(kHeaderSize); |
4565 | 4566 |
4566 private: | 4567 private: |
4567 DISALLOW_IMPLICIT_CONSTRUCTORS(FreeSpace); | 4568 DISALLOW_IMPLICIT_CONSTRUCTORS(FreeSpace); |
4568 }; | 4569 }; |
4569 | 4570 |
4570 | 4571 |
| 4572 // V has parameters (Type, type, TYPE, C type, element_size) |
| 4573 #define TYPED_ARRAYS(V) \ |
| 4574 V(Uint8, uint8, UINT8, uint8_t, 1) \ |
| 4575 V(Int8, int8, INT8, int8_t, 1) \ |
| 4576 V(Uint16, uint16, UINT16, uint16_t, 2) \ |
| 4577 V(Int16, int16, INT16, int16_t, 2) \ |
| 4578 V(Uint32, uint32, UINT32, uint32_t, 4) \ |
| 4579 V(Int32, int32, INT32, int32_t, 4) \ |
| 4580 V(Float32, float32, FLOAT32, float, 4) \ |
| 4581 V(Float64, float64, FLOAT64, double, 8) \ |
| 4582 V(Uint8Clamped, uint8_clamped, UINT8_CLAMPED, uint8_t, 1) |
| 4583 |
| 4584 |
| 4585 |
4571 // An ExternalArray represents a fixed-size array of primitive values | 4586 // An ExternalArray represents a fixed-size array of primitive values |
4572 // which live outside the JavaScript heap. Its subclasses are used to | 4587 // which live outside the JavaScript heap. Its subclasses are used to |
4573 // implement the CanvasArray types being defined in the WebGL | 4588 // implement the CanvasArray types being defined in the WebGL |
4574 // specification. As of this writing the first public draft is not yet | 4589 // specification. As of this writing the first public draft is not yet |
4575 // available, but Khronos members can access the draft at: | 4590 // available, but Khronos members can access the draft at: |
4576 // https://cvs.khronos.org/svn/repos/3dweb/trunk/doc/spec/WebGL-spec.html | 4591 // https://cvs.khronos.org/svn/repos/3dweb/trunk/doc/spec/WebGL-spec.html |
4577 // | 4592 // |
4578 // The semantics of these arrays differ from CanvasPixelArray. | 4593 // The semantics of these arrays differ from CanvasPixelArray. |
4579 // Out-of-range values passed to the setter are converted via a C | 4594 // Out-of-range values passed to the setter are converted via a C |
4580 // cast, not clamping. Out-of-range indices cause exceptions to be | 4595 // cast, not clamping. Out-of-range indices cause exceptions to be |
(...skipping 16 matching lines...) Expand all Loading... |
4597 static const int kExternalPointerOffset = | 4612 static const int kExternalPointerOffset = |
4598 POINTER_SIZE_ALIGN(FixedArrayBase::kLengthOffset + kPointerSize); | 4613 POINTER_SIZE_ALIGN(FixedArrayBase::kLengthOffset + kPointerSize); |
4599 static const int kHeaderSize = kExternalPointerOffset + kPointerSize; | 4614 static const int kHeaderSize = kExternalPointerOffset + kPointerSize; |
4600 static const int kAlignedSize = OBJECT_POINTER_ALIGN(kHeaderSize); | 4615 static const int kAlignedSize = OBJECT_POINTER_ALIGN(kHeaderSize); |
4601 | 4616 |
4602 private: | 4617 private: |
4603 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalArray); | 4618 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalArray); |
4604 }; | 4619 }; |
4605 | 4620 |
4606 | 4621 |
4607 // A ExternalPixelArray represents a fixed-size byte array with special | 4622 // A ExternalUint8ClampedArray represents a fixed-size byte array with special |
4608 // semantics used for implementing the CanvasPixelArray object. Please see the | 4623 // semantics used for implementing the CanvasPixelArray object. Please see the |
4609 // specification at: | 4624 // specification at: |
4610 | 4625 |
4611 // http://www.whatwg.org/specs/web-apps/current-work/ | 4626 // http://www.whatwg.org/specs/web-apps/current-work/ |
4612 // multipage/the-canvas-element.html#canvaspixelarray | 4627 // multipage/the-canvas-element.html#canvaspixelarray |
4613 // In particular, write access clamps the value written to 0 or 255 if the | 4628 // In particular, write access clamps the value written to 0 or 255 if the |
4614 // value written is outside this range. | 4629 // value written is outside this range. |
4615 class ExternalPixelArray: public ExternalArray { | 4630 class ExternalUint8ClampedArray: public ExternalArray { |
4616 public: | 4631 public: |
4617 inline uint8_t* external_pixel_pointer(); | 4632 inline uint8_t* external_uint8_clamped_pointer(); |
4618 | 4633 |
4619 // Setter and getter. | 4634 // Setter and getter. |
4620 inline uint8_t get_scalar(int index); | 4635 inline uint8_t get_scalar(int index); |
4621 MUST_USE_RESULT inline MaybeObject* get(int index); | 4636 MUST_USE_RESULT inline MaybeObject* get(int index); |
4622 inline void set(int index, uint8_t value); | 4637 inline void set(int index, uint8_t value); |
4623 | 4638 |
4624 // This accessor applies the correct conversion from Smi, HeapNumber and | 4639 // This accessor applies the correct conversion from Smi, HeapNumber and |
4625 // undefined and clamps the converted value between 0 and 255. | 4640 // undefined and clamps the converted value between 0 and 255. |
4626 Object* SetValue(uint32_t index, Object* value); | 4641 Object* SetValue(uint32_t index, Object* value); |
4627 | 4642 |
| 4643 static Handle<Object> SetValue(Handle<ExternalUint8ClampedArray> array, |
| 4644 uint32_t index, |
| 4645 Handle<Object> value); |
| 4646 |
4628 // Casting. | 4647 // Casting. |
4629 static inline ExternalPixelArray* cast(Object* obj); | 4648 static inline ExternalUint8ClampedArray* cast(Object* obj); |
4630 | 4649 |
4631 // Dispatched behavior. | 4650 // Dispatched behavior. |
4632 DECLARE_PRINTER(ExternalPixelArray) | 4651 DECLARE_PRINTER(ExternalUint8ClampedArray) |
4633 DECLARE_VERIFIER(ExternalPixelArray) | 4652 DECLARE_VERIFIER(ExternalUint8ClampedArray) |
4634 | 4653 |
4635 private: | 4654 private: |
4636 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalPixelArray); | 4655 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUint8ClampedArray); |
4637 }; | 4656 }; |
4638 | 4657 |
4639 | 4658 |
4640 class ExternalByteArray: public ExternalArray { | 4659 class ExternalInt8Array: public ExternalArray { |
4641 public: | 4660 public: |
4642 // Setter and getter. | 4661 // Setter and getter. |
4643 inline int8_t get_scalar(int index); | 4662 inline int8_t get_scalar(int index); |
4644 MUST_USE_RESULT inline MaybeObject* get(int index); | 4663 MUST_USE_RESULT inline MaybeObject* get(int index); |
4645 inline void set(int index, int8_t value); | 4664 inline void set(int index, int8_t value); |
4646 | 4665 |
4647 static Handle<Object> SetValue(Handle<ExternalByteArray> array, | 4666 static Handle<Object> SetValue(Handle<ExternalInt8Array> array, |
4648 uint32_t index, | 4667 uint32_t index, |
4649 Handle<Object> value); | 4668 Handle<Object> value); |
4650 | 4669 |
4651 // This accessor applies the correct conversion from Smi, HeapNumber | 4670 // This accessor applies the correct conversion from Smi, HeapNumber |
4652 // and undefined. | 4671 // and undefined. |
4653 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4672 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4654 | 4673 |
4655 // Casting. | 4674 // Casting. |
4656 static inline ExternalByteArray* cast(Object* obj); | 4675 static inline ExternalInt8Array* cast(Object* obj); |
4657 | 4676 |
4658 // Dispatched behavior. | 4677 // Dispatched behavior. |
4659 DECLARE_PRINTER(ExternalByteArray) | 4678 DECLARE_PRINTER(ExternalInt8Array) |
4660 DECLARE_VERIFIER(ExternalByteArray) | 4679 DECLARE_VERIFIER(ExternalInt8Array) |
4661 | 4680 |
4662 private: | 4681 private: |
4663 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalByteArray); | 4682 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalInt8Array); |
4664 }; | 4683 }; |
4665 | 4684 |
4666 | 4685 |
4667 class ExternalUnsignedByteArray: public ExternalArray { | 4686 class ExternalUint8Array: public ExternalArray { |
4668 public: | 4687 public: |
4669 // Setter and getter. | 4688 // Setter and getter. |
4670 inline uint8_t get_scalar(int index); | 4689 inline uint8_t get_scalar(int index); |
4671 MUST_USE_RESULT inline MaybeObject* get(int index); | 4690 MUST_USE_RESULT inline MaybeObject* get(int index); |
4672 inline void set(int index, uint8_t value); | 4691 inline void set(int index, uint8_t value); |
4673 | 4692 |
4674 static Handle<Object> SetValue(Handle<ExternalUnsignedByteArray> array, | 4693 static Handle<Object> SetValue(Handle<ExternalUint8Array> array, |
4675 uint32_t index, | 4694 uint32_t index, |
4676 Handle<Object> value); | 4695 Handle<Object> value); |
4677 | 4696 |
4678 // This accessor applies the correct conversion from Smi, HeapNumber | 4697 // This accessor applies the correct conversion from Smi, HeapNumber |
4679 // and undefined. | 4698 // and undefined. |
4680 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4699 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4681 | 4700 |
4682 // Casting. | 4701 // Casting. |
4683 static inline ExternalUnsignedByteArray* cast(Object* obj); | 4702 static inline ExternalUint8Array* cast(Object* obj); |
4684 | 4703 |
4685 // Dispatched behavior. | 4704 // Dispatched behavior. |
4686 DECLARE_PRINTER(ExternalUnsignedByteArray) | 4705 DECLARE_PRINTER(ExternalUint8Array) |
4687 DECLARE_VERIFIER(ExternalUnsignedByteArray) | 4706 DECLARE_VERIFIER(ExternalUint8Array) |
4688 | 4707 |
4689 private: | 4708 private: |
4690 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedByteArray); | 4709 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUint8Array); |
4691 }; | 4710 }; |
4692 | 4711 |
4693 | 4712 |
4694 class ExternalShortArray: public ExternalArray { | 4713 class ExternalInt16Array: public ExternalArray { |
4695 public: | 4714 public: |
4696 // Setter and getter. | 4715 // Setter and getter. |
4697 inline int16_t get_scalar(int index); | 4716 inline int16_t get_scalar(int index); |
4698 MUST_USE_RESULT inline MaybeObject* get(int index); | 4717 MUST_USE_RESULT inline MaybeObject* get(int index); |
4699 inline void set(int index, int16_t value); | 4718 inline void set(int index, int16_t value); |
4700 | 4719 |
4701 static Handle<Object> SetValue(Handle<ExternalShortArray> array, | 4720 static Handle<Object> SetValue(Handle<ExternalInt16Array> array, |
4702 uint32_t index, | 4721 uint32_t index, |
4703 Handle<Object> value); | 4722 Handle<Object> value); |
4704 | 4723 |
4705 // This accessor applies the correct conversion from Smi, HeapNumber | 4724 // This accessor applies the correct conversion from Smi, HeapNumber |
4706 // and undefined. | 4725 // and undefined. |
4707 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4726 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4708 | 4727 |
4709 // Casting. | 4728 // Casting. |
4710 static inline ExternalShortArray* cast(Object* obj); | 4729 static inline ExternalInt16Array* cast(Object* obj); |
4711 | 4730 |
4712 // Dispatched behavior. | 4731 // Dispatched behavior. |
4713 DECLARE_PRINTER(ExternalShortArray) | 4732 DECLARE_PRINTER(ExternalInt16Array) |
4714 DECLARE_VERIFIER(ExternalShortArray) | 4733 DECLARE_VERIFIER(ExternalInt16Array) |
4715 | 4734 |
4716 private: | 4735 private: |
4717 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalShortArray); | 4736 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalInt16Array); |
4718 }; | 4737 }; |
4719 | 4738 |
4720 | 4739 |
4721 class ExternalUnsignedShortArray: public ExternalArray { | 4740 class ExternalUint16Array: public ExternalArray { |
4722 public: | 4741 public: |
4723 // Setter and getter. | 4742 // Setter and getter. |
4724 inline uint16_t get_scalar(int index); | 4743 inline uint16_t get_scalar(int index); |
4725 MUST_USE_RESULT inline MaybeObject* get(int index); | 4744 MUST_USE_RESULT inline MaybeObject* get(int index); |
4726 inline void set(int index, uint16_t value); | 4745 inline void set(int index, uint16_t value); |
4727 | 4746 |
4728 static Handle<Object> SetValue(Handle<ExternalUnsignedShortArray> array, | 4747 static Handle<Object> SetValue(Handle<ExternalUint16Array> array, |
4729 uint32_t index, | 4748 uint32_t index, |
4730 Handle<Object> value); | 4749 Handle<Object> value); |
4731 | 4750 |
4732 // This accessor applies the correct conversion from Smi, HeapNumber | 4751 // This accessor applies the correct conversion from Smi, HeapNumber |
4733 // and undefined. | 4752 // and undefined. |
4734 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4753 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4735 | 4754 |
4736 // Casting. | 4755 // Casting. |
4737 static inline ExternalUnsignedShortArray* cast(Object* obj); | 4756 static inline ExternalUint16Array* cast(Object* obj); |
4738 | 4757 |
4739 // Dispatched behavior. | 4758 // Dispatched behavior. |
4740 DECLARE_PRINTER(ExternalUnsignedShortArray) | 4759 DECLARE_PRINTER(ExternalUint16Array) |
4741 DECLARE_VERIFIER(ExternalUnsignedShortArray) | 4760 DECLARE_VERIFIER(ExternalUint16Array) |
4742 | 4761 |
4743 private: | 4762 private: |
4744 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedShortArray); | 4763 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUint16Array); |
4745 }; | 4764 }; |
4746 | 4765 |
4747 | 4766 |
4748 class ExternalIntArray: public ExternalArray { | 4767 class ExternalInt32Array: public ExternalArray { |
4749 public: | 4768 public: |
4750 // Setter and getter. | 4769 // Setter and getter. |
4751 inline int32_t get_scalar(int index); | 4770 inline int32_t get_scalar(int index); |
4752 MUST_USE_RESULT inline MaybeObject* get(int index); | 4771 MUST_USE_RESULT inline MaybeObject* get(int index); |
4753 inline void set(int index, int32_t value); | 4772 inline void set(int index, int32_t value); |
4754 | 4773 |
4755 static Handle<Object> SetValue(Handle<ExternalIntArray> array, | 4774 static Handle<Object> SetValue(Handle<ExternalInt32Array> array, |
4756 uint32_t index, | 4775 uint32_t index, |
4757 Handle<Object> value); | 4776 Handle<Object> value); |
4758 | 4777 |
4759 // This accessor applies the correct conversion from Smi, HeapNumber | 4778 // This accessor applies the correct conversion from Smi, HeapNumber |
4760 // and undefined. | 4779 // and undefined. |
4761 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4780 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4762 | 4781 |
4763 // Casting. | 4782 // Casting. |
4764 static inline ExternalIntArray* cast(Object* obj); | 4783 static inline ExternalInt32Array* cast(Object* obj); |
4765 | 4784 |
4766 // Dispatched behavior. | 4785 // Dispatched behavior. |
4767 DECLARE_PRINTER(ExternalIntArray) | 4786 DECLARE_PRINTER(ExternalInt32Array) |
4768 DECLARE_VERIFIER(ExternalIntArray) | 4787 DECLARE_VERIFIER(ExternalInt32Array) |
4769 | 4788 |
4770 private: | 4789 private: |
4771 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalIntArray); | 4790 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalInt32Array); |
4772 }; | 4791 }; |
4773 | 4792 |
4774 | 4793 |
4775 class ExternalUnsignedIntArray: public ExternalArray { | 4794 class ExternalUint32Array: public ExternalArray { |
4776 public: | 4795 public: |
4777 // Setter and getter. | 4796 // Setter and getter. |
4778 inline uint32_t get_scalar(int index); | 4797 inline uint32_t get_scalar(int index); |
4779 MUST_USE_RESULT inline MaybeObject* get(int index); | 4798 MUST_USE_RESULT inline MaybeObject* get(int index); |
4780 inline void set(int index, uint32_t value); | 4799 inline void set(int index, uint32_t value); |
4781 | 4800 |
4782 static Handle<Object> SetValue(Handle<ExternalUnsignedIntArray> array, | 4801 static Handle<Object> SetValue(Handle<ExternalUint32Array> array, |
4783 uint32_t index, | 4802 uint32_t index, |
4784 Handle<Object> value); | 4803 Handle<Object> value); |
4785 | 4804 |
4786 // This accessor applies the correct conversion from Smi, HeapNumber | 4805 // This accessor applies the correct conversion from Smi, HeapNumber |
4787 // and undefined. | 4806 // and undefined. |
4788 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4807 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4789 | 4808 |
4790 // Casting. | 4809 // Casting. |
4791 static inline ExternalUnsignedIntArray* cast(Object* obj); | 4810 static inline ExternalUint32Array* cast(Object* obj); |
4792 | 4811 |
4793 // Dispatched behavior. | 4812 // Dispatched behavior. |
4794 DECLARE_PRINTER(ExternalUnsignedIntArray) | 4813 DECLARE_PRINTER(ExternalUint32Array) |
4795 DECLARE_VERIFIER(ExternalUnsignedIntArray) | 4814 DECLARE_VERIFIER(ExternalUint32Array) |
4796 | 4815 |
4797 private: | 4816 private: |
4798 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedIntArray); | 4817 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUint32Array); |
4799 }; | 4818 }; |
4800 | 4819 |
4801 | 4820 |
4802 class ExternalFloatArray: public ExternalArray { | 4821 class ExternalFloat32Array: public ExternalArray { |
4803 public: | 4822 public: |
4804 // Setter and getter. | 4823 // Setter and getter. |
4805 inline float get_scalar(int index); | 4824 inline float get_scalar(int index); |
4806 MUST_USE_RESULT inline MaybeObject* get(int index); | 4825 MUST_USE_RESULT inline MaybeObject* get(int index); |
4807 inline void set(int index, float value); | 4826 inline void set(int index, float value); |
4808 | 4827 |
4809 static Handle<Object> SetValue(Handle<ExternalFloatArray> array, | 4828 static Handle<Object> SetValue(Handle<ExternalFloat32Array> array, |
4810 uint32_t index, | 4829 uint32_t index, |
4811 Handle<Object> value); | 4830 Handle<Object> value); |
4812 | 4831 |
4813 // This accessor applies the correct conversion from Smi, HeapNumber | 4832 // This accessor applies the correct conversion from Smi, HeapNumber |
4814 // and undefined. | 4833 // and undefined. |
4815 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4834 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4816 | 4835 |
4817 // Casting. | 4836 // Casting. |
4818 static inline ExternalFloatArray* cast(Object* obj); | 4837 static inline ExternalFloat32Array* cast(Object* obj); |
4819 | 4838 |
4820 // Dispatched behavior. | 4839 // Dispatched behavior. |
4821 DECLARE_PRINTER(ExternalFloatArray) | 4840 DECLARE_PRINTER(ExternalFloat32Array) |
4822 DECLARE_VERIFIER(ExternalFloatArray) | 4841 DECLARE_VERIFIER(ExternalFloat32Array) |
4823 | 4842 |
4824 private: | 4843 private: |
4825 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloatArray); | 4844 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloat32Array); |
4826 }; | 4845 }; |
4827 | 4846 |
4828 | 4847 |
4829 class ExternalDoubleArray: public ExternalArray { | 4848 class ExternalFloat64Array: public ExternalArray { |
4830 public: | 4849 public: |
4831 // Setter and getter. | 4850 // Setter and getter. |
4832 inline double get_scalar(int index); | 4851 inline double get_scalar(int index); |
4833 MUST_USE_RESULT inline MaybeObject* get(int index); | 4852 MUST_USE_RESULT inline MaybeObject* get(int index); |
4834 inline void set(int index, double value); | 4853 inline void set(int index, double value); |
4835 | 4854 |
4836 static Handle<Object> SetValue(Handle<ExternalDoubleArray> array, | 4855 static Handle<Object> SetValue(Handle<ExternalFloat64Array> array, |
4837 uint32_t index, | 4856 uint32_t index, |
4838 Handle<Object> value); | 4857 Handle<Object> value); |
4839 | 4858 |
4840 // This accessor applies the correct conversion from Smi, HeapNumber | 4859 // This accessor applies the correct conversion from Smi, HeapNumber |
4841 // and undefined. | 4860 // and undefined. |
4842 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4861 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4843 | 4862 |
4844 // Casting. | 4863 // Casting. |
4845 static inline ExternalDoubleArray* cast(Object* obj); | 4864 static inline ExternalFloat64Array* cast(Object* obj); |
4846 | 4865 |
4847 // Dispatched behavior. | 4866 // Dispatched behavior. |
4848 DECLARE_PRINTER(ExternalDoubleArray) | 4867 DECLARE_PRINTER(ExternalFloat64Array) |
4849 DECLARE_VERIFIER(ExternalDoubleArray) | 4868 DECLARE_VERIFIER(ExternalFloat64Array) |
4850 | 4869 |
4851 private: | 4870 private: |
4852 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalDoubleArray); | 4871 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloat64Array); |
4853 }; | 4872 }; |
4854 | 4873 |
4855 | 4874 |
4856 class FixedTypedArrayBase: public FixedArrayBase { | 4875 class FixedTypedArrayBase: public FixedArrayBase { |
4857 public: | 4876 public: |
4858 // Casting: | 4877 // Casting: |
4859 static inline FixedTypedArrayBase* cast(Object* obj); | 4878 static inline FixedTypedArrayBase* cast(Object* obj); |
4860 | 4879 |
4861 static const int kDataOffset = kHeaderSize; | 4880 static const int kDataOffset = kHeaderSize; |
4862 | 4881 |
(...skipping 29 matching lines...) Expand all Loading... |
4892 uint32_t index, | 4911 uint32_t index, |
4893 Handle<Object> value); | 4912 Handle<Object> value); |
4894 | 4913 |
4895 DECLARE_PRINTER(FixedTypedArray) | 4914 DECLARE_PRINTER(FixedTypedArray) |
4896 DECLARE_VERIFIER(FixedTypedArray) | 4915 DECLARE_VERIFIER(FixedTypedArray) |
4897 | 4916 |
4898 private: | 4917 private: |
4899 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedTypedArray); | 4918 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedTypedArray); |
4900 }; | 4919 }; |
4901 | 4920 |
4902 #define FIXED_TYPED_ARRAY_TRAITS(Type, type, TYPE, elementType) \ | 4921 #define FIXED_TYPED_ARRAY_TRAITS(Type, type, TYPE, elementType, size) \ |
4903 class Type##ArrayTraits { \ | 4922 class Type##ArrayTraits { \ |
4904 public: \ | 4923 public: \ |
4905 typedef elementType ElementType; \ | 4924 typedef elementType ElementType; \ |
4906 static const InstanceType kInstanceType = FIXED_##TYPE##_ARRAY_TYPE; \ | 4925 static const InstanceType kInstanceType = FIXED_##TYPE##_ARRAY_TYPE; \ |
4907 static const char* Designator() { return #type " array"; } \ | 4926 static const char* Designator() { return #type " array"; } \ |
4908 static inline MaybeObject* ToObject(Heap* heap, elementType scalar); \ | 4927 static inline MaybeObject* ToObject(Heap* heap, elementType scalar); \ |
4909 static elementType defaultValue() { return 0; } \ | 4928 static elementType defaultValue() { return 0; } \ |
4910 }; \ | 4929 }; \ |
4911 \ | 4930 \ |
4912 typedef FixedTypedArray<Type##ArrayTraits> Fixed##Type##Array; | 4931 typedef FixedTypedArray<Type##ArrayTraits> Fixed##Type##Array; |
4913 | 4932 |
4914 FIXED_TYPED_ARRAY_TRAITS(Uint8, uint8, UINT8, uint8_t) | 4933 TYPED_ARRAYS(FIXED_TYPED_ARRAY_TRAITS) |
4915 FIXED_TYPED_ARRAY_TRAITS(Int8, int8, INT8, int8_t) | |
4916 FIXED_TYPED_ARRAY_TRAITS(Uint16, uint16, UINT16, uint16_t) | |
4917 FIXED_TYPED_ARRAY_TRAITS(Int16, int16, INT16, int16_t) | |
4918 FIXED_TYPED_ARRAY_TRAITS(Uint32, uint32, UINT32, uint32_t) | |
4919 FIXED_TYPED_ARRAY_TRAITS(Int32, int32, INT32, int32_t) | |
4920 FIXED_TYPED_ARRAY_TRAITS(Float32, float32, FLOAT32, float) | |
4921 FIXED_TYPED_ARRAY_TRAITS(Float64, float64, FLOAT64, double) | |
4922 FIXED_TYPED_ARRAY_TRAITS(Uint8Clamped, uint8_clamped, UINT8_CLAMPED, uint8_t) | |
4923 | 4934 |
4924 #undef FIXED_TYPED_ARRAY_TRAITS | 4935 #undef FIXED_TYPED_ARRAY_TRAITS |
4925 | 4936 |
4926 // DeoptimizationInputData is a fixed array used to hold the deoptimization | 4937 // DeoptimizationInputData is a fixed array used to hold the deoptimization |
4927 // data for code generated by the Hydrogen/Lithium compiler. It also | 4938 // data for code generated by the Hydrogen/Lithium compiler. It also |
4928 // contains information about functions that were inlined. If N different | 4939 // contains information about functions that were inlined. If N different |
4929 // functions were inlined then first N elements of the literal array will | 4940 // functions were inlined then first N elements of the literal array will |
4930 // contain these functions. | 4941 // contain these functions. |
4931 // | 4942 // |
4932 // It can be empty. | 4943 // It can be empty. |
(...skipping 5823 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10756 } else { | 10767 } else { |
10757 value &= ~(1 << bit_position); | 10768 value &= ~(1 << bit_position); |
10758 } | 10769 } |
10759 return value; | 10770 return value; |
10760 } | 10771 } |
10761 }; | 10772 }; |
10762 | 10773 |
10763 } } // namespace v8::internal | 10774 } } // namespace v8::internal |
10764 | 10775 |
10765 #endif // V8_OBJECTS_H_ | 10776 #endif // V8_OBJECTS_H_ |
OLD | NEW |