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; |
} |