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/kernel_reader.h" | 5 #include "vm/kernel_reader.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include "vm/dart_api_impl.h" | 9 #include "vm/dart_api_impl.h" |
10 #include "vm/kernel_binary.h" | 10 #include "vm/kernel_binary.h" |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 } | 204 } |
205 | 205 |
206 // Either class finalization failed or we caught a compile error. | 206 // Either class finalization failed or we caught a compile error. |
207 // In both cases sticky error would be set. | 207 // In both cases sticky error would be set. |
208 Error& error = Error::Handle(Z); | 208 Error& error = Error::Handle(Z); |
209 error = thread_->sticky_error(); | 209 error = thread_->sticky_error(); |
210 thread_->clear_sticky_error(); | 210 thread_->clear_sticky_error(); |
211 return error; | 211 return error; |
212 } | 212 } |
213 | 213 |
| 214 void KernelReader::FindModifiedLibraries(Isolate* isolate, |
| 215 BitVector* modified_libs, |
| 216 bool force_reload) { |
| 217 LongJumpScope jump; |
| 218 if (setjmp(*jump.Set()) == 0) { |
| 219 if (force_reload) { |
| 220 // If a reload is being forced we mark all libraries as having |
| 221 // been modified. |
| 222 const GrowableObjectArray& libs = |
| 223 GrowableObjectArray::Handle(isolate->object_store()->libraries()); |
| 224 intptr_t num_libs = libs.Length(); |
| 225 Library& lib = dart::Library::Handle(Z); |
| 226 for (intptr_t i = 0; i < num_libs; i++) { |
| 227 lib ^= libs.At(i); |
| 228 if (!lib.is_dart_scheme()) { |
| 229 modified_libs->Add(lib.index()); |
| 230 } |
| 231 } |
| 232 return; |
| 233 } |
| 234 // Now go through all the libraries that are present in the incremental |
| 235 // kernel files, these will constitute the modified libraries. |
| 236 intptr_t length = program_->library_count(); |
| 237 for (intptr_t i = 0; i < length; i++) { |
| 238 intptr_t kernel_offset = library_offset(i); |
| 239 builder_.SetOffset(kernel_offset); |
| 240 LibraryHelper library_helper(&builder_); |
| 241 library_helper.ReadUntilIncluding(LibraryHelper::kCanonicalName); |
| 242 dart::Library& lib = LookupLibrary(library_helper.canonical_name_); |
| 243 if (!lib.IsNull() && !lib.is_dart_scheme()) { |
| 244 // This is a library that already exists so mark it as being modified. |
| 245 modified_libs->Add(lib.index()); |
| 246 } |
| 247 } |
| 248 } |
| 249 } |
| 250 |
214 void KernelReader::ReadLibrary(intptr_t kernel_offset) { | 251 void KernelReader::ReadLibrary(intptr_t kernel_offset) { |
215 builder_.SetOffset(kernel_offset); | 252 builder_.SetOffset(kernel_offset); |
216 LibraryHelper library_helper(&builder_); | 253 LibraryHelper library_helper(&builder_); |
217 library_helper.ReadUntilIncluding(LibraryHelper::kCanonicalName); | 254 library_helper.ReadUntilIncluding(LibraryHelper::kCanonicalName); |
218 Library& library = LookupLibrary(library_helper.canonical_name_); | 255 Library& library = LookupLibrary(library_helper.canonical_name_); |
219 if (library.Loaded()) return; | 256 if (library.Loaded()) return; |
220 | 257 |
221 library_helper.ReadUntilIncluding(LibraryHelper::kName); | 258 library_helper.ReadUntilIncluding(LibraryHelper::kName); |
222 library.SetName(H.DartSymbol(library_helper.name_index_)); | 259 library.SetName(H.DartSymbol(library_helper.name_index_)); |
223 | 260 |
(...skipping 742 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
966 initializer_fun.set_result_type(AbstractType::Handle(zone, field.type())); | 1003 initializer_fun.set_result_type(AbstractType::Handle(zone, field.type())); |
967 initializer_fun.set_is_debuggable(false); | 1004 initializer_fun.set_is_debuggable(false); |
968 initializer_fun.set_is_reflectable(false); | 1005 initializer_fun.set_is_reflectable(false); |
969 initializer_fun.set_is_inlinable(false); | 1006 initializer_fun.set_is_inlinable(false); |
970 return new (zone) ParsedFunction(thread, initializer_fun); | 1007 return new (zone) ParsedFunction(thread, initializer_fun); |
971 } | 1008 } |
972 | 1009 |
973 } // namespace kernel | 1010 } // namespace kernel |
974 } // namespace dart | 1011 } // namespace dart |
975 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 1012 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
OLD | NEW |