| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 721681bc4821314885e6e501cc2192f91bd733fc..af7dc3752a5cbca13c4a5e12ddd7e9c801e70616 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -5764,9 +5764,8 @@ MaybeObject* DescriptorArray::CopyInsert(Descriptor* descriptor,
|
| ASSERT(descriptor->GetDetails().type() != NULL_DESCRIPTOR);
|
|
|
| // Ensure the key is a symbol.
|
| - Object* result;
|
| { MaybeObject* maybe_result = descriptor->KeyToSymbol();
|
| - if (!maybe_result->ToObject(&result)) return maybe_result;
|
| + if (maybe_result->IsFailure()) return maybe_result;
|
| }
|
|
|
| int new_size = 0;
|
| @@ -5801,9 +5800,7 @@ MaybeObject* DescriptorArray::CopyInsert(Descriptor* descriptor,
|
|
|
| DescriptorArray* new_descriptors;
|
| { MaybeObject* maybe_result = Allocate(new_size);
|
| - if (!maybe_result->To<DescriptorArray>(&new_descriptors)) {
|
| - return maybe_result;
|
| - }
|
| + if (!maybe_result->To(&new_descriptors)) return maybe_result;
|
| }
|
|
|
| DescriptorArray::WhitenessWitness witness(new_descriptors);
|
| @@ -5853,27 +5850,18 @@ MaybeObject* DescriptorArray::CopyInsert(Descriptor* descriptor,
|
|
|
|
|
| MaybeObject* DescriptorArray::RemoveTransitions() {
|
| - // Remove all transitions and null descriptors. Return a copy of the array
|
| - // with all transitions removed, or a Failure object if the new array could
|
| - // not be allocated.
|
| -
|
| - // Compute the size of the map transition entries to be removed.
|
| + // Allocate the new descriptor array.
|
| int new_number_of_descriptors = 0;
|
| for (int i = 0; i < number_of_descriptors(); i++) {
|
| if (IsProperty(i)) new_number_of_descriptors++;
|
| }
|
| -
|
| - // Allocate the new descriptor array.
|
| DescriptorArray* new_descriptors;
|
| { MaybeObject* maybe_result = Allocate(new_number_of_descriptors);
|
| - if (!maybe_result->To<DescriptorArray>(&new_descriptors)) {
|
| - return maybe_result;
|
| - }
|
| + if (!maybe_result->To(&new_descriptors)) return maybe_result;
|
| }
|
|
|
| - DescriptorArray::WhitenessWitness witness(new_descriptors);
|
| -
|
| // Copy the content.
|
| + DescriptorArray::WhitenessWitness witness(new_descriptors);
|
| int next_descriptor = 0;
|
| for (int i = 0; i < number_of_descriptors(); i++) {
|
| if (IsProperty(i)) {
|
| @@ -7574,11 +7562,10 @@ MaybeObject* JSFunction::SetPrototype(Object* value) {
|
| // Copy the map so this does not affect unrelated functions.
|
| // Remove map transitions because they point to maps with a
|
| // different prototype.
|
| - Object* new_object;
|
| + Map* new_map;
|
| { MaybeObject* maybe_new_map = map()->CopyDropTransitions();
|
| - if (!maybe_new_map->ToObject(&new_object)) return maybe_new_map;
|
| + if (!maybe_new_map->To(&new_map)) return maybe_new_map;
|
| }
|
| - Map* new_map = Map::cast(new_object);
|
| Heap* heap = new_map->GetHeap();
|
| set_map(new_map);
|
| new_map->set_constructor(value);
|
| @@ -7635,12 +7622,12 @@ Context* JSFunction::GlobalContextFromLiterals(FixedArray* literals) {
|
| MaybeObject* Oddball::Initialize(const char* to_string,
|
| Object* to_number,
|
| byte kind) {
|
| - Object* symbol;
|
| + String* symbol;
|
| { MaybeObject* maybe_symbol =
|
| Isolate::Current()->heap()->LookupAsciiSymbol(to_string);
|
| - if (!maybe_symbol->ToObject(&symbol)) return maybe_symbol;
|
| + if (!maybe_symbol->To(&symbol)) return maybe_symbol;
|
| }
|
| - set_to_string(String::cast(symbol));
|
| + set_to_string(symbol);
|
| set_to_number(to_number);
|
| set_kind(kind);
|
| return this;
|
| @@ -8552,17 +8539,14 @@ MaybeObject* JSObject::SetFastElementsCapacityAndLength(
|
| ASSERT(!HasExternalArrayElements());
|
|
|
| // Allocate a new fast elements backing store.
|
| - FixedArray* new_elements = NULL;
|
| - { Object* object;
|
| - MaybeObject* maybe = heap->AllocateFixedArrayWithHoles(capacity);
|
| - if (!maybe->ToObject(&object)) return maybe;
|
| - new_elements = FixedArray::cast(object);
|
| + FixedArray* new_elements;
|
| + { MaybeObject* maybe = heap->AllocateFixedArrayWithHoles(capacity);
|
| + if (!maybe->To(&new_elements)) return maybe;
|
| }
|
|
|
| // Find the new map to use for this object if there is a map change.
|
| Map* new_map = NULL;
|
| if (elements()->map() != heap->non_strict_arguments_elements_map()) {
|
| - Object* object;
|
| // The resized array has FAST_SMI_ONLY_ELEMENTS if the capacity mode forces
|
| // it, or if it's allowed and the old elements array contained only SMIs.
|
| bool has_fast_smi_only_elements =
|
| @@ -8574,8 +8558,7 @@ MaybeObject* JSObject::SetFastElementsCapacityAndLength(
|
| ? FAST_SMI_ONLY_ELEMENTS
|
| : FAST_ELEMENTS;
|
| MaybeObject* maybe = GetElementsTransitionMap(GetIsolate(), elements_kind);
|
| - if (!maybe->ToObject(&object)) return maybe;
|
| - new_map = Map::cast(object);
|
| + if (!maybe->To(&new_map)) return maybe;
|
| }
|
|
|
| FixedArrayBase* old_elements_raw = elements();
|
| @@ -8630,7 +8613,7 @@ MaybeObject* JSObject::SetFastElementsCapacityAndLength(
|
| MaybeObject* maybe_value_object =
|
| GetHeap()->AllocateHeapNumber(old_elements->get_scalar(i),
|
| TENURED);
|
| - if (!maybe_value_object->ToObject(&obj)) return maybe_value_object;
|
| + if (!maybe_value_object->To(&obj)) return maybe_value_object;
|
| // Force write barrier. It's not worth trying to exploit
|
| // elems->GetWriteBarrierMode(), since it requires an
|
| // AssertNoAllocation stack object that would have to be positioned
|
| @@ -8676,18 +8659,17 @@ MaybeObject* JSObject::SetFastDoubleElementsCapacityAndLength(
|
| // We should never end in here with a pixel or external array.
|
| ASSERT(!HasExternalArrayElements());
|
|
|
| - Object* obj;
|
| + FixedDoubleArray* elems;
|
| { MaybeObject* maybe_obj =
|
| heap->AllocateUninitializedFixedDoubleArray(capacity);
|
| - if (!maybe_obj->ToObject(&obj)) return maybe_obj;
|
| + if (!maybe_obj->To(&elems)) return maybe_obj;
|
| }
|
| - FixedDoubleArray* elems = FixedDoubleArray::cast(obj);
|
|
|
| + Map* new_map;
|
| { MaybeObject* maybe_obj =
|
| GetElementsTransitionMap(heap->isolate(), FAST_DOUBLE_ELEMENTS);
|
| - if (!maybe_obj->ToObject(&obj)) return maybe_obj;
|
| + if (!maybe_obj->To(&new_map)) return maybe_obj;
|
| }
|
| - Map* new_map = Map::cast(obj);
|
|
|
| FixedArrayBase* old_elements = elements();
|
| ElementsKind elements_kind(GetElementsKind());
|
| @@ -8739,11 +8721,8 @@ MaybeObject* JSArray::Initialize(int capacity) {
|
| if (capacity == 0) {
|
| new_elements = heap->empty_fixed_array();
|
| } else {
|
| - Object* obj;
|
| - { MaybeObject* maybe_obj = heap->AllocateFixedArrayWithHoles(capacity);
|
| - if (!maybe_obj->ToObject(&obj)) return maybe_obj;
|
| - }
|
| - new_elements = FixedArray::cast(obj);
|
| + MaybeObject* maybe_obj = heap->AllocateFixedArrayWithHoles(capacity);
|
| + if (!maybe_obj->To(&new_elements)) return maybe_obj;
|
| }
|
| set_elements(new_elements);
|
| return this;
|
| @@ -8803,7 +8782,7 @@ MaybeObject* Map::PutPrototypeTransition(Object* prototype, Map* map) {
|
| // Grow array by factor 2 over and above what we need.
|
| { MaybeObject* maybe_cache =
|
| GetHeap()->AllocateFixedArray(transitions * 2 * step + header);
|
| - if (!maybe_cache->To<FixedArray>(&new_cache)) return maybe_cache;
|
| + if (!maybe_cache->To(&new_cache)) return maybe_cache;
|
| }
|
|
|
| for (int i = 0; i < capacity * step; i++) {
|
| @@ -9306,10 +9285,8 @@ MaybeObject* JSObject::SetFastElement(uint32_t index,
|
| if (backing_store->map() == GetHeap()->non_strict_arguments_elements_map()) {
|
| backing_store = FixedArray::cast(backing_store->get(1));
|
| } else {
|
| - Object* writable;
|
| MaybeObject* maybe = EnsureWritableFastElements();
|
| - if (!maybe->ToObject(&writable)) return maybe;
|
| - backing_store = FixedArray::cast(writable);
|
| + if (!maybe->To(&backing_store)) return maybe;
|
| }
|
| uint32_t capacity = static_cast<uint32_t>(backing_store->length());
|
|
|
| @@ -9362,10 +9339,11 @@ MaybeObject* JSObject::SetFastElement(uint32_t index,
|
| }
|
| // Change elements kind from SMI_ONLY to generic FAST if necessary.
|
| if (HasFastSmiOnlyElements() && !value->IsSmi()) {
|
| - MaybeObject* maybe_new_map = GetElementsTransitionMap(GetIsolate(),
|
| - FAST_ELEMENTS);
|
| Map* new_map;
|
| - if (!maybe_new_map->To<Map>(&new_map)) return maybe_new_map;
|
| + { MaybeObject* maybe_new_map = GetElementsTransitionMap(GetIsolate(),
|
| + FAST_ELEMENTS);
|
| + if (!maybe_new_map->To(&new_map)) return maybe_new_map;
|
| + }
|
| set_map(new_map);
|
| if (FLAG_trace_elements_transitions) {
|
| PrintElementsTransition(stdout, FAST_SMI_ONLY_ELEMENTS, elements(),
|
| @@ -9374,17 +9352,18 @@ MaybeObject* JSObject::SetFastElement(uint32_t index,
|
| }
|
| // Increase backing store capacity if that's been decided previously.
|
| if (new_capacity != capacity) {
|
| - Object* new_elements;
|
| + FixedArray* new_elements;
|
| SetFastElementsCapacityMode set_capacity_mode =
|
| value->IsSmi() && HasFastSmiOnlyElements()
|
| ? kAllowSmiOnlyElements
|
| : kDontAllowSmiOnlyElements;
|
| - MaybeObject* maybe =
|
| - SetFastElementsCapacityAndLength(new_capacity,
|
| - array_length,
|
| - set_capacity_mode);
|
| - if (!maybe->ToObject(&new_elements)) return maybe;
|
| - FixedArray::cast(new_elements)->set(index, value);
|
| + { MaybeObject* maybe =
|
| + SetFastElementsCapacityAndLength(new_capacity,
|
| + array_length,
|
| + set_capacity_mode);
|
| + if (!maybe->To(&new_elements)) return maybe;
|
| + }
|
| + new_elements->set(index, value);
|
| return value;
|
| }
|
| // Finally, set the new element and length.
|
| @@ -9484,7 +9463,7 @@ MaybeObject* JSObject::SetDictionaryElement(uint32_t index,
|
| FixedArrayBase* new_dictionary;
|
| PropertyDetails details = PropertyDetails(attributes, NORMAL);
|
| MaybeObject* maybe = dictionary->AddNumberEntry(index, value, details);
|
| - if (!maybe->To<FixedArrayBase>(&new_dictionary)) return maybe;
|
| + if (!maybe->To(&new_dictionary)) return maybe;
|
| if (dictionary != SeededNumberDictionary::cast(new_dictionary)) {
|
| if (is_arguments) {
|
| elements->set(1, new_dictionary);
|
|
|