Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(65)

Side by Side Diff: runtime/vm/bootstrap.cc

Issue 1449163003: - Include sources in gen_snapshot and dart_no_snapshot to allow (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Address review comments. Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/tools/gen_library_src_paths.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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/bootstrap.h" 5 #include "vm/bootstrap.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 8
9 #include "vm/bootstrap_natives.h" 9 #include "vm/bootstrap_natives.h"
10 #include "vm/class_finalizer.h" 10 #include "vm/class_finalizer.h"
(...skipping 12 matching lines...) Expand all
23 23
24 typedef struct { 24 typedef struct {
25 ObjectStore::BootstrapLibraryId index_; 25 ObjectStore::BootstrapLibraryId index_;
26 const char* uri_; 26 const char* uri_;
27 const char** source_paths_; 27 const char** source_paths_;
28 const char* patch_uri_; 28 const char* patch_uri_;
29 const char** patch_paths_; 29 const char** patch_paths_;
30 } bootstrap_lib_props; 30 } bootstrap_lib_props;
31 31
32 32
33 enum {
34 kPathsUriOffset = 0,
35 kPathsFileOffset = 1,
36 kPathsSourceOffset = 2,
37 kPathsEntryLength = 3
38 };
39
40
33 static bootstrap_lib_props bootstrap_libraries[] = { 41 static bootstrap_lib_props bootstrap_libraries[] = {
34 INIT_LIBRARY(ObjectStore::kCore, 42 INIT_LIBRARY(ObjectStore::kCore,
35 core, 43 core,
36 Bootstrap::core_source_paths_, 44 Bootstrap::core_source_paths_,
37 Bootstrap::core_patch_paths_), 45 Bootstrap::core_patch_paths_),
38 INIT_LIBRARY(ObjectStore::kAsync, 46 INIT_LIBRARY(ObjectStore::kAsync,
39 async, 47 async,
40 Bootstrap::async_source_paths_, 48 Bootstrap::async_source_paths_,
41 Bootstrap::async_patch_paths_), 49 Bootstrap::async_patch_paths_),
42 INIT_LIBRARY(ObjectStore::kConvert, 50 INIT_LIBRARY(ObjectStore::kConvert,
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 _vmservice, 87 _vmservice,
80 Bootstrap::_vmservice_source_paths_, 88 Bootstrap::_vmservice_source_paths_,
81 Bootstrap::_vmservice_patch_paths_), 89 Bootstrap::_vmservice_patch_paths_),
82 { ObjectStore::kNone, NULL, NULL, NULL, NULL } 90 { ObjectStore::kNone, NULL, NULL, NULL, NULL }
83 }; 91 };
84 92
85 93
86 static RawString* GetLibrarySource(const Library& lib, 94 static RawString* GetLibrarySource(const Library& lib,
87 const String& uri, 95 const String& uri,
88 bool patch) { 96 bool patch) {
89 // First check if this is a valid boot strap library and find it's index 97 // First check if this is a valid bootstrap library and find it's index
90 // in the 'bootstrap_libraries' table above. 98 // in the 'bootstrap_libraries' table above.
91 intptr_t index; 99 intptr_t index;
92 const String& lib_uri = String::Handle(lib.url()); 100 const String& lib_uri = String::Handle(lib.url());
93 for (index = 0; 101 for (index = 0;
94 bootstrap_libraries[index].index_ != ObjectStore::kNone; 102 bootstrap_libraries[index].index_ != ObjectStore::kNone;
95 ++index) { 103 ++index) {
96 if (lib_uri.Equals(bootstrap_libraries[index].uri_)) { 104 if (lib_uri.Equals(bootstrap_libraries[index].uri_)) {
97 break; 105 break;
98 } 106 }
99 } 107 }
100 if (bootstrap_libraries[index].index_ == ObjectStore::kNone) { 108 if (bootstrap_libraries[index].index_ == ObjectStore::kNone) {
101 return String::null(); // Library is not a boot strap library. 109 return String::null(); // Library is not a bootstrap library.
102 } 110 }
103 111
104 // Try to read the source using the path specified for the uri. 112 // Try to read the source using the path specified for the uri.
105 const char** source_paths = patch ? 113 const char** source_paths = patch ?
106 bootstrap_libraries[index].patch_paths_ : 114 bootstrap_libraries[index].patch_paths_ :
107 bootstrap_libraries[index].source_paths_; 115 bootstrap_libraries[index].source_paths_;
108 if (source_paths == NULL) { 116 if (source_paths == NULL) {
109 return String::null(); // No path mapping information exists for library. 117 return String::null(); // No path mapping information exists for library.
110 } 118 }
111 const char* source_path = NULL; 119 const char* source_path = NULL;
112 for (intptr_t i = 0; source_paths[i] != NULL; i += 2) { 120 const char* source_data = NULL;
113 if (uri.Equals(source_paths[i])) { 121 for (intptr_t i = 0; source_paths[i] != NULL; i += kPathsEntryLength) {
114 source_path = source_paths[i + 1]; 122 if (uri.Equals(source_paths[i + kPathsUriOffset])) {
123 source_path = source_paths[i + kPathsFileOffset];
124 source_data = source_paths[i + kPathsSourceOffset];
115 break; 125 break;
116 } 126 }
117 } 127 }
118 if (source_path == NULL) { 128 if ((source_path == NULL) && (source_data == NULL)) {
119 return String::null(); // Uri does not exist in path mapping information. 129 return String::null(); // Uri does not exist in path mapping information.
120 } 130 }
121 131
132 const uint8_t* utf8_array = NULL;
133 intptr_t file_length = -1;
134
122 Dart_FileOpenCallback file_open = Isolate::file_open_callback(); 135 Dart_FileOpenCallback file_open = Isolate::file_open_callback();
123 Dart_FileReadCallback file_read = Isolate::file_read_callback(); 136 Dart_FileReadCallback file_read = Isolate::file_read_callback();
124 Dart_FileCloseCallback file_close = Isolate::file_close_callback(); 137 Dart_FileCloseCallback file_close = Isolate::file_close_callback();
125 if (file_open == NULL || file_read == NULL || file_close == NULL) { 138 if ((file_open == NULL || file_read == NULL || file_close == NULL)) {
126 return String::null(); // File operations are not supported. 139 if (source_data == NULL) {
140 return String::null();
141 }
142 file_length = strlen(source_data);
143 utf8_array = reinterpret_cast<const uint8_t*>(source_data);
144 } else {
145 void* stream = (*file_open)(source_path, false);
146 if (stream == NULL) {
147 if (source_data == NULL) {
148 return String::null();
149 }
150 file_length = strlen(source_data);
151 utf8_array = reinterpret_cast<const uint8_t*>(source_data);
152 } else {
153 (*file_read)(&utf8_array, &file_length, stream);
154 (*file_close)(stream);
155 if (file_length == -1) {
156 return String::null();
157 }
158 ASSERT(utf8_array != NULL);
siva 2015/11/17 19:37:55 This assert can move down to the else block as it
Ivan Posva 2015/11/17 22:50:26 Simplified the whole logic around here. Did not li
159 }
127 } 160 }
128
129 void* stream = (*file_open)(source_path, false);
130 if (stream == NULL) {
131 return String::null();
132 }
133
134 const uint8_t* utf8_array = NULL;
135 intptr_t file_length = -1;
136 (*file_read)(&utf8_array, &file_length, stream);
137 if (file_length == -1) {
138 return String::null();
139 }
140 ASSERT(utf8_array != NULL);
141
142 (*file_close)(stream);
143
144 return String::FromUTF8(utf8_array, file_length); 161 return String::FromUTF8(utf8_array, file_length);
145 } 162 }
146 163
147 164
148 static RawError* Compile(const Library& library, const Script& script) { 165 static RawError* Compile(const Library& library, const Script& script) {
149 bool update_lib_status = (script.kind() == RawScript::kScriptTag || 166 bool update_lib_status = (script.kind() == RawScript::kScriptTag ||
150 script.kind() == RawScript::kLibraryTag); 167 script.kind() == RawScript::kLibraryTag);
151 if (update_lib_status) { 168 if (update_lib_status) {
152 library.SetLoadInProgress(); 169 library.SetLoadInProgress();
153 } 170 }
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 const Library& lib, 247 const Library& lib,
231 const String& patch_uri, 248 const String& patch_uri,
232 const char** patch_files) { 249 const char** patch_files) {
233 String& patch_file_uri = String::Handle(zone); 250 String& patch_file_uri = String::Handle(zone);
234 String& source = String::Handle(zone); 251 String& source = String::Handle(zone);
235 Script& script = Script::Handle(zone); 252 Script& script = Script::Handle(zone);
236 Error& error = Error::Handle(zone); 253 Error& error = Error::Handle(zone);
237 const Array& strings = Array::Handle(zone, Array::New(3)); 254 const Array& strings = Array::Handle(zone, Array::New(3));
238 strings.SetAt(0, patch_uri); 255 strings.SetAt(0, patch_uri);
239 strings.SetAt(1, Symbols::Slash()); 256 strings.SetAt(1, Symbols::Slash());
240 for (intptr_t j = 0; patch_files[j] != NULL; j += 2) { 257 for (intptr_t j = 0; patch_files[j] != NULL; j += kPathsEntryLength) {
241 patch_file_uri = String::New(patch_files[j]); 258 patch_file_uri = String::New(patch_files[j + kPathsUriOffset]);
242 source = GetLibrarySource(lib, patch_file_uri, true); 259 source = GetLibrarySource(lib, patch_file_uri, true);
243 if (source.IsNull()) { 260 if (source.IsNull()) {
244 const String& message = String::Handle( 261 const String& message = String::Handle(
245 String::NewFormatted("Unable to find dart patch source for %s", 262 String::NewFormatted("Unable to find dart patch source for %s",
246 patch_file_uri.ToCString())); 263 patch_file_uri.ToCString()));
247 return ApiError::New(message); 264 return ApiError::New(message);
248 } 265 }
249 // Prepend the patch library URI to form a unique script URI for the patch. 266 // Prepend the patch library URI to form a unique script URI for the patch.
250 strings.SetAt(2, patch_file_uri); 267 strings.SetAt(2, patch_file_uri);
251 patch_file_uri = String::ConcatAll(strings); 268 patch_file_uri = String::ConcatAll(strings);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 Compiler::CompileClass(cls); 355 Compiler::CompileClass(cls);
339 } 356 }
340 357
341 // Restore the library tag handler for the isolate. 358 // Restore the library tag handler for the isolate.
342 isolate->set_library_tag_handler(saved_tag_handler); 359 isolate->set_library_tag_handler(saved_tag_handler);
343 360
344 return error.raw(); 361 return error.raw();
345 } 362 }
346 363
347 } // namespace dart 364 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/tools/gen_library_src_paths.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698