Index: src/elements.cc |
diff --git a/src/elements.cc b/src/elements.cc |
index a72158f7d2884584ef4ff50a23c49c193774c4f3..06b65253c2bad3e9312fd0d7a5a43eb119479a9e 100644 |
--- a/src/elements.cc |
+++ b/src/elements.cc |
@@ -2863,16 +2863,20 @@ 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; |
if (obj_value->IsSmi()) { |
value = BackingStore::from_int(Smi::cast(*obj_value)->value()); |
- } else { |
- DCHECK(obj_value->IsHeapNumber()); |
+ } else if (obj_value->IsHeapNumber()) { |
caitp
2017/03/22 13:11:42
Oh nvm, I thought we had a fast path in CSA. This
Camillo Bruni
2017/03/22 21:26:50
Given that we now perform additional checks, let's
rongjie
2017/03/23 00:01:49
Done.
|
value = BackingStore::from_double(HeapNumber::cast(*obj_value)->value()); |
+ } else if (obj_value->IsUndefined(isolate)) { |
+ value = |
+ BackingStore::from_double(std::numeric_limits<double>::quiet_NaN()); |
+ } else if (obj_value->IsNull(isolate)) { |
+ value = static_cast<ctype>(+0.0); |
+ } else if (obj_value->IsBoolean()) { |
+ value = static_cast<ctype>(obj_value->IsTrue(isolate)); |
+ } else { |
+ return FillNumberSlowPath(isolate, array, obj_value, start, end); |
} |
// Ensure indexes are within array bounds |