Only force creating initial maps when we have prototypes.

BUG=
R=ishell@chromium.org

Review URL: https://codereview.chromium.org/261983007

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@21169 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
verwaest@chromium.org 2014-05-06 12:16:24 +00:00
parent 4a9d0b0406
commit 14c023c7cb

View File

@ -1242,11 +1242,10 @@ Handle<JSFunction> Factory::NewFunction(MaybeHandle<Object> maybe_prototype,
// Allocate the function // Allocate the function
Handle<JSFunction> function = NewFunction(name, code, maybe_prototype); Handle<JSFunction> function = NewFunction(name, code, maybe_prototype);
Handle<Object> prototype; if (force_initial_map ||
if (maybe_prototype.ToHandle(&prototype) && type != JS_OBJECT_TYPE ||
(force_initial_map || instance_size != JSObject::kHeaderSize) {
type != JS_OBJECT_TYPE || Handle<Object> prototype = maybe_prototype.ToHandleChecked();
instance_size != JSObject::kHeaderSize)) {
Handle<Map> initial_map = NewMap(type, instance_size); Handle<Map> initial_map = NewMap(type, instance_size);
if (prototype->IsJSObject()) { if (prototype->IsJSObject()) {
JSObject::SetLocalPropertyIgnoreAttributes( JSObject::SetLocalPropertyIgnoreAttributes(
@ -2134,7 +2133,7 @@ Handle<JSFunction> Factory::CreateApiFunction(
Handle<JSFunction> result = NewFunction( Handle<JSFunction> result = NewFunction(
maybe_prototype, Factory::empty_string(), type, maybe_prototype, Factory::empty_string(), type,
instance_size, code, true); instance_size, code, !obj->remove_prototype());
result->shared()->set_length(obj->length()); result->shared()->set_length(obj->length());
Handle<Object> class_name(obj->class_name(), isolate()); Handle<Object> class_name(obj->class_name(), isolate());
@ -2148,6 +2147,8 @@ Handle<JSFunction> Factory::CreateApiFunction(
if (obj->remove_prototype()) { if (obj->remove_prototype()) {
ASSERT(result->shared()->IsApiFunction()); ASSERT(result->shared()->IsApiFunction());
ASSERT(!result->has_initial_map());
ASSERT(!result->has_prototype());
return result; return result;
} }
// Down from here is only valid for API functions that can be used as a // Down from here is only valid for API functions that can be used as a