Load kernel files in reverse order to accommodate topological order that pub build_runner produces.

This fixes a bug with generation of coverage report in presence of mixin declaration/application coming from different dill files.

Change-Id: Ie80fd6080cf65c3b895606809194c2bc6a08612a
Reviewed-on: https://dart-review.googlesource.com/c/87605
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Keerti Parthasarathy <keertip@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index dc370e1..a11f25c 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -225,7 +225,7 @@
   Library& library = Library::Handle(zone);
   // Create "fake programs" for each sub-program.
   intptr_t subprogram_count = subprogram_file_starts.length() - 1;
-  for (intptr_t i = 0; i < subprogram_count; ++i) {
+  for (intptr_t i = subprogram_count - 1; i >= 0; --i) {
     intptr_t subprogram_start = subprogram_file_starts.At(i);
     intptr_t subprogram_end = subprogram_file_starts.At(i + 1);
     reader.set_raw_buffer(program->kernel_data() + subprogram_start);
@@ -237,7 +237,7 @@
     Object& load_result = Object::Handle(loader.LoadProgram(false));
     if (load_result.IsError()) return load_result;
 
-    if (library.IsNull() && load_result.IsLibrary()) {
+    if (load_result.IsLibrary()) {
       library ^= load_result.raw();
     }