Version 2.12.0-235.0.dev

Merge commit '1b38b8522395d1c0f220b4ead4f263de9050729f' into 'dev'
diff --git a/runtime/vm/class_table.h b/runtime/vm/class_table.h
index 529040e..3660e29 100644
--- a/runtime/vm/class_table.h
+++ b/runtime/vm/class_table.h
@@ -25,7 +25,7 @@
 class Isolate;
 class IsolateGroup;
 class IsolateGroupReloadContext;
-class IsolateReloadContext;
+class ProgramReloadContext;
 class JSONArray;
 class JSONObject;
 class JSONStream;
@@ -144,7 +144,7 @@
   }
 
   void ResetBeforeHotReload() {
-    // The [IsolateReloadContext] is now source-of-truth for GC.
+    // The [ProgramReloadContext] is now source-of-truth for GC.
     auto table = table_.load();
     for (intptr_t i = 0; i < top_; i++) {
       // Don't use memset, which changes this from a relaxed atomic operation
@@ -156,7 +156,7 @@
   void ResetAfterHotReload(intptr_t* old_table,
                            intptr_t num_old_cids,
                            bool is_rollback) {
-    // The [IsolateReloadContext] is no longer source-of-truth for GC after we
+    // The [ProgramReloadContext] is no longer source-of-truth for GC after we
     // return, so we restore size information for all classes.
     if (is_rollback) {
       SetNumCids(num_old_cids);
@@ -259,7 +259,7 @@
                            ClassPtr** tlc_copy,
                            intptr_t* copy_num_cids,
                            intptr_t* copy_num_tlc_cids) {
-    // The [IsolateReloadContext] will need to maintain a copy of the old class
+    // The [ProgramReloadContext] will need to maintain a copy of the old class
     // table until instances have been morphed.
     const intptr_t num_cids = NumCids();
     const intptr_t num_tlc_cids = NumTopLevelCids();
@@ -298,7 +298,7 @@
                            intptr_t num_old_cids,
                            intptr_t num_old_tlc_cids,
                            bool is_rollback) {
-    // The [IsolateReloadContext] is no longer source-of-truth for GC after we
+    // The [ProgramReloadContext] is no longer source-of-truth for GC after we
     // return, so we restore size information for all classes.
     if (is_rollback) {
       SetNumCids(num_old_cids, num_old_tlc_cids);
diff --git a/runtime/vm/heap/heap.h b/runtime/vm/heap/heap.h
index 9fbe5c1..ac1f0ff 100644
--- a/runtime/vm/heap/heap.h
+++ b/runtime/vm/heap/heap.h
@@ -428,7 +428,7 @@
   friend class ServiceEvent;
   friend class Scavenger;             // VerifyGC
   friend class PageSpace;             // VerifyGC
-  friend class IsolateReloadContext;  // VisitObjects
+  friend class ProgramReloadContext;  // VisitObjects
   friend class ClassFinalizer;        // VisitObjects
   friend class HeapIterationScope;    // VisitObjects
   friend class ProgramVisitor;        // VisitObjectsImagePages
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index c9ec72a..a837201 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -879,7 +879,7 @@
 void Isolate::RegisterClass(const Class& cls) {
 #if !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
   if (group()->IsReloading()) {
-    reload_context()->RegisterClass(cls);
+    program_reload_context()->RegisterClass(cls);
     return;
   }
 #endif  // !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
@@ -1721,7 +1721,7 @@
 Isolate::~Isolate() {
 #if !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
   // TODO(32796): Re-enable assertion.
-  // RELEASE_ASSERT(reload_context_ == NULL);
+  // RELEASE_ASSERT(program_reload_context_ == NULL);
 #endif  // !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
 
   delete optimizing_background_compiler_;
@@ -1995,8 +1995,8 @@
 
   ForEachIsolate([&](Isolate* isolate) {
     isolate->SetHasAttemptedReload(true);
-    isolate->reload_context_ =
-        new IsolateReloadContext(group_reload_context_, isolate);
+    isolate->program_reload_context_ =
+        new ProgramReloadContext(group_reload_context_, isolate);
   });
   const bool success =
       group_reload_context_->Reload(force_reload, root_script_url, packages_url,
@@ -2028,8 +2028,8 @@
 
   ForEachIsolate([&](Isolate* isolate) {
     isolate->SetHasAttemptedReload(true);
-    isolate->reload_context_ =
-        new IsolateReloadContext(group_reload_context_, isolate);
+    isolate->program_reload_context_ =
+        new ProgramReloadContext(group_reload_context_, isolate);
   });
   const bool success = group_reload_context_->Reload(
       force_reload,
@@ -2051,8 +2051,8 @@
   // Another thread may be in the middle of GetClassForHeapWalkAt.
   SafepointOperationScope safepoint_scope(Thread::Current());
 
-  delete reload_context_;
-  reload_context_ = nullptr;
+  delete program_reload_context_;
+  program_reload_context_ = nullptr;
 }
 #endif  // !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
 
@@ -2609,9 +2609,10 @@
   }
 #if !defined(DART_PRECOMPILED_RUNTIME)
   // Visit objects that are being used for isolate reload.
-  if (reload_context() != nullptr) {
-    reload_context()->VisitObjectPointers(visitor);
-    reload_context()->group_reload_context()->VisitObjectPointers(visitor);
+  if (program_reload_context() != nullptr) {
+    program_reload_context()->VisitObjectPointers(visitor);
+    program_reload_context()->group_reload_context()->VisitObjectPointers(
+        visitor);
   }
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
   if (ServiceIsolate::IsServiceIsolate(this)) {
@@ -2808,7 +2809,7 @@
   ClassPtr raw_class = nullptr;
 #if !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
   if (group()->IsReloading()) {
-    raw_class = reload_context()->GetClassForHeapWalkAt(cid);
+    raw_class = program_reload_context()->GetClassForHeapWalkAt(cid);
   } else {
     raw_class = group()->class_table()->At(cid);
   }
@@ -3351,11 +3352,12 @@
   set_message_notify_callback(Isolate::WakePauseEventHandler);
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
-  const bool had_isolate_reload_context = reload_context() != nullptr;
-  const int64_t start_time_micros =
-      !had_isolate_reload_context
-          ? 0
-          : reload_context()->group_reload_context()->start_time_micros();
+  const bool had_program_reload_context = program_reload_context() != nullptr;
+  const int64_t start_time_micros = !had_program_reload_context
+                                        ? 0
+                                        : program_reload_context()
+                                              ->group_reload_context()
+                                              ->start_time_micros();
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
   bool resume = false;
   bool handle_non_service_messages = false;
@@ -3374,7 +3376,7 @@
     }
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
-    if (had_isolate_reload_context && (reload_context() == nullptr)) {
+    if (had_program_reload_context && (program_reload_context() == nullptr)) {
       if (FLAG_trace_reload) {
         const int64_t reload_time_micros =
             OS::GetCurrentMonotonicMicros() - start_time_micros;
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 4a0bab0..0b8dd2c 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -57,7 +57,7 @@
 class ICData;
 class IsolateObjectStore;
 class IsolateProfilerData;
-class IsolateReloadContext;
+class ProgramReloadContext;
 class Log;
 class Message;
 class MessageHandler;
@@ -1202,7 +1202,9 @@
   VMTagCounters* vm_tag_counters() { return &vm_tag_counters_; }
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
-  IsolateReloadContext* reload_context() { return reload_context_; }
+  ProgramReloadContext* program_reload_context() {
+    return program_reload_context_;
+  }
 
   void DeleteReloadContext();
 
@@ -1604,7 +1606,7 @@
       0;  // we can only reload when this is 0.
   // Per-isolate copy of FLAG_reload_every.
   intptr_t reload_every_n_stack_overflow_checks_;
-  IsolateReloadContext* reload_context_ = nullptr;
+  ProgramReloadContext* program_reload_context_ = nullptr;
   // Ring buffer of objects assigned an id.
   ObjectIdRing* object_id_ring_ = nullptr;
 #endif  // !defined(PRODUCT)
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index 3d8f990..21ffcf2 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -347,7 +347,7 @@
     if (!a.IsClass() || !b.IsClass()) {
       return false;
     }
-    return IsolateReloadContext::IsSameClass(Class::Cast(a), Class::Cast(b));
+    return ProgramReloadContext::IsSameClass(Class::Cast(a), Class::Cast(b));
   }
 
   static uword Hash(const Object& obj) {
@@ -372,7 +372,7 @@
     if (!a.IsLibrary() || !b.IsLibrary()) {
       return false;
     }
-    return IsolateReloadContext::IsSameLibrary(Library::Cast(a),
+    return ProgramReloadContext::IsSameLibrary(Library::Cast(a),
                                                Library::Cast(b));
   }
 
@@ -405,7 +405,7 @@
   }
 };
 
-bool IsolateReloadContext::IsSameClass(const Class& a, const Class& b) {
+bool ProgramReloadContext::IsSameClass(const Class& a, const Class& b) {
   // TODO(turnidge): We need to look at generic type arguments for
   // synthetic mixin classes.  Their names are not necessarily unique
   // currently.
@@ -425,7 +425,7 @@
   return (a_lib.private_key() == b_lib.private_key());
 }
 
-bool IsolateReloadContext::IsSameLibrary(const Library& a_lib,
+bool ProgramReloadContext::IsSameLibrary(const Library& a_lib,
                                          const Library& b_lib) {
   const String& a_lib_url =
       String::Handle(a_lib.IsNull() ? String::null() : a_lib.url());
@@ -453,7 +453,7 @@
       old_root_url_prefix_(String::null()) {}
 IsolateGroupReloadContext::~IsolateGroupReloadContext() {}
 
-IsolateReloadContext::IsolateReloadContext(
+ProgramReloadContext::ProgramReloadContext(
     std::shared_ptr<IsolateGroupReloadContext> group_reload_context,
     Isolate* isolate)
     : zone_(Thread::Current()->zone()),
@@ -470,13 +470,13 @@
       become_enum_mappings_(GrowableObjectArray::null()),
       saved_root_library_(Library::null()),
       saved_libraries_(GrowableObjectArray::null()) {
-  // NOTE: DO NOT ALLOCATE ANY RAW OBJECTS HERE. The IsolateReloadContext is not
+  // NOTE: DO NOT ALLOCATE ANY RAW OBJECTS HERE. The ProgramReloadContext is not
   // associated with the isolate yet and if a GC is triggered here the raw
   // objects will not be properly accounted for.
   ASSERT(zone_ != NULL);
 }
 
-IsolateReloadContext::~IsolateReloadContext() {
+ProgramReloadContext::~ProgramReloadContext() {
   ASSERT(zone_ == Thread::Current()->zone());
   ASSERT(saved_class_table_.load(std::memory_order_relaxed) == nullptr);
   ASSERT(saved_tlc_class_table_.load(std::memory_order_relaxed) == nullptr);
@@ -682,9 +682,10 @@
   // TODO(johnmccutchan): Deoptimizing dependent code here (before the reload)
   // is paranoid. This likely can be moved to the commit phase.
   ForEachIsolate([&](Isolate* isolate) {
-    isolate->reload_context()->EnsuredUnoptimizedCodeForStack();
-    isolate->reload_context()->DeoptimizeDependentCode();
-    isolate->reload_context()->ReloadPhase1AllocateStorageMapsAndCheckpoint();
+    isolate->program_reload_context()->EnsuredUnoptimizedCodeForStack();
+    isolate->program_reload_context()->DeoptimizeDependentCode();
+    isolate->program_reload_context()
+        ->ReloadPhase1AllocateStorageMapsAndCheckpoint();
   });
   // Renumbering the libraries has invalidated this.
   modified_libs_ = nullptr;
@@ -702,7 +703,7 @@
     TIMELINE_SCOPE(CheckpointClasses);
     CheckpointSharedClassTable();
     ForEachIsolate([&](Isolate* isolate) {
-      isolate->reload_context()->CheckpointClasses();
+      isolate->program_reload_context()->CheckpointClasses();
     });
   }
 
@@ -724,7 +725,7 @@
 
   auto& tmp = Object::Handle(Z);
   ForEachIsolate([&](Isolate* isolate) {
-    tmp = isolate->reload_context()->ReloadPhase2LoadKernel(
+    tmp = isolate->program_reload_context()->ReloadPhase2LoadKernel(
         kernel_program.get(), root_lib_url_);
     if (tmp.IsError()) {
       results.SetAt(isolateIndex, tmp);
@@ -743,7 +744,7 @@
 
     DiscardSavedClassTable(/*is_rollback=*/true);
     ForEachIsolate([&](Isolate* isolate) {
-      isolate->reload_context()->ReloadPhase4Rollback();
+      isolate->program_reload_context()->ReloadPhase4Rollback();
     });
     CommonFinalizeTail(num_old_libs_);
   } else {
@@ -751,7 +752,7 @@
     TIR_Print("---- LOAD SUCCEEDED\n");
 
     ForEachIsolate([&](Isolate* isolate) {
-      isolate->reload_context()->ReloadPhase3FinalizeLoading();
+      isolate->program_reload_context()->ReloadPhase3FinalizeLoading();
     });
 
     if (FLAG_gc_during_reload) {
@@ -764,7 +765,7 @@
     if (!FLAG_reload_force_rollback && !HasReasonsForCancelling()) {
       TIR_Print("---- COMMITTING RELOAD\n");
       ForEachIsolate([&](Isolate* isolate) {
-        isolate->reload_context()->ReloadPhase4CommitPrepare();
+        isolate->program_reload_context()->ReloadPhase4CommitPrepare();
       });
       bool discard_class_tables = true;
       if (HasInstanceMorphers()) {
@@ -813,7 +814,7 @@
             // commit to the changed class table and deleted the saved one.
             DiscardSavedClassTable(/*is_rollback=*/false);
             ForEachIsolate([&](Isolate* isolate) {
-              isolate->reload_context()->DiscardSavedClassTable(
+              isolate->program_reload_context()->DiscardSavedClassTable(
                   /*is_rollback=*/false);
             });
           }
@@ -832,12 +833,12 @@
       if (discard_class_tables) {
         DiscardSavedClassTable(/*is_rollback=*/false);
         ForEachIsolate([&](Isolate* isolate) {
-          isolate->reload_context()->DiscardSavedClassTable(
+          isolate->program_reload_context()->DiscardSavedClassTable(
               /*is_rollback=*/false);
         });
       }
       ForEachIsolate([&](Isolate* isolate) {
-        isolate->reload_context()->ReloadPhase4CommitFinish();
+        isolate->program_reload_context()->ReloadPhase4CommitFinish();
       });
       TIR_Print("---- DONE COMMIT\n");
       isolate_group_->set_last_reload_timestamp(reload_timestamp_);
@@ -845,7 +846,7 @@
       TIR_Print("---- ROLLING BACK");
       DiscardSavedClassTable(/*is_rollback=*/true);
       ForEachIsolate([&](Isolate* isolate) {
-        isolate->reload_context()->ReloadPhase4Rollback();
+        isolate->program_reload_context()->ReloadPhase4Rollback();
       });
     }
 
@@ -855,7 +856,7 @@
     {
       SafepointWriteRwLocker ml(thread, IG->program_lock());
       ForEachIsolate([&](Isolate* isolate) {
-        isolate->reload_context()->RebuildDirectSubclasses();
+        isolate->program_reload_context()->RebuildDirectSubclasses();
       });
     }
     const intptr_t final_library_count =
@@ -1062,7 +1063,7 @@
   return nullptr;
 }
 
-void IsolateReloadContext::ReloadPhase1AllocateStorageMapsAndCheckpoint() {
+void ProgramReloadContext::ReloadPhase1AllocateStorageMapsAndCheckpoint() {
   // Preallocate storage for maps.
   old_classes_set_storage_ =
       HashTables::New<UnorderedHashSet<ClassMapTraits> >(4);
@@ -1087,7 +1088,7 @@
   }
 }
 
-ObjectPtr IsolateReloadContext::ReloadPhase2LoadKernel(
+ObjectPtr ProgramReloadContext::ReloadPhase2LoadKernel(
     kernel::Program* program,
     const String& root_lib_url) {
   Thread* thread = Thread::Current();
@@ -1113,27 +1114,27 @@
   }
 }
 
-void IsolateReloadContext::ReloadPhase3FinalizeLoading() {
+void ProgramReloadContext::ReloadPhase3FinalizeLoading() {
   BuildLibraryMapping();
   BuildRemovedClassesSet();
   ValidateReload();
 }
 
-void IsolateReloadContext::ReloadPhase4CommitPrepare() {
+void ProgramReloadContext::ReloadPhase4CommitPrepare() {
   CommitBeforeInstanceMorphing();
 }
 
-void IsolateReloadContext::ReloadPhase4CommitFinish() {
+void ProgramReloadContext::ReloadPhase4CommitFinish() {
   CommitAfterInstanceMorphing();
   PostCommit();
 }
 
-void IsolateReloadContext::ReloadPhase4Rollback() {
+void ProgramReloadContext::ReloadPhase4Rollback() {
   RollbackClasses();
   RollbackLibraries();
 }
 
-void IsolateReloadContext::RegisterClass(const Class& new_cls) {
+void ProgramReloadContext::RegisterClass(const Class& new_cls) {
   const Class& old_cls = Class::Handle(OldClassOrNull(new_cls));
   if (old_cls.IsNull()) {
     if (new_cls.IsTopLevel()) {
@@ -1210,7 +1211,7 @@
   }
 }
 
-void IsolateReloadContext::EnsuredUnoptimizedCodeForStack() {
+void ProgramReloadContext::EnsuredUnoptimizedCodeForStack() {
   TIMELINE_SCOPE(EnsuredUnoptimizedCodeForStack);
   StackFrameIterator it(ValidationPolicy::kDontValidateFrames,
                         Thread::Current(),
@@ -1231,7 +1232,7 @@
   }
 }
 
-void IsolateReloadContext::DeoptimizeDependentCode() {
+void ProgramReloadContext::DeoptimizeDependentCode() {
   TIMELINE_SCOPE(DeoptimizeDependentCode);
   ClassTable* class_table = IG->class_table();
 
@@ -1291,7 +1292,7 @@
   shared_class_table_->ResetBeforeHotReload();
 }
 
-void IsolateReloadContext::CheckpointClasses() {
+void ProgramReloadContext::CheckpointClasses() {
   TIR_Print("---- CHECKPOINTING CLASSES\n");
   // Checkpoint classes before a reload. We need to copy the following:
   // 1) The size of the class table.
@@ -1440,7 +1441,7 @@
   }
 }
 
-void IsolateReloadContext::CheckpointLibraries() {
+void ProgramReloadContext::CheckpointLibraries() {
   TIMELINE_SCOPE(CheckpointLibraries);
   TIR_Print("---- CHECKPOINTING LIBRARIES\n");
   // Save the root library in case we abort the reload.
@@ -1489,7 +1490,7 @@
   object_store()->set_root_library(Library::Handle());
 }
 
-void IsolateReloadContext::RollbackClasses() {
+void ProgramReloadContext::RollbackClasses() {
   TIR_Print("---- ROLLING BACK CLASS TABLE\n");
   ASSERT((saved_num_cids_ + saved_num_tlc_cids_) > 0);
   ASSERT(saved_class_table_.load(std::memory_order_relaxed) != nullptr);
@@ -1498,7 +1499,7 @@
   DiscardSavedClassTable(/*is_rollback=*/true);
 }
 
-void IsolateReloadContext::RollbackLibraries() {
+void ProgramReloadContext::RollbackLibraries() {
   TIR_Print("---- ROLLING BACK LIBRARY CHANGES\n");
   Thread* thread = Thread::Current();
   Library& lib = Library::Handle();
@@ -1524,7 +1525,7 @@
 }
 
 #ifdef DEBUG
-void IsolateReloadContext::VerifyMaps() {
+void ProgramReloadContext::VerifyMaps() {
   TIMELINE_SCOPE(VerifyMaps);
   Class& cls = Class::Handle();
   Class& new_cls = Class::Handle();
@@ -1559,7 +1560,7 @@
 }
 #endif
 
-void IsolateReloadContext::CommitBeforeInstanceMorphing() {
+void ProgramReloadContext::CommitBeforeInstanceMorphing() {
   TIMELINE_SCOPE(Commit);
 
 #ifdef DEBUG
@@ -1664,7 +1665,7 @@
   }
 }
 
-void IsolateReloadContext::CommitAfterInstanceMorphing() {
+void ProgramReloadContext::CommitAfterInstanceMorphing() {
   {
     const GrowableObjectArray& become_enum_mappings =
         GrowableObjectArray::Handle(become_enum_mappings_);
@@ -1729,7 +1730,7 @@
   }
 }
 
-bool IsolateReloadContext::IsDirty(const Library& lib) {
+bool ProgramReloadContext::IsDirty(const Library& lib) {
   const intptr_t index = lib.index();
   if (index == static_cast<classid_t>(-1)) {
     // Treat deleted libraries as dirty.
@@ -1739,7 +1740,7 @@
   return library_infos_[index].dirty;
 }
 
-void IsolateReloadContext::PostCommit() {
+void ProgramReloadContext::PostCommit() {
   TIMELINE_SCOPE(PostCommit);
   saved_root_library_ = Library::null();
   saved_libraries_ = GrowableObjectArray::null();
@@ -1820,7 +1821,7 @@
   isolate_group_->ForEachIsolate(callback);
 }
 
-void IsolateReloadContext::ValidateReload() {
+void ProgramReloadContext::ValidateReload() {
   TIMELINE_SCOPE(ValidateReload);
 
   TIR_Print("---- VALIDATING RELOAD\n");
@@ -1862,7 +1863,7 @@
   }
 }
 
-ClassPtr IsolateReloadContext::GetClassForHeapWalkAt(intptr_t cid) {
+ClassPtr ProgramReloadContext::GetClassForHeapWalkAt(intptr_t cid) {
   ClassPtr* class_table = nullptr;
   intptr_t index = -1;
   if (ClassTable::IsTopLevelCid(cid)) {
@@ -1893,7 +1894,7 @@
   }
 }
 
-void IsolateReloadContext::DiscardSavedClassTable(bool is_rollback) {
+void ProgramReloadContext::DiscardSavedClassTable(bool is_rollback) {
   ClassPtr* local_saved_class_table =
       saved_class_table_.load(std::memory_order_relaxed);
   ClassPtr* local_saved_tlc_class_table =
@@ -1917,7 +1918,7 @@
   visitor->VisitPointers(from(), to());
 }
 
-void IsolateReloadContext::VisitObjectPointers(ObjectPointerVisitor* visitor) {
+void ProgramReloadContext::VisitObjectPointers(ObjectPointerVisitor* visitor) {
   visitor->VisitPointers(from(), to());
 
   ClassPtr* saved_class_table =
@@ -1935,11 +1936,11 @@
   }
 }
 
-ObjectStore* IsolateReloadContext::object_store() {
+ObjectStore* ProgramReloadContext::object_store() {
   return isolate_->group()->object_store();
 }
 
-void IsolateReloadContext::ResetUnoptimizedICsOnStack() {
+void ProgramReloadContext::ResetUnoptimizedICsOnStack() {
   Thread* thread = Thread::Current();
   StackZone stack_zone(thread);
   Zone* zone = stack_zone.GetZone();
@@ -1969,7 +1970,7 @@
   }
 }
 
-void IsolateReloadContext::ResetMegamorphicCaches() {
+void ProgramReloadContext::ResetMegamorphicCaches() {
   object_store()->set_megamorphic_cache_table(GrowableObjectArray::Handle());
   // Since any current optimized code will not make any more calls, it may be
   // better to clear the table instead of clearing each of the caches, allow
@@ -2020,7 +2021,7 @@
 
 typedef UnorderedHashMap<SmiTraits> IntHashMap;
 
-void IsolateReloadContext::RunInvalidationVisitors() {
+void ProgramReloadContext::RunInvalidationVisitors() {
   TIR_Print("---- RUNNING INVALIDATION HEAP VISITORS\n");
   Thread* thread = Thread::Current();
   StackZone stack_zone(thread);
@@ -2043,7 +2044,7 @@
   InvalidateFields(zone, fields, instances);
 }
 
-void IsolateReloadContext::InvalidateKernelInfos(
+void ProgramReloadContext::InvalidateKernelInfos(
     Zone* zone,
     const GrowableArray<const KernelProgramInfo*>& kernel_infos) {
   TIMELINE_SCOPE(InvalidateKernelInfos);
@@ -2073,7 +2074,7 @@
   }
 }
 
-void IsolateReloadContext::InvalidateFunctions(
+void ProgramReloadContext::InvalidateFunctions(
     Zone* zone,
     const GrowableArray<const Function*>& functions) {
   TIMELINE_SCOPE(InvalidateFunctions);
@@ -2317,7 +2318,7 @@
   TypeArguments& delayed_function_type_arguments_;
 };
 
-void IsolateReloadContext::InvalidateFields(
+void ProgramReloadContext::InvalidateFields(
     Zone* zone,
     const GrowableArray<const Field*>& fields,
     const GrowableArray<const Instance*>& instances) {
@@ -2328,7 +2329,7 @@
   invalidator.CheckInstances(instances);
 }
 
-void IsolateReloadContext::InvalidateWorld() {
+void ProgramReloadContext::InvalidateWorld() {
   TIMELINE_SCOPE(InvalidateWorld);
   TIR_Print("---- INVALIDATING WORLD\n");
   ResetMegamorphicCaches();
@@ -2340,7 +2341,7 @@
   RunInvalidationVisitors();
 }
 
-ClassPtr IsolateReloadContext::OldClassOrNull(const Class& replacement_or_new) {
+ClassPtr ProgramReloadContext::OldClassOrNull(const Class& replacement_or_new) {
   UnorderedHashSet<ClassMapTraits> old_classes_set(old_classes_set_storage_);
   Class& cls = Class::Handle();
   cls ^= old_classes_set.GetOrNull(replacement_or_new);
@@ -2348,7 +2349,7 @@
   return cls.ptr();
 }
 
-StringPtr IsolateReloadContext::FindLibraryPrivateKey(
+StringPtr ProgramReloadContext::FindLibraryPrivateKey(
     const Library& replacement_or_new) {
   const Library& old = Library::Handle(OldLibraryOrNull(replacement_or_new));
   if (old.IsNull()) {
@@ -2362,7 +2363,7 @@
   return old.private_key();
 }
 
-LibraryPtr IsolateReloadContext::OldLibraryOrNull(
+LibraryPtr ProgramReloadContext::OldLibraryOrNull(
     const Library& replacement_or_new) {
   UnorderedHashSet<LibraryMapTraits> old_libraries_set(
       old_libraries_set_storage_);
@@ -2380,7 +2381,7 @@
 
 // Attempt to find the pair to |replacement_or_new| with the knowledge that
 // the base url prefix has moved.
-LibraryPtr IsolateReloadContext::OldLibraryOrNullBaseMoved(
+LibraryPtr ProgramReloadContext::OldLibraryOrNullBaseMoved(
     const Library& replacement_or_new) {
   const String& url_prefix =
       String::Handle(group_reload_context_->root_url_prefix_);
@@ -2418,7 +2419,7 @@
   return Library::null();
 }
 
-void IsolateReloadContext::BuildLibraryMapping() {
+void ProgramReloadContext::BuildLibraryMapping() {
   const GrowableObjectArray& libs =
       GrowableObjectArray::Handle(object_store()->libraries());
 
@@ -2454,7 +2455,7 @@
 //
 // Note that all such classes must belong to a library that has either been
 // changed or removed.
-void IsolateReloadContext::BuildRemovedClassesSet() {
+void ProgramReloadContext::BuildRemovedClassesSet() {
   // Find all old classes [mapped_old_classes_set].
   UnorderedHashMap<ClassMapTraits> class_map(class_map_storage_);
   UnorderedHashSet<ClassMapTraits> mapped_old_classes_set(
@@ -2526,7 +2527,7 @@
   library_map.Release();
 }
 
-void IsolateReloadContext::AddClassMapping(const Class& replacement_or_new,
+void ProgramReloadContext::AddClassMapping(const Class& replacement_or_new,
                                            const Class& original) {
   UnorderedHashMap<ClassMapTraits> map(class_map_storage_);
   bool update = map.UpdateOrInsert(replacement_or_new, original);
@@ -2536,7 +2537,7 @@
   class_map_storage_ = map.Release().ptr();
 }
 
-void IsolateReloadContext::AddLibraryMapping(const Library& replacement_or_new,
+void ProgramReloadContext::AddLibraryMapping(const Library& replacement_or_new,
                                              const Library& original) {
   UnorderedHashMap<LibraryMapTraits> map(library_map_storage_);
   bool update = map.UpdateOrInsert(replacement_or_new, original);
@@ -2546,7 +2547,7 @@
   library_map_storage_ = map.Release().ptr();
 }
 
-void IsolateReloadContext::AddStaticFieldMapping(const Field& old_field,
+void ProgramReloadContext::AddStaticFieldMapping(const Field& old_field,
                                                  const Field& new_field) {
   ASSERT(old_field.is_static());
   ASSERT(new_field.is_static());
@@ -2554,7 +2555,7 @@
   AddBecomeMapping(old_field, new_field);
 }
 
-void IsolateReloadContext::AddBecomeMapping(const Object& old,
+void ProgramReloadContext::AddBecomeMapping(const Object& old,
                                             const Object& neu) {
   ASSERT(become_map_storage_ != Array::null());
   UnorderedHashMap<BecomeMapTraits> become_map(become_map_storage_);
@@ -2563,7 +2564,7 @@
   become_map_storage_ = become_map.Release().ptr();
 }
 
-void IsolateReloadContext::AddEnumBecomeMapping(const Object& old,
+void ProgramReloadContext::AddEnumBecomeMapping(const Object& old,
                                                 const Object& neu) {
   const GrowableObjectArray& become_enum_mappings =
       GrowableObjectArray::Handle(become_enum_mappings_);
@@ -2572,7 +2573,7 @@
   ASSERT((become_enum_mappings.Length() % 2) == 0);
 }
 
-void IsolateReloadContext::RebuildDirectSubclasses() {
+void ProgramReloadContext::RebuildDirectSubclasses() {
   ClassTable* class_table = IG->class_table();
   intptr_t num_cids = class_table->NumCids();
 
diff --git a/runtime/vm/isolate_reload.h b/runtime/vm/isolate_reload.h
index 7718309..74a32b9 100644
--- a/runtime/vm/isolate_reload.h
+++ b/runtime/vm/isolate_reload.h
@@ -294,19 +294,19 @@
   friend class ObjectLocator;
   friend class MarkFunctionsForRecompilation;  // IsDirty.
   friend class ReasonForCancelling;
-  friend class IsolateReloadContext;
+  friend class ProgramReloadContext;
   friend class IsolateGroup;  // GetClassSizeForHeapWalkAt
   friend class UntaggedObject;  // GetClassSizeForHeapWalkAt
 
   static Dart_FileModifiedCallback file_modified_callback_;
 };
 
-class IsolateReloadContext {
+class ProgramReloadContext {
  public:
-  IsolateReloadContext(
+  ProgramReloadContext(
       std::shared_ptr<IsolateGroupReloadContext> group_reload_context,
       Isolate* isolate);
-  ~IsolateReloadContext();
+  ~ProgramReloadContext();
 
   // All zone allocated objects must be allocated from this zone.
   Zone* zone() const { return zone_; }
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 7ffbaf6..4990754 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -13179,9 +13179,10 @@
   if (isolate_group->IsReloading()) {
     // When reloading, we need to make sure we use the original private key
     // if this library previously existed.
-    IsolateReloadContext* reload_context = thread->isolate()->reload_context();
+    ProgramReloadContext* program_reload_context =
+        thread->isolate()->program_reload_context();
     const String& original_key =
-        String::Handle(reload_context->FindLibraryPrivateKey(*this));
+        String::Handle(program_reload_context->FindLibraryPrivateKey(*this));
     if (!original_key.IsNull()) {
       untag()->set_private_key(original_key.ptr());
       return;
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 97606d6..1a7e62d 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -1533,17 +1533,17 @@
   bool TraceAllocation(IsolateGroup* isolate_group) const;
   void SetTraceAllocation(bool trace_allocation) const;
 
-  void ReplaceEnum(IsolateReloadContext* reload_context,
+  void ReplaceEnum(ProgramReloadContext* reload_context,
                    const Class& old_enum) const;
-  void CopyStaticFieldValues(IsolateReloadContext* reload_context,
+  void CopyStaticFieldValues(ProgramReloadContext* reload_context,
                              const Class& old_cls) const;
   void PatchFieldsAndFunctions() const;
-  void MigrateImplicitStaticClosures(IsolateReloadContext* context,
+  void MigrateImplicitStaticClosures(ProgramReloadContext* context,
                                      const Class& new_cls) const;
   void CopyCanonicalConstants(const Class& old_cls) const;
   void CopyDeclarationType(const Class& old_cls) const;
   void CheckReload(const Class& replacement,
-                   IsolateReloadContext* context) const;
+                   ProgramReloadContext* context) const;
 
   void AddInvocationDispatcher(const String& target_name,
                                const Array& args_desc,
@@ -1595,9 +1595,9 @@
   void set_declaration_type(const Type& type) const;
 
   bool CanReloadFinalized(const Class& replacement,
-                          IsolateReloadContext* context) const;
+                          ProgramReloadContext* context) const;
   bool CanReloadPreFinalized(const Class& replacement,
-                             IsolateReloadContext* context) const;
+                             ProgramReloadContext* context) const;
 
   // Tells whether instances need morphing for reload.
   bool RequiresInstanceMorphing(const Class& replacement) const;
@@ -4843,7 +4843,7 @@
   static const char kPrivateKeySeparator = '@';
 
   void CheckReload(const Library& replacement,
-                   IsolateReloadContext* context) const;
+                   ProgramReloadContext* context) const;
 
   // Returns a closure of top level function 'name' in the exported namespace
   // of this library. If a top level function 'name' does not exist we look
diff --git a/runtime/vm/object_reload.cc b/runtime/vm/object_reload.cc
index 374658c..0838b24 100644
--- a/runtime/vm/object_reload.cc
+++ b/runtime/vm/object_reload.cc
@@ -191,7 +191,7 @@
   }
 }
 
-void Class::CopyStaticFieldValues(IsolateReloadContext* reload_context,
+void Class::CopyStaticFieldValues(ProgramReloadContext* reload_context,
                                   const Class& old_cls) const {
   // We only update values for non-enum classes.
   const bool update_values = !is_enum_class();
@@ -304,7 +304,7 @@
 //   When an enum value is deleted, we 'become' all references to the 'deleted'
 //   sentinel value. The index value is -1.
 //
-void Class::ReplaceEnum(IsolateReloadContext* reload_context,
+void Class::ReplaceEnum(ProgramReloadContext* reload_context,
                         const Class& old_enum) const {
   // We only do this for finalized enum classes.
   ASSERT(is_enum_class());
@@ -496,7 +496,7 @@
   }
 }
 
-void Class::MigrateImplicitStaticClosures(IsolateReloadContext* irc,
+void Class::MigrateImplicitStaticClosures(ProgramReloadContext* irc,
                                           const Class& new_cls) const {
   const Array& funcs = Array::Handle(current_functions());
   Thread* thread = Thread::Current();
@@ -665,8 +665,8 @@
 
 // This is executed before iterating over the instances.
 void Class::CheckReload(const Class& replacement,
-                        IsolateReloadContext* context) const {
-  ASSERT(IsolateReloadContext::IsSameClass(*this, replacement));
+                        ProgramReloadContext* context) const {
+  ASSERT(ProgramReloadContext::IsSameClass(*this, replacement));
 
   if (!is_declaration_loaded()) {
     // The old class hasn't been used in any meaningful way, so the VM is okay
@@ -807,7 +807,7 @@
 }
 
 bool Class::CanReloadFinalized(const Class& replacement,
-                               IsolateReloadContext* context) const {
+                               ProgramReloadContext* context) const {
   // Make sure the declaration types argument count matches for the two classes.
   // ex. class A<int,B> {} cannot be replace with class A<B> {}.
   auto group_context = context->group_reload_context();
@@ -832,7 +832,7 @@
 }
 
 bool Class::CanReloadPreFinalized(const Class& replacement,
-                                  IsolateReloadContext* context) const {
+                                  ProgramReloadContext* context) const {
   // The replacement class must also prefinalized.
   if (!replacement.is_prefinalized()) {
     context->group_reload_context()->AddReasonForCancelling(
@@ -851,7 +851,7 @@
 }
 
 void Library::CheckReload(const Library& replacement,
-                          IsolateReloadContext* context) const {
+                          ProgramReloadContext* context) const {
   // TODO(26878): If the replacement library uses deferred loading,
   // reject it.  We do not yet support reloading deferred libraries.
   Object& object = Object::Handle();
diff --git a/runtime/vm/unit_test.cc b/runtime/vm/unit_test.cc
index cf6d614..2a2a861 100644
--- a/runtime/vm/unit_test.cc
+++ b/runtime/vm/unit_test.cc
@@ -553,13 +553,14 @@
   } else if (isolate->group()->reload_context()->reload_aborted()) {
     TransitionNativeToVM transition(thread);
     result = Api::NewHandle(
-        thread, isolate->reload_context()->group_reload_context()->error());
+        thread,
+        isolate->program_reload_context()->group_reload_context()->error());
   } else {
     result = Dart_RootLibrary();
   }
 
   TransitionNativeToVM transition(thread);
-  if (isolate->reload_context() != NULL) {
+  if (isolate->program_reload_context() != NULL) {
     isolate->DeleteReloadContext();
     isolate->group()->DeleteReloadContext();
   }
diff --git a/tools/VERSION b/tools/VERSION
index 86f1ef8..623857b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 12
 PATCH 0
-PRERELEASE 234
+PRERELEASE 235
 PRERELEASE_PATCH 0
\ No newline at end of file