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

Unified Diff: runtime/vm/isolate_reload.cc

Issue 2208553002: Simplify reload error reporting (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: 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
Index: runtime/vm/isolate_reload.cc
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index 871b91af6996d96165024c7e7fa54a2c4e5376d2..9cb57bdb8ac8dff763046c7f484008d56b6ae43f 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -48,10 +48,10 @@ DEFINE_FLAG(bool, check_reloaded, false,
InstanceMorpher::InstanceMorpher(Zone* zone, const Class& from, const Class& to)
- : from_(from), to_(to), mapping_() {
+ : from_(from), to_(to), mapping_(zone, 0) {
ComputeMapping();
- before_ = new ZoneGrowableArray<const Instance*>(zone, 0);
- after_ = new ZoneGrowableArray<const Instance*>(zone, 0);
+ before_ = new(zone) ZoneGrowableArray<const Instance*>(zone, 0);
+ after_ = new(zone) ZoneGrowableArray<const Instance*>(zone, 0);
ASSERT(from_.id() == to_.id());
cid_ = from_.id();
}
@@ -369,8 +369,8 @@ IsolateReloadContext::IsolateReloadContext(Isolate* isolate,
saved_num_cids_(-1),
saved_class_table_(NULL),
num_saved_libs_(-1),
- instance_morphers_(),
- reasons_to_cancel_reload_(),
+ instance_morphers_(zone_, 0),
+ reasons_to_cancel_reload_(zone_, 0),
cid_mapper_(),
modified_libs_(NULL),
script_uri_(String::null()),
@@ -483,12 +483,12 @@ void IsolateReloadContext::Reload(bool force_reload) {
Api::NewHandle(thread, root_lib_url.raw()));
result = Api::UnwrapHandle(retval);
}
+ if (result.IsUnwindError()) {
+ // Ignore an unwind error because the isolate is dead.
+ return;
+ }
if (result.IsError()) {
- const Error& error = Error::Cast(result);
- AddReasonForCancelling(new Aborted(zone_, error));
- // We call report on JSON here because we won't ever execute
- // FinalizeLoading.
- ReportOnJSON(js_);
+ FinalizeFailedLoad(Error::Cast(result));
}
}
@@ -519,7 +519,8 @@ void IsolateReloadContext::RegisterClass(const Class& new_cls) {
}
-// FinalizeLoading will be called *before* Reload() returns.
+// FinalizeLoading will be called *before* Reload() returns but will not be
+// called if the embedder fails to load sources.
void IsolateReloadContext::FinalizeLoading() {
if (reload_skipped_) {
return;
@@ -539,10 +540,25 @@ void IsolateReloadContext::FinalizeLoading() {
// information from scratch.
RebuildDirectSubclasses();
- BackgroundCompiler::Enable();
+ CommonFinalizeTail();
+}
+
+
+// FinalizeFailedLoad will be called *before* Reload() returns and will only
+// be called if the embedder fails to load sources.
+void IsolateReloadContext::FinalizeFailedLoad(const Error& error) {
+ AddReasonForCancelling(new Aborted(zone_, error));
+ ReportReasonsForCancelling();
+ Rollback();
+ CommonFinalizeTail();
}
+void IsolateReloadContext::CommonFinalizeTail() {
+ BackgroundCompiler::Enable();
+ ReportOnJSON(js_);
+}
+
void IsolateReloadContext::ReportOnJSON(JSONStream* stream) {
JSONObject jsobj(stream);
jsobj.AddProperty("type", "ReloadReport");
@@ -575,13 +591,6 @@ void IsolateReloadContext::ReportOnJSON(JSONStream* stream) {
}
-void IsolateReloadContext::AbortReload(const Error& error) {
- AddReasonForCancelling(new Aborted(zone_, error));
- ReportReasonsForCancelling();
- Rollback();
-}
-
-
void IsolateReloadContext::EnsuredUnoptimizedCodeForStack() {
TIMELINE_SCOPE(EnsuredUnoptimizedCodeForStack);
StackFrameIterator it(StackFrameIterator::kDontValidateFrames);
@@ -718,10 +727,11 @@ BitVector* IsolateReloadContext::FindModifiedLibraries(bool force_reload) {
// Construct the imported-by graph.
ZoneGrowableArray<ZoneGrowableArray<intptr_t>* >* imported_by =
- new ZoneGrowableArray<ZoneGrowableArray<intptr_t>* >(zone_, num_libs);
+ new(zone_) ZoneGrowableArray<ZoneGrowableArray<intptr_t>* >(
+ zone_, num_libs);
imported_by->SetLength(num_libs);
for (intptr_t i = 0; i < num_libs; i++) {
- (*imported_by)[i] = new ZoneGrowableArray<intptr_t>(zone_, 0);
+ (*imported_by)[i] = new(zone_) ZoneGrowableArray<intptr_t>(zone_, 0);
}
Array& ports = Array::Handle();
Namespace& ns = Namespace::Handle();
« no previous file with comments | « runtime/vm/isolate_reload.h ('k') | runtime/vm/unit_test.cc » ('j') | runtime/vm/unit_test.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698