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

Side by Side Diff: src/objects.cc

Issue 584943002: Make Map::Create always use the Object function, and remove the unused inobject properties (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 3 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 | « src/objects.h ('k') | src/runtime.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/allocation-site-scopes.h" 8 #include "src/allocation-site-scopes.h"
9 #include "src/api.h" 9 #include "src/api.h"
10 #include "src/arguments.h" 10 #include "src/arguments.h"
(...skipping 6642 matching lines...) Expand 10 before | Expand all | Expand 10 after
6653 Handle<Map> Map::Copy(Handle<Map> map) { 6653 Handle<Map> Map::Copy(Handle<Map> map) {
6654 Handle<DescriptorArray> descriptors(map->instance_descriptors()); 6654 Handle<DescriptorArray> descriptors(map->instance_descriptors());
6655 int number_of_own_descriptors = map->NumberOfOwnDescriptors(); 6655 int number_of_own_descriptors = map->NumberOfOwnDescriptors();
6656 Handle<DescriptorArray> new_descriptors = 6656 Handle<DescriptorArray> new_descriptors =
6657 DescriptorArray::CopyUpTo(descriptors, number_of_own_descriptors); 6657 DescriptorArray::CopyUpTo(descriptors, number_of_own_descriptors);
6658 return CopyReplaceDescriptors( 6658 return CopyReplaceDescriptors(
6659 map, new_descriptors, OMIT_TRANSITION, MaybeHandle<Name>()); 6659 map, new_descriptors, OMIT_TRANSITION, MaybeHandle<Name>());
6660 } 6660 }
6661 6661
6662 6662
6663 Handle<Map> Map::Create(Handle<JSFunction> constructor, 6663 Handle<Map> Map::Create(Isolate* isolate, int inobject_properties) {
6664 int extra_inobject_properties) { 6664 Handle<Map> copy = Copy(handle(isolate->object_function()->initial_map()));
6665 Handle<Map> copy = Copy(handle(constructor->initial_map()));
6666 6665
6667 // Check that we do not overflow the instance size when adding the 6666 // Check that we do not overflow the instance size when adding the extra
6668 // extra inobject properties. 6667 // inobject properties. If the instance size overflows, we allocate as many
6669 int instance_size_delta = extra_inobject_properties * kPointerSize; 6668 // properties as we can as inobject properties.
6670 int max_instance_size_delta = 6669 int max_extra_properties =
6671 JSObject::kMaxInstanceSize - copy->instance_size(); 6670 (JSObject::kMaxInstanceSize - JSObject::kHeaderSize) >> kPointerSizeLog2;
6672 int max_extra_properties = max_instance_size_delta >> kPointerSizeLog2;
6673 6671
6674 // If the instance size overflows, we allocate as many properties as we can as 6672 if (inobject_properties > max_extra_properties) {
6675 // inobject properties. 6673 inobject_properties = max_extra_properties;
6676 if (extra_inobject_properties > max_extra_properties) {
6677 instance_size_delta = max_instance_size_delta;
6678 extra_inobject_properties = max_extra_properties;
6679 } 6674 }
6680 6675
6676 int new_instance_size =
6677 JSObject::kHeaderSize + kPointerSize * inobject_properties;
6678
6681 // Adjust the map with the extra inobject properties. 6679 // Adjust the map with the extra inobject properties.
6682 int inobject_properties =
6683 copy->inobject_properties() + extra_inobject_properties;
6684 copy->set_inobject_properties(inobject_properties); 6680 copy->set_inobject_properties(inobject_properties);
6685 copy->set_unused_property_fields(inobject_properties); 6681 copy->set_unused_property_fields(inobject_properties);
6686 copy->set_instance_size(copy->instance_size() + instance_size_delta); 6682 copy->set_instance_size(new_instance_size);
6687 copy->set_visitor_id(StaticVisitorBase::GetVisitorId(*copy)); 6683 copy->set_visitor_id(StaticVisitorBase::GetVisitorId(*copy));
6688 return copy; 6684 return copy;
6689 } 6685 }
6690 6686
6691 6687
6692 Handle<Map> Map::CopyForFreeze(Handle<Map> map) { 6688 Handle<Map> Map::CopyForFreeze(Handle<Map> map) {
6693 int num_descriptors = map->NumberOfOwnDescriptors(); 6689 int num_descriptors = map->NumberOfOwnDescriptors();
6694 Isolate* isolate = map->GetIsolate(); 6690 Isolate* isolate = map->GetIsolate();
6695 Handle<DescriptorArray> new_desc = DescriptorArray::CopyUpToAddAttributes( 6691 Handle<DescriptorArray> new_desc = DescriptorArray::CopyUpToAddAttributes(
6696 handle(map->instance_descriptors(), isolate), num_descriptors, FROZEN); 6692 handle(map->instance_descriptors(), isolate), num_descriptors, FROZEN);
(...skipping 9673 matching lines...) Expand 10 before | Expand all | Expand 10 after
16370 #define ERROR_MESSAGES_TEXTS(C, T) T, 16366 #define ERROR_MESSAGES_TEXTS(C, T) T,
16371 static const char* error_messages_[] = { 16367 static const char* error_messages_[] = {
16372 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) 16368 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS)
16373 }; 16369 };
16374 #undef ERROR_MESSAGES_TEXTS 16370 #undef ERROR_MESSAGES_TEXTS
16375 return error_messages_[reason]; 16371 return error_messages_[reason];
16376 } 16372 }
16377 16373
16378 16374
16379 } } // namespace v8::internal 16375 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/objects.h ('k') | src/runtime.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698