Index: src/elements.cc |
diff --git a/src/elements.cc b/src/elements.cc |
index 5f2b0b0c6c237ffec48f2ca4a17f1bf96b44dc59..a7d48b4cf432411f90a709b350bf1b805a62ceac 100644 |
--- a/src/elements.cc |
+++ b/src/elements.cc |
@@ -754,7 +754,7 @@ class ElementsAccessorBase : public ElementsAccessor { |
UNIMPLEMENTED(); |
} |
- MUST_USE_RESULT virtual Handle<Object> Delete( |
+ MUST_USE_RESULT virtual MaybeHandle<Object> Delete( |
Handle<JSObject> obj, |
uint32_t key, |
JSReceiver::DeleteMode mode) V8_OVERRIDE = 0; |
@@ -1038,7 +1038,7 @@ class FastElementsAccessor |
return isolate->factory()->true_value(); |
} |
- virtual Handle<Object> Delete( |
+ virtual MaybeHandle<Object> Delete( |
Handle<JSObject> obj, |
uint32_t key, |
JSReceiver::DeleteMode mode) V8_FINAL V8_OVERRIDE { |
@@ -1373,7 +1373,7 @@ class TypedElementsAccessor |
return obj; |
} |
- MUST_USE_RESULT virtual Handle<Object> Delete( |
+ MUST_USE_RESULT virtual MaybeHandle<Object> Delete( |
Handle<JSObject> obj, |
uint32_t key, |
JSReceiver::DeleteMode mode) V8_FINAL V8_OVERRIDE { |
@@ -1476,59 +1476,46 @@ class DictionaryElementsAccessor |
return length_object; |
} |
- MUST_USE_RESULT static MaybeObject* DeleteCommon( |
- JSObject* obj, |
+ MUST_USE_RESULT static MaybeHandle<Object> DeleteCommon( |
+ Handle<JSObject> obj, |
uint32_t key, |
JSReceiver::DeleteMode mode) { |
Isolate* isolate = obj->GetIsolate(); |
- Heap* heap = isolate->heap(); |
- FixedArray* backing_store = FixedArray::cast(obj->elements()); |
+ Handle<FixedArray> backing_store(FixedArray::cast(obj->elements()), |
+ isolate); |
bool is_arguments = |
(obj->GetElementsKind() == SLOPPY_ARGUMENTS_ELEMENTS); |
if (is_arguments) { |
- backing_store = FixedArray::cast(backing_store->get(1)); |
+ backing_store = handle(FixedArray::cast(backing_store->get(1)), isolate); |
} |
- SeededNumberDictionary* dictionary = |
- SeededNumberDictionary::cast(backing_store); |
+ Handle<SeededNumberDictionary> dictionary = |
+ Handle<SeededNumberDictionary>::cast(backing_store); |
int entry = dictionary->FindEntry(key); |
if (entry != SeededNumberDictionary::kNotFound) { |
- Object* result = dictionary->DeleteProperty(entry, mode); |
- if (result == heap->false_value()) { |
+ Handle<Object> result = |
+ SeededNumberDictionary::DeleteProperty(dictionary, entry, mode); |
+ if (*result == *isolate->factory()->false_value()) { |
if (mode == JSObject::STRICT_DELETION) { |
// Deleting a non-configurable property in strict mode. |
- HandleScope scope(isolate); |
- Handle<Object> holder(obj, isolate); |
Handle<Object> name = isolate->factory()->NewNumberFromUint(key); |
- Handle<Object> args[2] = { name, holder }; |
+ Handle<Object> args[2] = { name, obj }; |
Handle<Object> error = |
isolate->factory()->NewTypeError("strict_delete_property", |
HandleVector(args, 2)); |
- return isolate->Throw(*error); |
+ return isolate->Throw<Object>(error); |
} |
- return heap->false_value(); |
- } |
- MaybeObject* maybe_elements = dictionary->Shrink(key); |
- FixedArray* new_elements = NULL; |
- if (!maybe_elements->To(&new_elements)) { |
- return maybe_elements; |
+ return isolate->factory()->false_value(); |
} |
+ Handle<FixedArray> new_elements = |
+ SeededNumberDictionary::Shrink(dictionary, key); |
+ |
if (is_arguments) { |
- FixedArray::cast(obj->elements())->set(1, new_elements); |
+ FixedArray::cast(obj->elements())->set(1, *new_elements); |
} else { |
- obj->set_elements(new_elements); |
+ obj->set_elements(*new_elements); |
} |
} |
- return heap->true_value(); |
- } |
- |
- // TODO(ishell): Temporary wrapper until handlified. |
- MUST_USE_RESULT static Handle<Object> DeleteCommon( |
- Handle<JSObject> obj, |
- uint32_t key, |
- JSReceiver::DeleteMode mode) { |
- CALL_HEAP_FUNCTION(obj->GetIsolate(), |
- DeleteCommon(*obj, key, mode), |
- Object); |
+ return isolate->factory()->true_value(); |
} |
static void CopyElementsImpl(Handle<FixedArrayBase> from, |
@@ -1546,7 +1533,7 @@ class DictionaryElementsAccessor |
friend class ElementsAccessorBase<DictionaryElementsAccessor, |
ElementsKindTraits<DICTIONARY_ELEMENTS> >; |
- MUST_USE_RESULT virtual Handle<Object> Delete( |
+ MUST_USE_RESULT virtual MaybeHandle<Object> Delete( |
Handle<JSObject> obj, |
uint32_t key, |
JSReceiver::DeleteMode mode) V8_FINAL V8_OVERRIDE { |
@@ -1747,7 +1734,7 @@ class SloppyArgumentsElementsAccessor : public ElementsAccessorBase< |
return obj; |
} |
- MUST_USE_RESULT virtual Handle<Object> Delete( |
+ MUST_USE_RESULT virtual MaybeHandle<Object> Delete( |
Handle<JSObject> obj, |
uint32_t key, |
JSReceiver::DeleteMode mode) V8_FINAL V8_OVERRIDE { |