| Index: src/factory.cc
|
| ===================================================================
|
| --- src/factory.cc (revision 4210)
|
| +++ src/factory.cc (working copy)
|
| @@ -282,31 +282,26 @@
|
| }
|
|
|
|
|
| -Handle<JSFunction> Factory::BaseNewFunctionFromBoilerplate(
|
| - Handle<JSFunction> boilerplate,
|
| +Handle<JSFunction> Factory::BaseNewFunctionFromSharedFunctionInfo(
|
| + Handle<SharedFunctionInfo> function_info,
|
| Handle<Map> function_map,
|
| PretenureFlag pretenure) {
|
| - ASSERT(boilerplate->IsBoilerplate());
|
| - ASSERT(!boilerplate->has_initial_map());
|
| - ASSERT(!boilerplate->has_prototype());
|
| - ASSERT(boilerplate->properties() == Heap::empty_fixed_array());
|
| - ASSERT(boilerplate->elements() == Heap::empty_fixed_array());
|
| CALL_HEAP_FUNCTION(Heap::AllocateFunction(*function_map,
|
| - boilerplate->shared(),
|
| + *function_info,
|
| Heap::the_hole_value(),
|
| pretenure),
|
| JSFunction);
|
| }
|
|
|
|
|
| -Handle<JSFunction> Factory::NewFunctionFromBoilerplate(
|
| - Handle<JSFunction> boilerplate,
|
| +Handle<JSFunction> Factory::NewFunctionFromSharedFunctionInfo(
|
| + Handle<SharedFunctionInfo> function_info,
|
| Handle<Context> context,
|
| PretenureFlag pretenure) {
|
| - Handle<JSFunction> result = BaseNewFunctionFromBoilerplate(
|
| - boilerplate, Top::function_map(), pretenure);
|
| + Handle<JSFunction> result = BaseNewFunctionFromSharedFunctionInfo(
|
| + function_info, Top::function_map(), pretenure);
|
| result->set_context(*context);
|
| - int number_of_literals = boilerplate->NumberOfLiterals();
|
| + int number_of_literals = function_info->num_literals();
|
| Handle<FixedArray> literals =
|
| Factory::NewFixedArray(number_of_literals, pretenure);
|
| if (number_of_literals > 0) {
|
| @@ -490,36 +485,6 @@
|
| }
|
|
|
|
|
| -Handle<JSFunction> Factory::NewFunctionBoilerplate(Handle<String> name,
|
| - int number_of_literals,
|
| - Handle<Code> code) {
|
| - Handle<JSFunction> function = NewFunctionBoilerplate(name);
|
| - function->set_code(*code);
|
| - int literals_array_size = number_of_literals;
|
| - // If the function contains object, regexp or array literals,
|
| - // allocate extra space for a literals array prefix containing the
|
| - // object, regexp and array constructor functions.
|
| - if (number_of_literals > 0) {
|
| - literals_array_size += JSFunction::kLiteralsPrefixSize;
|
| - }
|
| - Handle<FixedArray> literals =
|
| - Factory::NewFixedArray(literals_array_size, TENURED);
|
| - function->set_literals(*literals);
|
| - ASSERT(!function->has_initial_map());
|
| - ASSERT(!function->has_prototype());
|
| - return function;
|
| -}
|
| -
|
| -
|
| -Handle<JSFunction> Factory::NewFunctionBoilerplate(Handle<String> name) {
|
| - Handle<SharedFunctionInfo> shared = NewSharedFunctionInfo(name);
|
| - CALL_HEAP_FUNCTION(Heap::AllocateFunction(Heap::boilerplate_function_map(),
|
| - *shared,
|
| - Heap::the_hole_value()),
|
| - JSFunction);
|
| -}
|
| -
|
| -
|
| Handle<JSFunction> Factory::NewFunctionWithPrototype(Handle<String> name,
|
| InstanceType type,
|
| int instance_size,
|
| @@ -686,6 +651,22 @@
|
| }
|
|
|
|
|
| +Handle<SharedFunctionInfo> Factory::NewSharedFunctionInfo(
|
| + Handle<String> name, int number_of_literals, Handle<Code> code) {
|
| + Handle<SharedFunctionInfo> shared = NewSharedFunctionInfo(name);
|
| + shared->set_code(*code);
|
| + int literals_array_size = number_of_literals;
|
| + // If the function contains object, regexp or array literals,
|
| + // allocate extra space for a literals array prefix containing the
|
| + // context.
|
| + if (number_of_literals > 0) {
|
| + literals_array_size += JSFunction::kLiteralsPrefixSize;
|
| + }
|
| + shared->set_num_literals(literals_array_size);
|
| + return shared;
|
| +}
|
| +
|
| +
|
| Handle<SharedFunctionInfo> Factory::NewSharedFunctionInfo(Handle<String> name) {
|
| CALL_HEAP_FUNCTION(Heap::AllocateSharedFunctionInfo(*name),
|
| SharedFunctionInfo);
|
|
|