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

Side by Side Diff: src/compiler.cc

Issue 547293004: Rename Runtime_CompileUnoptimized to Runtime_CompileLazy, because that is what it does. Split Compi… (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « src/compiler.h ('k') | src/debug.cc » ('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/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/compiler.h" 7 #include "src/compiler.h"
8 8
9 #include "src/bootstrapper.h" 9 #include "src/bootstrapper.h"
10 #include "src/codegen.h" 10 #include "src/codegen.h"
(...skipping 696 matching lines...) Expand 10 before | Expand all | Expand 10 after
707 DCHECK(!function->is_compiled()); 707 DCHECK(!function->is_compiled());
708 if (function->shared()->is_compiled()) { 708 if (function->shared()->is_compiled()) {
709 return Handle<Code>(function->shared()->code()); 709 return Handle<Code>(function->shared()->code());
710 } 710 }
711 711
712 CompilationInfoWithZone info(function); 712 CompilationInfoWithZone info(function);
713 Handle<Code> result; 713 Handle<Code> result;
714 ASSIGN_RETURN_ON_EXCEPTION(info.isolate(), result, 714 ASSIGN_RETURN_ON_EXCEPTION(info.isolate(), result,
715 GetUnoptimizedCodeCommon(&info), 715 GetUnoptimizedCodeCommon(&info),
716 Code); 716 Code);
717 return result;
718 }
719
720
721 MaybeHandle<Code> Compiler::GetLazyCode(Handle<JSFunction> function) {
722 DCHECK(!function->GetIsolate()->has_pending_exception());
723 DCHECK(!function->is_compiled());
724 if (function->shared()->is_compiled()) {
725 return Handle<Code>(function->shared()->code());
726 }
727
728 CompilationInfoWithZone info(function);
729 Handle<Code> result;
730 ASSIGN_RETURN_ON_EXCEPTION(info.isolate(), result,
731 GetUnoptimizedCodeCommon(&info), Code);
717 732
718 if (FLAG_always_opt && 733 if (FLAG_always_opt &&
719 info.isolate()->use_crankshaft() && 734 info.isolate()->use_crankshaft() &&
720 !info.shared_info()->optimization_disabled() && 735 !info.shared_info()->optimization_disabled() &&
721 !info.isolate()->DebuggerHasBreakPoints()) { 736 !info.isolate()->DebuggerHasBreakPoints()) {
722 Handle<Code> opt_code; 737 Handle<Code> opt_code;
723 if (Compiler::GetOptimizedCode( 738 if (Compiler::GetOptimizedCode(
724 function, result, 739 function, result,
725 Compiler::NOT_CONCURRENT).ToHandle(&opt_code)) { 740 Compiler::NOT_CONCURRENT).ToHandle(&opt_code)) {
726 result = opt_code; 741 result = opt_code;
(...skipping 10 matching lines...) Expand all
737 DCHECK(!shared->is_compiled()); 752 DCHECK(!shared->is_compiled());
738 753
739 CompilationInfoWithZone info(shared); 754 CompilationInfoWithZone info(shared);
740 return GetUnoptimizedCodeCommon(&info); 755 return GetUnoptimizedCodeCommon(&info);
741 } 756 }
742 757
743 758
744 bool Compiler::EnsureCompiled(Handle<JSFunction> function, 759 bool Compiler::EnsureCompiled(Handle<JSFunction> function,
745 ClearExceptionFlag flag) { 760 ClearExceptionFlag flag) {
746 if (function->is_compiled()) return true; 761 if (function->is_compiled()) return true;
747 MaybeHandle<Code> maybe_code = Compiler::GetUnoptimizedCode(function); 762 MaybeHandle<Code> maybe_code = Compiler::GetLazyCode(function);
748 Handle<Code> code; 763 Handle<Code> code;
749 if (!maybe_code.ToHandle(&code)) { 764 if (!maybe_code.ToHandle(&code)) {
750 if (flag == CLEAR_EXCEPTION) { 765 if (flag == CLEAR_EXCEPTION) {
751 function->GetIsolate()->clear_pending_exception(); 766 function->GetIsolate()->clear_pending_exception();
752 } 767 }
753 return false; 768 return false;
754 } 769 }
755 function->ReplaceCode(*code); 770 function->ReplaceCode(*code);
756 DCHECK(function->is_compiled()); 771 DCHECK(function->is_compiled());
757 return true; 772 return true;
758 } 773 }
759 774
760 775
761 // Compile full code for debugging. This code will have debug break slots 776 // Compile full code for debugging. This code will have debug break slots
762 // and deoptimization information. Deoptimization information is required 777 // and deoptimization information. Deoptimization information is required
763 // in case that an optimized version of this function is still activated on 778 // in case that an optimized version of this function is still activated on
764 // the stack. It will also make sure that the full code is compiled with 779 // the stack. It will also make sure that the full code is compiled with
765 // the same flags as the previous version, that is flags which can change 780 // the same flags as the previous version, that is flags which can change
766 // the code generated. The current method of mapping from already compiled 781 // the code generated. The current method of mapping from already compiled
767 // full code without debug break slots to full code with debug break slots 782 // full code without debug break slots to full code with debug break slots
768 // depends on the generated code is otherwise exactly the same. 783 // depends on the generated code is otherwise exactly the same.
769 // If compilation fails, just keep the existing code. 784 // If compilation fails, just keep the existing code.
770 MaybeHandle<Code> Compiler::GetCodeForDebugging(Handle<JSFunction> function) { 785 MaybeHandle<Code> Compiler::GetDebugCode(Handle<JSFunction> function) {
771 CompilationInfoWithZone info(function); 786 CompilationInfoWithZone info(function);
772 Isolate* isolate = info.isolate(); 787 Isolate* isolate = info.isolate();
773 VMState<COMPILER> state(isolate); 788 VMState<COMPILER> state(isolate);
774 789
775 info.MarkAsDebug(); 790 info.MarkAsDebug();
776 791
777 DCHECK(!isolate->has_pending_exception()); 792 DCHECK(!isolate->has_pending_exception());
778 Handle<Code> old_code(function->shared()->code()); 793 Handle<Code> old_code(function->shared()->code());
779 DCHECK(old_code->kind() == Code::FUNCTION); 794 DCHECK(old_code->kind() == Code::FUNCTION);
780 DCHECK(!old_code->has_debug_break_slots()); 795 DCHECK(!old_code->has_debug_break_slots());
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
1093 // aggressive about lazy compilation, because it might trigger compilation 1108 // aggressive about lazy compilation, because it might trigger compilation
1094 // of functions without an outer context when setting a breakpoint through 1109 // of functions without an outer context when setting a breakpoint through
1095 // Debug::FindSharedFunctionInfoInScript. 1110 // Debug::FindSharedFunctionInfoInScript.
1096 bool allow_lazy_without_ctx = literal->AllowsLazyCompilationWithoutContext(); 1111 bool allow_lazy_without_ctx = literal->AllowsLazyCompilationWithoutContext();
1097 bool allow_lazy = literal->AllowsLazyCompilation() && 1112 bool allow_lazy = literal->AllowsLazyCompilation() &&
1098 !DebuggerWantsEagerCompilation(&info, allow_lazy_without_ctx); 1113 !DebuggerWantsEagerCompilation(&info, allow_lazy_without_ctx);
1099 1114
1100 // Generate code 1115 // Generate code
1101 Handle<ScopeInfo> scope_info; 1116 Handle<ScopeInfo> scope_info;
1102 if (FLAG_lazy && allow_lazy && !literal->is_parenthesized()) { 1117 if (FLAG_lazy && allow_lazy && !literal->is_parenthesized()) {
1103 Handle<Code> code = isolate->builtins()->CompileUnoptimized(); 1118 Handle<Code> code = isolate->builtins()->CompileLazy();
1104 info.SetCode(code); 1119 info.SetCode(code);
1105 scope_info = Handle<ScopeInfo>(ScopeInfo::Empty(isolate)); 1120 scope_info = Handle<ScopeInfo>(ScopeInfo::Empty(isolate));
1106 } else if (FullCodeGenerator::MakeCode(&info)) { 1121 } else if (FullCodeGenerator::MakeCode(&info)) {
1107 DCHECK(!info.code().is_null()); 1122 DCHECK(!info.code().is_null());
1108 scope_info = ScopeInfo::Create(info.scope(), info.zone()); 1123 scope_info = ScopeInfo::Create(info.scope(), info.zone());
1109 } else { 1124 } else {
1110 return Handle<SharedFunctionInfo>::null(); 1125 return Handle<SharedFunctionInfo>::null();
1111 } 1126 }
1112 1127
1113 // Create a shared function info object. 1128 // Create a shared function info object.
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
1347 // SharedFunctionInfo is passed separately, because if CompilationInfo 1362 // SharedFunctionInfo is passed separately, because if CompilationInfo
1348 // was created using Script object, it will not have it. 1363 // was created using Script object, it will not have it.
1349 1364
1350 // Log the code generation. If source information is available include 1365 // Log the code generation. If source information is available include
1351 // script name and line number. Check explicitly whether logging is 1366 // script name and line number. Check explicitly whether logging is
1352 // enabled as finding the line number is not free. 1367 // enabled as finding the line number is not free.
1353 if (info->isolate()->logger()->is_logging_code_events() || 1368 if (info->isolate()->logger()->is_logging_code_events() ||
1354 info->isolate()->cpu_profiler()->is_profiling()) { 1369 info->isolate()->cpu_profiler()->is_profiling()) {
1355 Handle<Script> script = info->script(); 1370 Handle<Script> script = info->script();
1356 Handle<Code> code = info->code(); 1371 Handle<Code> code = info->code();
1357 if (code.is_identical_to( 1372 if (code.is_identical_to(info->isolate()->builtins()->CompileLazy())) {
1358 info->isolate()->builtins()->CompileUnoptimized())) {
1359 return; 1373 return;
1360 } 1374 }
1361 int line_num = Script::GetLineNumber(script, shared->start_position()) + 1; 1375 int line_num = Script::GetLineNumber(script, shared->start_position()) + 1;
1362 int column_num = 1376 int column_num =
1363 Script::GetColumnNumber(script, shared->start_position()) + 1; 1377 Script::GetColumnNumber(script, shared->start_position()) + 1;
1364 String* script_name = script->name()->IsString() 1378 String* script_name = script->name()->IsString()
1365 ? String::cast(script->name()) 1379 ? String::cast(script->name())
1366 : info->isolate()->heap()->empty_string(); 1380 : info->isolate()->heap()->empty_string();
1367 Logger::LogEventsAndTags log_tag = Logger::ToNativeByScript(tag, *script); 1381 Logger::LogEventsAndTags log_tag = Logger::ToNativeByScript(tag, *script);
1368 PROFILE(info->isolate(), CodeCreateEvent( 1382 PROFILE(info->isolate(), CodeCreateEvent(
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1407 AllowHandleDereference allow_deref; 1421 AllowHandleDereference allow_deref;
1408 bool tracing_on = info()->IsStub() 1422 bool tracing_on = info()->IsStub()
1409 ? FLAG_trace_hydrogen_stubs 1423 ? FLAG_trace_hydrogen_stubs
1410 : (FLAG_trace_hydrogen && 1424 : (FLAG_trace_hydrogen &&
1411 info()->closure()->PassesFilter(FLAG_trace_hydrogen_filter)); 1425 info()->closure()->PassesFilter(FLAG_trace_hydrogen_filter));
1412 return (tracing_on && 1426 return (tracing_on &&
1413 base::OS::StrChr(const_cast<char*>(FLAG_trace_phase), name_[0]) != NULL); 1427 base::OS::StrChr(const_cast<char*>(FLAG_trace_phase), name_[0]) != NULL);
1414 } 1428 }
1415 1429
1416 } } // namespace v8::internal 1430 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/compiler.h ('k') | src/debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698