Chromium Code Reviews| Index: src/objects.cc |
| diff --git a/src/objects.cc b/src/objects.cc |
| index e1931887b864f6e1e8cf0ea722218df8e45cbcee..72b43bce7d02cb3f7ef3b72ecbddb383aa889f02 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) { |
| @@ -735,6 +745,12 @@ MaybeObject* Object::GetElementWithReceiver(Object* receiver, uint32_t index) { |
| } |
| +Handle<Object> Object::GetPrototype(Handle<Object> obj) { |
|
Kevin Millikin (Chromium)
2012/01/04 13:00:32
This seems like a pointless function. It's not mu
ulan
2012/01/05 11:16:35
Done.
|
| + Handle<Object> result(obj->GetPrototype()); |
| + return result; |
| +} |
| + |
| + |
| Object* Object::GetPrototype() { |
| if (IsSmi()) { |
| Heap* heap = Isolate::Current()->heap(); |
| @@ -1961,6 +1977,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 +3051,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, |
| @@ -3104,6 +3143,18 @@ MaybeObject* JSObject::SetLocalPropertyIgnoreAttributes( |
| } |
| +void JSObject::SetLocalPropertyNoThrow(Handle<JSObject> object, |
|
Kevin Millikin (Chromium)
2012/01/04 13:00:32
Indentation is wrong.
I don't really like this fu
ulan
2012/01/05 11:16:35
Done.
|
| + Handle<String> key, |
| + Handle<Object> value, |
| + PropertyAttributes attributes) { |
| + Isolate* isolate = object->GetIsolate(); |
| + ASSERT(!isolate->has_pending_exception()); |
| + CHECK(!SetLocalPropertyIgnoreAttributes( |
| + object, key, value, attributes).is_null()); |
| + CHECK(!isolate->has_pending_exception()); |
| +} |
| + |
| + |
| PropertyAttributes JSObject::GetPropertyAttributePostInterceptor( |
| JSObject* receiver, |
| String* name, |
| @@ -3314,6 +3365,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 +3496,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 +3512,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 +3634,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 +3694,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 +3930,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 +3966,11 @@ MaybeObject* JSObject::DeleteElement(uint32_t index, DeleteMode mode) { |
| } |
| -MaybeObject* JSReceiver::DeleteProperty(String* name, DeleteMode mode) { |
|
ulan
2012/01/03 11:11:30
Placed JSReceiver::DeleteProperty and JSReceiver::
|
| - 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 +4031,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 +4173,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() && |
| @@ -9359,6 +9471,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, |
|
Kevin Millikin (Chromium)
2012/01/04 13:00:32
Indentation is off here.
ulan
2012/01/05 11:16:35
Done.
|
| + 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, |
| @@ -9481,6 +9622,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(); |
| @@ -11920,6 +12069,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) { |