Index: src/objects.h |
diff --git a/src/objects.h b/src/objects.h |
index ec6f6051d5f0be9a49b7d8917f5ab3a768bf7936..bbc164f99783e5778c2f9df92b3b32f2d6adb579 100644 |
--- a/src/objects.h |
+++ b/src/objects.h |
@@ -1375,6 +1375,13 @@ class Object { |
HEAP_OBJECT_TYPE_LIST(IS_TYPE_FUNCTION_DECL) |
#undef IS_TYPE_FUNCTION_DECL |
+ // A non-keyed store is of the form a.x = foo or a["x"] = foo whereas |
+ // a keyed store is of the form a[expression] = foo. |
+ enum StoreFromKeyed { |
+ MAY_BE_STORE_FROM_KEYED, |
+ CERTAINLY_NOT_STORE_FROM_KEYED |
+ }; |
+ |
INLINE(bool IsFixedArrayBase() const); |
INLINE(bool IsExternal() const); |
INLINE(bool IsAccessorInfo() const); |
@@ -1476,6 +1483,16 @@ class Object { |
void Lookup(Handle<Name> name, LookupResult* result); |
MUST_USE_RESULT static MaybeHandle<Object> GetProperty(LookupIterator* it); |
+ MUST_USE_RESULT static MaybeHandle<Object> SetProperty( |
+ LookupIterator* it, Handle<Object> value, StrictMode strict_mode, |
+ StoreFromKeyed store_mode); |
+ MUST_USE_RESULT static MaybeHandle<Object> WriteToReadOnlyProperty( |
+ LookupIterator* it, Handle<Object> value, StrictMode strict_mode); |
+ MUST_USE_RESULT static MaybeHandle<Object> SetDataProperty( |
+ LookupIterator* it, Handle<Object> value); |
+ MUST_USE_RESULT static MaybeHandle<Object> AddDataProperty( |
+ LookupIterator* it, Handle<Object> value, PropertyAttributes attributes, |
+ StrictMode strict_mode, StoreFromKeyed store_mode); |
MUST_USE_RESULT static inline MaybeHandle<Object> GetPropertyOrElement( |
Handle<Object> object, |
Handle<Name> key); |
@@ -1492,12 +1509,9 @@ class Object { |
Handle<Name> name, |
Handle<JSObject> holder, |
Handle<Object> structure); |
- MUST_USE_RESULT static MaybeHandle<Object> SetPropertyWithCallback( |
- Handle<Object> receiver, |
- Handle<Name> name, |
- Handle<Object> value, |
- Handle<JSObject> holder, |
- Handle<Object> structure, |
+ MUST_USE_RESULT static MaybeHandle<Object> SetPropertyWithAccessor( |
+ Handle<Object> receiver, Handle<Name> name, Handle<Object> value, |
+ Handle<JSObject> holder, Handle<Object> structure, |
StrictMode strict_mode); |
MUST_USE_RESULT static MaybeHandle<Object> GetPropertyWithDefinedGetter( |
@@ -1918,13 +1932,6 @@ class JSReceiver: public HeapObject { |
FORCE_DELETION |
}; |
- // A non-keyed store is of the form a.x = foo or a["x"] = foo whereas |
- // a keyed store is of the form a[expression] = foo. |
- enum StoreFromKeyed { |
- MAY_BE_STORE_FROM_KEYED, |
- CERTAINLY_NOT_STORE_FROM_KEYED |
- }; |
- |
// Internal properties (e.g. the hidden properties dictionary) might |
// be added even though the receiver is non-extensible. |
enum ExtensibilityCheck { |
@@ -2136,18 +2143,7 @@ class JSObject: public JSReceiver { |
uint32_t limit); |
MUST_USE_RESULT static MaybeHandle<Object> SetPropertyWithInterceptor( |
- Handle<JSObject> object, |
- Handle<Name> name, |
- Handle<Object> value, |
- StrictMode strict_mode); |
- |
- MUST_USE_RESULT static MaybeHandle<Object> SetPropertyForResult( |
- Handle<JSObject> object, |
- LookupResult* result, |
- Handle<Name> name, |
- Handle<Object> value, |
- StrictMode strict_mode, |
- StoreFromKeyed store_mode = MAY_BE_STORE_FROM_KEYED); |
+ LookupIterator* it, Handle<Object> value); |
// SetLocalPropertyIgnoreAttributes converts callbacks to fields. We need to |
// grant an exemption to ExecutableAccessor callbacks in some cases. |
@@ -2573,12 +2569,6 @@ class JSObject: public JSReceiver { |
Object* SlowReverseLookup(Object* value); |
- // Maximal number of fast properties for the JSObject. Used to |
- // restrict the number of map transitions to avoid an explosion in |
- // the number of maps for objects used as dictionaries. |
- inline bool TooManyFastProperties( |
- StoreFromKeyed store_mode = MAY_BE_STORE_FROM_KEYED); |
- |
// Maximal number of elements (numbered 0 .. kMaxElementCount - 1). |
// Also maximal value of JSArray's length property. |
static const uint32_t kMaxElementCount = 0xffffffffu; |
@@ -2606,8 +2596,6 @@ class JSObject: public JSReceiver { |
// "global.Object" and not to arbitrary other JSObject maps. |
static const int kInitialGlobalObjectUnusedPropertiesCount = 4; |
- static const int kFastPropertiesSoftLimit = 12; |
- static const int kMaxFastProperties = 128; |
static const int kMaxInstanceSize = 255 * kPointerSize; |
// When extending the backing storage for property values, we increase |
// its size by more than the 1 entry necessary, so sequentially adding fields |
@@ -2734,21 +2722,6 @@ class JSObject: public JSReceiver { |
StrictMode strict_mode, |
bool check_prototype = true); |
- // Searches the prototype chain for property 'name'. If it is found and |
- // has a setter, invoke it and set '*done' to true. If it is found and is |
- // read-only, reject and set '*done' to true. Otherwise, set '*done' to |
- // false. Can throw and return an empty handle with '*done==true'. |
- MUST_USE_RESULT static MaybeHandle<Object> SetPropertyViaPrototypes( |
- Handle<JSObject> object, |
- Handle<Name> name, |
- Handle<Object> value, |
- StrictMode strict_mode, |
- bool* done); |
- MUST_USE_RESULT static MaybeHandle<Object> SetPropertyPostInterceptor( |
- Handle<JSObject> object, |
- Handle<Name> name, |
- Handle<Object> value, |
- StrictMode strict_mode); |
MUST_USE_RESULT static MaybeHandle<Object> SetPropertyUsingTransition( |
Handle<JSObject> object, |
LookupResult* lookup, |
@@ -2756,12 +2729,7 @@ class JSObject: public JSReceiver { |
Handle<Object> value, |
PropertyAttributes attributes); |
MUST_USE_RESULT static MaybeHandle<Object> SetPropertyWithFailedAccessCheck( |
- Handle<JSObject> object, |
- LookupResult* result, |
- Handle<Name> name, |
- Handle<Object> value, |
- bool check_prototype, |
- StrictMode strict_mode); |
+ LookupIterator* it, Handle<Object> value, StrictMode strict_mode); |
// Add a property to an object. |
MUST_USE_RESULT static MaybeHandle<Object> AddPropertyInternal( |
@@ -3452,6 +3420,8 @@ class DescriptorArray: public FixedArray { |
FixedArray* new_cache, |
Object* new_index_cache); |
+ bool CanHoldValue(int descriptor, Object* value); |
+ |
// Accessors for fetching instance descriptor at descriptor number. |
inline Name* GetKey(int descriptor_number); |
inline Object** GetKeySlot(int descriptor_number); |
@@ -6334,6 +6304,10 @@ class Map: public HeapObject { |
StoreMode store_mode, |
const char* reason); |
+ static Handle<Map> PrepareForDataProperty(Handle<Map> old_map, |
+ int descriptor_number, |
+ Handle<Object> value); |
+ |
static Handle<Map> Normalize(Handle<Map> map, PropertyNormalizationMode mode); |
// Returns the constructor name (the name (possibly, inferred name) of the |
@@ -6526,6 +6500,15 @@ class Map: public HeapObject { |
static Handle<Map> CopyForObserved(Handle<Map> map); |
static Handle<Map> CopyForFreeze(Handle<Map> map); |
+ // Maximal number of fast properties. Used to restrict the number of map |
+ // transitions to avoid an explosion in the number of maps for objects used as |
+ // dictionaries. |
+ inline bool TooManyFastProperties(StoreFromKeyed store_mode); |
+ static Handle<Map> TransitionToDataProperty(Handle<Map> map, |
+ Handle<Name> name, |
+ Handle<Object> value, |
+ PropertyAttributes attributes, |
+ StoreFromKeyed store_mode); |
inline void AppendDescriptor(Descriptor* desc); |
@@ -6834,6 +6817,9 @@ class Map: public HeapObject { |
Handle<Object> prototype, |
Handle<Map> target_map); |
+ static const int kFastPropertiesSoftLimit = 12; |
+ static const int kMaxFastProperties = 128; |
+ |
DISALLOW_IMPLICIT_CONSTRUCTORS(Map); |
}; |
@@ -9968,12 +9954,8 @@ class JSProxy: public JSReceiver { |
// otherwise set it to false. |
MUST_USE_RESULT |
static MaybeHandle<Object> SetPropertyViaPrototypesWithHandler( |
- Handle<JSProxy> proxy, |
- Handle<JSReceiver> receiver, |
- Handle<Name> name, |
- Handle<Object> value, |
- StrictMode strict_mode, |
- bool* done); |
+ Handle<JSProxy> proxy, Handle<Object> receiver, Handle<Name> name, |
+ Handle<Object> value, StrictMode strict_mode, bool* done); |
static PropertyAttributes GetPropertyAttributesWithHandler( |
Handle<JSProxy> proxy, |
@@ -9983,6 +9965,9 @@ class JSProxy: public JSReceiver { |
Handle<JSProxy> proxy, |
Handle<JSReceiver> receiver, |
uint32_t index); |
+ MUST_USE_RESULT static MaybeHandle<Object> SetPropertyWithHandler( |
+ Handle<JSProxy> proxy, Handle<Object> receiver, Handle<Name> name, |
+ Handle<Object> value, StrictMode strict_mode); |
// Turn the proxy into an (empty) JSObject. |
static void Fix(Handle<JSProxy> proxy); |
@@ -10022,12 +10007,6 @@ class JSProxy: public JSReceiver { |
private: |
friend class JSReceiver; |
- MUST_USE_RESULT static MaybeHandle<Object> SetPropertyWithHandler( |
- Handle<JSProxy> proxy, |
- Handle<JSReceiver> receiver, |
- Handle<Name> name, |
- Handle<Object> value, |
- StrictMode strict_mode); |
MUST_USE_RESULT static inline MaybeHandle<Object> SetElementWithHandler( |
Handle<JSProxy> proxy, |
Handle<JSReceiver> receiver, |