Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(254)

Side by Side Diff: src/compiler.cc

Issue 1860943002: [interpreter] Rely on SharedFunctionInfo in UseIgnition. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Enable tests. Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/parsing/parser.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 779 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 !(info->EnsureFeedbackVector(), FullCodeGenerator::MakeCode(info))) { 790 !(info->EnsureFeedbackVector(), FullCodeGenerator::MakeCode(info))) {
791 Isolate* isolate = info->isolate(); 791 Isolate* isolate = info->isolate();
792 if (!isolate->has_pending_exception()) isolate->StackOverflow(); 792 if (!isolate->has_pending_exception()) isolate->StackOverflow();
793 return false; 793 return false;
794 } 794 }
795 return true; 795 return true;
796 } 796 }
797 797
798 bool UseIgnition(CompilationInfo* info) { 798 bool UseIgnition(CompilationInfo* info) {
799 // TODO(4681): Generator functions are not yet supported. 799 // TODO(4681): Generator functions are not yet supported.
800 if ((info->has_shared_info() && info->shared_info()->is_generator()) || 800 if (info->shared_info()->is_generator()) {
801 (info->has_literal() && IsGeneratorFunction(info->literal()->kind()))) {
802 return false; 801 return false;
803 } 802 }
804 803
805 // TODO(4681): Resuming a suspended frame is not supported. 804 // TODO(4681): Resuming a suspended frame is not supported.
806 if (info->has_shared_info() && info->shared_info()->HasBuiltinFunctionId() && 805 if (info->shared_info()->HasBuiltinFunctionId() &&
807 (info->shared_info()->builtin_function_id() == kGeneratorObjectNext || 806 (info->shared_info()->builtin_function_id() == kGeneratorObjectNext ||
808 info->shared_info()->builtin_function_id() == kGeneratorObjectReturn || 807 info->shared_info()->builtin_function_id() == kGeneratorObjectReturn ||
809 info->shared_info()->builtin_function_id() == kGeneratorObjectThrow)) { 808 info->shared_info()->builtin_function_id() == kGeneratorObjectThrow)) {
810 return false; 809 return false;
811 } 810 }
812 811
813 // Checks whether top level functions should be passed by the filter. 812 // Checks whether top level functions should be passed by the filter.
814 if (info->closure().is_null()) { 813 if (info->shared_info()->is_toplevel()) {
815 Vector<const char> filter = CStrVector(FLAG_ignition_filter); 814 Vector<const char> filter = CStrVector(FLAG_ignition_filter);
816 return (filter.length() == 0) || (filter.length() == 1 && filter[0] == '*'); 815 return (filter.length() == 0) || (filter.length() == 1 && filter[0] == '*');
817 } 816 }
818 817
819 // Finally respect the filter. 818 // Finally respect the filter.
820 return info->closure()->shared()->PassesFilter(FLAG_ignition_filter); 819 return info->shared_info()->PassesFilter(FLAG_ignition_filter);
821 } 820 }
822 821
823 int CodeAndMetadataSize(CompilationInfo* info) { 822 int CodeAndMetadataSize(CompilationInfo* info) {
824 int size = 0; 823 int size = 0;
825 if (info->has_bytecode_array()) { 824 if (info->has_bytecode_array()) {
826 Handle<BytecodeArray> bytecode_array = info->bytecode_array(); 825 Handle<BytecodeArray> bytecode_array = info->bytecode_array();
827 size += bytecode_array->BytecodeArraySize(); 826 size += bytecode_array->BytecodeArraySize();
828 size += bytecode_array->constant_pool()->Size(); 827 size += bytecode_array->constant_pool()->Size();
829 size += bytecode_array->handler_table()->Size(); 828 size += bytecode_array->handler_table()->Size();
830 size += bytecode_array->source_position_table()->Size(); 829 size += bytecode_array->source_position_table()->Size();
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
1309 TRACE_EVENT0("v8", info->is_eval() ? "V8.CompileEval" : "V8.Compile"); 1308 TRACE_EVENT0("v8", info->is_eval() ? "V8.CompileEval" : "V8.Compile");
1310 1309
1311 // Allocate a shared function info object. 1310 // Allocate a shared function info object.
1312 DCHECK_EQ(RelocInfo::kNoPosition, lit->function_token_position()); 1311 DCHECK_EQ(RelocInfo::kNoPosition, lit->function_token_position());
1313 result = NewSharedFunctionInfoForLiteral(isolate, lit, script); 1312 result = NewSharedFunctionInfoForLiteral(isolate, lit, script);
1314 result->set_is_toplevel(true); 1313 result->set_is_toplevel(true);
1315 if (info->is_eval()) { 1314 if (info->is_eval()) {
1316 // Eval scripts cannot be (re-)compiled without context. 1315 // Eval scripts cannot be (re-)compiled without context.
1317 result->set_allows_lazy_compilation_without_context(false); 1316 result->set_allows_lazy_compilation_without_context(false);
1318 } 1317 }
1318 parse_info->set_shared_info(result);
1319 1319
1320 // Compile the code. 1320 // Compile the code.
1321 if (!CompileBaselineCode(info)) { 1321 if (!CompileBaselineCode(info)) {
1322 return Handle<SharedFunctionInfo>::null(); 1322 return Handle<SharedFunctionInfo>::null();
1323 } 1323 }
1324 1324
1325 // Install compilation result on the shared function info 1325 // Install compilation result on the shared function info
1326 Handle<ScopeInfo> scope_info = 1326 Handle<ScopeInfo> scope_info =
1327 ScopeInfo::Create(info->isolate(), info->zone(), info->scope()); 1327 ScopeInfo::Create(info->isolate(), info->zone(), info->scope());
1328 InstallBaselineCompilationResult(info, result, scope_info); 1328 InstallBaselineCompilationResult(info, result, scope_info);
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after
1756 Handle<SharedFunctionInfo> result; 1756 Handle<SharedFunctionInfo> result;
1757 if (!maybe_existing.ToHandle(&result)) { 1757 if (!maybe_existing.ToHandle(&result)) {
1758 result = NewSharedFunctionInfoForLiteral(isolate, literal, script); 1758 result = NewSharedFunctionInfoForLiteral(isolate, literal, script);
1759 result->set_is_toplevel(false); 1759 result->set_is_toplevel(false);
1760 } 1760 }
1761 1761
1762 Zone zone(isolate->allocator()); 1762 Zone zone(isolate->allocator());
1763 ParseInfo parse_info(&zone, script); 1763 ParseInfo parse_info(&zone, script);
1764 CompilationInfo info(&parse_info); 1764 CompilationInfo info(&parse_info);
1765 parse_info.set_literal(literal); 1765 parse_info.set_literal(literal);
1766 parse_info.set_shared_info(result);
1766 parse_info.set_scope(literal->scope()); 1767 parse_info.set_scope(literal->scope());
1767 parse_info.set_language_mode(literal->scope()->language_mode()); 1768 parse_info.set_language_mode(literal->scope()->language_mode());
1768 if (outer_info->will_serialize()) info.PrepareForSerializing(); 1769 if (outer_info->will_serialize()) info.PrepareForSerializing();
1769 if (outer_info->is_first_compile()) info.MarkAsFirstCompile(); 1770 if (outer_info->is_first_compile()) info.MarkAsFirstCompile();
1770 if (outer_info->is_debug()) info.MarkAsDebug(); 1771 if (outer_info->is_debug()) info.MarkAsDebug();
1771 1772
1772 LiveEditFunctionTracker live_edit_tracker(isolate, literal); 1773 LiveEditFunctionTracker live_edit_tracker(isolate, literal);
1773 // Determine if the function can be lazily compiled. This is necessary to 1774 // Determine if the function can be lazily compiled. This is necessary to
1774 // allow some of our builtin JS files to be lazily compiled. These 1775 // allow some of our builtin JS files to be lazily compiled. These
1775 // builtins cannot be handled lazily by the parser, since we have to know 1776 // builtins cannot be handled lazily by the parser, since we have to know
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
1957 MaybeHandle<Code> code; 1958 MaybeHandle<Code> code;
1958 if (cached.code != nullptr) code = handle(cached.code); 1959 if (cached.code != nullptr) code = handle(cached.code);
1959 Handle<Context> native_context(function->context()->native_context()); 1960 Handle<Context> native_context(function->context()->native_context());
1960 SharedFunctionInfo::AddToOptimizedCodeMap(shared, native_context, code, 1961 SharedFunctionInfo::AddToOptimizedCodeMap(shared, native_context, code,
1961 literals, BailoutId::None()); 1962 literals, BailoutId::None());
1962 } 1963 }
1963 } 1964 }
1964 1965
1965 } // namespace internal 1966 } // namespace internal
1966 } // namespace v8 1967 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/parsing/parser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698