| Index: src/factory.cc
|
| diff --git a/src/factory.cc b/src/factory.cc
|
| index 682125e3af5f90ae53d284f4cad85f36238cb015..c33b7152b4cb1ac320d9ce127acbf530f43305c3 100644
|
| --- a/src/factory.cc
|
| +++ b/src/factory.cc
|
| @@ -555,40 +555,23 @@ Handle<JSFunction> Factory::NewFunctionFromSharedFunctionInfo(
|
|
|
| result->set_context(*context);
|
|
|
| - int index = FLAG_cache_optimized_code
|
| - ? function_info->SearchOptimizedCodeMap(context->global_context())
|
| - : -1;
|
| - if (!function_info->bound()) {
|
| - if (index > 0) {
|
| - FixedArray* code_map =
|
| - FixedArray::cast(function_info->optimized_code_map());
|
| - FixedArray* cached_literals = FixedArray::cast(code_map->get(index + 1));
|
| - ASSERT(cached_literals != NULL);
|
| - ASSERT(function_info->num_literals() == 0 ||
|
| - (code_map->get(index - 1) ==
|
| - cached_literals->get(JSFunction::kLiteralGlobalContextIndex)));
|
| - result->set_literals(cached_literals);
|
| - } else {
|
| - int number_of_literals = function_info->num_literals();
|
| - Handle<FixedArray> literals =
|
| - NewFixedArray(number_of_literals, pretenure);
|
| - if (number_of_literals > 0) {
|
| - // Store the object, regexp and array functions in the literals
|
| - // array prefix. These functions will be used when creating
|
| - // object, regexp and array literals in this function.
|
| - literals->set(JSFunction::kLiteralGlobalContextIndex,
|
| - context->global_context());
|
| - }
|
| - result->set_literals(*literals);
|
| + int index = function_info->SearchOptimizedCodeMap(context->global_context());
|
| + if (!function_info->bound() && index < 0) {
|
| + int number_of_literals = function_info->num_literals();
|
| + Handle<FixedArray> literals = NewFixedArray(number_of_literals, pretenure);
|
| + if (number_of_literals > 0) {
|
| + // Store the global context in the literals array prefix. This
|
| + // context will be used when creating object, regexp and array
|
| + // literals in this function.
|
| + literals->set(JSFunction::kLiteralGlobalContextIndex,
|
| + context->global_context());
|
| }
|
| + result->set_literals(*literals);
|
| }
|
|
|
| if (index > 0) {
|
| // Caching of optimized code enabled and optimized code found.
|
| - Code* code = Code::cast(
|
| - FixedArray::cast(function_info->optimized_code_map())->get(index));
|
| - ASSERT(code != NULL);
|
| - result->ReplaceCode(code);
|
| + function_info->InstallFromOptimizedCodeMap(*result, index);
|
| return result;
|
| }
|
|
|
|
|