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 |