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); |