| Index: src/compiler.cc
|
| diff --git a/src/compiler.cc b/src/compiler.cc
|
| index 85c77adcc1966a89d389ccaa6b4f6399827725fa..d44718bc0fc7faed24c8ee8cfb4f7bfcfaac1322 100644
|
| --- a/src/compiler.cc
|
| +++ b/src/compiler.cc
|
| @@ -118,7 +118,7 @@ bool CompilationInfo::ShouldSelfOptimize() {
|
| FLAG_crankshaft &&
|
| !function()->flags()->Contains(kDontSelfOptimize) &&
|
| !function()->flags()->Contains(kDontOptimize) &&
|
| - function()->scope()->AllowsLazyCompilation() &&
|
| + function()->scope()->AllowsLazyRecompilation() &&
|
| (shared_info().is_null() || !shared_info()->optimization_disabled());
|
| }
|
|
|
| @@ -137,8 +137,9 @@ void CompilationInfo::AbortOptimization() {
|
| // all. However crankshaft support recompilation of functions, so in this case
|
| // the full compiler need not be be used if a debugger is attached, but only if
|
| // break points has actually been set.
|
| -static bool IsDebuggerActive(Isolate* isolate) {
|
| +static bool is_debugging_active() {
|
| #ifdef ENABLE_DEBUGGER_SUPPORT
|
| + Isolate* isolate = Isolate::Current();
|
| return V8::UseCrankshaft() ?
|
| isolate->debug()->has_break_points() :
|
| isolate->debugger()->IsDebuggerActive();
|
| @@ -148,8 +149,8 @@ static bool IsDebuggerActive(Isolate* isolate) {
|
| }
|
|
|
|
|
| -static bool AlwaysFullCompiler(Isolate* isolate) {
|
| - return FLAG_always_full_compiler || IsDebuggerActive(isolate);
|
| +static bool AlwaysFullCompiler() {
|
| + return FLAG_always_full_compiler || is_debugging_active();
|
| }
|
|
|
|
|
| @@ -204,7 +205,7 @@ static bool MakeCrankshaftCode(CompilationInfo* info) {
|
| // Fall back to using the full code generator if it's not possible
|
| // to use the Hydrogen-based optimizing compiler. We already have
|
| // generated code for this from the shared function object.
|
| - if (AlwaysFullCompiler(info->isolate())) {
|
| + if (AlwaysFullCompiler()) {
|
| info->SetCode(code);
|
| return true;
|
| }
|
| @@ -718,14 +719,8 @@ Handle<SharedFunctionInfo> Compiler::BuildFunctionInfo(FunctionLiteral* literal,
|
| // builtins cannot be handled lazily by the parser, since we have to know
|
| // if a function uses the special natives syntax, which is something the
|
| // parser records.
|
| - // If the debugger requests compilation for break points, we cannot be
|
| - // aggressive about lazy compilation, because it might trigger compilation
|
| - // of functions without an outer context when setting a breakpoint through
|
| - // Runtime::FindSharedFunctionInfoInScript.
|
| - bool allow_lazy_without_ctx = literal->AllowsLazyCompilationWithoutContext();
|
| bool allow_lazy = literal->AllowsLazyCompilation() &&
|
| - !LiveEditFunctionTracker::IsActive(info.isolate()) &&
|
| - (!info.isolate()->DebuggerHasBreakPoints() || allow_lazy_without_ctx);
|
| + !LiveEditFunctionTracker::IsActive(info.isolate());
|
|
|
| Handle<ScopeInfo> scope_info(ScopeInfo::Empty());
|
|
|
| @@ -750,7 +745,6 @@ Handle<SharedFunctionInfo> Compiler::BuildFunctionInfo(FunctionLiteral* literal,
|
| SetFunctionInfo(result, literal, false, script);
|
| RecordFunctionCompilation(Logger::FUNCTION_TAG, &info, result);
|
| result->set_allows_lazy_compilation(allow_lazy);
|
| - result->set_allows_lazy_compilation_without_context(allow_lazy_without_ctx);
|
|
|
| // Set the expected number of properties for instances and return
|
| // the resulting function.
|
| @@ -783,8 +777,6 @@ void Compiler::SetFunctionInfo(Handle<SharedFunctionInfo> function_info,
|
| lit->has_only_simple_this_property_assignments(),
|
| *lit->this_property_assignments());
|
| function_info->set_allows_lazy_compilation(lit->AllowsLazyCompilation());
|
| - function_info->set_allows_lazy_compilation_without_context(
|
| - lit->AllowsLazyCompilationWithoutContext());
|
| function_info->set_language_mode(lit->language_mode());
|
| function_info->set_uses_arguments(lit->scope()->arguments() != NULL);
|
| function_info->set_has_duplicate_parameters(lit->has_duplicate_parameters());
|
|
|