Chromium Code Reviews| Index: src/elements.cc |
| diff --git a/src/elements.cc b/src/elements.cc |
| index a72158f7d2884584ef4ff50a23c49c193774c4f3..d608f18338251367ccf0aab3f0f32da2d243eb29 100644 |
| --- a/src/elements.cc |
| +++ b/src/elements.cc |
| @@ -2863,16 +2863,24 @@ class TypedElementsAccessor |
| Handle<JSTypedArray> array = Handle<JSTypedArray>::cast(receiver); |
| DCHECK(!array->WasNeutered()); |
| - if (!obj_value->IsNumber()) { |
| - return FillNumberSlowPath(isolate, array, obj_value, start, end); |
| - } |
| - |
| - ctype value = 0; |
| + ctype value; |
| if (obj_value->IsSmi()) { |
| value = BackingStore::from_int(Smi::cast(*obj_value)->value()); |
| } else { |
| - DCHECK(obj_value->IsHeapNumber()); |
| - value = BackingStore::from_double(HeapNumber::cast(*obj_value)->value()); |
| + Handle<HeapObject> heap_obj_value = Handle<HeapObject>::cast(obj_value); |
| + if (heap_obj_value->IsHeapNumber()) { |
| + value = BackingStore::from_double( |
| + HeapNumber::cast(*heap_obj_value)->value()); |
| + } else if (heap_obj_value->IsUndefined(isolate)) { |
| + value = |
| + BackingStore::from_double(std::numeric_limits<double>::quiet_NaN()); |
|
Camillo Bruni
2017/03/23 10:56:43
I just realized that we do already have a number c
rongjie
2017/03/23 12:39:14
Done.
|
| + } else if (heap_obj_value->IsNull(isolate)) { |
| + value = static_cast<ctype>(+0.0); |
| + } else if (heap_obj_value->IsBoolean()) { |
| + value = static_cast<ctype>(heap_obj_value->IsTrue(isolate)); |
| + } else { |
| + return FillNumberSlowPath(isolate, array, obj_value, start, end); |
| + } |
| } |
| // Ensure indexes are within array bounds |