Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 859cb8a520acc9c7d55c21439ebe5ca9d677cf47..2bf5b4a4a0bc760ba695038e247406497a9b9725 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -5189,8 +5189,9 @@ Handle<Object> JSObject::DeletePropertyWithInterceptor(Handle<JSObject> object, |
} |
-Handle<Object> JSObject::DeleteElementWithInterceptor(Handle<JSObject> object, |
- uint32_t index) { |
+MaybeHandle<Object> JSObject::DeleteElementWithInterceptor( |
+ Handle<JSObject> object, |
+ uint32_t index) { |
Isolate* isolate = object->GetIsolate(); |
Factory* factory = isolate->factory(); |
@@ -5215,16 +5216,15 @@ Handle<Object> JSObject::DeleteElementWithInterceptor(Handle<JSObject> object, |
// Rebox CustomArguments::kReturnValueOffset before returning. |
return handle(*result_internal, isolate); |
} |
- Handle<Object> delete_result = object->GetElementsAccessor()->Delete( |
+ MaybeHandle<Object> delete_result = object->GetElementsAccessor()->Delete( |
object, index, NORMAL_DELETION); |
- RETURN_HANDLE_IF_SCHEDULED_EXCEPTION(isolate, Object); |
return delete_result; |
} |
-Handle<Object> JSObject::DeleteElement(Handle<JSObject> object, |
- uint32_t index, |
- DeleteMode mode) { |
+MaybeHandle<Object> JSObject::DeleteElement(Handle<JSObject> object, |
+ uint32_t index, |
+ DeleteMode mode) { |
Isolate* isolate = object->GetIsolate(); |
Factory* factory = isolate->factory(); |
@@ -5271,12 +5271,14 @@ Handle<Object> JSObject::DeleteElement(Handle<JSObject> object, |
} |
// Skip interceptor if forcing deletion. |
- Handle<Object> result; |
+ MaybeHandle<Object> maybe_result; |
if (object->HasIndexedInterceptor() && mode != FORCE_DELETION) { |
- result = DeleteElementWithInterceptor(object, index); |
+ maybe_result = DeleteElementWithInterceptor(object, index); |
} else { |
- result = object->GetElementsAccessor()->Delete(object, index, mode); |
+ maybe_result = object->GetElementsAccessor()->Delete(object, index, mode); |
} |
+ Handle<Object> result; |
+ ASSIGN_RETURN_ON_EXCEPTION(isolate, result, maybe_result, Object); |
if (should_enqueue_change_record && !HasLocalElement(object, index)) { |
Handle<String> name = factory->Uint32ToString(index); |
@@ -5287,9 +5289,9 @@ Handle<Object> JSObject::DeleteElement(Handle<JSObject> object, |
} |
-Handle<Object> JSObject::DeleteProperty(Handle<JSObject> object, |
- Handle<Name> name, |
- DeleteMode mode) { |
+MaybeHandle<Object> JSObject::DeleteProperty(Handle<JSObject> object, |
+ Handle<Name> name, |
+ DeleteMode mode) { |
Isolate* isolate = object->GetIsolate(); |
// ECMA-262, 3rd, 8.6.2.5 |
ASSERT(name->IsName()); |
@@ -14256,13 +14258,28 @@ template void Dictionary<SeededNumberDictionaryShape, uint32_t>::CopyKeysTo( |
template Object* Dictionary<NameDictionaryShape, Name*>::DeleteProperty( |
int, JSObject::DeleteMode); |
+template Handle<Object> Dictionary<NameDictionaryShape, Name*>::DeleteProperty( |
+ Handle<Dictionary<NameDictionaryShape, Name*> >, |
+ int, |
+ JSObject::DeleteMode); |
+ |
template Object* Dictionary<SeededNumberDictionaryShape, uint32_t>:: |
DeleteProperty(int, JSObject::DeleteMode); |
+template Handle<Object> |
+Dictionary<SeededNumberDictionaryShape, uint32_t>::DeleteProperty( |
+ Handle<Dictionary<SeededNumberDictionaryShape, uint32_t> >, |
+ int, |
+ JSObject::DeleteMode); |
+ |
template MaybeObject* Dictionary<NameDictionaryShape, Name*>::Shrink(Name* n); |
template MaybeObject* Dictionary<SeededNumberDictionaryShape, uint32_t>::Shrink( |
uint32_t); |
+template Handle<FixedArray> |
+Dictionary<SeededNumberDictionaryShape, uint32_t>::Shrink( |
+ Handle<Dictionary<SeededNumberDictionaryShape, uint32_t> >, |
+ uint32_t); |
template void Dictionary<NameDictionaryShape, Name*>::CopyKeysTo( |
FixedArray*, |
@@ -15261,6 +15278,18 @@ MaybeObject* Dictionary<Shape, Key>::EnsureCapacity(int n, Key key) { |
} |
+// TODO(ishell): Temporary wrapper until handlified. |
+template<typename Shape, typename Key> |
+Handle<Object> Dictionary<Shape, Key>::DeleteProperty( |
+ Handle<Dictionary<Shape, Key> > dictionary, |
+ int entry, |
+ JSObject::DeleteMode mode) { |
+ CALL_HEAP_FUNCTION(dictionary->GetIsolate(), |
+ dictionary->DeleteProperty(entry, mode), |
+ Object); |
+} |
+ |
+ |
template<typename Shape, typename Key> |
Object* Dictionary<Shape, Key>::DeleteProperty(int entry, |
JSReceiver::DeleteMode mode) { |
@@ -15276,6 +15305,17 @@ Object* Dictionary<Shape, Key>::DeleteProperty(int entry, |
} |
+// TODO(ishell): Temporary wrapper until handlified. |
+template<typename Shape, typename Key> |
+Handle<FixedArray> Dictionary<Shape, Key>::Shrink( |
+ Handle<Dictionary<Shape, Key> > dictionary, |
+ Key key) { |
+ CALL_HEAP_FUNCTION(dictionary->GetIsolate(), |
+ dictionary->Shrink(key), |
+ FixedArray); |
+} |
+ |
+ |
template<typename Shape, typename Key> |
MaybeObject* Dictionary<Shape, Key>::Shrink(Key key) { |
return HashTable<Shape, Key>::Shrink(key); |