| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index b03bf699389be7864587415c6143280159f27979..e96b51cd7420d3c5313fb3c6d32ae12b8b0797aa 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -1024,9 +1024,9 @@ HBasicBlock* HGraphBuilder::CreateLoopHeaderBlock() {
|
| }
|
|
|
|
|
| -HValue* HGraphBuilder::BuildCheckNonSmi(HValue* obj) {
|
| +HValue* HGraphBuilder::BuildCheckHeapObject(HValue* obj) {
|
| if (obj->type().IsHeapObject()) return obj;
|
| - HCheckNonSmi* check = new(zone()) HCheckNonSmi(obj);
|
| + HCheckHeapObject* check = new(zone()) HCheckHeapObject(obj);
|
| AddInstruction(check);
|
| return check;
|
| }
|
| @@ -1703,7 +1703,7 @@ void HGraphBuilder::BuildCompareNil(
|
| if_nil.Then();
|
| if_nil.Else();
|
| if (type->NumClasses() == 1) {
|
| - BuildCheckNonSmi(value);
|
| + BuildCheckHeapObject(value);
|
| // For ICs, the map checked below is a sentinel map that gets replaced by
|
| // the monomorphic map when the code is used as a template to generate a
|
| // new IC. For optimized functions, there is no sentinel map, the map
|
| @@ -6158,14 +6158,14 @@ static Representation ComputeLoadStoreRepresentation(Handle<Map> type,
|
|
|
|
|
| void HOptimizedGraphBuilder::AddCheckMap(HValue* object, Handle<Map> map) {
|
| - BuildCheckNonSmi(object);
|
| + BuildCheckHeapObject(object);
|
| AddInstruction(HCheckMaps::New(object, map, zone()));
|
| }
|
|
|
|
|
| void HOptimizedGraphBuilder::AddCheckMapsWithTransitions(HValue* object,
|
| Handle<Map> map) {
|
| - BuildCheckNonSmi(object);
|
| + BuildCheckHeapObject(object);
|
| AddInstruction(HCheckMaps::NewWithTransitions(object, map, zone()));
|
| }
|
|
|
| @@ -6334,7 +6334,7 @@ HInstruction* HOptimizedGraphBuilder::TryLoadPolymorphicAsMonomorphic(
|
| if (count != types->length()) return NULL;
|
|
|
| // Everything matched; can use monomorphic load.
|
| - BuildCheckNonSmi(object);
|
| + BuildCheckHeapObject(object);
|
| AddInstruction(HCheckMaps::New(object, types, zone()));
|
| return BuildLoadNamedField(object, access, representation);
|
| }
|
| @@ -6349,7 +6349,7 @@ void HOptimizedGraphBuilder::HandlePolymorphicLoadNamedField(
|
| expr, object, types, name);
|
| if (instr == NULL) {
|
| // Something did not match; must use a polymorphic load.
|
| - BuildCheckNonSmi(object);
|
| + BuildCheckHeapObject(object);
|
| HValue* context = environment()->LookupContext();
|
| instr = new(zone()) HLoadNamedFieldPolymorphic(
|
| context, object, types, name, zone());
|
| @@ -6405,7 +6405,7 @@ bool HOptimizedGraphBuilder::TryStorePolymorphicAsMonomorphic(
|
| if (count != types->length()) return false;
|
|
|
| // Everything matched; can use monomorphic store.
|
| - BuildCheckNonSmi(object);
|
| + BuildCheckHeapObject(object);
|
| AddInstruction(HCheckMaps::New(object, types, zone()));
|
| HInstruction* store;
|
| CHECK_ALIVE_OR_RETURN(
|
| @@ -6444,7 +6444,7 @@ void HOptimizedGraphBuilder::HandlePolymorphicStoreNamedField(
|
| LookupResult lookup(isolate());
|
| if (ComputeLoadStoreField(map, name, &lookup, true)) {
|
| if (count == 0) {
|
| - BuildCheckNonSmi(object);
|
| + BuildCheckHeapObject(object);
|
| join = graph()->CreateBasicBlock();
|
| }
|
| ++count;
|
| @@ -7178,7 +7178,7 @@ HValue* HOptimizedGraphBuilder::HandlePolymorphicElementAccess(
|
| KeyedAccessStoreMode store_mode,
|
| bool* has_side_effects) {
|
| *has_side_effects = false;
|
| - BuildCheckNonSmi(object);
|
| + BuildCheckHeapObject(object);
|
| SmallMapList* maps = prop->GetReceiverTypes();
|
| bool todo_external_array = false;
|
|
|
| @@ -7403,7 +7403,7 @@ HValue* HOptimizedGraphBuilder::HandleKeyedElementAccess(
|
| : BuildLoadKeyedGeneric(obj, key);
|
| AddInstruction(instr);
|
| } else {
|
| - BuildCheckNonSmi(obj);
|
| + BuildCheckHeapObject(obj);
|
| instr = BuildMonomorphicElementAccess(
|
| obj, key, val, NULL, map, is_store, expr->GetStoreMode());
|
| }
|
| @@ -7535,7 +7535,7 @@ void HOptimizedGraphBuilder::VisitProperty(Property* expr) {
|
| HInstruction* instr = NULL;
|
| if (expr->IsStringLength()) {
|
| HValue* string = Pop();
|
| - BuildCheckNonSmi(string);
|
| + BuildCheckHeapObject(string);
|
| AddInstruction(HCheckInstanceType::NewIsString(string, zone()));
|
| instr = HStringLength::New(zone(), string);
|
| } else if (expr->IsStringAccess()) {
|
| @@ -7550,7 +7550,7 @@ void HOptimizedGraphBuilder::VisitProperty(Property* expr) {
|
|
|
| } else if (expr->IsFunctionPrototype()) {
|
| HValue* function = Pop();
|
| - BuildCheckNonSmi(function);
|
| + BuildCheckHeapObject(function);
|
| instr = new(zone()) HLoadFunctionPrototype(function);
|
|
|
| } else if (expr->key()->IsPropertyName()) {
|
| @@ -7724,7 +7724,7 @@ void HOptimizedGraphBuilder::HandlePolymorphicCallNamed(
|
| empty_smi_block->Goto(number_block);
|
| set_current_block(not_smi_block);
|
| } else {
|
| - BuildCheckNonSmi(receiver);
|
| + BuildCheckHeapObject(receiver);
|
| }
|
| }
|
| HBasicBlock* if_true = graph()->CreateBasicBlock();
|
| @@ -9335,7 +9335,7 @@ HInstruction* HOptimizedGraphBuilder::BuildStringCharCodeAt(
|
| return new(zone()) HConstant(s->Get(i));
|
| }
|
| }
|
| - BuildCheckNonSmi(string);
|
| + BuildCheckHeapObject(string);
|
| AddInstruction(HCheckInstanceType::NewIsString(string, zone()));
|
| HInstruction* length = HStringLength::New(zone(), string);
|
| AddInstruction(length);
|
| @@ -9426,9 +9426,9 @@ HInstruction* HOptimizedGraphBuilder::BuildBinaryOperation(
|
| switch (expr->op()) {
|
| case Token::ADD:
|
| if (left_type->Is(Type::String()) && right_type->Is(Type::String())) {
|
| - BuildCheckNonSmi(left);
|
| + BuildCheckHeapObject(left);
|
| AddInstruction(HCheckInstanceType::NewIsString(left, zone()));
|
| - BuildCheckNonSmi(right);
|
| + BuildCheckHeapObject(right);
|
| AddInstruction(HCheckInstanceType::NewIsString(right, zone()));
|
| instr = HStringAdd::New(zone(), context, left, right);
|
| } else {
|
| @@ -9845,9 +9845,9 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) {
|
| result->set_position(expr->position());
|
| return ast_context()->ReturnControl(result, expr->id());
|
| } else {
|
| - BuildCheckNonSmi(left);
|
| + BuildCheckHeapObject(left);
|
| AddInstruction(HCheckInstanceType::NewIsSpecObject(left, zone()));
|
| - BuildCheckNonSmi(right);
|
| + BuildCheckHeapObject(right);
|
| AddInstruction(HCheckInstanceType::NewIsSpecObject(right, zone()));
|
| HCompareObjectEqAndBranch* result =
|
| new(zone()) HCompareObjectEqAndBranch(left, right);
|
| @@ -9860,9 +9860,9 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) {
|
| }
|
| } else if (combined_type->Is(Type::InternalizedString()) &&
|
| Token::IsEqualityOp(op)) {
|
| - BuildCheckNonSmi(left);
|
| + BuildCheckHeapObject(left);
|
| AddInstruction(HCheckInstanceType::NewIsInternalizedString(left, zone()));
|
| - BuildCheckNonSmi(right);
|
| + BuildCheckHeapObject(right);
|
| AddInstruction(HCheckInstanceType::NewIsInternalizedString(right, zone()));
|
| HCompareObjectEqAndBranch* result =
|
| new(zone()) HCompareObjectEqAndBranch(left, right);
|
|
|