Chromium Code Reviews| Index: src/runtime.cc |
| diff --git a/src/runtime.cc b/src/runtime.cc |
| index 1eff4468aa87f595b54baeefa1aa26e65d2c89ad..47c36467a4740e97c89d631e152377124641de84 100644 |
| --- a/src/runtime.cc |
| +++ b/src/runtime.cc |
| @@ -4945,22 +4945,20 @@ static Handle<Name> ToName(Isolate* isolate, Handle<Object> key) { |
| } |
| -MaybeObject* Runtime::HasObjectProperty(Isolate* isolate, |
| - Handle<JSReceiver> object, |
| - Handle<Object> key) { |
| - HandleScope scope(isolate); |
| - |
| +MaybeHandle<Object> Runtime::HasObjectProperty(Isolate* isolate, |
| + Handle<JSReceiver> object, |
| + Handle<Object> key) { |
| // Check if the given key is an array index. |
| uint32_t index; |
| if (key->ToArrayIndex(&index)) { |
| - return isolate->heap()->ToBoolean(JSReceiver::HasElement(object, index)); |
| + return isolate->factory()->ToBoolean(JSReceiver::HasElement(object, index)); |
| } |
| // Convert the key to a name - possibly by calling back into JavaScript. |
| Handle<Name> name = ToName(isolate, key); |
| - RETURN_IF_EMPTY_HANDLE(isolate, name); |
| + RETURN_IF_EMPTY_HANDLE_VALUE(isolate, name, MaybeHandle<Object>()); |
| - return isolate->heap()->ToBoolean(JSReceiver::HasProperty(object, name)); |
| + return isolate->factory()->ToBoolean(JSReceiver::HasProperty(object, name)); |
| } |
| @@ -5276,7 +5274,7 @@ MaybeHandle<Object> Runtime::SetObjectProperty(Isolate* isolate, |
| bool has_pending_exception = false; |
| Handle<Object> name_object = key->IsSymbol() |
| ? key : Execution::ToString(isolate, key, &has_pending_exception); |
| - if (has_pending_exception) return Handle<Object>(); // exception |
| + if (has_pending_exception) return MaybeHandle<Object>(); // exception |
| Handle<Name> name = Handle<Name>::cast(name_object); |
| return JSReceiver::SetProperty(Handle<JSProxy>::cast(object), name, value, |
| attr, |
| @@ -5309,14 +5307,13 @@ MaybeHandle<Object> Runtime::SetObjectProperty(Isolate* isolate, |
| bool has_exception; |
| Handle<Object> number = |
| Execution::ToNumber(isolate, value, &has_exception); |
| - if (has_exception) return Handle<Object>(); // exception |
| + if (has_exception) return MaybeHandle<Object>(); // exception |
| value = number; |
| } |
| } |
| - Handle<Object> result = JSObject::SetElement(js_object, index, value, attr, |
| - strict_mode, |
| - true, |
| - set_mode); |
| + MaybeHandle<Object> result = |
| + JSObject::SetElement(js_object, index, value, attr, |
|
Igor Sheludko
2014/04/07 15:32:31
I would fix identation of this line.
Yang
2014/04/08 06:51:42
Done.
|
| + strict_mode, true, set_mode); |
| js_object->ValidateElements(); |
| return result.is_null() ? result : value; |
| } |
| @@ -5329,13 +5326,12 @@ MaybeHandle<Object> Runtime::SetObjectProperty(Isolate* isolate, |
| bool has_exception; |
| Handle<Object> number = |
| Execution::ToNumber(isolate, value, &has_exception); |
| - if (has_exception) return Handle<Object>(); // exception |
| + if (has_exception) return MaybeHandle<Object>(); // exception |
| value = number; |
| } |
| } |
| - return JSObject::SetElement(js_object, index, value, attr, strict_mode, |
| - true, |
| - set_mode); |
| + return JSObject::SetElement(js_object, index, value, attr, |
| + strict_mode, true, set_mode); |
| } else { |
| if (name->IsString()) Handle<String>::cast(name)->TryFlatten(); |
| return JSReceiver::SetProperty(js_object, name, value, attr, strict_mode); |
| @@ -5346,13 +5342,12 @@ MaybeHandle<Object> Runtime::SetObjectProperty(Isolate* isolate, |
| bool has_pending_exception = false; |
| Handle<Object> converted = |
| Execution::ToString(isolate, key, &has_pending_exception); |
| - if (has_pending_exception) return Handle<Object>(); // exception |
| + if (has_pending_exception) return MaybeHandle<Object>(); // exception |
| Handle<String> name = Handle<String>::cast(converted); |
| if (name->AsArrayIndex(&index)) { |
| - return JSObject::SetElement(js_object, index, value, attr, strict_mode, |
| - true, |
| - set_mode); |
| + return JSObject::SetElement(js_object, index, value, attr, |
| + strict_mode, true, set_mode); |
| } else { |
| return JSReceiver::SetProperty(js_object, name, value, attr, strict_mode); |
| } |
| @@ -5378,17 +5373,15 @@ MaybeHandle<Object> Runtime::ForceSetObjectProperty(Handle<JSObject> js_object, |
| return value; |
| } |
| - return JSObject::SetElement(js_object, index, value, attr, SLOPPY, |
| - false, |
| - DEFINE_PROPERTY); |
| + return JSObject::SetElement(js_object, index, value, attr, |
| + SLOPPY, false, DEFINE_PROPERTY); |
| } |
| if (key->IsName()) { |
| Handle<Name> name = Handle<Name>::cast(key); |
| if (name->AsArrayIndex(&index)) { |
| - return JSObject::SetElement(js_object, index, value, attr, SLOPPY, |
| - false, |
| - DEFINE_PROPERTY); |
| + return JSObject::SetElement(js_object, index, value, attr, |
| + SLOPPY, false, DEFINE_PROPERTY); |
| } else { |
| if (name->IsString()) Handle<String>::cast(name)->TryFlatten(); |
| return JSObject::SetLocalPropertyIgnoreAttributes(js_object, name, |
| @@ -5400,13 +5393,12 @@ MaybeHandle<Object> Runtime::ForceSetObjectProperty(Handle<JSObject> js_object, |
| bool has_pending_exception = false; |
| Handle<Object> converted = |
| Execution::ToString(isolate, key, &has_pending_exception); |
| - if (has_pending_exception) return Handle<Object>(); // exception |
| + if (has_pending_exception) return MaybeHandle<Object>(); // exception |
| Handle<String> name = Handle<String>::cast(converted); |
| if (name->AsArrayIndex(&index)) { |
| - return JSObject::SetElement(js_object, index, value, attr, SLOPPY, |
| - false, |
| - DEFINE_PROPERTY); |
| + return JSObject::SetElement(js_object, index, value, attr, |
| + SLOPPY, false, DEFINE_PROPERTY); |
| } else { |
| return JSObject::SetLocalPropertyIgnoreAttributes(js_object, name, value, |
| attr); |
| @@ -5414,12 +5406,10 @@ MaybeHandle<Object> Runtime::ForceSetObjectProperty(Handle<JSObject> js_object, |
| } |
| -MaybeObject* Runtime::DeleteObjectProperty(Isolate* isolate, |
| - Handle<JSReceiver> receiver, |
| - Handle<Object> key, |
| - JSReceiver::DeleteMode mode) { |
| - HandleScope scope(isolate); |
| - |
| +MaybeHandle<Object> Runtime::DeleteObjectProperty(Isolate* isolate, |
| + Handle<JSReceiver> receiver, |
| + Handle<Object> key, |
| + JSReceiver::DeleteMode mode) { |
| // Check if the given key is an array index. |
| uint32_t index; |
| if (key->ToArrayIndex(&index)) { |
| @@ -5430,12 +5420,10 @@ MaybeObject* Runtime::DeleteObjectProperty(Isolate* isolate, |
| // underlying string does nothing with the deletion, we can ignore |
| // such deletions. |
| if (receiver->IsStringObjectWithCharacterAt(index)) { |
| - return isolate->heap()->true_value(); |
| + return isolate->factory()->true_value(); |
| } |
| - Handle<Object> result = JSReceiver::DeleteElement(receiver, index, mode); |
| - RETURN_IF_EMPTY_HANDLE(isolate, result); |
| - return *result; |
| + return JSReceiver::DeleteElement(receiver, index, mode); |
| } |
| Handle<Name> name; |
| @@ -5446,14 +5434,12 @@ MaybeObject* Runtime::DeleteObjectProperty(Isolate* isolate, |
| bool has_pending_exception = false; |
| Handle<Object> converted = Execution::ToString( |
| isolate, key, &has_pending_exception); |
| - if (has_pending_exception) return Failure::Exception(); |
| + if (has_pending_exception) return MaybeHandle<Object>(); |
| name = Handle<String>::cast(converted); |
| } |
| if (name->IsString()) Handle<String>::cast(name)->TryFlatten(); |
| - Handle<Object> result = JSReceiver::DeleteProperty(receiver, name, mode); |
| - RETURN_IF_EMPTY_HANDLE(isolate, result); |
| - return *result; |
| + return JSReceiver::DeleteProperty(receiver, name, mode); |
| } |
| @@ -5668,8 +5654,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DeleteProperty) { |
| CONVERT_STRICT_MODE_ARG_CHECKED(strict_mode, 2); |
| JSReceiver::DeleteMode delete_mode = strict_mode == STRICT |
| ? JSReceiver::STRICT_DELETION : JSReceiver::NORMAL_DELETION; |
| - Handle<Object> result = JSReceiver::DeleteProperty(object, key, delete_mode); |
| - RETURN_IF_EMPTY_HANDLE(isolate, result); |
| + Handle<Object> result; |
| + ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| + isolate, result, |
| + JSReceiver::DeleteProperty(object, key, delete_mode)); |
| return *result; |
| } |
| @@ -9242,8 +9230,10 @@ RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_DeleteContextSlot) { |
| // the global object, or the subject of a with. Try to delete it |
| // (respecting DONT_DELETE). |
| Handle<JSObject> object = Handle<JSObject>::cast(holder); |
| - Handle<Object> result = JSReceiver::DeleteProperty(object, name); |
| - RETURN_IF_EMPTY_HANDLE(isolate, result); |
| + Handle<Object> result; |
| + ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| + isolate, result, |
| + JSReceiver::DeleteProperty(object, name)); |
| return *result; |
| } |
| @@ -9958,10 +9948,9 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_PushIfAbsent) { |
| } |
| // Strict not needed. Used for cycle detection in Array join implementation. |
| - RETURN_IF_EMPTY_HANDLE(isolate, JSObject::SetFastElement(array, length, |
| - element, |
| - SLOPPY, |
| - true)); |
| + RETURN_FAILURE_ON_EXCEPTION( |
| + isolate, |
| + JSObject::SetFastElement(array, length, element, SLOPPY, true)); |
| return isolate->heap()->true_value(); |
| } |
| @@ -12317,9 +12306,11 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetStepInPositions) { |
| if (accept) { |
| if (break_location_iterator.IsStepInLocation(isolate)) { |
| Smi* position_value = Smi::FromInt(break_location_iterator.position()); |
| - JSObject::SetElement(array, len, |
| - Handle<Object>(position_value, isolate), |
| - NONE, SLOPPY); |
| + RETURN_FAILURE_ON_EXCEPTION( |
| + isolate, |
| + JSObject::SetElement(array, len, |
| + Handle<Object>(position_value, isolate), |
| + NONE, SLOPPY)); |
| len++; |
| } |
| } |