Merge V8 5.3.332.45. DO NOT MERGE
Test: Manual
FPIIM-449
Change-Id: Id3254828b068abdea3cb10442e0172a8c9a98e03
(cherry picked from commit 13e2dadd00298019ed862f2b2fc5068bba730bcf)
diff --git a/src/crankshaft/hydrogen-types.cc b/src/crankshaft/hydrogen-types.cc
index 4266e28..20d50d8 100644
--- a/src/crankshaft/hydrogen-types.cc
+++ b/src/crankshaft/hydrogen-types.cc
@@ -34,23 +34,25 @@
// static
HType HType::FromValue(Handle<Object> value) {
- if (value->IsSmi()) return HType::Smi();
- if (value->IsNull()) return HType::Null();
- if (value->IsHeapNumber()) {
+ Object* raw_value = *value;
+ if (raw_value->IsSmi()) return HType::Smi();
+ DCHECK(raw_value->IsHeapObject());
+ Isolate* isolate = HeapObject::cast(*value)->GetIsolate();
+ if (raw_value->IsNull(isolate)) return HType::Null();
+ if (raw_value->IsHeapNumber()) {
double n = Handle<v8::internal::HeapNumber>::cast(value)->value();
return IsSmiDouble(n) ? HType::Smi() : HType::HeapNumber();
}
- if (value->IsString()) return HType::String();
- if (value->IsBoolean()) return HType::Boolean();
- if (value->IsUndefined()) return HType::Undefined();
- if (value->IsJSArray()) {
- DCHECK(!value->IsUndetectable());
+ if (raw_value->IsString()) return HType::String();
+ if (raw_value->IsBoolean()) return HType::Boolean();
+ if (raw_value->IsUndefined(isolate)) return HType::Undefined();
+ if (raw_value->IsJSArray()) {
+ DCHECK(!raw_value->IsUndetectable());
return HType::JSArray();
}
- if (value->IsJSObject() && !value->IsUndetectable()) {
+ if (raw_value->IsJSObject() && !raw_value->IsUndetectable()) {
return HType::JSObject();
}
- DCHECK(value->IsHeapObject());
return HType::HeapObject();
}