| Index: runtime/vm/kernel_reader.cc
|
| diff --git a/runtime/vm/kernel_reader.cc b/runtime/vm/kernel_reader.cc
|
| index 490474c2f444a9dfc1235a5e89f7a0c06da4cd43..bbb439a7267cdc866c32cb785b7d13c20521b14b 100644
|
| --- a/runtime/vm/kernel_reader.cc
|
| +++ b/runtime/vm/kernel_reader.cc
|
| @@ -211,6 +211,43 @@ Object& KernelReader::ReadProgram() {
|
| return error;
|
| }
|
|
|
| +void KernelReader::FindModifiedLibraries(Isolate* isolate,
|
| + BitVector* modified_libs,
|
| + bool force_reload) {
|
| + LongJumpScope jump;
|
| + if (setjmp(*jump.Set()) == 0) {
|
| + if (force_reload) {
|
| + // If a reload is being forced we mark all libraries as having
|
| + // been modified.
|
| + const GrowableObjectArray& libs =
|
| + GrowableObjectArray::Handle(isolate->object_store()->libraries());
|
| + intptr_t num_libs = libs.Length();
|
| + Library& lib = dart::Library::Handle(Z);
|
| + for (intptr_t i = 0; i < num_libs; i++) {
|
| + lib ^= libs.At(i);
|
| + if (!lib.is_dart_scheme()) {
|
| + modified_libs->Add(lib.index());
|
| + }
|
| + }
|
| + return;
|
| + }
|
| + // Now go through all the libraries that are present in the incremental
|
| + // kernel files, these will constitute the modified libraries.
|
| + intptr_t length = program_->library_count();
|
| + for (intptr_t i = 0; i < length; i++) {
|
| + intptr_t kernel_offset = library_offset(i);
|
| + builder_.SetOffset(kernel_offset);
|
| + LibraryHelper library_helper(&builder_);
|
| + library_helper.ReadUntilIncluding(LibraryHelper::kCanonicalName);
|
| + dart::Library& lib = LookupLibrary(library_helper.canonical_name_);
|
| + if (!lib.IsNull() && !lib.is_dart_scheme()) {
|
| + // This is a library that already exists so mark it as being modified.
|
| + modified_libs->Add(lib.index());
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| void KernelReader::ReadLibrary(intptr_t kernel_offset) {
|
| builder_.SetOffset(kernel_offset);
|
| LibraryHelper library_helper(&builder_);
|
|
|