Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 7b781951fb11bba73dad5224e99577818e607a2e..8f14bd0f318925311481d5c088e7af48e6f2f971 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -6285,28 +6285,31 @@ Object* JSReceiver::DefineProperty(Isolate* isolate, Handle<Object> object, |
// ES6 19.1.2.3.1 |
// static |
-Object* JSReceiver::DefineProperties(Isolate* isolate, Handle<Object> object, |
- Handle<Object> properties) { |
+MaybeHandle<Object> JSReceiver::DefineProperties(Isolate* isolate, |
+ Handle<Object> object, |
+ Handle<Object> properties) { |
// 1. If Type(O) is not Object, throw a TypeError exception. |
if (!object->IsJSReceiver()) { |
Handle<String> fun_name = |
isolate->factory()->InternalizeUtf8String("Object.defineProperties"); |
- THROW_NEW_ERROR_RETURN_FAILURE( |
- isolate, NewTypeError(MessageTemplate::kCalledOnNonObject, fun_name)); |
+ THROW_NEW_ERROR(isolate, |
+ NewTypeError(MessageTemplate::kCalledOnNonObject, fun_name), |
+ Object); |
} |
// 2. Let props be ToObject(Properties). |
// 3. ReturnIfAbrupt(props). |
Handle<JSReceiver> props; |
if (!Object::ToObject(isolate, properties).ToHandle(&props)) { |
- THROW_NEW_ERROR_RETURN_FAILURE( |
- isolate, NewTypeError(MessageTemplate::kUndefinedOrNullToObject)); |
+ THROW_NEW_ERROR(isolate, |
+ NewTypeError(MessageTemplate::kUndefinedOrNullToObject), |
+ Object); |
} |
// 4. Let keys be props.[[OwnPropertyKeys]](). |
// 5. ReturnIfAbrupt(keys). |
Handle<FixedArray> keys; |
- ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
+ ASSIGN_RETURN_ON_EXCEPTION( |
isolate, keys, |
- JSReceiver::GetKeys(props, JSReceiver::OWN_ONLY, ALL_PROPERTIES)); |
+ JSReceiver::GetKeys(props, JSReceiver::OWN_ONLY, ALL_PROPERTIES), Object); |
// 6. Let descriptors be an empty List. |
int capacity = keys->length(); |
std::vector<PropertyDescriptor> descriptors(capacity); |
@@ -6321,7 +6324,7 @@ Object* JSReceiver::DefineProperties(Isolate* isolate, Handle<Object> object, |
isolate, props, next_key, &success, LookupIterator::HIDDEN); |
DCHECK(success); |
Maybe<PropertyAttributes> maybe = JSReceiver::GetPropertyAttributes(&it); |
- if (!maybe.IsJust()) return isolate->heap()->exception(); |
+ if (!maybe.IsJust()) return MaybeHandle<Object>(); |
PropertyAttributes attrs = maybe.FromJust(); |
// 7c. If propDesc is not undefined and propDesc.[[Enumerable]] is true: |
if (attrs == ABSENT) continue; |
@@ -6329,13 +6332,13 @@ Object* JSReceiver::DefineProperties(Isolate* isolate, Handle<Object> object, |
// 7c i. Let descObj be Get(props, nextKey). |
// 7c ii. ReturnIfAbrupt(descObj). |
Handle<Object> desc_obj; |
- ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, desc_obj, |
- Object::GetProperty(&it)); |
+ ASSIGN_RETURN_ON_EXCEPTION(isolate, desc_obj, Object::GetProperty(&it), |
+ Object); |
// 7c iii. Let desc be ToPropertyDescriptor(descObj). |
success = PropertyDescriptor::ToPropertyDescriptor( |
isolate, desc_obj, &descriptors[descriptors_index]); |
// 7c iv. ReturnIfAbrupt(desc). |
- if (!success) return isolate->heap()->exception(); |
+ if (!success) return MaybeHandle<Object>(); |
// 7c v. Append the pair (a two element List) consisting of nextKey and |
// desc to the end of descriptors. |
descriptors[descriptors_index].set_name(next_key); |
@@ -6351,11 +6354,11 @@ Object* JSReceiver::DefineProperties(Isolate* isolate, Handle<Object> object, |
DefineOwnProperty(isolate, Handle<JSReceiver>::cast(object), |
desc->name(), desc, THROW_ON_ERROR); |
// 8d. ReturnIfAbrupt(status). |
- MAYBE_RETURN(status, isolate->heap()->exception()); |
+ if (!status.IsJust()) return MaybeHandle<Object>(); |
CHECK(status.FromJust()); |
} |
// 9. Return o. |
- return *object; |
+ return object; |
} |