OLD | NEW |
1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 // - JSArray | 45 // - JSArray |
46 // - JSRegExp | 46 // - JSRegExp |
47 // - JSFunction | 47 // - JSFunction |
48 // - GlobalObject | 48 // - GlobalObject |
49 // - JSGlobalObject | 49 // - JSGlobalObject |
50 // - JSBuiltinsObject | 50 // - JSBuiltinsObject |
51 // - JSGlobalProxy | 51 // - JSGlobalProxy |
52 // - JSValue | 52 // - JSValue |
53 // - Array | 53 // - Array |
54 // - ByteArray | 54 // - ByteArray |
| 55 // - PixelArray |
55 // - FixedArray | 56 // - FixedArray |
56 // - DescriptorArray | 57 // - DescriptorArray |
57 // - HashTable | 58 // - HashTable |
58 // - Dictionary | 59 // - Dictionary |
59 // - SymbolTable | 60 // - SymbolTable |
60 // - CompilationCacheTable | 61 // - CompilationCacheTable |
61 // - MapCache | 62 // - MapCache |
62 // - Context | 63 // - Context |
63 // - GlobalContext | 64 // - GlobalContext |
64 // - String | 65 // - String |
(...skipping 23 matching lines...) Expand all Loading... |
88 // - SignatureInfo | 89 // - SignatureInfo |
89 // - TypeSwitchInfo | 90 // - TypeSwitchInfo |
90 // - DebugInfo | 91 // - DebugInfo |
91 // - BreakPointInfo | 92 // - BreakPointInfo |
92 // | 93 // |
93 // Formats of Object*: | 94 // Formats of Object*: |
94 // Smi: [31 bit signed int] 0 | 95 // Smi: [31 bit signed int] 0 |
95 // HeapObject: [32 bit direct pointer] (4 byte aligned) | 01 | 96 // HeapObject: [32 bit direct pointer] (4 byte aligned) | 01 |
96 // Failure: [30 bit signed int] 11 | 97 // Failure: [30 bit signed int] 11 |
97 | 98 |
98 | |
99 // Ecma-262 3rd 8.6.1 | 99 // Ecma-262 3rd 8.6.1 |
100 enum PropertyAttributes { | 100 enum PropertyAttributes { |
101 NONE = v8::None, | 101 NONE = v8::None, |
102 READ_ONLY = v8::ReadOnly, | 102 READ_ONLY = v8::ReadOnly, |
103 DONT_ENUM = v8::DontEnum, | 103 DONT_ENUM = v8::DontEnum, |
104 DONT_DELETE = v8::DontDelete, | 104 DONT_DELETE = v8::DontDelete, |
105 ABSENT = 16 // Used in runtime to indicate a property is absent. | 105 ABSENT = 16 // Used in runtime to indicate a property is absent. |
106 // ABSENT can never be stored in or returned from a descriptor's attributes | 106 // ABSENT can never be stored in or returned from a descriptor's attributes |
107 // bitfield. It is only used as a return value meaning the attributes of | 107 // bitfield. It is only used as a return value meaning the attributes of |
108 // a non-existent property. | 108 // a non-existent property. |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
263 V(LONG_PRIVATE_EXTERNAL_ASCII_STRING_TYPE) \ | 263 V(LONG_PRIVATE_EXTERNAL_ASCII_STRING_TYPE) \ |
264 \ | 264 \ |
265 V(MAP_TYPE) \ | 265 V(MAP_TYPE) \ |
266 V(HEAP_NUMBER_TYPE) \ | 266 V(HEAP_NUMBER_TYPE) \ |
267 V(FIXED_ARRAY_TYPE) \ | 267 V(FIXED_ARRAY_TYPE) \ |
268 V(CODE_TYPE) \ | 268 V(CODE_TYPE) \ |
269 V(JS_GLOBAL_PROPERTY_CELL_TYPE) \ | 269 V(JS_GLOBAL_PROPERTY_CELL_TYPE) \ |
270 V(ODDBALL_TYPE) \ | 270 V(ODDBALL_TYPE) \ |
271 V(PROXY_TYPE) \ | 271 V(PROXY_TYPE) \ |
272 V(BYTE_ARRAY_TYPE) \ | 272 V(BYTE_ARRAY_TYPE) \ |
| 273 V(PIXEL_ARRAY_TYPE) \ |
273 V(FILLER_TYPE) \ | 274 V(FILLER_TYPE) \ |
274 \ | 275 \ |
275 V(ACCESSOR_INFO_TYPE) \ | 276 V(ACCESSOR_INFO_TYPE) \ |
276 V(ACCESS_CHECK_INFO_TYPE) \ | 277 V(ACCESS_CHECK_INFO_TYPE) \ |
277 V(INTERCEPTOR_INFO_TYPE) \ | 278 V(INTERCEPTOR_INFO_TYPE) \ |
278 V(SHARED_FUNCTION_INFO_TYPE) \ | 279 V(SHARED_FUNCTION_INFO_TYPE) \ |
279 V(CALL_HANDLER_INFO_TYPE) \ | 280 V(CALL_HANDLER_INFO_TYPE) \ |
280 V(FUNCTION_TEMPLATE_INFO_TYPE) \ | 281 V(FUNCTION_TEMPLATE_INFO_TYPE) \ |
281 V(OBJECT_TEMPLATE_INFO_TYPE) \ | 282 V(OBJECT_TEMPLATE_INFO_TYPE) \ |
282 V(SIGNATURE_INFO_TYPE) \ | 283 V(SIGNATURE_INFO_TYPE) \ |
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
652 LONG_PRIVATE_EXTERNAL_ASCII_STRING_TYPE = LONG_EXTERNAL_ASCII_STRING_TYPE, | 653 LONG_PRIVATE_EXTERNAL_ASCII_STRING_TYPE = LONG_EXTERNAL_ASCII_STRING_TYPE, |
653 | 654 |
654 MAP_TYPE = kNotStringTag, | 655 MAP_TYPE = kNotStringTag, |
655 HEAP_NUMBER_TYPE, | 656 HEAP_NUMBER_TYPE, |
656 FIXED_ARRAY_TYPE, | 657 FIXED_ARRAY_TYPE, |
657 CODE_TYPE, | 658 CODE_TYPE, |
658 ODDBALL_TYPE, | 659 ODDBALL_TYPE, |
659 JS_GLOBAL_PROPERTY_CELL_TYPE, | 660 JS_GLOBAL_PROPERTY_CELL_TYPE, |
660 PROXY_TYPE, | 661 PROXY_TYPE, |
661 BYTE_ARRAY_TYPE, | 662 BYTE_ARRAY_TYPE, |
| 663 PIXEL_ARRAY_TYPE, |
662 FILLER_TYPE, | 664 FILLER_TYPE, |
663 SMI_TYPE, | 665 SMI_TYPE, |
664 | 666 |
665 ACCESSOR_INFO_TYPE, | 667 ACCESSOR_INFO_TYPE, |
666 ACCESS_CHECK_INFO_TYPE, | 668 ACCESS_CHECK_INFO_TYPE, |
667 INTERCEPTOR_INFO_TYPE, | 669 INTERCEPTOR_INFO_TYPE, |
668 SHARED_FUNCTION_INFO_TYPE, | 670 SHARED_FUNCTION_INFO_TYPE, |
669 CALL_HANDLER_INFO_TYPE, | 671 CALL_HANDLER_INFO_TYPE, |
670 FUNCTION_TEMPLATE_INFO_TYPE, | 672 FUNCTION_TEMPLATE_INFO_TYPE, |
671 OBJECT_TEMPLATE_INFO_TYPE, | 673 OBJECT_TEMPLATE_INFO_TYPE, |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
753 inline bool IsSlicedString(); | 755 inline bool IsSlicedString(); |
754 inline bool IsExternalString(); | 756 inline bool IsExternalString(); |
755 inline bool IsConsString(); | 757 inline bool IsConsString(); |
756 inline bool IsExternalTwoByteString(); | 758 inline bool IsExternalTwoByteString(); |
757 inline bool IsExternalAsciiString(); | 759 inline bool IsExternalAsciiString(); |
758 inline bool IsSeqTwoByteString(); | 760 inline bool IsSeqTwoByteString(); |
759 inline bool IsSeqAsciiString(); | 761 inline bool IsSeqAsciiString(); |
760 | 762 |
761 inline bool IsNumber(); | 763 inline bool IsNumber(); |
762 inline bool IsByteArray(); | 764 inline bool IsByteArray(); |
| 765 inline bool IsPixelArray(); |
763 inline bool IsFailure(); | 766 inline bool IsFailure(); |
764 inline bool IsRetryAfterGC(); | 767 inline bool IsRetryAfterGC(); |
765 inline bool IsOutOfMemoryFailure(); | 768 inline bool IsOutOfMemoryFailure(); |
766 inline bool IsException(); | 769 inline bool IsException(); |
767 inline bool IsJSObject(); | 770 inline bool IsJSObject(); |
768 inline bool IsJSContextExtensionObject(); | 771 inline bool IsJSContextExtensionObject(); |
769 inline bool IsMap(); | 772 inline bool IsMap(); |
770 inline bool IsFixedArray(); | 773 inline bool IsFixedArray(); |
771 inline bool IsDescriptorArray(); | 774 inline bool IsDescriptorArray(); |
772 inline bool IsContext(); | 775 inline bool IsContext(); |
(...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1295 }; | 1298 }; |
1296 | 1299 |
1297 | 1300 |
1298 // The JSObject describes real heap allocated JavaScript objects with | 1301 // The JSObject describes real heap allocated JavaScript objects with |
1299 // properties. | 1302 // properties. |
1300 // Note that the map of JSObject changes during execution to enable inline | 1303 // Note that the map of JSObject changes during execution to enable inline |
1301 // caching. | 1304 // caching. |
1302 class JSObject: public HeapObject { | 1305 class JSObject: public HeapObject { |
1303 public: | 1306 public: |
1304 enum DeleteMode { NORMAL_DELETION, FORCE_DELETION }; | 1307 enum DeleteMode { NORMAL_DELETION, FORCE_DELETION }; |
| 1308 enum ElementsKind { |
| 1309 FAST_ELEMENTS, |
| 1310 DICTIONARY_ELEMENTS, |
| 1311 PIXEL_ELEMENTS |
| 1312 }; |
1305 | 1313 |
1306 // [properties]: Backing storage for properties. | 1314 // [properties]: Backing storage for properties. |
1307 // properties is a FixedArray in the fast case, and a Dictionary in the | 1315 // properties is a FixedArray in the fast case, and a Dictionary in the |
1308 // slow case. | 1316 // slow case. |
1309 DECL_ACCESSORS(properties, FixedArray) // Get and set fast properties. | 1317 DECL_ACCESSORS(properties, FixedArray) // Get and set fast properties. |
1310 inline void initialize_properties(); | 1318 inline void initialize_properties(); |
1311 inline bool HasFastProperties(); | 1319 inline bool HasFastProperties(); |
1312 inline StringDictionary* property_dictionary(); // Gets slow properties. | 1320 inline StringDictionary* property_dictionary(); // Gets slow properties. |
1313 | 1321 |
1314 // [elements]: The elements (properties with names that are integers). | 1322 // [elements]: The elements (properties with names that are integers). |
1315 // elements is a FixedArray in the fast case, and a Dictionary in the slow | 1323 // elements is a FixedArray in the fast case, and a Dictionary in the slow |
1316 // case. | 1324 // case or a PixelArray in a special case. |
1317 DECL_ACCESSORS(elements, FixedArray) // Get and set fast elements. | 1325 DECL_ACCESSORS(elements, Array) // Get and set fast elements. |
1318 inline void initialize_elements(); | 1326 inline void initialize_elements(); |
| 1327 inline ElementsKind GetElementsKind(); |
1319 inline bool HasFastElements(); | 1328 inline bool HasFastElements(); |
| 1329 inline bool HasDictionaryElements(); |
| 1330 inline bool HasPixelElements(); |
1320 inline NumberDictionary* element_dictionary(); // Gets slow elements. | 1331 inline NumberDictionary* element_dictionary(); // Gets slow elements. |
1321 | 1332 |
1322 // Collects elements starting at index 0. | 1333 // Collects elements starting at index 0. |
1323 // Undefined values are placed after non-undefined values. | 1334 // Undefined values are placed after non-undefined values. |
1324 // Returns the number of non-undefined values. | 1335 // Returns the number of non-undefined values. |
1325 Object* PrepareElementsForSort(uint32_t limit); | 1336 Object* PrepareElementsForSort(uint32_t limit); |
1326 // As PrepareElementsForSort, but only on objects where elements is | 1337 // As PrepareElementsForSort, but only on objects where elements is |
1327 // a dictionary, and it will stay a dictionary. | 1338 // a dictionary, and it will stay a dictionary. |
1328 Object* PrepareSlowElementsForSort(uint32_t limit); | 1339 Object* PrepareSlowElementsForSort(uint32_t limit); |
1329 | 1340 |
(...skipping 1103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2433 | 2444 |
2434 // ByteArray headers are not quadword aligned. | 2445 // ByteArray headers are not quadword aligned. |
2435 static const int kHeaderSize = Array::kHeaderSize; | 2446 static const int kHeaderSize = Array::kHeaderSize; |
2436 static const int kAlignedSize = Array::kAlignedSize; | 2447 static const int kAlignedSize = Array::kAlignedSize; |
2437 | 2448 |
2438 private: | 2449 private: |
2439 DISALLOW_IMPLICIT_CONSTRUCTORS(ByteArray); | 2450 DISALLOW_IMPLICIT_CONSTRUCTORS(ByteArray); |
2440 }; | 2451 }; |
2441 | 2452 |
2442 | 2453 |
| 2454 // PixelArray represents a fixed size byte array with special sematics used for |
| 2455 // implementing the CanvasPixelArray object. Please see the specification at: |
| 2456 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-elemen
t.html#canvaspixelarray |
| 2457 // In particular write access clamps the values to 0 or 255 if the value |
| 2458 // used is outside this range. |
| 2459 class PixelArray: public Array { |
| 2460 public: |
| 2461 // [external_pointer]: The pointer to the external memory area backing this |
| 2462 // pixel array. |
| 2463 DECL_ACCESSORS(external_pointer, uint8_t) // Pointer to the data store. |
| 2464 |
| 2465 // Setter and getter. |
| 2466 inline uint8_t get(int index); |
| 2467 inline void set(int index, uint8_t value); |
| 2468 |
| 2469 // This accessor applies the correct conversion from Smi, HeapNumber and |
| 2470 // undefined and clamps the converted value between 0 and 255. |
| 2471 Object* SetValue(uint32_t index, Object* value); |
| 2472 |
| 2473 // Casting. |
| 2474 static inline PixelArray* cast(Object* obj); |
| 2475 |
| 2476 #ifdef DEBUG |
| 2477 void PixelArrayPrint(); |
| 2478 void PixelArrayVerify(); |
| 2479 #endif // DEBUG |
| 2480 |
| 2481 // PixelArray headers are not quadword aligned. |
| 2482 static const int kExternalPointerOffset = Array::kAlignedSize; |
| 2483 static const int kHeaderSize = kExternalPointerOffset + kPointerSize; |
| 2484 static const int kAlignedSize = OBJECT_SIZE_ALIGN(kHeaderSize); |
| 2485 |
| 2486 private: |
| 2487 DISALLOW_IMPLICIT_CONSTRUCTORS(PixelArray); |
| 2488 }; |
| 2489 |
| 2490 |
2443 // Code describes objects with on-the-fly generated machine code. | 2491 // Code describes objects with on-the-fly generated machine code. |
2444 class Code: public HeapObject { | 2492 class Code: public HeapObject { |
2445 public: | 2493 public: |
2446 // Opaque data type for encapsulating code flags like kind, inline | 2494 // Opaque data type for encapsulating code flags like kind, inline |
2447 // cache state, and arguments count. | 2495 // cache state, and arguments count. |
2448 enum Flags { }; | 2496 enum Flags { }; |
2449 | 2497 |
2450 enum Kind { | 2498 enum Kind { |
2451 FUNCTION, | 2499 FUNCTION, |
2452 STUB, | 2500 STUB, |
(...skipping 2294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4747 } else { | 4795 } else { |
4748 value &= ~(1 << bit_position); | 4796 value &= ~(1 << bit_position); |
4749 } | 4797 } |
4750 return value; | 4798 return value; |
4751 } | 4799 } |
4752 }; | 4800 }; |
4753 | 4801 |
4754 } } // namespace v8::internal | 4802 } } // namespace v8::internal |
4755 | 4803 |
4756 #endif // V8_OBJECTS_H_ | 4804 #endif // V8_OBJECTS_H_ |
OLD | NEW |