Handle<JSArray> array = Handle<JSArray>::cast(obj);
// Fast case: The new length fits into a Smi.
- Handle<Object> smi_length = Object::ToSmi(isolate, length);
+ Handle<Object> smi_length;
- if (!smi_length.is_null() && smi_length->IsSmi()) {
+ if (Object::ToSmi(isolate, length).ToHandle(&smi_length) &&
+ smi_length->IsSmi()) {
const int value = Handle<Smi>::cast(smi_length)->value();
if (value >= 0) {
Handle<Object> new_length = ElementsAccessorSubclass::
KeyedAccessStoreMode KeyedStoreIC::GetStoreMode(Handle<JSObject> receiver,
Handle<Object> key,
Handle<Object> value) {
- Handle<Object> smi_key = Object::ToSmi(isolate(), key);
- ASSERT(!smi_key.is_null() && smi_key->IsSmi());
- int index = Handle<Smi>::cast(smi_key)->value();
+ Handle<Smi> smi_key = Object::ToSmi(isolate(), key).ToHandleChecked();
+ int index = smi_key->value();
bool oob_access = IsOutOfBoundsAccess(receiver, index);
// Don't consider this a growing store if the store would send the receiver to
// dictionary mode.
}
-Handle<Object> Object::ToSmi(Isolate* isolate, Handle<Object> object) {
- if (object->IsSmi()) return object;
+MaybeHandle<Smi> Object::ToSmi(Isolate* isolate, Handle<Object> object) {
+ if (object->IsSmi()) return Handle<Smi>::cast(object);
if (object->IsHeapNumber()) {
double value = Handle<HeapNumber>::cast(object)->value();
int int_value = FastD2I(value);
return handle(Smi::FromInt(int_value), isolate);
}
}
- return Handle<Object>();
+ return Handle<Smi>();
}
Handle<Context> context);
// Converts this to a Smi if possible.
- // Failure is returned otherwise.
- static MUST_USE_RESULT inline Handle<Object> ToSmi(Isolate* isolate,
- Handle<Object> object);
+ static MUST_USE_RESULT inline MaybeHandle<Smi> ToSmi(Isolate* isolate,
+ Handle<Object> object);
void Lookup(Name* name, LookupResult* result);
CHECK_EQ(results[i]->IsUndefined(), result->IsUndefined());
CHECK_EQ(results[i]->IsNumber(), result->IsNumber());
if (result->IsNumber()) {
- CHECK_EQ(Handle<Smi>::cast(Object::ToSmi(isolate, results[i]))->value(),
+ CHECK_EQ(Object::ToSmi(isolate, results[i]).ToHandleChecked()->value(),
result->ToInt32()->Value());
}
}