| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/compiler.h" | 5 #include "src/compiler.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "src/ast/ast-numbering.h" | 9 #include "src/ast/ast-numbering.h" |
| 10 #include "src/ast/prettyprinter.h" | 10 #include "src/ast/prettyprinter.h" |
| (...skipping 820 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 831 // Update the shared function info with the scope info. Allocating the | 831 // Update the shared function info with the scope info. Allocating the |
| 832 // ScopeInfo object may cause a GC. | 832 // ScopeInfo object may cause a GC. |
| 833 Handle<ScopeInfo> scope_info = | 833 Handle<ScopeInfo> scope_info = |
| 834 ScopeInfo::Create(info->isolate(), info->zone(), info->scope()); | 834 ScopeInfo::Create(info->isolate(), info->zone(), info->scope()); |
| 835 shared->set_scope_info(*scope_info); | 835 shared->set_scope_info(*scope_info); |
| 836 | 836 |
| 837 // Update the code and feedback vector for the shared function info. | 837 // Update the code and feedback vector for the shared function info. |
| 838 shared->ReplaceCode(*info->code()); | 838 shared->ReplaceCode(*info->code()); |
| 839 shared->set_feedback_vector(*info->feedback_vector()); | 839 shared->set_feedback_vector(*info->feedback_vector()); |
| 840 if (info->has_bytecode_array()) { | 840 if (info->has_bytecode_array()) { |
| 841 DCHECK(shared->function_data()->IsUndefined()); | 841 DCHECK(!shared->HasBytecodeArray()); // Only compiled once. |
| 842 shared->set_function_data(*info->bytecode_array()); | 842 shared->set_bytecode_array(*info->bytecode_array()); |
| 843 } | 843 } |
| 844 | 844 |
| 845 return info->code(); | 845 return info->code(); |
| 846 } | 846 } |
| 847 | 847 |
| 848 | 848 |
| 849 MUST_USE_RESULT static MaybeHandle<Code> GetCodeFromOptimizedCodeMap( | 849 MUST_USE_RESULT static MaybeHandle<Code> GetCodeFromOptimizedCodeMap( |
| 850 Handle<JSFunction> function, BailoutId osr_ast_id) { | 850 Handle<JSFunction> function, BailoutId osr_ast_id) { |
| 851 Handle<SharedFunctionInfo> shared(function->shared()); | 851 Handle<SharedFunctionInfo> shared(function->shared()); |
| 852 DisallowHeapAllocation no_gc; | 852 DisallowHeapAllocation no_gc; |
| (...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1301 } | 1301 } |
| 1302 | 1302 |
| 1303 // Allocate function. | 1303 // Allocate function. |
| 1304 DCHECK(!info->code().is_null()); | 1304 DCHECK(!info->code().is_null()); |
| 1305 result = isolate->factory()->NewSharedFunctionInfo( | 1305 result = isolate->factory()->NewSharedFunctionInfo( |
| 1306 lit->name(), lit->materialized_literal_count(), lit->kind(), | 1306 lit->name(), lit->materialized_literal_count(), lit->kind(), |
| 1307 info->code(), | 1307 info->code(), |
| 1308 ScopeInfo::Create(info->isolate(), info->zone(), info->scope()), | 1308 ScopeInfo::Create(info->isolate(), info->zone(), info->scope()), |
| 1309 info->feedback_vector()); | 1309 info->feedback_vector()); |
| 1310 if (info->has_bytecode_array()) { | 1310 if (info->has_bytecode_array()) { |
| 1311 DCHECK(result->function_data()->IsUndefined()); | 1311 DCHECK(!result->HasBytecodeArray()); // Only compiled once. |
| 1312 result->set_function_data(*info->bytecode_array()); | 1312 result->set_bytecode_array(*info->bytecode_array()); |
| 1313 } | 1313 } |
| 1314 | 1314 |
| 1315 DCHECK_EQ(RelocInfo::kNoPosition, lit->function_token_position()); | 1315 DCHECK_EQ(RelocInfo::kNoPosition, lit->function_token_position()); |
| 1316 SharedFunctionInfo::InitFromFunctionLiteral(result, lit); | 1316 SharedFunctionInfo::InitFromFunctionLiteral(result, lit); |
| 1317 SharedFunctionInfo::SetScript(result, script); | 1317 SharedFunctionInfo::SetScript(result, script); |
| 1318 result->set_is_toplevel(true); | 1318 result->set_is_toplevel(true); |
| 1319 if (info->is_eval()) { | 1319 if (info->is_eval()) { |
| 1320 // Eval scripts cannot be (re-)compiled without context. | 1320 // Eval scripts cannot be (re-)compiled without context. |
| 1321 result->set_allows_lazy_compilation_without_context(false); | 1321 result->set_allows_lazy_compilation_without_context(false); |
| 1322 } | 1322 } |
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1662 return Handle<SharedFunctionInfo>::null(); | 1662 return Handle<SharedFunctionInfo>::null(); |
| 1663 } | 1663 } |
| 1664 | 1664 |
| 1665 if (maybe_existing.is_null()) { | 1665 if (maybe_existing.is_null()) { |
| 1666 // Create a shared function info object. | 1666 // Create a shared function info object. |
| 1667 Handle<SharedFunctionInfo> result = | 1667 Handle<SharedFunctionInfo> result = |
| 1668 isolate->factory()->NewSharedFunctionInfo( | 1668 isolate->factory()->NewSharedFunctionInfo( |
| 1669 literal->name(), literal->materialized_literal_count(), | 1669 literal->name(), literal->materialized_literal_count(), |
| 1670 literal->kind(), info.code(), scope_info, info.feedback_vector()); | 1670 literal->kind(), info.code(), scope_info, info.feedback_vector()); |
| 1671 if (info.has_bytecode_array()) { | 1671 if (info.has_bytecode_array()) { |
| 1672 DCHECK(result->function_data()->IsUndefined()); | 1672 DCHECK(!result->HasBytecodeArray()); // Only compiled once. |
| 1673 result->set_function_data(*info.bytecode_array()); | 1673 result->set_bytecode_array(*info.bytecode_array()); |
| 1674 } | 1674 } |
| 1675 | 1675 |
| 1676 SharedFunctionInfo::InitFromFunctionLiteral(result, literal); | 1676 SharedFunctionInfo::InitFromFunctionLiteral(result, literal); |
| 1677 SharedFunctionInfo::SetScript(result, script); | 1677 SharedFunctionInfo::SetScript(result, script); |
| 1678 result->set_is_toplevel(false); | 1678 result->set_is_toplevel(false); |
| 1679 // If the outer function has been compiled before, we cannot be sure that | 1679 // If the outer function has been compiled before, we cannot be sure that |
| 1680 // shared function info for this function literal has been created for the | 1680 // shared function info for this function literal has been created for the |
| 1681 // first time. It may have already been compiled previously. | 1681 // first time. It may have already been compiled previously. |
| 1682 result->set_never_compiled(outer_info->is_first_compile() && lazy); | 1682 result->set_never_compiled(outer_info->is_first_compile() && lazy); |
| 1683 | 1683 |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1888 } | 1888 } |
| 1889 | 1889 |
| 1890 #if DEBUG | 1890 #if DEBUG |
| 1891 void CompilationInfo::PrintAstForTesting() { | 1891 void CompilationInfo::PrintAstForTesting() { |
| 1892 PrintF("--- Source from AST ---\n%s\n", | 1892 PrintF("--- Source from AST ---\n%s\n", |
| 1893 PrettyPrinter(isolate()).PrintProgram(literal())); | 1893 PrettyPrinter(isolate()).PrintProgram(literal())); |
| 1894 } | 1894 } |
| 1895 #endif | 1895 #endif |
| 1896 } // namespace internal | 1896 } // namespace internal |
| 1897 } // namespace v8 | 1897 } // namespace v8 |
| OLD | NEW |