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/longjump.h" | 10 #include "vm/longjump.h" |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 RawLibrary* BuildingTranslationHelper::LookupLibraryByKernelLibrary( | 86 RawLibrary* BuildingTranslationHelper::LookupLibraryByKernelLibrary( |
87 Library* library) { | 87 Library* library) { |
88 return reader_->LookupLibrary(library).raw(); | 88 return reader_->LookupLibrary(library).raw(); |
89 } | 89 } |
90 | 90 |
91 | 91 |
92 RawClass* BuildingTranslationHelper::LookupClassByKernelClass(Class* klass) { | 92 RawClass* BuildingTranslationHelper::LookupClassByKernelClass(Class* klass) { |
93 return reader_->LookupClass(klass).raw(); | 93 return reader_->LookupClass(klass).raw(); |
94 } | 94 } |
95 | 95 |
96 Program* KernelReader::ReadPrecompiledProgram() { | 96 KernelReader::KernelReader(Program* program) |
97 Program* program = ReadPrecompiledKernelFromBuffer(buffer_, buffer_length_); | 97 : program_(program), |
98 if (program == NULL) return NULL; | 98 thread_(dart::Thread::Current()), |
99 intptr_t source_file_count = program->line_starting_table().size(); | 99 zone_(thread_->zone()), |
| 100 isolate_(thread_->isolate()), |
| 101 scripts_(Array::ZoneHandle(zone_)), |
| 102 translation_helper_(this, thread_, zone_, isolate_), |
| 103 type_translator_(&translation_helper_, |
| 104 &active_class_, |
| 105 /*finalize=*/false) { |
| 106 intptr_t source_file_count = program_->line_starting_table().size(); |
100 scripts_ = Array::New(source_file_count); | 107 scripts_ = Array::New(source_file_count); |
101 program_ = program; | |
102 return program; | |
103 } | 108 } |
104 | 109 |
105 Object& KernelReader::ReadProgram() { | 110 Object& KernelReader::ReadProgram() { |
106 Program* program = ReadPrecompiledProgram(); | |
107 if (program == NULL) { | |
108 const dart::String& error = H.DartString("Failed to read .kernell file"); | |
109 return Object::Handle(Z, ApiError::New(error)); | |
110 } | |
111 | |
112 LongJumpScope jump; | 111 LongJumpScope jump; |
113 if (setjmp(*jump.Set()) == 0) { | 112 if (setjmp(*jump.Set()) == 0) { |
114 Procedure* main = program->main_method(); | 113 Procedure* main = program_->main_method(); |
115 Library* kernel_main_library = Library::Cast(main->parent()); | 114 Library* kernel_main_library = Library::Cast(main->parent()); |
116 | 115 |
117 intptr_t length = program->libraries().length(); | 116 intptr_t length = program_->libraries().length(); |
118 for (intptr_t i = 0; i < length; i++) { | 117 for (intptr_t i = 0; i < length; i++) { |
119 Library* kernel_library = program->libraries()[i]; | 118 Library* kernel_library = program_->libraries()[i]; |
120 ReadLibrary(kernel_library); | 119 ReadLibrary(kernel_library); |
121 } | 120 } |
122 | 121 |
123 for (intptr_t i = 0; i < length; i++) { | 122 for (intptr_t i = 0; i < length; i++) { |
124 dart::Library& library = LookupLibrary(program->libraries()[i]); | 123 dart::Library& library = LookupLibrary(program_->libraries()[i]); |
125 if (!library.Loaded()) library.SetLoaded(); | 124 if (!library.Loaded()) library.SetLoaded(); |
126 } | 125 } |
127 | 126 |
128 if (!ClassFinalizer::ProcessPendingClasses(/*from_kernel=*/true)) { | 127 if (!ClassFinalizer::ProcessPendingClasses(/*from_kernel=*/true)) { |
129 FATAL("Error in class finalization during bootstrapping."); | 128 FATAL("Error in class finalization during bootstrapping."); |
130 } | 129 } |
131 | 130 |
132 dart::Library& library = LookupLibrary(kernel_main_library); | 131 dart::Library& library = LookupLibrary(kernel_main_library); |
133 | 132 |
134 // Sanity check that we can find the main entrypoint. | 133 // Sanity check that we can find the main entrypoint. |
(...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
721 initializer_fun.set_is_debuggable(false); | 720 initializer_fun.set_is_debuggable(false); |
722 initializer_fun.set_is_reflectable(false); | 721 initializer_fun.set_is_reflectable(false); |
723 initializer_fun.set_is_inlinable(false); | 722 initializer_fun.set_is_inlinable(false); |
724 return new (zone) ParsedFunction(thread, initializer_fun); | 723 return new (zone) ParsedFunction(thread, initializer_fun); |
725 } | 724 } |
726 | 725 |
727 | 726 |
728 } // namespace kernel | 727 } // namespace kernel |
729 } // namespace dart | 728 } // namespace dart |
730 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 729 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
OLD | NEW |