diff options
Diffstat (limited to 'deps/v8/src/compiler.cc')
-rw-r--r-- | deps/v8/src/compiler.cc | 38 |
1 files changed, 13 insertions, 25 deletions
diff --git a/deps/v8/src/compiler.cc b/deps/v8/src/compiler.cc index 504575803..5fc107f94 100644 --- a/deps/v8/src/compiler.cc +++ b/deps/v8/src/compiler.cc @@ -36,6 +36,7 @@ #include "deoptimizer.h" #include "full-codegen.h" #include "gdb-jit.h" +#include "typing.h" #include "hydrogen.h" #include "isolate-inl.h" #include "lithium.h" @@ -361,11 +362,11 @@ OptimizingCompiler::Status OptimizingCompiler::CreateGraph() { PrintF("Compiling method %s using hydrogen\n", *name->ToCString()); isolate()->GetHTracer()->TraceCompilation(info()); } - Handle<Context> native_context( - info()->closure()->context()->native_context()); - oracle_ = new(info()->zone()) TypeFeedbackOracle( - code, native_context, isolate(), info()->zone()); - graph_builder_ = new(info()->zone()) HOptimizedGraphBuilder(info(), oracle_); + + // Type-check the function. + AstTyper::Type(info()); + + graph_builder_ = new(info()->zone()) HOptimizedGraphBuilder(info()); Timer t(this, &time_taken_to_create_graph_); graph_ = graph_builder_->CreateGraph(); @@ -392,9 +393,9 @@ OptimizingCompiler::Status OptimizingCompiler::CreateGraph() { } OptimizingCompiler::Status OptimizingCompiler::OptimizeGraph() { - AssertNoAllocation no_gc; - NoHandleAllocation no_handles(isolate()); - HandleDereferenceGuard no_deref(isolate(), HandleDereferenceGuard::DISALLOW); + DisallowHeapAllocation no_allocation; + DisallowHandleAllocation no_handles; + DisallowHandleDereference no_deref; ASSERT(last_status() == SUCCEEDED); Timer t(this, &time_taken_to_optimize_); @@ -423,8 +424,7 @@ OptimizingCompiler::Status OptimizingCompiler::GenerateAndInstallCode() { // graph creation. To make sure that we don't encounter inconsistencies // between graph creation and code generation, we disallow accessing // objects through deferred handles during the latter, with exceptions. - HandleDereferenceGuard no_deref_deferred( - isolate(), HandleDereferenceGuard::DISALLOW_DEFERRED); + DisallowDeferredHandleDereference no_deferred_handle_deref; Handle<Code> optimized_code = chunk_->Codegen(); if (optimized_code.is_null()) { info()->set_bailout_reason("code generation failed"); @@ -649,7 +649,7 @@ Handle<SharedFunctionInfo> Compiler::Compile(Handle<String> source, // in that case too. // Create a script object describing the script to be compiled. - Handle<Script> script = FACTORY->NewScript(source); + Handle<Script> script = isolate->factory()->NewScript(source); if (natives == NATIVES_CODE) { script->set_type(Smi::FromInt(Script::TYPE_NATIVE)); } @@ -771,13 +771,6 @@ static bool InstallFullCode(CompilationInfo* info) { int expected = lit->expected_property_count(); SetExpectedNofPropertiesFromEstimate(shared, expected); - // Set the optimization hints after performing lazy compilation, as - // these are not set when the function is set up as a lazily - // compiled function. - shared->SetThisPropertyAssignmentsInfo( - lit->has_only_simple_this_property_assignments(), - *lit->this_property_assignments()); - // Check the function has compiled code. ASSERT(shared->is_compiled()); shared->set_code_age(0); @@ -957,9 +950,6 @@ void Compiler::RecompileParallel(Handle<JSFunction> closure) { if (status == OptimizingCompiler::SUCCEEDED) { info.Detach(); shared->code()->set_profiler_ticks(0); - // Do a scavenge to put off the next scavenge as far as possible. - // This may ease the issue that GVN blocks the next scavenge. - isolate->heap()->CollectGarbage(NEW_SPACE, "parallel recompile"); isolate->optimizing_compiler_thread()->QueueForOptimization(compiler); } else if (status == OptimizingCompiler::BAILED_OUT) { isolate->clear_pending_exception(); @@ -1054,6 +1044,7 @@ Handle<SharedFunctionInfo> Compiler::BuildFunctionInfo(FunctionLiteral* literal, info.SetLanguageMode(literal->scope()->language_mode()); Isolate* isolate = info.isolate(); + Factory* factory = isolate->factory(); LiveEditFunctionTracker live_edit_tracker(isolate, literal); // Determine if the function can be lazily compiled. This is necessary to // allow some of our builtin JS files to be lazily compiled. These @@ -1083,7 +1074,7 @@ Handle<SharedFunctionInfo> Compiler::BuildFunctionInfo(FunctionLiteral* literal, // Create a shared function info object. Handle<SharedFunctionInfo> result = - FACTORY->NewSharedFunctionInfo(literal->name(), + factory->NewSharedFunctionInfo(literal->name(), literal->materialized_literal_count(), literal->is_generator(), info.code(), @@ -1120,9 +1111,6 @@ void Compiler::SetFunctionInfo(Handle<SharedFunctionInfo> function_info, function_info->set_is_anonymous(lit->is_anonymous()); function_info->set_is_toplevel(is_toplevel); function_info->set_inferred_name(*lit->inferred_name()); - function_info->SetThisPropertyAssignmentsInfo( - 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()); |