Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 9e8a53ef27de3ac8e0dfabfa305b799e2af45e79..1323254493b3aeaf81380f94abd191229adaeeb0 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -4924,22 +4924,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)); |
} |
@@ -5252,7 +5250,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, |
@@ -5285,15 +5283,15 @@ 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, strict_mode, true, set_mode); |
JSObject::ValidateElements(js_object); |
+ |
return result.is_null() ? result : value; |
} |
@@ -5305,13 +5303,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); |
@@ -5322,13 +5319,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); |
} |
@@ -5354,17 +5350,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, |
@@ -5376,13 +5370,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); |
@@ -5390,12 +5383,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)) { |
@@ -5406,12 +5397,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; |
@@ -5422,14 +5411,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); |
} |
@@ -5644,8 +5631,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; |
} |
@@ -9218,8 +9207,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; |
} |
@@ -9934,10 +9925,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(); |
} |
@@ -12293,9 +12283,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++; |
} |
} |