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 2321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2332 // Computes the new capacity when expanding the elements of a JSObject. | 2332 // Computes the new capacity when expanding the elements of a JSObject. |
2333 static int NewElementsCapacity(int old_capacity) { | 2333 static int NewElementsCapacity(int old_capacity) { |
2334 // (old_capacity + 50%) + 16 | 2334 // (old_capacity + 50%) + 16 |
2335 return old_capacity + (old_capacity >> 1) + 16; | 2335 return old_capacity + (old_capacity >> 1) + 16; |
2336 } | 2336 } |
2337 | 2337 |
2338 // These methods do not perform access checks! | 2338 // These methods do not perform access checks! |
2339 AccessorPair* GetLocalPropertyAccessorPair(Name* name); | 2339 AccessorPair* GetLocalPropertyAccessorPair(Name* name); |
2340 AccessorPair* GetLocalElementAccessorPair(uint32_t index); | 2340 AccessorPair* GetLocalElementAccessorPair(uint32_t index); |
2341 | 2341 |
2342 MUST_USE_RESULT MaybeObject* SetFastElement(uint32_t index, | 2342 static Handle<Object> SetFastElement(Handle<JSObject> object, uint32_t index, |
2343 Object* value, | 2343 Handle<Object> value, |
2344 StrictModeFlag strict_mode, | 2344 StrictModeFlag strict_mode, |
2345 bool check_prototype); | 2345 bool check_prototype); |
2346 | |
2347 MUST_USE_RESULT MaybeObject* SetDictionaryElement( | |
2348 uint32_t index, | |
2349 Object* value, | |
2350 PropertyAttributes attributes, | |
2351 StrictModeFlag strict_mode, | |
2352 bool check_prototype, | |
2353 SetPropertyMode set_mode = SET_PROPERTY); | |
2354 | |
2355 MUST_USE_RESULT MaybeObject* SetFastDoubleElement( | |
2356 uint32_t index, | |
2357 Object* value, | |
2358 StrictModeFlag strict_mode, | |
2359 bool check_prototype = true); | |
2360 | 2346 |
2361 static Handle<Object> SetOwnElement(Handle<JSObject> object, | 2347 static Handle<Object> SetOwnElement(Handle<JSObject> object, |
2362 uint32_t index, | 2348 uint32_t index, |
2363 Handle<Object> value, | 2349 Handle<Object> value, |
2364 StrictModeFlag strict_mode); | 2350 StrictModeFlag strict_mode); |
2365 | 2351 |
2366 // Empty handle is returned if the element cannot be set to the given value. | 2352 // Empty handle is returned if the element cannot be set to the given value. |
2367 static Handle<Object> SetElement( | 2353 static Handle<Object> SetElement( |
2368 Handle<JSObject> object, | 2354 Handle<JSObject> object, |
2369 uint32_t index, | 2355 uint32_t index, |
2370 Handle<Object> value, | 2356 Handle<Object> value, |
2371 PropertyAttributes attr, | |
2372 StrictModeFlag strict_mode, | |
2373 bool check_prototype = true, | |
2374 SetPropertyMode set_mode = SET_PROPERTY); | |
2375 | |
2376 // A Failure object is returned if GC is needed. | |
2377 MUST_USE_RESULT MaybeObject* SetElement( | |
2378 uint32_t index, | |
2379 Object* value, | |
2380 PropertyAttributes attributes, | 2357 PropertyAttributes attributes, |
2381 StrictModeFlag strict_mode, | 2358 StrictModeFlag strict_mode, |
2382 bool check_prototype = true, | 2359 bool check_prototype = true, |
2383 SetPropertyMode set_mode = SET_PROPERTY); | 2360 SetPropertyMode set_mode = SET_PROPERTY); |
2384 | 2361 |
2385 // Returns the index'th element. | 2362 // Returns the index'th element. |
2386 // The undefined object if index is out of bounds. | 2363 // The undefined object if index is out of bounds. |
2387 MUST_USE_RESULT MaybeObject* GetElementWithInterceptor(Object* receiver, | 2364 MUST_USE_RESULT MaybeObject* GetElementWithInterceptor(Object* receiver, |
2388 uint32_t index); | 2365 uint32_t index); |
2389 | 2366 |
2390 enum SetFastElementsCapacitySmiMode { | 2367 enum SetFastElementsCapacitySmiMode { |
2391 kAllowSmiElements, | 2368 kAllowSmiElements, |
2392 kForceSmiElements, | 2369 kForceSmiElements, |
2393 kDontAllowSmiElements | 2370 kDontAllowSmiElements |
2394 }; | 2371 }; |
2395 | 2372 |
| 2373 static Handle<FixedArray> SetFastElementsCapacityAndLength( |
| 2374 Handle<JSObject> object, |
| 2375 int capacity, |
| 2376 int length, |
| 2377 SetFastElementsCapacitySmiMode smi_mode); |
2396 // Replace the elements' backing store with fast elements of the given | 2378 // Replace the elements' backing store with fast elements of the given |
2397 // capacity. Update the length for JSArrays. Returns the new backing | 2379 // capacity. Update the length for JSArrays. Returns the new backing |
2398 // store. | 2380 // store. |
2399 MUST_USE_RESULT MaybeObject* SetFastElementsCapacityAndLength( | 2381 MUST_USE_RESULT MaybeObject* SetFastElementsCapacityAndLength( |
2400 int capacity, | 2382 int capacity, |
2401 int length, | 2383 int length, |
2402 SetFastElementsCapacitySmiMode smi_mode); | 2384 SetFastElementsCapacitySmiMode smi_mode); |
| 2385 static void SetFastDoubleElementsCapacityAndLength( |
| 2386 Handle<JSObject> object, |
| 2387 int capacity, |
| 2388 int length); |
2403 MUST_USE_RESULT MaybeObject* SetFastDoubleElementsCapacityAndLength( | 2389 MUST_USE_RESULT MaybeObject* SetFastDoubleElementsCapacityAndLength( |
2404 int capacity, | 2390 int capacity, |
2405 int length); | 2391 int length); |
2406 | 2392 |
2407 // Lookup interceptors are used for handling properties controlled by host | 2393 // Lookup interceptors are used for handling properties controlled by host |
2408 // objects. | 2394 // objects. |
2409 inline bool HasNamedInterceptor(); | 2395 inline bool HasNamedInterceptor(); |
2410 inline bool HasIndexedInterceptor(); | 2396 inline bool HasIndexedInterceptor(); |
2411 | 2397 |
2412 // Support functions for v8 api (needed for correct interceptor behavior). | 2398 // Support functions for v8 api (needed for correct interceptor behavior). |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2462 inline MUST_USE_RESULT MaybeObject* GetElementsTransitionMap( | 2448 inline MUST_USE_RESULT MaybeObject* GetElementsTransitionMap( |
2463 Isolate* isolate, | 2449 Isolate* isolate, |
2464 ElementsKind elements_kind); | 2450 ElementsKind elements_kind); |
2465 MUST_USE_RESULT MaybeObject* GetElementsTransitionMapSlow( | 2451 MUST_USE_RESULT MaybeObject* GetElementsTransitionMapSlow( |
2466 ElementsKind elements_kind); | 2452 ElementsKind elements_kind); |
2467 | 2453 |
2468 static void TransitionElementsKind(Handle<JSObject> object, | 2454 static void TransitionElementsKind(Handle<JSObject> object, |
2469 ElementsKind to_kind); | 2455 ElementsKind to_kind); |
2470 | 2456 |
2471 MUST_USE_RESULT MaybeObject* TransitionElementsKind(ElementsKind to_kind); | 2457 MUST_USE_RESULT MaybeObject* TransitionElementsKind(ElementsKind to_kind); |
2472 MUST_USE_RESULT MaybeObject* UpdateAllocationSite(ElementsKind to_kind); | |
2473 | 2458 |
2474 // TODO(mstarzinger): Both public because of ConvertAnsSetLocalProperty(). | 2459 // TODO(mstarzinger): Both public because of ConvertAnsSetLocalProperty(). |
2475 static void MigrateToMap(Handle<JSObject> object, Handle<Map> new_map); | 2460 static void MigrateToMap(Handle<JSObject> object, Handle<Map> new_map); |
2476 static void GeneralizeFieldRepresentation(Handle<JSObject> object, | 2461 static void GeneralizeFieldRepresentation(Handle<JSObject> object, |
2477 int modify_index, | 2462 int modify_index, |
2478 Representation new_representation, | 2463 Representation new_representation, |
2479 StoreMode store_mode); | 2464 StoreMode store_mode); |
2480 | 2465 |
2481 // Convert the object to use the canonical dictionary | 2466 // Convert the object to use the canonical dictionary |
2482 // representation. If the object is expected to have additional properties | 2467 // representation. If the object is expected to have additional properties |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2653 Handle<Object> old_value); | 2638 Handle<Object> old_value); |
2654 | 2639 |
2655 // Deliver change records to observers. May cause GC. | 2640 // Deliver change records to observers. May cause GC. |
2656 static void DeliverChangeRecords(Isolate* isolate); | 2641 static void DeliverChangeRecords(Isolate* isolate); |
2657 | 2642 |
2658 private: | 2643 private: |
2659 friend class DictionaryElementsAccessor; | 2644 friend class DictionaryElementsAccessor; |
2660 friend class JSReceiver; | 2645 friend class JSReceiver; |
2661 friend class Object; | 2646 friend class Object; |
2662 | 2647 |
| 2648 static void UpdateAllocationSite(Handle<JSObject> object, |
| 2649 ElementsKind to_kind); |
| 2650 MUST_USE_RESULT MaybeObject* UpdateAllocationSite(ElementsKind to_kind); |
| 2651 |
2663 // Used from Object::GetProperty(). | 2652 // Used from Object::GetProperty(). |
2664 static Handle<Object> GetPropertyWithFailedAccessCheck( | 2653 static Handle<Object> GetPropertyWithFailedAccessCheck( |
2665 Handle<JSObject> object, | 2654 Handle<JSObject> object, |
2666 Handle<Object> receiver, | 2655 Handle<Object> receiver, |
2667 LookupResult* result, | 2656 LookupResult* result, |
2668 Handle<Name> name, | 2657 Handle<Name> name, |
2669 PropertyAttributes* attributes); | 2658 PropertyAttributes* attributes); |
2670 | 2659 |
2671 MUST_USE_RESULT MaybeObject* GetElementWithCallback(Object* receiver, | 2660 MUST_USE_RESULT MaybeObject* GetElementWithCallback(Object* receiver, |
2672 Object* structure, | 2661 Object* structure, |
2673 uint32_t index, | 2662 uint32_t index, |
2674 Object* holder); | 2663 Object* holder); |
2675 MUST_USE_RESULT PropertyAttributes GetElementAttributeWithInterceptor( | 2664 MUST_USE_RESULT PropertyAttributes GetElementAttributeWithInterceptor( |
2676 JSReceiver* receiver, | 2665 JSReceiver* receiver, |
2677 uint32_t index, | 2666 uint32_t index, |
2678 bool continue_search); | 2667 bool continue_search); |
2679 MUST_USE_RESULT PropertyAttributes GetElementAttributeWithoutInterceptor( | 2668 MUST_USE_RESULT PropertyAttributes GetElementAttributeWithoutInterceptor( |
2680 JSReceiver* receiver, | 2669 JSReceiver* receiver, |
2681 uint32_t index, | 2670 uint32_t index, |
2682 bool continue_search); | 2671 bool continue_search); |
2683 static Handle<Object> SetElementWithCallback( | 2672 static Handle<Object> SetElementWithCallback( |
2684 Handle<JSObject> object, | 2673 Handle<JSObject> object, |
2685 Handle<Object> structure, | 2674 Handle<Object> structure, |
2686 uint32_t index, | 2675 uint32_t index, |
2687 Handle<Object> value, | 2676 Handle<Object> value, |
2688 Handle<JSObject> holder, | 2677 Handle<JSObject> holder, |
2689 StrictModeFlag strict_mode); | 2678 StrictModeFlag strict_mode); |
2690 MUST_USE_RESULT MaybeObject* SetElementWithInterceptor( | 2679 static Handle<Object> SetElementWithInterceptor( |
| 2680 Handle<JSObject> object, |
2691 uint32_t index, | 2681 uint32_t index, |
2692 Object* value, | 2682 Handle<Object> value, |
2693 PropertyAttributes attributes, | 2683 PropertyAttributes attributes, |
2694 StrictModeFlag strict_mode, | 2684 StrictModeFlag strict_mode, |
2695 bool check_prototype, | 2685 bool check_prototype, |
2696 SetPropertyMode set_mode); | 2686 SetPropertyMode set_mode); |
2697 MUST_USE_RESULT MaybeObject* SetElementWithoutInterceptor( | 2687 static Handle<Object> SetElementWithoutInterceptor( |
| 2688 Handle<JSObject> object, |
2698 uint32_t index, | 2689 uint32_t index, |
2699 Object* value, | 2690 Handle<Object> value, |
2700 PropertyAttributes attributes, | 2691 PropertyAttributes attributes, |
2701 StrictModeFlag strict_mode, | 2692 StrictModeFlag strict_mode, |
2702 bool check_prototype, | 2693 bool check_prototype, |
2703 SetPropertyMode set_mode); | 2694 SetPropertyMode set_mode); |
2704 MUST_USE_RESULT MaybeObject* SetElementWithCallbackSetterInPrototypes( | 2695 static Handle<Object> SetElementWithCallbackSetterInPrototypes( |
| 2696 Handle<JSObject> object, |
2705 uint32_t index, | 2697 uint32_t index, |
2706 Object* value, | 2698 Handle<Object> value, |
2707 bool* found, | 2699 bool* found, |
2708 StrictModeFlag strict_mode); | 2700 StrictModeFlag strict_mode); |
| 2701 static Handle<Object> SetDictionaryElement( |
| 2702 Handle<JSObject> object, |
| 2703 uint32_t index, |
| 2704 Handle<Object> value, |
| 2705 PropertyAttributes attributes, |
| 2706 StrictModeFlag strict_mode, |
| 2707 bool check_prototype, |
| 2708 SetPropertyMode set_mode = SET_PROPERTY); |
| 2709 static Handle<Object> SetFastDoubleElement( |
| 2710 Handle<JSObject> object, |
| 2711 uint32_t index, |
| 2712 Handle<Object> value, |
| 2713 StrictModeFlag strict_mode, |
| 2714 bool check_prototype = true); |
2709 | 2715 |
2710 // Searches the prototype chain for property 'name'. If it is found and | 2716 // Searches the prototype chain for property 'name'. If it is found and |
2711 // has a setter, invoke it and set '*done' to true. If it is found and is | 2717 // has a setter, invoke it and set '*done' to true. If it is found and is |
2712 // read-only, reject and set '*done' to true. Otherwise, set '*done' to | 2718 // read-only, reject and set '*done' to true. Otherwise, set '*done' to |
2713 // false. Can throw and return an empty handle with '*done==true'. | 2719 // false. Can throw and return an empty handle with '*done==true'. |
2714 static Handle<Object> SetPropertyViaPrototypes( | 2720 static Handle<Object> SetPropertyViaPrototypes( |
2715 Handle<JSObject> object, | 2721 Handle<JSObject> object, |
2716 Handle<Name> name, | 2722 Handle<Name> name, |
2717 Handle<Object> value, | 2723 Handle<Object> value, |
2718 PropertyAttributes attributes, | 2724 PropertyAttributes attributes, |
(...skipping 1241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3960 class SeededNumberDictionary | 3966 class SeededNumberDictionary |
3961 : public Dictionary<SeededNumberDictionaryShape, uint32_t> { | 3967 : public Dictionary<SeededNumberDictionaryShape, uint32_t> { |
3962 public: | 3968 public: |
3963 static SeededNumberDictionary* cast(Object* obj) { | 3969 static SeededNumberDictionary* cast(Object* obj) { |
3964 ASSERT(obj->IsDictionary()); | 3970 ASSERT(obj->IsDictionary()); |
3965 return reinterpret_cast<SeededNumberDictionary*>(obj); | 3971 return reinterpret_cast<SeededNumberDictionary*>(obj); |
3966 } | 3972 } |
3967 | 3973 |
3968 // Type specific at put (default NONE attributes is used when adding). | 3974 // Type specific at put (default NONE attributes is used when adding). |
3969 MUST_USE_RESULT MaybeObject* AtNumberPut(uint32_t key, Object* value); | 3975 MUST_USE_RESULT MaybeObject* AtNumberPut(uint32_t key, Object* value); |
| 3976 MUST_USE_RESULT static Handle<SeededNumberDictionary> AddNumberEntry( |
| 3977 Handle<SeededNumberDictionary> dictionary, |
| 3978 uint32_t key, |
| 3979 Handle<Object> value, |
| 3980 PropertyDetails details); |
3970 MUST_USE_RESULT MaybeObject* AddNumberEntry(uint32_t key, | 3981 MUST_USE_RESULT MaybeObject* AddNumberEntry(uint32_t key, |
3971 Object* value, | 3982 Object* value, |
3972 PropertyDetails details); | 3983 PropertyDetails details); |
3973 | 3984 |
3974 // Set an existing entry or add a new one if needed. | 3985 // Set an existing entry or add a new one if needed. |
3975 // Return the updated dictionary. | 3986 // Return the updated dictionary. |
3976 MUST_USE_RESULT static Handle<SeededNumberDictionary> Set( | 3987 MUST_USE_RESULT static Handle<SeededNumberDictionary> Set( |
3977 Handle<SeededNumberDictionary> dictionary, | 3988 Handle<SeededNumberDictionary> dictionary, |
3978 uint32_t index, | 3989 uint32_t index, |
3979 Handle<Object> value, | 3990 Handle<Object> value, |
(...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4584 }; | 4595 }; |
4585 | 4596 |
4586 | 4597 |
4587 class ExternalByteArray: public ExternalArray { | 4598 class ExternalByteArray: public ExternalArray { |
4588 public: | 4599 public: |
4589 // Setter and getter. | 4600 // Setter and getter. |
4590 inline int8_t get_scalar(int index); | 4601 inline int8_t get_scalar(int index); |
4591 MUST_USE_RESULT inline MaybeObject* get(int index); | 4602 MUST_USE_RESULT inline MaybeObject* get(int index); |
4592 inline void set(int index, int8_t value); | 4603 inline void set(int index, int8_t value); |
4593 | 4604 |
| 4605 static Handle<Object> SetValue(Handle<ExternalByteArray> array, |
| 4606 uint32_t index, |
| 4607 Handle<Object> value); |
| 4608 |
4594 // This accessor applies the correct conversion from Smi, HeapNumber | 4609 // This accessor applies the correct conversion from Smi, HeapNumber |
4595 // and undefined. | 4610 // and undefined. |
4596 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4611 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4597 | 4612 |
4598 // Casting. | 4613 // Casting. |
4599 static inline ExternalByteArray* cast(Object* obj); | 4614 static inline ExternalByteArray* cast(Object* obj); |
4600 | 4615 |
4601 // Dispatched behavior. | 4616 // Dispatched behavior. |
4602 DECLARE_PRINTER(ExternalByteArray) | 4617 DECLARE_PRINTER(ExternalByteArray) |
4603 DECLARE_VERIFIER(ExternalByteArray) | 4618 DECLARE_VERIFIER(ExternalByteArray) |
4604 | 4619 |
4605 private: | 4620 private: |
4606 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalByteArray); | 4621 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalByteArray); |
4607 }; | 4622 }; |
4608 | 4623 |
4609 | 4624 |
4610 class ExternalUnsignedByteArray: public ExternalArray { | 4625 class ExternalUnsignedByteArray: public ExternalArray { |
4611 public: | 4626 public: |
4612 // Setter and getter. | 4627 // Setter and getter. |
4613 inline uint8_t get_scalar(int index); | 4628 inline uint8_t get_scalar(int index); |
4614 MUST_USE_RESULT inline MaybeObject* get(int index); | 4629 MUST_USE_RESULT inline MaybeObject* get(int index); |
4615 inline void set(int index, uint8_t value); | 4630 inline void set(int index, uint8_t value); |
4616 | 4631 |
| 4632 static Handle<Object> SetValue(Handle<ExternalUnsignedByteArray> array, |
| 4633 uint32_t index, |
| 4634 Handle<Object> value); |
| 4635 |
4617 // This accessor applies the correct conversion from Smi, HeapNumber | 4636 // This accessor applies the correct conversion from Smi, HeapNumber |
4618 // and undefined. | 4637 // and undefined. |
4619 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4638 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4620 | 4639 |
4621 // Casting. | 4640 // Casting. |
4622 static inline ExternalUnsignedByteArray* cast(Object* obj); | 4641 static inline ExternalUnsignedByteArray* cast(Object* obj); |
4623 | 4642 |
4624 // Dispatched behavior. | 4643 // Dispatched behavior. |
4625 DECLARE_PRINTER(ExternalUnsignedByteArray) | 4644 DECLARE_PRINTER(ExternalUnsignedByteArray) |
4626 DECLARE_VERIFIER(ExternalUnsignedByteArray) | 4645 DECLARE_VERIFIER(ExternalUnsignedByteArray) |
4627 | 4646 |
4628 private: | 4647 private: |
4629 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedByteArray); | 4648 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedByteArray); |
4630 }; | 4649 }; |
4631 | 4650 |
4632 | 4651 |
4633 class ExternalShortArray: public ExternalArray { | 4652 class ExternalShortArray: public ExternalArray { |
4634 public: | 4653 public: |
4635 // Setter and getter. | 4654 // Setter and getter. |
4636 inline int16_t get_scalar(int index); | 4655 inline int16_t get_scalar(int index); |
4637 MUST_USE_RESULT inline MaybeObject* get(int index); | 4656 MUST_USE_RESULT inline MaybeObject* get(int index); |
4638 inline void set(int index, int16_t value); | 4657 inline void set(int index, int16_t value); |
4639 | 4658 |
| 4659 static Handle<Object> SetValue(Handle<ExternalShortArray> array, |
| 4660 uint32_t index, |
| 4661 Handle<Object> value); |
| 4662 |
4640 // This accessor applies the correct conversion from Smi, HeapNumber | 4663 // This accessor applies the correct conversion from Smi, HeapNumber |
4641 // and undefined. | 4664 // and undefined. |
4642 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4665 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4643 | 4666 |
4644 // Casting. | 4667 // Casting. |
4645 static inline ExternalShortArray* cast(Object* obj); | 4668 static inline ExternalShortArray* cast(Object* obj); |
4646 | 4669 |
4647 // Dispatched behavior. | 4670 // Dispatched behavior. |
4648 DECLARE_PRINTER(ExternalShortArray) | 4671 DECLARE_PRINTER(ExternalShortArray) |
4649 DECLARE_VERIFIER(ExternalShortArray) | 4672 DECLARE_VERIFIER(ExternalShortArray) |
4650 | 4673 |
4651 private: | 4674 private: |
4652 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalShortArray); | 4675 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalShortArray); |
4653 }; | 4676 }; |
4654 | 4677 |
4655 | 4678 |
4656 class ExternalUnsignedShortArray: public ExternalArray { | 4679 class ExternalUnsignedShortArray: public ExternalArray { |
4657 public: | 4680 public: |
4658 // Setter and getter. | 4681 // Setter and getter. |
4659 inline uint16_t get_scalar(int index); | 4682 inline uint16_t get_scalar(int index); |
4660 MUST_USE_RESULT inline MaybeObject* get(int index); | 4683 MUST_USE_RESULT inline MaybeObject* get(int index); |
4661 inline void set(int index, uint16_t value); | 4684 inline void set(int index, uint16_t value); |
4662 | 4685 |
| 4686 static Handle<Object> SetValue(Handle<ExternalUnsignedShortArray> array, |
| 4687 uint32_t index, |
| 4688 Handle<Object> value); |
| 4689 |
4663 // This accessor applies the correct conversion from Smi, HeapNumber | 4690 // This accessor applies the correct conversion from Smi, HeapNumber |
4664 // and undefined. | 4691 // and undefined. |
4665 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4692 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4666 | 4693 |
4667 // Casting. | 4694 // Casting. |
4668 static inline ExternalUnsignedShortArray* cast(Object* obj); | 4695 static inline ExternalUnsignedShortArray* cast(Object* obj); |
4669 | 4696 |
4670 // Dispatched behavior. | 4697 // Dispatched behavior. |
4671 DECLARE_PRINTER(ExternalUnsignedShortArray) | 4698 DECLARE_PRINTER(ExternalUnsignedShortArray) |
4672 DECLARE_VERIFIER(ExternalUnsignedShortArray) | 4699 DECLARE_VERIFIER(ExternalUnsignedShortArray) |
4673 | 4700 |
4674 private: | 4701 private: |
4675 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedShortArray); | 4702 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedShortArray); |
4676 }; | 4703 }; |
4677 | 4704 |
4678 | 4705 |
4679 class ExternalIntArray: public ExternalArray { | 4706 class ExternalIntArray: public ExternalArray { |
4680 public: | 4707 public: |
4681 // Setter and getter. | 4708 // Setter and getter. |
4682 inline int32_t get_scalar(int index); | 4709 inline int32_t get_scalar(int index); |
4683 MUST_USE_RESULT inline MaybeObject* get(int index); | 4710 MUST_USE_RESULT inline MaybeObject* get(int index); |
4684 inline void set(int index, int32_t value); | 4711 inline void set(int index, int32_t value); |
4685 | 4712 |
| 4713 static Handle<Object> SetValue(Handle<ExternalIntArray> array, |
| 4714 uint32_t index, |
| 4715 Handle<Object> value); |
| 4716 |
4686 // This accessor applies the correct conversion from Smi, HeapNumber | 4717 // This accessor applies the correct conversion from Smi, HeapNumber |
4687 // and undefined. | 4718 // and undefined. |
4688 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4719 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4689 | 4720 |
4690 // Casting. | 4721 // Casting. |
4691 static inline ExternalIntArray* cast(Object* obj); | 4722 static inline ExternalIntArray* cast(Object* obj); |
4692 | 4723 |
4693 // Dispatched behavior. | 4724 // Dispatched behavior. |
4694 DECLARE_PRINTER(ExternalIntArray) | 4725 DECLARE_PRINTER(ExternalIntArray) |
4695 DECLARE_VERIFIER(ExternalIntArray) | 4726 DECLARE_VERIFIER(ExternalIntArray) |
4696 | 4727 |
4697 private: | 4728 private: |
4698 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalIntArray); | 4729 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalIntArray); |
4699 }; | 4730 }; |
4700 | 4731 |
4701 | 4732 |
4702 class ExternalUnsignedIntArray: public ExternalArray { | 4733 class ExternalUnsignedIntArray: public ExternalArray { |
4703 public: | 4734 public: |
4704 // Setter and getter. | 4735 // Setter and getter. |
4705 inline uint32_t get_scalar(int index); | 4736 inline uint32_t get_scalar(int index); |
4706 MUST_USE_RESULT inline MaybeObject* get(int index); | 4737 MUST_USE_RESULT inline MaybeObject* get(int index); |
4707 inline void set(int index, uint32_t value); | 4738 inline void set(int index, uint32_t value); |
4708 | 4739 |
| 4740 static Handle<Object> SetValue(Handle<ExternalUnsignedIntArray> array, |
| 4741 uint32_t index, |
| 4742 Handle<Object> value); |
| 4743 |
4709 // This accessor applies the correct conversion from Smi, HeapNumber | 4744 // This accessor applies the correct conversion from Smi, HeapNumber |
4710 // and undefined. | 4745 // and undefined. |
4711 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4746 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4712 | 4747 |
4713 // Casting. | 4748 // Casting. |
4714 static inline ExternalUnsignedIntArray* cast(Object* obj); | 4749 static inline ExternalUnsignedIntArray* cast(Object* obj); |
4715 | 4750 |
4716 // Dispatched behavior. | 4751 // Dispatched behavior. |
4717 DECLARE_PRINTER(ExternalUnsignedIntArray) | 4752 DECLARE_PRINTER(ExternalUnsignedIntArray) |
4718 DECLARE_VERIFIER(ExternalUnsignedIntArray) | 4753 DECLARE_VERIFIER(ExternalUnsignedIntArray) |
4719 | 4754 |
4720 private: | 4755 private: |
4721 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedIntArray); | 4756 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedIntArray); |
4722 }; | 4757 }; |
4723 | 4758 |
4724 | 4759 |
4725 class ExternalFloatArray: public ExternalArray { | 4760 class ExternalFloatArray: public ExternalArray { |
4726 public: | 4761 public: |
4727 // Setter and getter. | 4762 // Setter and getter. |
4728 inline float get_scalar(int index); | 4763 inline float get_scalar(int index); |
4729 MUST_USE_RESULT inline MaybeObject* get(int index); | 4764 MUST_USE_RESULT inline MaybeObject* get(int index); |
4730 inline void set(int index, float value); | 4765 inline void set(int index, float value); |
4731 | 4766 |
| 4767 static Handle<Object> SetValue(Handle<ExternalFloatArray> array, |
| 4768 uint32_t index, |
| 4769 Handle<Object> value); |
| 4770 |
4732 // This accessor applies the correct conversion from Smi, HeapNumber | 4771 // This accessor applies the correct conversion from Smi, HeapNumber |
4733 // and undefined. | 4772 // and undefined. |
4734 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4773 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4735 | 4774 |
4736 // Casting. | 4775 // Casting. |
4737 static inline ExternalFloatArray* cast(Object* obj); | 4776 static inline ExternalFloatArray* cast(Object* obj); |
4738 | 4777 |
4739 // Dispatched behavior. | 4778 // Dispatched behavior. |
4740 DECLARE_PRINTER(ExternalFloatArray) | 4779 DECLARE_PRINTER(ExternalFloatArray) |
4741 DECLARE_VERIFIER(ExternalFloatArray) | 4780 DECLARE_VERIFIER(ExternalFloatArray) |
4742 | 4781 |
4743 private: | 4782 private: |
4744 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloatArray); | 4783 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloatArray); |
4745 }; | 4784 }; |
4746 | 4785 |
4747 | 4786 |
4748 class ExternalDoubleArray: public ExternalArray { | 4787 class ExternalDoubleArray: public ExternalArray { |
4749 public: | 4788 public: |
4750 // Setter and getter. | 4789 // Setter and getter. |
4751 inline double get_scalar(int index); | 4790 inline double get_scalar(int index); |
4752 MUST_USE_RESULT inline MaybeObject* get(int index); | 4791 MUST_USE_RESULT inline MaybeObject* get(int index); |
4753 inline void set(int index, double value); | 4792 inline void set(int index, double value); |
4754 | 4793 |
| 4794 static Handle<Object> SetValue(Handle<ExternalDoubleArray> array, |
| 4795 uint32_t index, |
| 4796 Handle<Object> value); |
| 4797 |
4755 // This accessor applies the correct conversion from Smi, HeapNumber | 4798 // This accessor applies the correct conversion from Smi, HeapNumber |
4756 // and undefined. | 4799 // and undefined. |
4757 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4800 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4758 | 4801 |
4759 // Casting. | 4802 // Casting. |
4760 static inline ExternalDoubleArray* cast(Object* obj); | 4803 static inline ExternalDoubleArray* cast(Object* obj); |
4761 | 4804 |
4762 // Dispatched behavior. | 4805 // Dispatched behavior. |
4763 DECLARE_PRINTER(ExternalDoubleArray) | 4806 DECLARE_PRINTER(ExternalDoubleArray) |
4764 DECLARE_VERIFIER(ExternalDoubleArray) | 4807 DECLARE_VERIFIER(ExternalDoubleArray) |
(...skipping 4980 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9745 // - slow, backing storage is a HashTable with numbers as keys. | 9788 // - slow, backing storage is a HashTable with numbers as keys. |
9746 class JSArray: public JSObject { | 9789 class JSArray: public JSObject { |
9747 public: | 9790 public: |
9748 // [length]: The length property. | 9791 // [length]: The length property. |
9749 DECL_ACCESSORS(length, Object) | 9792 DECL_ACCESSORS(length, Object) |
9750 | 9793 |
9751 // Overload the length setter to skip write barrier when the length | 9794 // Overload the length setter to skip write barrier when the length |
9752 // is set to a smi. This matches the set function on FixedArray. | 9795 // is set to a smi. This matches the set function on FixedArray. |
9753 inline void set_length(Smi* length); | 9796 inline void set_length(Smi* length); |
9754 | 9797 |
| 9798 static void JSArrayUpdateLengthFromIndex(Handle<JSArray> array, |
| 9799 uint32_t index, |
| 9800 Handle<Object> value); |
| 9801 |
9755 MUST_USE_RESULT MaybeObject* JSArrayUpdateLengthFromIndex(uint32_t index, | 9802 MUST_USE_RESULT MaybeObject* JSArrayUpdateLengthFromIndex(uint32_t index, |
9756 Object* value); | 9803 Object* value); |
9757 | 9804 |
9758 // Initialize the array with the given capacity. The function may | 9805 // Initialize the array with the given capacity. The function may |
9759 // fail due to out-of-memory situations, but only if the requested | 9806 // fail due to out-of-memory situations, but only if the requested |
9760 // capacity is non-zero. | 9807 // capacity is non-zero. |
9761 MUST_USE_RESULT MaybeObject* Initialize(int capacity, int length = 0); | 9808 MUST_USE_RESULT MaybeObject* Initialize(int capacity, int length = 0); |
9762 | 9809 |
9763 // Initializes the array to a certain length. | 9810 // Initializes the array to a certain length. |
9764 inline bool AllowsSetElementsLength(); | 9811 inline bool AllowsSetElementsLength(); |
(...skipping 759 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10524 } else { | 10571 } else { |
10525 value &= ~(1 << bit_position); | 10572 value &= ~(1 << bit_position); |
10526 } | 10573 } |
10527 return value; | 10574 return value; |
10528 } | 10575 } |
10529 }; | 10576 }; |
10530 | 10577 |
10531 } } // namespace v8::internal | 10578 } } // namespace v8::internal |
10532 | 10579 |
10533 #endif // V8_OBJECTS_H_ | 10580 #endif // V8_OBJECTS_H_ |
OLD | NEW |