Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 10004 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 10015 | 10015 |
| 10016 // Copy object elements if non-COW. | 10016 // Copy object elements if non-COW. |
| 10017 HValue* object_elements = BuildEmitObjectHeader(boilerplate_object, target, | 10017 HValue* object_elements = BuildEmitObjectHeader(boilerplate_object, target, |
| 10018 data_target, object_offset, elements_offset, elements_size); | 10018 data_target, object_offset, elements_offset, elements_size); |
| 10019 if (object_elements != NULL) { | 10019 if (object_elements != NULL) { |
| 10020 BuildEmitElements(elements, original_elements, kind, object_elements, | 10020 BuildEmitElements(elements, original_elements, kind, object_elements, |
| 10021 target, offset, data_target, data_offset); | 10021 target, offset, data_target, data_offset); |
| 10022 } | 10022 } |
| 10023 | 10023 |
| 10024 // Copy in-object properties. | 10024 // Copy in-object properties. |
| 10025 HValue* object_properties = | 10025 Handle<DescriptorArray> descriptors( |
| 10026 AddInstruction(new(zone) HInnerAllocatedObject(target, object_offset)); | 10026 boilerplate_object->map()->instance_descriptors()); |
| 10027 BuildEmitInObjectProperties(boilerplate_object, original_boilerplate_object, | 10027 int descriptor_count = boilerplate_object->map()->NumberOfOwnDescriptors(); |
| 10028 object_properties, target, offset, data_target, data_offset); | 10028 bool has_field = false; |
| 10029 for (int i = 0; i < descriptor_count; i++) { | |
| 10030 PropertyDetails details = descriptors->GetDetails(i); | |
| 10031 if (details.type() != FIELD) continue; | |
| 10032 has_field = true; | |
| 10033 } | |
|
Toon Verwaest
2013/06/27 04:32:22
Isn't there a utility function to test for this co
danno
2013/06/27 13:55:51
OK, I now use map()->NumberOfFields(). I'll leave
| |
| 10034 | |
| 10035 if (has_field) { | |
| 10036 HValue* object_properties = | |
| 10037 AddInstruction(new(zone) HInnerAllocatedObject(target, object_offset)); | |
| 10038 BuildEmitInObjectProperties(boilerplate_object, original_boilerplate_object, | |
| 10039 object_properties, target, offset, data_target, data_offset); | |
| 10040 } | |
| 10029 | 10041 |
| 10030 // Create allocation site info. | 10042 // Create allocation site info. |
| 10031 if (mode == TRACK_ALLOCATION_SITE && | 10043 if (mode == TRACK_ALLOCATION_SITE && |
| 10032 boilerplate_object->map()->CanTrackAllocationSite()) { | 10044 boilerplate_object->map()->CanTrackAllocationSite()) { |
| 10033 elements_offset += AllocationSiteInfo::kSize; | 10045 elements_offset += AllocationSiteInfo::kSize; |
| 10034 *offset += AllocationSiteInfo::kSize; | 10046 *offset += AllocationSiteInfo::kSize; |
| 10035 HInstruction* original_boilerplate = AddInstruction(new(zone) HConstant( | 10047 HInstruction* original_boilerplate = AddInstruction(new(zone) HConstant( |
| 10036 original_boilerplate_object)); | 10048 original_boilerplate_object)); |
| 10037 BuildCreateAllocationSiteInfo(target, JSArray::kSize, original_boilerplate); | 10049 BuildCreateAllocationSiteInfo(target, JSArray::kSize, original_boilerplate); |
| 10038 } | 10050 } |
| (...skipping 1515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 11554 if (ShouldProduceTraceOutput()) { | 11566 if (ShouldProduceTraceOutput()) { |
| 11555 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); | 11567 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); |
| 11556 } | 11568 } |
| 11557 | 11569 |
| 11558 #ifdef DEBUG | 11570 #ifdef DEBUG |
| 11559 graph_->Verify(false); // No full verify. | 11571 graph_->Verify(false); // No full verify. |
| 11560 #endif | 11572 #endif |
| 11561 } | 11573 } |
| 11562 | 11574 |
| 11563 } } // namespace v8::internal | 11575 } } // namespace v8::internal |
| OLD | NEW |