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

Unified Diff: src/compiler-dispatcher/compiler-dispatcher-job.cc

Issue 2193813002: Add parser finalization step (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 5 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
Index: src/compiler-dispatcher/compiler-dispatcher-job.cc
diff --git a/src/compiler-dispatcher/compiler-dispatcher-job.cc b/src/compiler-dispatcher/compiler-dispatcher-job.cc
index 8234ae214092ee4a99363c04b661bc34bb3942bf..f9f4ec1f66109af22a1489bd97f5cb6e445705ab 100644
--- a/src/compiler-dispatcher/compiler-dispatcher-job.cc
+++ b/src/compiler-dispatcher/compiler-dispatcher-job.cc
@@ -46,19 +46,18 @@ void CompilerDispatcherJob::PrepareToParseOnMainThread() {
Handle<Script> script(Script::cast(shared->script()), isolate_);
Handle<String> source(String::cast(script->source()), isolate_);
if (source->IsExternalTwoByteString()) {
- can_parse_on_background_thread_ = true;
character_stream_.reset(new ExternalTwoByteStringUtf16CharacterStream(
Handle<ExternalTwoByteString>::cast(source), shared->start_position(),
shared->end_position()));
} else if (source->IsExternalOneByteString()) {
- can_parse_on_background_thread_ = true;
character_stream_.reset(new ExternalOneByteStringUtf16CharacterStream(
Handle<ExternalOneByteString>::cast(source), shared->start_position(),
shared->end_position()));
} else {
- can_parse_on_background_thread_ = false;
vogelheim 2016/07/29 12:46:18 If the variable is no longer used, pls remove from
+ source = String::Flatten(source);
+ source_ = Handle<String>::cast(isolate_->global_handles()->Create(*source));
jochen (gone - plz use gerrit) 2016/07/29 12:23:31 have to globalize the reference here, so it surviv
marja 2016/08/01 07:50:24 How about putting this comment into the source cod
character_stream_.reset(new GenericStringUtf16CharacterStream(
- source, shared->start_position(), shared->end_position()));
+ source_, shared->start_position(), shared->end_position()));
}
parse_info_.reset(new ParseInfo(zone_.get()));
parse_info_->set_isolate(isolate_);
@@ -93,5 +92,57 @@ void CompilerDispatcherJob::Parse() {
status_ = CompileJobStatus::kParsed;
}
+void CompilerDispatcherJob::FinalizeParsingOnMainThread() {
+ DCHECK(ThreadId::Current().Equals(isolate_->thread_id()));
+ DCHECK(status() == CompileJobStatus::kParsed);
+
+ if (!source_.is_null()) {
+ i::GlobalHandles::Destroy(Handle<Object>::cast(source_).location());
+ }
+
+ if (parse_info_->literal() == nullptr) {
+ status_ = CompileJobStatus::kFailed;
+ return;
+ }
+
+ InternalizeParsingResult();
+
+ status_ = CompileJobStatus::kReadyToCompile;
+}
+
+void CompilerDispatcherJob::ReportErrorsOnMainThread() {
+ DCHECK(ThreadId::Current().Equals(isolate_->thread_id()));
+ DCHECK(status() == CompileJobStatus::kFailed);
+
+ // Internalizing the parsing result will throw the error.
+ InternalizeParsingResult();
+
+ status_ = CompileJobStatus::kDone;
+}
+
+void CompilerDispatcherJob::InternalizeParsingResult() {
+ DCHECK(ThreadId::Current().Equals(isolate_->thread_id()));
+ DCHECK(status() == CompileJobStatus::kParsed ||
+ status() == CompileJobStatus::kFailed);
+
+ HandleScope scope(isolate_);
+ Handle<SharedFunctionInfo> shared(function_->shared(), isolate_);
+ Handle<Script> script(Script::cast(shared->script()), isolate_);
+
+ parse_info_->set_script(script);
+ parse_info_->set_context(handle(function_->context(), isolate_));
+
+ // Do the parsing tasks which need to be done on the main thread. This will
+ // also handle parse errors.
+ parser_->Internalize(isolate_, script, parse_info_->literal() == nullptr);
+ parser_->HandleSourceURLComments(isolate_, script);
+
+ parse_info_->set_character_stream(nullptr);
+ parse_info_->set_unicode_cache(nullptr);
+ parser_.reset();
+ unicode_cache_.reset();
+ character_stream_.reset();
vogelheim 2016/07/29 12:46:18 [general comment:] Since this class handles more
jochen (gone - plz use gerrit) 2016/07/29 12:49:42 yeah, that makes sense
+}
+
} // namespace internal
} // namespace v8

Powered by Google App Engine
This is Rietveld 408576698