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

Unified Diff: src/compiler.cc

Issue 2284313003: Separate CompilationInfo into its own file. (Closed)
Patch Set: fix Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/compiler.h ('k') | src/compiler-dispatcher/compiler-dispatcher-job.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler.cc
diff --git a/src/compiler.cc b/src/compiler.cc
index 9e7592ee765f4daf56db7140009b1728644d01ec..44c7d4b385fafd17869b3d2eb50fb675142cf4e2 100644
--- a/src/compiler.cc
+++ b/src/compiler.cc
@@ -40,28 +40,6 @@ namespace v8 {
namespace internal {
-#define PARSE_INFO_GETTER(type, name) \
- type CompilationInfo::name() const { \
- CHECK(parse_info()); \
- return parse_info()->name(); \
- }
-
-
-#define PARSE_INFO_GETTER_WITH_DEFAULT(type, name, def) \
- type CompilationInfo::name() const { \
- return parse_info() ? parse_info()->name() : def; \
- }
-
-
-PARSE_INFO_GETTER(Handle<Script>, script)
-PARSE_INFO_GETTER(FunctionLiteral*, literal)
-PARSE_INFO_GETTER_WITH_DEFAULT(DeclarationScope*, scope, nullptr)
-PARSE_INFO_GETTER_WITH_DEFAULT(Handle<Context>, context,
- Handle<Context>::null())
-PARSE_INFO_GETTER(Handle<SharedFunctionInfo>, shared_info)
-
-#undef PARSE_INFO_GETTER
-#undef PARSE_INFO_GETTER_WITH_DEFAULT
// A wrapper around a CompilationInfo that detaches the Handles from
// the underlying DeferredHandleScope and stores them in info_ on
@@ -91,181 +69,6 @@ struct ScopedTimer {
};
// ----------------------------------------------------------------------------
-// Implementation of CompilationInfo
-
-bool CompilationInfo::has_shared_info() const {
- return parse_info_ && !parse_info_->shared_info().is_null();
-}
-
-CompilationInfo::CompilationInfo(ParseInfo* parse_info,
- Handle<JSFunction> closure)
- : CompilationInfo(parse_info, {}, Code::ComputeFlags(Code::FUNCTION), BASE,
- parse_info->isolate(), parse_info->zone()) {
- closure_ = closure;
-
- // Compiling for the snapshot typically results in different code than
- // compiling later on. This means that code recompiled with deoptimization
- // support won't be "equivalent" (as defined by SharedFunctionInfo::
- // EnableDeoptimizationSupport), so it will replace the old code and all
- // its type feedback. To avoid this, always compile functions in the snapshot
- // with deoptimization support.
- if (isolate_->serializer_enabled()) EnableDeoptimizationSupport();
-
- if (FLAG_function_context_specialization) MarkAsFunctionContextSpecializing();
- if (FLAG_turbo_inlining) MarkAsInliningEnabled();
- if (FLAG_turbo_source_positions) MarkAsSourcePositionsEnabled();
- if (FLAG_turbo_splitting) MarkAsSplittingEnabled();
-}
-
-CompilationInfo::CompilationInfo(Vector<const char> debug_name,
- Isolate* isolate, Zone* zone,
- Code::Flags code_flags)
- : CompilationInfo(nullptr, debug_name, code_flags, STUB, isolate, zone) {}
-
-CompilationInfo::CompilationInfo(ParseInfo* parse_info,
- Vector<const char> debug_name,
- Code::Flags code_flags, Mode mode,
- Isolate* isolate, Zone* zone)
- : parse_info_(parse_info),
- isolate_(isolate),
- flags_(0),
- code_flags_(code_flags),
- mode_(mode),
- osr_ast_id_(BailoutId::None()),
- zone_(zone),
- deferred_handles_(nullptr),
- dependencies_(isolate, zone),
- bailout_reason_(kNoReason),
- prologue_offset_(Code::kPrologueOffsetNotSet),
- track_positions_(FLAG_hydrogen_track_positions ||
- isolate->is_profiling()),
- parameter_count_(0),
- optimization_id_(-1),
- osr_expr_stack_height_(0),
- debug_name_(debug_name) {}
-
-CompilationInfo::~CompilationInfo() {
- if (GetFlag(kDisableFutureOptimization) && has_shared_info()) {
- shared_info()->DisableOptimization(bailout_reason());
- }
- dependencies()->Rollback();
- delete deferred_handles_;
-}
-
-
-int CompilationInfo::num_parameters() const {
- return !IsStub() ? scope()->num_parameters() : parameter_count_;
-}
-
-
-int CompilationInfo::num_parameters_including_this() const {
- return num_parameters() + (is_this_defined() ? 1 : 0);
-}
-
-
-bool CompilationInfo::is_this_defined() const { return !IsStub(); }
-
-
-// Primitive functions are unlikely to be picked up by the stack-walking
-// profiler, so they trigger their own optimization when they're called
-// for the SharedFunctionInfo::kCallsUntilPrimitiveOptimization-th time.
-bool CompilationInfo::ShouldSelfOptimize() {
- return FLAG_crankshaft &&
- !(literal()->flags() & AstProperties::kDontSelfOptimize) &&
- !literal()->dont_optimize() &&
- literal()->scope()->AllowsLazyCompilation() &&
- !shared_info()->optimization_disabled();
-}
-
-void CompilationInfo::ReopenHandlesInNewHandleScope() {
- closure_ = Handle<JSFunction>(*closure_);
-}
-
-bool CompilationInfo::has_simple_parameters() {
- return scope()->has_simple_parameters();
-}
-
-std::unique_ptr<char[]> CompilationInfo::GetDebugName() const {
- if (parse_info() && parse_info()->literal()) {
- AllowHandleDereference allow_deref;
- return parse_info()->literal()->debug_name()->ToCString();
- }
- if (parse_info() && !parse_info()->shared_info().is_null()) {
- return parse_info()->shared_info()->DebugName()->ToCString();
- }
- Vector<const char> name_vec = debug_name_;
- if (name_vec.is_empty()) name_vec = ArrayVector("unknown");
- std::unique_ptr<char[]> name(new char[name_vec.length() + 1]);
- memcpy(name.get(), name_vec.start(), name_vec.length());
- name[name_vec.length()] = '\0';
- return name;
-}
-
-StackFrame::Type CompilationInfo::GetOutputStackFrameType() const {
- switch (output_code_kind()) {
- case Code::STUB:
- case Code::BYTECODE_HANDLER:
- case Code::HANDLER:
- case Code::BUILTIN:
-#define CASE_KIND(kind) case Code::kind:
- IC_KIND_LIST(CASE_KIND)
-#undef CASE_KIND
- return StackFrame::STUB;
- case Code::WASM_FUNCTION:
- return StackFrame::WASM;
- case Code::JS_TO_WASM_FUNCTION:
- return StackFrame::JS_TO_WASM;
- case Code::WASM_TO_JS_FUNCTION:
- return StackFrame::WASM_TO_JS;
- default:
- UNIMPLEMENTED();
- return StackFrame::NONE;
- }
-}
-
-int CompilationInfo::GetDeclareGlobalsFlags() const {
- DCHECK(DeclareGlobalsLanguageMode::is_valid(parse_info()->language_mode()));
- return DeclareGlobalsEvalFlag::encode(parse_info()->is_eval()) |
- DeclareGlobalsNativeFlag::encode(parse_info()->is_native()) |
- DeclareGlobalsLanguageMode::encode(parse_info()->language_mode());
-}
-
-SourcePositionTableBuilder::RecordingMode
-CompilationInfo::SourcePositionRecordingMode() const {
- return parse_info() && parse_info()->is_native()
- ? SourcePositionTableBuilder::OMIT_SOURCE_POSITIONS
- : SourcePositionTableBuilder::RECORD_SOURCE_POSITIONS;
-}
-
-bool CompilationInfo::ExpectsJSReceiverAsReceiver() {
- return is_sloppy(parse_info()->language_mode()) && !parse_info()->is_native();
-}
-
-bool CompilationInfo::has_native_context() const {
- return !closure().is_null() && (closure()->native_context() != nullptr);
-}
-
-Context* CompilationInfo::native_context() const {
- return has_native_context() ? closure()->native_context() : nullptr;
-}
-
-bool CompilationInfo::has_global_object() const { return has_native_context(); }
-
-JSGlobalObject* CompilationInfo::global_object() const {
- return has_global_object() ? native_context()->global_object() : nullptr;
-}
-
-void CompilationInfo::AddInlinedFunction(
- Handle<SharedFunctionInfo> inlined_function) {
- inlined_functions_.push_back(InlinedFunctionHolder(
- inlined_function, handle(inlined_function->code())));
-}
-
-Code::Kind CompilationInfo::output_code_kind() const {
- return Code::ExtractKindFromFlags(code_flags_);
-}
-
-// ----------------------------------------------------------------------------
// Implementation of CompilationJob
CompilationJob::Status CompilationJob::PrepareJob() {
@@ -318,6 +121,20 @@ CompilationJob::Status CompilationJob::FinalizeJob() {
return UpdateState(FinalizeJobImpl(), State::kSucceeded);
}
+CompilationJob::Status CompilationJob::RetryOptimization(BailoutReason reason) {
+ DCHECK(info_->IsOptimizing());
+ info_->RetryOptimization(reason);
+ state_ = State::kFailed;
+ return FAILED;
+}
+
+CompilationJob::Status CompilationJob::AbortOptimization(BailoutReason reason) {
+ DCHECK(info_->IsOptimizing());
+ info_->AbortOptimization(reason);
+ state_ = State::kFailed;
+ return FAILED;
+}
+
void CompilationJob::RecordUnoptimizedCompilationStats() const {
int code_size;
if (info()->has_bytecode_array()) {
@@ -369,6 +186,8 @@ void CompilationJob::RecordOptimizedCompilationStats() const {
}
}
+Isolate* CompilationJob::isolate() const { return info()->isolate(); }
+
namespace {
void AddWeakObjectToCodeDependency(Isolate* isolate, Handle<HeapObject> object,
« no previous file with comments | « src/compiler.h ('k') | src/compiler-dispatcher/compiler-dispatcher-job.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698