OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 3147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3158 // from the end of the fixed part of the object. | 3158 // from the end of the fixed part of the object. |
3159 offset += type->instance_size(); | 3159 offset += type->instance_size(); |
3160 } else { | 3160 } else { |
3161 offset += FixedArray::kHeaderSize; | 3161 offset += FixedArray::kHeaderSize; |
3162 } | 3162 } |
3163 HStoreNamedField* instr = | 3163 HStoreNamedField* instr = |
3164 new HStoreNamedField(object, name, value, is_in_object, offset); | 3164 new HStoreNamedField(object, name, value, is_in_object, offset); |
3165 if (lookup->type() == MAP_TRANSITION) { | 3165 if (lookup->type() == MAP_TRANSITION) { |
3166 Handle<Map> transition(lookup->GetTransitionMapFromMap(*type)); | 3166 Handle<Map> transition(lookup->GetTransitionMapFromMap(*type)); |
3167 instr->set_transition(transition); | 3167 instr->set_transition(transition); |
| 3168 // TODO(fschneider): Record the new map type of the object in the IR to |
| 3169 // enable elimination of redundant checks after the transition store. |
| 3170 instr->SetFlag(HValue::kChangesMaps); |
3168 } | 3171 } |
3169 return instr; | 3172 return instr; |
3170 } | 3173 } |
3171 | 3174 |
3172 | 3175 |
3173 HInstruction* HGraphBuilder::BuildStoreNamedGeneric(HValue* object, | 3176 HInstruction* HGraphBuilder::BuildStoreNamedGeneric(HValue* object, |
3174 Handle<String> name, | 3177 Handle<String> name, |
3175 HValue* value) { | 3178 HValue* value) { |
3176 return new HStoreNamedGeneric(object, name, value); | 3179 return new HStoreNamedGeneric(object, name, value); |
3177 } | 3180 } |
(...skipping 2493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5671 } | 5674 } |
5672 | 5675 |
5673 #ifdef DEBUG | 5676 #ifdef DEBUG |
5674 if (graph_ != NULL) graph_->Verify(); | 5677 if (graph_ != NULL) graph_->Verify(); |
5675 if (chunk_ != NULL) chunk_->Verify(); | 5678 if (chunk_ != NULL) chunk_->Verify(); |
5676 if (allocator_ != NULL) allocator_->Verify(); | 5679 if (allocator_ != NULL) allocator_->Verify(); |
5677 #endif | 5680 #endif |
5678 } | 5681 } |
5679 | 5682 |
5680 } } // namespace v8::internal | 5683 } } // namespace v8::internal |
OLD | NEW |