Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(146)

Side by Side Diff: src/hydrogen.cc

Issue 15247003: Fill in one-word-fillers for the unused property fields. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 10916 matching lines...) Expand 10 before | Expand all | Expand 10 after
10927 object_offset, elements_offset, elements_size); 10927 object_offset, elements_offset, elements_size);
10928 10928
10929 // Copy in-object properties. 10929 // Copy in-object properties.
10930 HValue* object_properties = 10930 HValue* object_properties =
10931 AddInstruction(new(zone) HInnerAllocatedObject(target, object_offset)); 10931 AddInstruction(new(zone) HInnerAllocatedObject(target, object_offset));
10932 10932
10933 Handle<DescriptorArray> descriptors( 10933 Handle<DescriptorArray> descriptors(
10934 boilerplate_object->map()->instance_descriptors()); 10934 boilerplate_object->map()->instance_descriptors());
10935 int limit = boilerplate_object->map()->NumberOfOwnDescriptors(); 10935 int limit = boilerplate_object->map()->NumberOfOwnDescriptors();
10936 10936
10937 int copied_fields = 0;
10937 for (int i = 0; i < limit; i++) { 10938 for (int i = 0; i < limit; i++) {
10938 PropertyDetails details = descriptors->GetDetails(i); 10939 PropertyDetails details = descriptors->GetDetails(i);
10939 if (details.type() != FIELD) continue; 10940 if (details.type() != FIELD) continue;
10941 copied_fields++;
10940 int index = descriptors->GetFieldIndex(i); 10942 int index = descriptors->GetFieldIndex(i);
10941 int property_offset = boilerplate_object->GetInObjectPropertyOffset(index); 10943 int property_offset = boilerplate_object->GetInObjectPropertyOffset(index);
10942 Handle<Name> name(descriptors->GetKey(i)); 10944 Handle<Name> name(descriptors->GetKey(i));
10943 Handle<Object> value = 10945 Handle<Object> value =
10944 Handle<Object>(boilerplate_object->InObjectPropertyAt(index), 10946 Handle<Object>(boilerplate_object->InObjectPropertyAt(index),
10945 isolate()); 10947 isolate());
10946 if (value->IsJSObject()) { 10948 if (value->IsJSObject()) {
10947 Handle<JSObject> value_object = Handle<JSObject>::cast(value); 10949 Handle<JSObject> value_object = Handle<JSObject>::cast(value);
10948 Handle<JSObject> original_value_object = Handle<JSObject>::cast( 10950 Handle<JSObject> original_value_object = Handle<JSObject>::cast(
10949 Handle<Object>(original_boilerplate_object->InObjectPropertyAt(index), 10951 Handle<Object>(original_boilerplate_object->InObjectPropertyAt(index),
(...skipping 18 matching lines...) Expand all
10968 Representation::Double(), HeapNumber::kValueOffset)); 10970 Representation::Double(), HeapNumber::kValueOffset));
10969 value_instruction = double_box; 10971 value_instruction = double_box;
10970 *offset += HeapNumber::kSize; 10972 *offset += HeapNumber::kSize;
10971 } 10973 }
10972 AddInstruction(new(zone) HStoreNamedField( 10974 AddInstruction(new(zone) HStoreNamedField(
10973 object_properties, name, value_instruction, true, 10975 object_properties, name, value_instruction, true,
10974 Representation::Tagged(), property_offset)); 10976 Representation::Tagged(), property_offset));
10975 } 10977 }
10976 } 10978 }
10977 10979
10980 int inobject_properties = boilerplate_object->map()->inobject_properties();
10981 HInstruction* value_instruction = AddInstruction(new(zone) HConstant(
10982 factory->one_pointer_filler_map(), Representation::Tagged()));
10983 for (int i = copied_fields; i < inobject_properties; i++) {
10984 AddInstruction(new(zone) HStoreNamedField(
10985 object_properties, factory->unknown_field_string(), value_instruction,
10986 true, Representation::Tagged(),
10987 boilerplate_object->GetInObjectPropertyOffset(i)));
10988 }
10989
10978 // Build Allocation Site Info if desired 10990 // Build Allocation Site Info if desired
10979 if (create_allocation_site_info) { 10991 if (create_allocation_site_info) {
10980 BuildCreateAllocationSiteInfo(target, JSArray::kSize, original_boilerplate); 10992 BuildCreateAllocationSiteInfo(target, JSArray::kSize, original_boilerplate);
10981 } 10993 }
10982 10994
10983 if (object_elements != NULL) { 10995 if (object_elements != NULL) {
10984 HInstruction* boilerplate_elements = AddInstruction(new(zone) HConstant( 10996 HInstruction* boilerplate_elements = AddInstruction(new(zone) HConstant(
10985 elements, Representation::Tagged())); 10997 elements, Representation::Tagged()));
10986 10998
10987 int elements_length = elements->length(); 10999 int elements_length = elements->length();
(...skipping 1469 matching lines...) Expand 10 before | Expand all | Expand 10 after
12457 } 12469 }
12458 } 12470 }
12459 12471
12460 #ifdef DEBUG 12472 #ifdef DEBUG
12461 if (graph_ != NULL) graph_->Verify(false); // No full verify. 12473 if (graph_ != NULL) graph_->Verify(false); // No full verify.
12462 if (allocator_ != NULL) allocator_->Verify(); 12474 if (allocator_ != NULL) allocator_->Verify();
12463 #endif 12475 #endif
12464 } 12476 }
12465 12477
12466 } } // namespace v8::internal 12478 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698