| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 548 ? isolate()->function_map() | 548 ? isolate()->function_map() |
| 549 : isolate()->strict_mode_function_map(), | 549 : isolate()->strict_mode_function_map(), |
| 550 pretenure); | 550 pretenure); |
| 551 | 551 |
| 552 if (function_info->ic_age() != isolate()->heap()->global_ic_age()) { | 552 if (function_info->ic_age() != isolate()->heap()->global_ic_age()) { |
| 553 function_info->ResetForNewContext(isolate()->heap()->global_ic_age()); | 553 function_info->ResetForNewContext(isolate()->heap()->global_ic_age()); |
| 554 } | 554 } |
| 555 | 555 |
| 556 result->set_context(*context); | 556 result->set_context(*context); |
| 557 | 557 |
| 558 int index = FLAG_cache_optimized_code | 558 int index = function_info->SearchOptimizedCodeMap(context->global_context()); |
| 559 ? function_info->SearchOptimizedCodeMap(context->global_context()) | 559 if (!function_info->bound() && index < 0) { |
| 560 : -1; | 560 int number_of_literals = function_info->num_literals(); |
| 561 if (!function_info->bound()) { | 561 Handle<FixedArray> literals = NewFixedArray(number_of_literals, pretenure); |
| 562 if (index > 0) { | 562 if (number_of_literals > 0) { |
| 563 FixedArray* code_map = | 563 // Store the global context in the literals array prefix. This |
| 564 FixedArray::cast(function_info->optimized_code_map()); | 564 // context will be used when creating object, regexp and array |
| 565 FixedArray* cached_literals = FixedArray::cast(code_map->get(index + 1)); | 565 // literals in this function. |
| 566 ASSERT(cached_literals != NULL); | 566 literals->set(JSFunction::kLiteralGlobalContextIndex, |
| 567 ASSERT(function_info->num_literals() == 0 || | 567 context->global_context()); |
| 568 (code_map->get(index - 1) == | |
| 569 cached_literals->get(JSFunction::kLiteralGlobalContextIndex))); | |
| 570 result->set_literals(cached_literals); | |
| 571 } else { | |
| 572 int number_of_literals = function_info->num_literals(); | |
| 573 Handle<FixedArray> literals = | |
| 574 NewFixedArray(number_of_literals, pretenure); | |
| 575 if (number_of_literals > 0) { | |
| 576 // Store the object, regexp and array functions in the literals | |
| 577 // array prefix. These functions will be used when creating | |
| 578 // object, regexp and array literals in this function. | |
| 579 literals->set(JSFunction::kLiteralGlobalContextIndex, | |
| 580 context->global_context()); | |
| 581 } | |
| 582 result->set_literals(*literals); | |
| 583 } | 568 } |
| 569 result->set_literals(*literals); |
| 584 } | 570 } |
| 585 | 571 |
| 586 if (index > 0) { | 572 if (index > 0) { |
| 587 // Caching of optimized code enabled and optimized code found. | 573 // Caching of optimized code enabled and optimized code found. |
| 588 Code* code = Code::cast( | 574 function_info->InstallFromOptimizedCodeMap(*result, index); |
| 589 FixedArray::cast(function_info->optimized_code_map())->get(index)); | |
| 590 ASSERT(code != NULL); | |
| 591 result->ReplaceCode(code); | |
| 592 return result; | 575 return result; |
| 593 } | 576 } |
| 594 | 577 |
| 595 if (V8::UseCrankshaft() && | 578 if (V8::UseCrankshaft() && |
| 596 FLAG_always_opt && | 579 FLAG_always_opt && |
| 597 result->is_compiled() && | 580 result->is_compiled() && |
| 598 !function_info->is_toplevel() && | 581 !function_info->is_toplevel() && |
| 599 function_info->allows_lazy_compilation() && | 582 function_info->allows_lazy_compilation() && |
| 600 !function_info->optimization_disabled()) { | 583 !function_info->optimization_disabled()) { |
| 601 result->MarkForLazyRecompilation(); | 584 result->MarkForLazyRecompilation(); |
| (...skipping 907 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1509 | 1492 |
| 1510 | 1493 |
| 1511 Handle<Object> Factory::ToBoolean(bool value) { | 1494 Handle<Object> Factory::ToBoolean(bool value) { |
| 1512 return Handle<Object>(value | 1495 return Handle<Object>(value |
| 1513 ? isolate()->heap()->true_value() | 1496 ? isolate()->heap()->true_value() |
| 1514 : isolate()->heap()->false_value()); | 1497 : isolate()->heap()->false_value()); |
| 1515 } | 1498 } |
| 1516 | 1499 |
| 1517 | 1500 |
| 1518 } } // namespace v8::internal | 1501 } } // namespace v8::internal |
| OLD | NEW |