OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/isolate_reload.h" | 5 #include "vm/isolate_reload.h" |
6 | 6 |
7 #include "vm/become.h" | 7 #include "vm/become.h" |
8 #include "vm/bit_vector.h" | 8 #include "vm/bit_vector.h" |
9 #include "vm/code_generator.h" | 9 #include "vm/code_generator.h" |
10 #include "vm/compiler.h" | 10 #include "vm/compiler.h" |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
195 RawString* ReasonForCancelling::ToString() { | 195 RawString* ReasonForCancelling::ToString() { |
196 UNREACHABLE(); | 196 UNREACHABLE(); |
197 return NULL; | 197 return NULL; |
198 } | 198 } |
199 | 199 |
200 | 200 |
201 void ReasonForCancelling::AppendTo(JSONArray* array) { | 201 void ReasonForCancelling::AppendTo(JSONArray* array) { |
202 JSONObject jsobj(array); | 202 JSONObject jsobj(array); |
203 jsobj.AddProperty("type", "ReasonForCancelling"); | 203 jsobj.AddProperty("type", "ReasonForCancelling"); |
204 const String& message = String::Handle(ToString()); | 204 const String& message = String::Handle(ToString()); |
205 jsobj.AddProperty("message", message); | 205 jsobj.AddProperty("message", message.ToCString()); |
206 } | 206 } |
207 | 207 |
208 | 208 |
209 void ClassReasonForCancelling::AppendTo(JSONArray* array) { | 209 void ClassReasonForCancelling::AppendTo(JSONArray* array) { |
210 JSONObject jsobj(array); | 210 JSONObject jsobj(array); |
211 jsobj.AddProperty("type", "ReasonForCancelling"); | 211 jsobj.AddProperty("type", "ReasonForCancelling"); |
212 jsobj.AddProperty("class", from_); | 212 jsobj.AddProperty("class", from_); |
213 const String& message = String::Handle(ToString()); | 213 const String& message = String::Handle(ToString()); |
214 jsobj.AddProperty("message", message); | 214 jsobj.AddProperty("message", message.ToCString()); |
215 } | 215 } |
216 | 216 |
217 | 217 |
218 RawError* IsolateReloadContext::error() const { | 218 RawError* IsolateReloadContext::error() const { |
219 ASSERT(reload_aborted()); | 219 ASSERT(reload_aborted()); |
220 // Report the first error to the surroundings. | 220 // Report the first error to the surroundings. |
221 const Error& error = | 221 const Error& error = |
222 Error::Handle(reasons_to_cancel_reload_.At(0)->ToError()); | 222 Error::Handle(reasons_to_cancel_reload_.At(0)->ToError()); |
223 return error.raw(); | 223 return error.raw(); |
224 } | 224 } |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
479 | 479 |
480 Dart_Handle retval = | 480 Dart_Handle retval = |
481 (I->library_tag_handler())(Dart_kScriptTag, | 481 (I->library_tag_handler())(Dart_kScriptTag, |
482 Api::NewHandle(thread, Library::null()), | 482 Api::NewHandle(thread, Library::null()), |
483 Api::NewHandle(thread, root_lib_url.raw())); | 483 Api::NewHandle(thread, root_lib_url.raw())); |
484 result = Api::UnwrapHandle(retval); | 484 result = Api::UnwrapHandle(retval); |
485 } | 485 } |
486 if (result.IsError()) { | 486 if (result.IsError()) { |
487 const Error& error = Error::Cast(result); | 487 const Error& error = Error::Cast(result); |
488 AddReasonForCancelling(new Aborted(zone_, error)); | 488 AddReasonForCancelling(new Aborted(zone_, error)); |
| 489 // We call report on JSON here because we won't ever execute |
| 490 // FinalizeLoading. |
| 491 ReportOnJSON(js_); |
489 } | 492 } |
490 } | 493 } |
491 | 494 |
492 | 495 |
493 void IsolateReloadContext::RegisterClass(const Class& new_cls) { | 496 void IsolateReloadContext::RegisterClass(const Class& new_cls) { |
494 const Class& old_cls = Class::Handle(OldClassOrNull(new_cls)); | 497 const Class& old_cls = Class::Handle(OldClassOrNull(new_cls)); |
495 if (old_cls.IsNull()) { | 498 if (old_cls.IsNull()) { |
496 I->class_table()->Register(new_cls); | 499 I->class_table()->Register(new_cls); |
497 | 500 |
498 if (FLAG_identity_reload) { | 501 if (FLAG_identity_reload) { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
530 } else { | 533 } else { |
531 ReportReasonsForCancelling(); | 534 ReportReasonsForCancelling(); |
532 Rollback(); | 535 Rollback(); |
533 } | 536 } |
534 // ValidateReload mutates the direct subclass information and does | 537 // ValidateReload mutates the direct subclass information and does |
535 // not remove dead subclasses. Rebuild the direct subclass | 538 // not remove dead subclasses. Rebuild the direct subclass |
536 // information from scratch. | 539 // information from scratch. |
537 RebuildDirectSubclasses(); | 540 RebuildDirectSubclasses(); |
538 | 541 |
539 BackgroundCompiler::Enable(); | 542 BackgroundCompiler::Enable(); |
540 | |
541 reload_aborted_ = HasReasonsForCancelling(); | |
542 ReportOnJSON(js_); | |
543 } | 543 } |
544 | 544 |
545 | 545 |
546 void IsolateReloadContext::ReportOnJSON(JSONStream* stream) { | 546 void IsolateReloadContext::ReportOnJSON(JSONStream* stream) { |
547 JSONObject jsobj(stream); | 547 JSONObject jsobj(stream); |
548 jsobj.AddProperty("type", "ReloadReport"); | 548 jsobj.AddProperty("type", "ReloadReport"); |
549 jsobj.AddProperty("success", !HasReasonsForCancelling()); | 549 jsobj.AddProperty("success", !HasReasonsForCancelling()); |
550 { | 550 { |
551 JSONObject details(&jsobj, "details"); | 551 JSONObject details(&jsobj, "details"); |
552 if (HasReasonsForCancelling()) { | 552 if (HasReasonsForCancelling()) { |
(...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1106 void IsolateReloadContext::PostCommit() { | 1106 void IsolateReloadContext::PostCommit() { |
1107 TIMELINE_SCOPE(PostCommit); | 1107 TIMELINE_SCOPE(PostCommit); |
1108 set_saved_root_library(Library::Handle()); | 1108 set_saved_root_library(Library::Handle()); |
1109 set_saved_libraries(GrowableObjectArray::Handle()); | 1109 set_saved_libraries(GrowableObjectArray::Handle()); |
1110 InvalidateWorld(); | 1110 InvalidateWorld(); |
1111 TIR_Print("---- DONE COMMIT\n"); | 1111 TIR_Print("---- DONE COMMIT\n"); |
1112 } | 1112 } |
1113 | 1113 |
1114 | 1114 |
1115 void IsolateReloadContext::AddReasonForCancelling(ReasonForCancelling* reason) { | 1115 void IsolateReloadContext::AddReasonForCancelling(ReasonForCancelling* reason) { |
| 1116 reload_aborted_ = true; |
1116 reasons_to_cancel_reload_.Add(reason); | 1117 reasons_to_cancel_reload_.Add(reason); |
1117 } | 1118 } |
1118 | 1119 |
1119 | 1120 |
1120 void IsolateReloadContext::AddInstanceMorpher(InstanceMorpher* morpher) { | 1121 void IsolateReloadContext::AddInstanceMorpher(InstanceMorpher* morpher) { |
1121 instance_morphers_.Add(morpher); | 1122 instance_morphers_.Add(morpher); |
1122 cid_mapper_.Insert(morpher); | 1123 cid_mapper_.Insert(morpher); |
1123 } | 1124 } |
1124 | 1125 |
1125 | 1126 |
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1592 ASSERT(!super_cls.IsNull()); | 1593 ASSERT(!super_cls.IsNull()); |
1593 super_cls.AddDirectSubclass(cls); | 1594 super_cls.AddDirectSubclass(cls); |
1594 } | 1595 } |
1595 } | 1596 } |
1596 } | 1597 } |
1597 } | 1598 } |
1598 | 1599 |
1599 #endif // !PRODUCT | 1600 #endif // !PRODUCT |
1600 | 1601 |
1601 } // namespace dart | 1602 } // namespace dart |
OLD | NEW |