| OLD | NEW | 
|     1 // Copyright 2013 the V8 project authors. All rights reserved. |     1 // Copyright 2013 the V8 project authors. All rights reserved. | 
|     2 // Redistribution and use in source and binary forms, with or without |     2 // Redistribution and use in source and binary forms, with or without | 
|     3 // modification, are permitted provided that the following conditions are |     3 // modification, are permitted provided that the following conditions are | 
|     4 // met: |     4 // met: | 
|     5 // |     5 // | 
|     6 //     * Redistributions of source code must retain the above copyright |     6 //     * Redistributions of source code must retain the above copyright | 
|     7 //       notice, this list of conditions and the following disclaimer. |     7 //       notice, this list of conditions and the following disclaimer. | 
|     8 //     * Redistributions in binary form must reproduce the above |     8 //     * Redistributions in binary form must reproduce the above | 
|     9 //       copyright notice, this list of conditions and the following |     9 //       copyright notice, this list of conditions and the following | 
|    10 //       disclaimer in the documentation and/or other materials provided |    10 //       disclaimer in the documentation and/or other materials provided | 
| (...skipping 4811 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  4822   if (count != types->length()) return false; |  4822   if (count != types->length()) return false; | 
|  4823  |  4823  | 
|  4824   // Everything matched; can use monomorphic store. |  4824   // Everything matched; can use monomorphic store. | 
|  4825   BuildCheckHeapObject(object); |  4825   BuildCheckHeapObject(object); | 
|  4826   AddInstruction(HCheckMaps::New(object, types, zone())); |  4826   AddInstruction(HCheckMaps::New(object, types, zone())); | 
|  4827   HInstruction* store; |  4827   HInstruction* store; | 
|  4828   CHECK_ALIVE_OR_RETURN( |  4828   CHECK_ALIVE_OR_RETURN( | 
|  4829       store = BuildStoreNamedField( |  4829       store = BuildStoreNamedField( | 
|  4830           object, name, store_value, types->at(count - 1), &lookup), |  4830           object, name, store_value, types->at(count - 1), &lookup), | 
|  4831       true); |  4831       true); | 
|  4832   Push(result_value); |  4832   if (!ast_context()->IsEffect()) Push(result_value); | 
|  4833   store->set_position(position); |  4833   store->set_position(position); | 
|  4834   AddInstruction(store); |  4834   AddInstruction(store); | 
|  4835   AddSimulate(assignment_id); |  4835   AddSimulate(assignment_id); | 
|  4836   ast_context()->ReturnValue(Pop()); |  4836   if (!ast_context()->IsEffect()) Drop(1); | 
 |  4837   ast_context()->ReturnValue(result_value); | 
|  4837   return true; |  4838   return true; | 
|  4838 } |  4839 } | 
|  4839  |  4840  | 
|  4840  |  4841  | 
|  4841 void HOptimizedGraphBuilder::HandlePolymorphicStoreNamedField( |  4842 void HOptimizedGraphBuilder::HandlePolymorphicStoreNamedField( | 
|  4842     int position, |  4843     int position, | 
|  4843     BailoutId assignment_id, |  4844     BailoutId assignment_id, | 
|  4844     HValue* object, |  4845     HValue* object, | 
|  4845     HValue* store_value, |  4846     HValue* store_value, | 
|  4846     HValue* result_value, |  4847     HValue* result_value, | 
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  5052   } else if (types != NULL && types->length() > 1) { |  5053   } else if (types != NULL && types->length() > 1) { | 
|  5053     Drop(2); |  5054     Drop(2); | 
|  5054     return HandlePolymorphicStoreNamedField( |  5055     return HandlePolymorphicStoreNamedField( | 
|  5055         position, id, object, |  5056         position, id, object, | 
|  5056         store_value, result_value, types, name); |  5057         store_value, result_value, types, name); | 
|  5057   } else { |  5058   } else { | 
|  5058     Drop(2); |  5059     Drop(2); | 
|  5059     instr = BuildStoreNamedGeneric(object, name, store_value); |  5060     instr = BuildStoreNamedGeneric(object, name, store_value); | 
|  5060   } |  5061   } | 
|  5061  |  5062  | 
|  5062   Push(result_value); |  5063   if (!ast_context()->IsEffect()) Push(result_value); | 
|  5063   instr->set_position(position); |  5064   instr->set_position(position); | 
|  5064   AddInstruction(instr); |  5065   AddInstruction(instr); | 
|  5065   if (instr->HasObservableSideEffects()) { |  5066   if (instr->HasObservableSideEffects()) { | 
|  5066     AddSimulate(id, REMOVABLE_SIMULATE); |  5067     AddSimulate(id, REMOVABLE_SIMULATE); | 
|  5067   } |  5068   } | 
|  5068   return ast_context()->ReturnValue(Pop()); |  5069   if (!ast_context()->IsEffect()) Drop(1); | 
 |  5070   return ast_context()->ReturnValue(result_value); | 
|  5069 } |  5071 } | 
|  5070  |  5072  | 
|  5071  |  5073  | 
|  5072 void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) { |  5074 void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) { | 
|  5073   Expression* target = expr->target(); |  5075   Expression* target = expr->target(); | 
|  5074   VariableProxy* proxy = target->AsVariableProxy(); |  5076   VariableProxy* proxy = target->AsVariableProxy(); | 
|  5075   Property* prop = target->AsProperty(); |  5077   Property* prop = target->AsProperty(); | 
|  5076   ASSERT(proxy == NULL || prop == NULL); |  5078   ASSERT(proxy == NULL || prop == NULL); | 
|  5077  |  5079  | 
|  5078   // We have a second position recorded in the FullCodeGenerator to have |  5080   // We have a second position recorded in the FullCodeGenerator to have | 
| (...skipping 4833 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  9912   if (ShouldProduceTraceOutput()) { |  9914   if (ShouldProduceTraceOutput()) { | 
|  9913     isolate()->GetHTracer()->TraceHydrogen(name(), graph_); |  9915     isolate()->GetHTracer()->TraceHydrogen(name(), graph_); | 
|  9914   } |  9916   } | 
|  9915  |  9917  | 
|  9916 #ifdef DEBUG |  9918 #ifdef DEBUG | 
|  9917   graph_->Verify(false);  // No full verify. |  9919   graph_->Verify(false);  // No full verify. | 
|  9918 #endif |  9920 #endif | 
|  9919 } |  9921 } | 
|  9920  |  9922  | 
|  9921 } }  // namespace v8::internal |  9923 } }  // namespace v8::internal | 
| OLD | NEW |