Chromium Code Reviews| Index: src/hydrogen-instructions.cc |
| diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc |
| index 1f04a15103599e6803ae054ffacc56c4c88bdd46..f3902664c3bf47b9eed7a77a4e7a394f8fad1da4 100644 |
| --- a/src/hydrogen-instructions.cc |
| +++ b/src/hydrogen-instructions.cc |
| @@ -1305,7 +1305,9 @@ std::ostream& HTypeofIsAndBranch::PrintDataTo( |
| } |
| -static String* TypeOfString(HConstant* constant, Isolate* isolate) { |
| +namespace { |
| + |
| +String* TypeOfString(HConstant* constant, Isolate* isolate) { |
| Heap* heap = isolate->heap(); |
| if (constant->HasNumberValue()) return heap->number_string(); |
| if (constant->IsUndetectable()) return heap->undefined_string(); |
| @@ -1336,14 +1338,14 @@ static String* TypeOfString(HConstant* constant, Isolate* isolate) { |
| UNREACHABLE(); |
| return nullptr; |
| } |
| - case JS_FUNCTION_TYPE: |
| - case JS_FUNCTION_PROXY_TYPE: |
| - return heap->function_string(); |
| default: |
| + if (constant->IsCallable()) return heap->function_string(); |
| return heap->object_string(); |
| } |
| } |
| +} // namespace |
| + |
| bool HTypeofIsAndBranch::KnownSuccessorBlock(HBasicBlock** block) { |
| if (FLAG_fold_constants && value()->IsConstant()) { |
| @@ -2717,15 +2719,15 @@ HConstant::HConstant(Handle<Object> object, Representation r) |
| : HTemplateInstruction<0>(HType::FromValue(object)), |
| object_(Unique<Object>::CreateUninitialized(object)), |
| object_map_(Handle<Map>::null()), |
| - bit_field_(HasStableMapValueField::encode(false) | |
| - HasSmiValueField::encode(false) | |
| - HasInt32ValueField::encode(false) | |
| - HasDoubleValueField::encode(false) | |
| - HasExternalReferenceValueField::encode(false) | |
| - IsNotInNewSpaceField::encode(true) | |
| - BooleanValueField::encode(object->BooleanValue()) | |
| - IsUndetectableField::encode(false) | |
| - InstanceTypeField::encode(kUnknownInstanceType)) { |
| + bit_field_( |
| + HasStableMapValueField::encode(false) | |
| + HasSmiValueField::encode(false) | HasInt32ValueField::encode(false) | |
| + HasDoubleValueField::encode(false) | |
| + HasExternalReferenceValueField::encode(false) | |
| + IsNotInNewSpaceField::encode(true) | |
| + BooleanValueField::encode(object->BooleanValue()) | |
| + IsUndetectableField::encode(false) | IsCallableField::encode(false) | |
| + InstanceTypeField::encode(kUnknownInstanceType)) { |
| if (object->IsHeapObject()) { |
| Handle<HeapObject> heap_object = Handle<HeapObject>::cast(object); |
| Isolate* isolate = heap_object->GetIsolate(); |
| @@ -2735,6 +2737,7 @@ HConstant::HConstant(Handle<Object> object, Representation r) |
| bit_field_ = InstanceTypeField::update(bit_field_, map->instance_type()); |
| bit_field_ = |
| IsUndetectableField::update(bit_field_, map->is_undetectable()); |
| + bit_field_ = IsCallableField::update(bit_field_, map->is_callable()); |
|
Yang
2015/08/27 08:39:18
Do we already use this field?
Benedikt Meurer
2015/08/27 08:39:54
Yep in TypeOfString in the .cc file.
|
| if (map->is_stable()) object_map_ = Unique<Map>::CreateImmovable(map); |
| bit_field_ = HasStableMapValueField::update( |
| bit_field_, |