Commit 99d9712b authored by yangguo@chromium.org's avatar yangguo@chromium.org

Return MaybeHandle from Object::ToSmi.

R=ulan@chromium.org

Review URL: https://codereview.chromium.org/260083011

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@21047 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 7b1e8304
...@@ -1848,9 +1848,10 @@ MaybeHandle<Object> ElementsAccessorBase<ElementsAccessorSubclass, ...@@ -1848,9 +1848,10 @@ MaybeHandle<Object> ElementsAccessorBase<ElementsAccessorSubclass,
Handle<JSArray> array = Handle<JSArray>::cast(obj); Handle<JSArray> array = Handle<JSArray>::cast(obj);
// Fast case: The new length fits into a Smi. // 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(); const int value = Handle<Smi>::cast(smi_length)->value();
if (value >= 0) { if (value >= 0) {
Handle<Object> new_length = ElementsAccessorSubclass:: Handle<Object> new_length = ElementsAccessorSubclass::
......
...@@ -1614,9 +1614,8 @@ bool IsOutOfBoundsAccess(Handle<JSObject> receiver, ...@@ -1614,9 +1614,8 @@ bool IsOutOfBoundsAccess(Handle<JSObject> receiver,
KeyedAccessStoreMode KeyedStoreIC::GetStoreMode(Handle<JSObject> receiver, KeyedAccessStoreMode KeyedStoreIC::GetStoreMode(Handle<JSObject> receiver,
Handle<Object> key, Handle<Object> key,
Handle<Object> value) { Handle<Object> value) {
Handle<Object> smi_key = Object::ToSmi(isolate(), key); Handle<Smi> smi_key = Object::ToSmi(isolate(), key).ToHandleChecked();
ASSERT(!smi_key.is_null() && smi_key->IsSmi()); int index = smi_key->value();
int index = Handle<Smi>::cast(smi_key)->value();
bool oob_access = IsOutOfBoundsAccess(receiver, index); bool oob_access = IsOutOfBoundsAccess(receiver, index);
// Don't consider this a growing store if the store would send the receiver to // Don't consider this a growing store if the store would send the receiver to
// dictionary mode. // dictionary mode.
......
...@@ -1037,8 +1037,8 @@ bool Object::IsNaN() { ...@@ -1037,8 +1037,8 @@ bool Object::IsNaN() {
} }
Handle<Object> Object::ToSmi(Isolate* isolate, Handle<Object> object) { MaybeHandle<Smi> Object::ToSmi(Isolate* isolate, Handle<Object> object) {
if (object->IsSmi()) return object; if (object->IsSmi()) return Handle<Smi>::cast(object);
if (object->IsHeapNumber()) { if (object->IsHeapNumber()) {
double value = Handle<HeapNumber>::cast(object)->value(); double value = Handle<HeapNumber>::cast(object)->value();
int int_value = FastD2I(value); int int_value = FastD2I(value);
...@@ -1046,7 +1046,7 @@ Handle<Object> Object::ToSmi(Isolate* isolate, Handle<Object> object) { ...@@ -1046,7 +1046,7 @@ Handle<Object> Object::ToSmi(Isolate* isolate, Handle<Object> object) {
return handle(Smi::FromInt(int_value), isolate); return handle(Smi::FromInt(int_value), isolate);
} }
} }
return Handle<Object>(); return Handle<Smi>();
} }
......
...@@ -1490,8 +1490,7 @@ class Object : public MaybeObject { ...@@ -1490,8 +1490,7 @@ class Object : public MaybeObject {
Handle<Context> context); Handle<Context> context);
// Converts this to a Smi if possible. // Converts this to a Smi if possible.
// Failure is returned otherwise. static MUST_USE_RESULT inline MaybeHandle<Smi> ToSmi(Isolate* isolate,
static MUST_USE_RESULT inline Handle<Object> ToSmi(Isolate* isolate,
Handle<Object> object); Handle<Object> object);
void Lookup(Name* name, LookupResult* result); void Lookup(Name* name, LookupResult* result);
......
...@@ -1078,7 +1078,7 @@ TEST(CachedHashOverflow) { ...@@ -1078,7 +1078,7 @@ TEST(CachedHashOverflow) {
CHECK_EQ(results[i]->IsUndefined(), result->IsUndefined()); CHECK_EQ(results[i]->IsUndefined(), result->IsUndefined());
CHECK_EQ(results[i]->IsNumber(), result->IsNumber()); CHECK_EQ(results[i]->IsNumber(), result->IsNumber());
if (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()); result->ToInt32()->Value());
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment