OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/assert-scope.h" | 10 #include "src/assert-scope.h" |
(...skipping 2461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2472 friend class JSReceiver; | 2472 friend class JSReceiver; |
2473 friend class Object; | 2473 friend class Object; |
2474 | 2474 |
2475 // Used from Object::GetProperty(). | 2475 // Used from Object::GetProperty(). |
2476 MUST_USE_RESULT static MaybeHandle<Object> GetPropertyWithFailedAccessCheck( | 2476 MUST_USE_RESULT static MaybeHandle<Object> GetPropertyWithFailedAccessCheck( |
2477 LookupIterator* it); | 2477 LookupIterator* it); |
2478 | 2478 |
2479 MUST_USE_RESULT static Maybe<bool> SetPropertyWithFailedAccessCheck( | 2479 MUST_USE_RESULT static Maybe<bool> SetPropertyWithFailedAccessCheck( |
2480 LookupIterator* it, Handle<Object> value, ShouldThrow should_throw); | 2480 LookupIterator* it, Handle<Object> value, ShouldThrow should_throw); |
2481 | 2481 |
2482 // Add a property to a slow-case object. | |
2483 static void AddSlowProperty(Handle<JSObject> object, | |
2484 Handle<Name> name, | |
2485 Handle<Object> value, | |
2486 PropertyAttributes attributes); | |
2487 | |
2488 MUST_USE_RESULT static Maybe<bool> DeletePropertyWithInterceptor( | 2482 MUST_USE_RESULT static Maybe<bool> DeletePropertyWithInterceptor( |
2489 LookupIterator* it, ShouldThrow should_throw); | 2483 LookupIterator* it, ShouldThrow should_throw); |
2490 | 2484 |
2491 bool ReferencesObjectFromElements(FixedArray* elements, | 2485 bool ReferencesObjectFromElements(FixedArray* elements, |
2492 ElementsKind kind, | 2486 ElementsKind kind, |
2493 Object* object); | 2487 Object* object); |
2494 | 2488 |
2495 static Object* GetIdentityHash(Isolate* isolate, Handle<JSObject> object); | 2489 static Object* GetIdentityHash(Isolate* isolate, Handle<JSObject> object); |
2496 | 2490 |
2497 static Smi* GetOrCreateIdentityHash(Isolate* isolate, | 2491 static Smi* GetOrCreateIdentityHash(Isolate* isolate, |
(...skipping 1009 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3507 | 3501 |
3508 // Sets the entry to (key, value) pair. | 3502 // Sets the entry to (key, value) pair. |
3509 inline void SetEntry(int entry, | 3503 inline void SetEntry(int entry, |
3510 Handle<Object> key, | 3504 Handle<Object> key, |
3511 Handle<Object> value); | 3505 Handle<Object> value); |
3512 inline void SetEntry(int entry, | 3506 inline void SetEntry(int entry, |
3513 Handle<Object> key, | 3507 Handle<Object> key, |
3514 Handle<Object> value, | 3508 Handle<Object> value, |
3515 PropertyDetails details); | 3509 PropertyDetails details); |
3516 | 3510 |
3517 MUST_USE_RESULT static Handle<Derived> Add( | 3511 MUST_USE_RESULT static Handle<Derived> Add(Handle<Derived> dictionary, |
3518 Handle<Derived> dictionary, | 3512 Key key, Handle<Object> value, |
3519 Key key, | 3513 PropertyDetails details, |
3520 Handle<Object> value, | 3514 int* entry_out = nullptr); |
3521 PropertyDetails details); | |
3522 | 3515 |
3523 // Returns iteration indices array for the |dictionary|. | 3516 // Returns iteration indices array for the |dictionary|. |
3524 // Values are direct indices in the |HashTable| array. | 3517 // Values are direct indices in the |HashTable| array. |
3525 static Handle<FixedArray> BuildIterationIndicesArray( | 3518 static Handle<FixedArray> BuildIterationIndicesArray( |
3526 Handle<Derived> dictionary); | 3519 Handle<Derived> dictionary); |
3527 | 3520 |
3528 protected: | 3521 protected: |
3529 // Generic at put operation. | 3522 // Generic at put operation. |
3530 MUST_USE_RESULT static Handle<Derived> AtPut( | 3523 MUST_USE_RESULT static Handle<Derived> AtPut( |
3531 Handle<Derived> dictionary, | 3524 Handle<Derived> dictionary, |
3532 Key key, | 3525 Key key, |
3533 Handle<Object> value); | 3526 Handle<Object> value); |
3534 | 3527 |
3535 // Add entry to dictionary. | 3528 // Add entry to dictionary. Returns entry value. |
3536 static void AddEntry( | 3529 static int AddEntry(Handle<Derived> dictionary, Key key, Handle<Object> value, |
3537 Handle<Derived> dictionary, | 3530 PropertyDetails details, uint32_t hash); |
3538 Key key, | |
3539 Handle<Object> value, | |
3540 PropertyDetails details, | |
3541 uint32_t hash); | |
3542 | 3531 |
3543 // Generate new enumeration indices to avoid enumeration index overflow. | 3532 // Generate new enumeration indices to avoid enumeration index overflow. |
3544 // Returns iteration indices array for the |dictionary|. | 3533 // Returns iteration indices array for the |dictionary|. |
3545 static Handle<FixedArray> GenerateNewEnumerationIndices( | 3534 static Handle<FixedArray> GenerateNewEnumerationIndices( |
3546 Handle<Derived> dictionary); | 3535 Handle<Derived> dictionary); |
3547 static const int kMaxNumberKeyIndex = DerivedHashTable::kPrefixStartIndex; | 3536 static const int kMaxNumberKeyIndex = DerivedHashTable::kPrefixStartIndex; |
3548 static const int kNextEnumerationIndexIndex = kMaxNumberKeyIndex + 1; | 3537 static const int kNextEnumerationIndexIndex = kMaxNumberKeyIndex + 1; |
3549 }; | 3538 }; |
3550 | 3539 |
3551 | 3540 |
(...skipping 4270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7822 // [native context]: the natives corresponding to this global object. | 7811 // [native context]: the natives corresponding to this global object. |
7823 DECL_ACCESSORS(native_context, Context) | 7812 DECL_ACCESSORS(native_context, Context) |
7824 | 7813 |
7825 // [global proxy]: the global proxy object of the context | 7814 // [global proxy]: the global proxy object of the context |
7826 DECL_ACCESSORS(global_proxy, JSObject) | 7815 DECL_ACCESSORS(global_proxy, JSObject) |
7827 | 7816 |
7828 | 7817 |
7829 static void InvalidatePropertyCell(Handle<JSGlobalObject> object, | 7818 static void InvalidatePropertyCell(Handle<JSGlobalObject> object, |
7830 Handle<Name> name); | 7819 Handle<Name> name); |
7831 // Ensure that the global object has a cell for the given property name. | 7820 // Ensure that the global object has a cell for the given property name. |
7832 static Handle<PropertyCell> EnsurePropertyCell(Handle<JSGlobalObject> global, | 7821 static Handle<PropertyCell> EnsureEmptyPropertyCell( |
7833 Handle<Name> name); | 7822 Handle<JSGlobalObject> global, Handle<Name> name, |
| 7823 PropertyCellType cell_type, int* entry_out = nullptr); |
7834 | 7824 |
7835 DECLARE_CAST(JSGlobalObject) | 7825 DECLARE_CAST(JSGlobalObject) |
7836 | 7826 |
7837 inline bool IsDetached(); | 7827 inline bool IsDetached(); |
7838 | 7828 |
7839 // Dispatched behavior. | 7829 // Dispatched behavior. |
7840 DECLARE_PRINTER(JSGlobalObject) | 7830 DECLARE_PRINTER(JSGlobalObject) |
7841 DECLARE_VERIFIER(JSGlobalObject) | 7831 DECLARE_VERIFIER(JSGlobalObject) |
7842 | 7832 |
7843 // Layout description. | 7833 // Layout description. |
(...skipping 1829 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9673 inline PropertyDetails property_details(); | 9663 inline PropertyDetails property_details(); |
9674 inline void set_property_details(PropertyDetails details); | 9664 inline void set_property_details(PropertyDetails details); |
9675 | 9665 |
9676 PropertyCellConstantType GetConstantType(); | 9666 PropertyCellConstantType GetConstantType(); |
9677 | 9667 |
9678 // Computes the new type of the cell's contents for the given value, but | 9668 // Computes the new type of the cell's contents for the given value, but |
9679 // without actually modifying the details. | 9669 // without actually modifying the details. |
9680 static PropertyCellType UpdatedType(Handle<PropertyCell> cell, | 9670 static PropertyCellType UpdatedType(Handle<PropertyCell> cell, |
9681 Handle<Object> value, | 9671 Handle<Object> value, |
9682 PropertyDetails details); | 9672 PropertyDetails details); |
9683 static void UpdateCell(Handle<GlobalDictionary> dictionary, int entry, | 9673 // Prepares property cell at given entry for receiving given value. |
9684 Handle<Object> value, PropertyDetails details); | 9674 // As a result the old cell could be invalidated and/or dependent code could |
| 9675 // be deoptimized. Returns the prepared property cell. |
| 9676 static Handle<PropertyCell> PrepareForValue( |
| 9677 Handle<GlobalDictionary> dictionary, int entry, Handle<Object> value, |
| 9678 PropertyDetails details); |
9685 | 9679 |
9686 static Handle<PropertyCell> InvalidateEntry( | 9680 static Handle<PropertyCell> InvalidateEntry( |
9687 Handle<GlobalDictionary> dictionary, int entry); | 9681 Handle<GlobalDictionary> dictionary, int entry); |
9688 | 9682 |
9689 static void SetValueWithInvalidation(Handle<PropertyCell> cell, | 9683 static void SetValueWithInvalidation(Handle<PropertyCell> cell, |
9690 Handle<Object> new_value); | 9684 Handle<Object> new_value); |
9691 | 9685 |
9692 DECLARE_CAST(PropertyCell) | 9686 DECLARE_CAST(PropertyCell) |
9693 | 9687 |
9694 // Dispatched behavior. | 9688 // Dispatched behavior. |
(...skipping 1227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10922 } | 10916 } |
10923 return value; | 10917 return value; |
10924 } | 10918 } |
10925 }; | 10919 }; |
10926 | 10920 |
10927 | 10921 |
10928 } // NOLINT, false-positive due to second-order macros. | 10922 } // NOLINT, false-positive due to second-order macros. |
10929 } // NOLINT, false-positive due to second-order macros. | 10923 } // NOLINT, false-positive due to second-order macros. |
10930 | 10924 |
10931 #endif // V8_OBJECTS_H_ | 10925 #endif // V8_OBJECTS_H_ |
OLD | NEW |