| Index: runtime/vm/isolate_reload.h
|
| diff --git a/runtime/vm/isolate_reload.h b/runtime/vm/isolate_reload.h
|
| index 36cfc508b4cd762072baf04968552dcb1938d62e..d260768170c4b218953411d6a879a49cf10cdae8 100644
|
| --- a/runtime/vm/isolate_reload.h
|
| +++ b/runtime/vm/isolate_reload.h
|
| @@ -52,7 +52,7 @@ class UpdateClassesVisitor;
|
|
|
| class InstanceMorpher : public ZoneAllocated {
|
| public:
|
| - InstanceMorpher(const Class& from, const Class& to);
|
| + InstanceMorpher(Zone* zone, const Class& from, const Class& to);
|
| virtual ~InstanceMorpher() {}
|
|
|
| // Called on each instance that needs to be morphed.
|
| @@ -93,7 +93,7 @@ class InstanceMorpher : public ZoneAllocated {
|
|
|
| class ReasonForCancelling : public ZoneAllocated {
|
| public:
|
| - ReasonForCancelling() {}
|
| + explicit ReasonForCancelling(Zone* zone) {}
|
| virtual ~ReasonForCancelling() {}
|
|
|
| // Reports a reason for cancelling reload.
|
| @@ -117,8 +117,8 @@ class ReasonForCancelling : public ZoneAllocated {
|
| // Abstract class for also capturing the from_ and to_ class.
|
| class ClassReasonForCancelling : public ReasonForCancelling {
|
| public:
|
| - ClassReasonForCancelling(const Class& from, const Class& to)
|
| - : from_(from), to_(to) { }
|
| + ClassReasonForCancelling(Zone* zone, const Class& from, const Class& to)
|
| + : ReasonForCancelling(zone), from_(from), to_(to) { }
|
|
|
| void AppendTo(JSONArray* array);
|
|
|
| @@ -130,32 +130,36 @@ class ClassReasonForCancelling : public ReasonForCancelling {
|
|
|
| class IsolateReloadContext {
|
| public:
|
| - explicit IsolateReloadContext(Isolate* isolate, JSONStream* js);
|
| + explicit IsolateReloadContext(Isolate* isolate,
|
| + JSONStream* js);
|
| ~IsolateReloadContext();
|
|
|
| - void StartReload(bool force_reload);
|
| - void FinishReload();
|
| - void AbortReload(const Error& error);
|
| + void Reload(bool force_reload);
|
|
|
| - RawLibrary* saved_root_library() const;
|
| -
|
| - RawGrowableObjectArray* saved_libraries() const;
|
| -
|
| - // Report back through the observatory channels.
|
| - void ReportError(const Error& error);
|
| - void ReportSuccess();
|
| + // All zone allocated objects must be allocated from this zone.
|
| + Zone* zone() const { return zone_; }
|
|
|
| bool reload_skipped() const { return reload_skipped_; }
|
| -
|
| - bool has_error() const { return HasReasonsForCancelling(); }
|
| + bool reload_aborted() const { return reload_aborted_; }
|
| RawError* error() const;
|
| -
|
| int64_t reload_timestamp() const { return reload_timestamp_; }
|
|
|
| + static Dart_FileModifiedCallback file_modified_callback() {
|
| + return file_modified_callback_;
|
| + }
|
| + static void SetFileModifiedCallback(Dart_FileModifiedCallback callback) {
|
| + file_modified_callback_ = callback;
|
| + }
|
| +
|
| static bool IsSameField(const Field& a, const Field& b);
|
| static bool IsSameLibrary(const Library& a_lib, const Library& b_lib);
|
| static bool IsSameClass(const Class& a, const Class& b);
|
|
|
| + private:
|
| + RawLibrary* saved_root_library() const;
|
| +
|
| + RawGrowableObjectArray* saved_libraries() const;
|
| +
|
| RawClass* FindOriginalClass(const Class& cls);
|
|
|
| bool IsDirty(const Library& lib);
|
| @@ -193,14 +197,14 @@ class IsolateReloadContext {
|
| return !instance_morphers_.is_empty();
|
| }
|
|
|
| - static Dart_FileModifiedCallback file_modified_callback() {
|
| - return file_modified_callback_;
|
| - }
|
| - static void SetFileModifiedCallback(Dart_FileModifiedCallback callback) {
|
| - file_modified_callback_ = callback;
|
| - }
|
| + // NOTE: FinalizeLoading will be called *before* Reload() returns.
|
| + void FinalizeLoading();
|
| + void AbortReload(const Error& error);
|
| +
|
| + // Report back through the observatory channels.
|
| + void ReportError(const Error& error);
|
| + void ReportSuccess();
|
|
|
| - private:
|
| void set_saved_root_library(const Library& value);
|
|
|
| void set_saved_libraries(const GrowableObjectArray& value);
|
| @@ -248,10 +252,14 @@ class IsolateReloadContext {
|
| void ResetMegamorphicCaches();
|
| void InvalidateWorld();
|
|
|
| + // The zone used for all reload related allocations.
|
| + Zone* zone_;
|
| +
|
| int64_t start_time_micros_;
|
| int64_t reload_timestamp_;
|
| Isolate* isolate_;
|
| bool reload_skipped_;
|
| + bool reload_aborted_;
|
| JSONStream* js_;
|
|
|
| intptr_t saved_num_cids_;
|
| @@ -323,7 +331,10 @@ class IsolateReloadContext {
|
|
|
| friend class Isolate;
|
| friend class Class; // AddStaticFieldMapping, AddEnumBecomeMapping.
|
| + friend class Library;
|
| friend class ObjectLocator;
|
| + friend class MarkFunctionsForRecompilation; // IsDirty.
|
| + friend class ReasonForCancelling;
|
|
|
| static Dart_FileModifiedCallback file_modified_callback_;
|
| };
|
|
|