| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 36879099e0b9c4543b9e26d6cc6fab0f71590d75..9aee6790ceec43e2606d2b65a6d3dd20b3d5ba4f 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -485,6 +485,16 @@ Object* JSObject::SetNormalizedProperty(LookupResult* result, Object* value) {
|
| }
|
|
|
|
|
| +Handle<Object> JSObject::SetNormalizedProperty(Handle<JSObject> object,
|
| + Handle<String> key,
|
| + Handle<Object> value,
|
| + PropertyDetails details) {
|
| + CALL_HEAP_FUNCTION(object->GetIsolate(),
|
| + object->SetNormalizedProperty(*key, *value, details),
|
| + Object);
|
| +}
|
| +
|
| +
|
| MaybeObject* JSObject::SetNormalizedProperty(String* name,
|
| Object* value,
|
| PropertyDetails details) {
|
| @@ -1961,6 +1971,17 @@ MaybeObject* JSObject::SetPropertyWithInterceptor(
|
| }
|
|
|
|
|
| +Handle<Object> JSReceiver::SetProperty(Handle<JSReceiver> object,
|
| + Handle<String> key,
|
| + Handle<Object> value,
|
| + PropertyAttributes attributes,
|
| + StrictModeFlag strict_mode) {
|
| + CALL_HEAP_FUNCTION(object->GetIsolate(),
|
| + object->SetProperty(*key, *value, attributes, strict_mode),
|
| + Object);
|
| +}
|
| +
|
| +
|
| MaybeObject* JSReceiver::SetProperty(String* name,
|
| Object* value,
|
| PropertyAttributes attributes,
|
| @@ -3024,6 +3045,18 @@ MaybeObject* JSObject::SetPropertyForResult(LookupResult* result,
|
| // Note that this method cannot be used to set the prototype of a function
|
| // because ConvertDescriptorToField() which is called in "case CALLBACKS:"
|
| // doesn't handle function prototypes correctly.
|
| +Handle<Object> JSObject::SetLocalPropertyIgnoreAttributes(
|
| + Handle<JSObject> object,
|
| + Handle<String> key,
|
| + Handle<Object> value,
|
| + PropertyAttributes attributes) {
|
| + CALL_HEAP_FUNCTION(
|
| + object->GetIsolate(),
|
| + object->SetLocalPropertyIgnoreAttributes(*key, *value, attributes),
|
| + Object);
|
| +}
|
| +
|
| +
|
| MaybeObject* JSObject::SetLocalPropertyIgnoreAttributes(
|
| String* name,
|
| Object* value,
|
| @@ -3314,6 +3347,15 @@ MaybeObject* JSObject::UpdateMapCodeCache(String* name, Code* code) {
|
| }
|
|
|
|
|
| +void JSObject::NormalizeProperties(Handle<JSObject> object,
|
| + PropertyNormalizationMode mode,
|
| + int expected_additional_properties) {
|
| + CALL_HEAP_FUNCTION_VOID(object->GetIsolate(),
|
| + object->NormalizeProperties(
|
| + mode, expected_additional_properties));
|
| +}
|
| +
|
| +
|
| MaybeObject* JSObject::NormalizeProperties(PropertyNormalizationMode mode,
|
| int expected_additional_properties) {
|
| if (!HasFastProperties()) return this;
|
| @@ -3436,6 +3478,14 @@ MaybeObject* JSObject::NormalizeProperties(PropertyNormalizationMode mode,
|
| }
|
|
|
|
|
| +void JSObject::TransformToFastProperties(Handle<JSObject> object,
|
| + int unused_property_fields) {
|
| + CALL_HEAP_FUNCTION_VOID(
|
| + object->GetIsolate(),
|
| + object->TransformToFastProperties(unused_property_fields));
|
| +}
|
| +
|
| +
|
| MaybeObject* JSObject::TransformToFastProperties(int unused_property_fields) {
|
| if (HasFastProperties()) return this;
|
| ASSERT(!IsGlobalObject());
|
| @@ -3444,6 +3494,12 @@ MaybeObject* JSObject::TransformToFastProperties(int unused_property_fields) {
|
| }
|
|
|
|
|
| +Handle<NumberDictionary> JSObject::NormalizeElements(Handle<JSObject> object) {
|
| + CALL_HEAP_FUNCTION(
|
| + object->GetIsolate(), object->NormalizeElements(), NumberDictionary);
|
| +}
|
| +
|
| +
|
| MaybeObject* JSObject::NormalizeElements() {
|
| ASSERT(!HasExternalArrayElements());
|
|
|
| @@ -3560,6 +3616,14 @@ MaybeObject* JSObject::SetIdentityHash(Object* hash, CreationFlag flag) {
|
| }
|
|
|
|
|
| +int JSObject::GetIdentityHash(Handle<JSObject> obj) {
|
| + CALL_AND_RETRY(obj->GetIsolate(),
|
| + obj->GetIdentityHash(ALLOW_CREATION),
|
| + return Smi::cast(__object__)->value(),
|
| + return 0);
|
| +}
|
| +
|
| +
|
| MaybeObject* JSObject::GetIdentityHash(CreationFlag flag) {
|
| Object* stored_value = GetHiddenProperty(GetHeap()->identity_hash_symbol());
|
| if (stored_value->IsSmi()) return stored_value;
|
| @@ -3612,6 +3676,15 @@ Object* JSObject::GetHiddenProperty(String* key) {
|
| }
|
|
|
|
|
| +Handle<Object> JSObject::SetHiddenProperty(Handle<JSObject> obj,
|
| + Handle<String> key,
|
| + Handle<Object> value) {
|
| + CALL_HEAP_FUNCTION(obj->GetIsolate(),
|
| + obj->SetHiddenProperty(*key, *value),
|
| + Object);
|
| +}
|
| +
|
| +
|
| MaybeObject* JSObject::SetHiddenProperty(String* key, Object* value) {
|
| if (IsJSGlobalProxy()) {
|
| // For a proxy, use the prototype as target object.
|
| @@ -3839,6 +3912,14 @@ MaybeObject* JSObject::DeleteElementWithInterceptor(uint32_t index) {
|
| }
|
|
|
|
|
| +Handle<Object> JSObject::DeleteElement(Handle<JSObject> obj,
|
| + uint32_t index) {
|
| + CALL_HEAP_FUNCTION(obj->GetIsolate(),
|
| + obj->DeleteElement(index, JSObject::NORMAL_DELETION),
|
| + Object);
|
| +}
|
| +
|
| +
|
| MaybeObject* JSObject::DeleteElement(uint32_t index, DeleteMode mode) {
|
| Isolate* isolate = GetIsolate();
|
| // Check access rights if needed.
|
| @@ -3867,19 +3948,11 @@ MaybeObject* JSObject::DeleteElement(uint32_t index, DeleteMode mode) {
|
| }
|
|
|
|
|
| -MaybeObject* JSReceiver::DeleteProperty(String* name, DeleteMode mode) {
|
| - if (IsJSProxy()) {
|
| - return JSProxy::cast(this)->DeletePropertyWithHandler(name, mode);
|
| - }
|
| - return JSObject::cast(this)->DeleteProperty(name, mode);
|
| -}
|
| -
|
| -
|
| -MaybeObject* JSReceiver::DeleteElement(uint32_t index, DeleteMode mode) {
|
| - if (IsJSProxy()) {
|
| - return JSProxy::cast(this)->DeleteElementWithHandler(index, mode);
|
| - }
|
| - return JSObject::cast(this)->DeleteElement(index, mode);
|
| +Handle<Object> JSObject::DeleteProperty(Handle<JSObject> obj,
|
| + Handle<String> prop) {
|
| + CALL_HEAP_FUNCTION(obj->GetIsolate(),
|
| + obj->DeleteProperty(*prop, JSObject::NORMAL_DELETION),
|
| + Object);
|
| }
|
|
|
|
|
| @@ -3940,6 +4013,22 @@ MaybeObject* JSObject::DeleteProperty(String* name, DeleteMode mode) {
|
| }
|
|
|
|
|
| +MaybeObject* JSReceiver::DeleteElement(uint32_t index, DeleteMode mode) {
|
| + if (IsJSProxy()) {
|
| + return JSProxy::cast(this)->DeleteElementWithHandler(index, mode);
|
| + }
|
| + return JSObject::cast(this)->DeleteElement(index, mode);
|
| +}
|
| +
|
| +
|
| +MaybeObject* JSReceiver::DeleteProperty(String* name, DeleteMode mode) {
|
| + if (IsJSProxy()) {
|
| + return JSProxy::cast(this)->DeletePropertyWithHandler(name, mode);
|
| + }
|
| + return JSObject::cast(this)->DeleteProperty(name, mode);
|
| +}
|
| +
|
| +
|
| bool JSObject::ReferencesObjectFromElements(FixedArray* elements,
|
| ElementsKind kind,
|
| Object* object) {
|
| @@ -4066,6 +4155,11 @@ bool JSObject::ReferencesObject(Object* obj) {
|
| }
|
|
|
|
|
| +Handle<Object> JSObject::PreventExtensions(Handle<JSObject> object) {
|
| + CALL_HEAP_FUNCTION(object->GetIsolate(), object->PreventExtensions(), Object);
|
| +}
|
| +
|
| +
|
| MaybeObject* JSObject::PreventExtensions() {
|
| Isolate* isolate = GetIsolate();
|
| if (IsAccessCheckNeeded() &&
|
| @@ -9388,6 +9482,35 @@ MaybeObject* JSReceiver::SetElement(uint32_t index,
|
| }
|
|
|
|
|
| +Handle<Object> JSObject::SetOwnElement(Handle<JSObject> object,
|
| + uint32_t index,
|
| + Handle<Object> value,
|
| + StrictModeFlag strict_mode) {
|
| + ASSERT(!object->HasExternalArrayElements());
|
| + CALL_HEAP_FUNCTION(object->GetIsolate(),
|
| + object->SetElement(index, *value, strict_mode, false),
|
| + Object);
|
| +}
|
| +
|
| +
|
| +Handle<Object> JSObject::SetElement(Handle<JSObject> object,
|
| + uint32_t index,
|
| + Handle<Object> value,
|
| + StrictModeFlag strict_mode) {
|
| + if (object->HasExternalArrayElements()) {
|
| + if (!value->IsSmi() && !value->IsHeapNumber() && !value->IsUndefined()) {
|
| + bool has_exception;
|
| + Handle<Object> number = Execution::ToNumber(value, &has_exception);
|
| + if (has_exception) return Handle<Object>();
|
| + value = number;
|
| + }
|
| + }
|
| + CALL_HEAP_FUNCTION(object->GetIsolate(),
|
| + object->SetElement(index, *value, strict_mode, true),
|
| + Object);
|
| +}
|
| +
|
| +
|
| MaybeObject* JSObject::SetElement(uint32_t index,
|
| Object* value,
|
| StrictModeFlag strict_mode,
|
| @@ -9510,6 +9633,14 @@ MaybeObject* JSObject::SetElementWithoutInterceptor(uint32_t index,
|
| }
|
|
|
|
|
| +Handle<Object> JSObject::TransitionElementsKind(Handle<JSObject> object,
|
| + ElementsKind to_kind) {
|
| + CALL_HEAP_FUNCTION(object->GetIsolate(),
|
| + object->TransitionElementsKind(to_kind),
|
| + Object);
|
| +}
|
| +
|
| +
|
| MUST_USE_RESULT MaybeObject* JSObject::TransitionElementsKind(
|
| ElementsKind to_kind) {
|
| ElementsKind from_kind = map()->elements_kind();
|
| @@ -11964,6 +12095,17 @@ MaybeObject* NumberDictionary::AtNumberPut(uint32_t key, Object* value) {
|
| }
|
|
|
|
|
| +Handle<NumberDictionary> NumberDictionary::Set(
|
| + Handle<NumberDictionary> dictionary,
|
| + uint32_t index,
|
| + Handle<Object> value,
|
| + PropertyDetails details) {
|
| + CALL_HEAP_FUNCTION(dictionary->GetIsolate(),
|
| + dictionary->Set(index, *value, details),
|
| + NumberDictionary);
|
| +}
|
| +
|
| +
|
| MaybeObject* NumberDictionary::Set(uint32_t key,
|
| Object* value,
|
| PropertyDetails details) {
|
|
|