OLD | NEW |
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 <stdio.h> | 5 #include <stdio.h> |
6 | 6 |
7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
8 | 8 |
9 #include "bin/builtin.h" | 9 #include "bin/builtin.h" |
10 #include "bin/dartutils.h" | 10 #include "bin/dartutils.h" |
11 #include "bin/platform.h" | 11 #include "bin/platform.h" |
12 | 12 |
13 namespace dart { | 13 namespace dart { |
14 namespace bin { | 14 namespace bin { |
15 | 15 |
16 Builtin::builtin_lib_props Builtin::builtin_libraries_[] = { | 16 Builtin::builtin_lib_props Builtin::builtin_libraries_[] = { |
17 /* { url_, source_, patch_url_, patch_source_, has_natives_ } */ | 17 /* { url_, source_, patch_url_, patch_source_, has_natives_ } */ |
18 { DartUtils::kBuiltinLibURL, _builtin_source_paths_, NULL, NULL, true }, | 18 { DartUtils::kBuiltinLibURL, _builtin_source_paths_, NULL, NULL, true }, |
19 { DartUtils::kIOLibURL, io_source_paths_, | 19 { DartUtils::kIOLibURL, io_source_paths_, |
20 DartUtils::kIOLibPatchURL, io_patch_paths_, true }, | 20 DartUtils::kIOLibPatchURL, io_patch_paths_, true }, |
21 }; | 21 }; |
22 | 22 |
23 Dart_Port Builtin::load_port_ = ILLEGAL_PORT; | 23 Dart_Port Builtin::load_port_ = ILLEGAL_PORT; |
24 | 24 |
25 // Patch all the specified patch files in the array 'patch_files' into the | 25 // Patch all the specified patch files in the array 'patch_files' into the |
26 // library specified in 'library'. | 26 // library specified in 'library'. |
27 static void LoadPatchFiles(Dart_Handle library, | 27 static void LoadPatchFiles(Dart_Handle library, |
28 const char* patch_uri, | 28 const char* patch_uri, |
29 const char** patch_files) { | 29 const char** patch_files) { |
30 for (intptr_t j = 0; patch_files[j] != NULL; j += 2) { | 30 for (intptr_t j = 0; patch_files[j] != NULL; j += 3) { |
31 Dart_Handle patch_src = DartUtils::ReadStringFromFile(patch_files[j + 1]); | 31 Dart_Handle patch_src = DartUtils::ReadStringFromFile(patch_files[j + 1]); |
| 32 if (!Dart_IsString(patch_src)) { |
| 33 // In case reading the file caused an error, use the sources directly. |
| 34 const char* source = patch_files[j + 2]; |
| 35 patch_src = Dart_NewStringFromUTF8( |
| 36 reinterpret_cast<const uint8_t*>(source), strlen(source)); |
| 37 } |
32 | 38 |
33 // Prepend the patch library URI to form a unique script URI for the patch. | 39 // Prepend the patch library URI to form a unique script URI for the patch. |
34 intptr_t len = snprintf(NULL, 0, "%s/%s", patch_uri, patch_files[j]); | 40 intptr_t len = snprintf(NULL, 0, "%s/%s", patch_uri, patch_files[j]); |
35 char* patch_filename = reinterpret_cast<char*>(malloc(len + 1)); | 41 char* patch_filename = reinterpret_cast<char*>(malloc(len + 1)); |
36 snprintf(patch_filename, len + 1, "%s/%s", patch_uri, patch_files[j]); | 42 snprintf(patch_filename, len + 1, "%s/%s", patch_uri, patch_files[j]); |
37 Dart_Handle patch_file_uri = DartUtils::NewString(patch_filename); | 43 Dart_Handle patch_file_uri = DartUtils::NewString(patch_filename); |
38 free(patch_filename); | 44 free(patch_filename); |
39 | 45 |
40 DART_CHECK_VALID(Dart_LibraryLoadPatch(library, patch_file_uri, patch_src)); | 46 DART_CHECK_VALID(Dart_LibraryLoadPatch(library, patch_file_uri, patch_src)); |
41 } | 47 } |
(...skipping 20 matching lines...) Expand all Loading... |
62 // Try to read the source using the path specified for the uri. | 68 // Try to read the source using the path specified for the uri. |
63 const char** source_paths = builtin_libraries_[id].source_paths_; | 69 const char** source_paths = builtin_libraries_[id].source_paths_; |
64 return GetSource(source_paths, part_uri); | 70 return GetSource(source_paths, part_uri); |
65 } | 71 } |
66 | 72 |
67 | 73 |
68 Dart_Handle Builtin::GetSource(const char** source_paths, const char* uri) { | 74 Dart_Handle Builtin::GetSource(const char** source_paths, const char* uri) { |
69 if (source_paths == NULL) { | 75 if (source_paths == NULL) { |
70 return Dart_Null(); // No path mapping information exists for library. | 76 return Dart_Null(); // No path mapping information exists for library. |
71 } | 77 } |
72 const char* source_path = NULL; | 78 for (intptr_t i = 0; source_paths[i] != NULL; i += 3) { |
73 for (intptr_t i = 0; source_paths[i] != NULL; i += 2) { | |
74 if (!strcmp(uri, source_paths[i])) { | 79 if (!strcmp(uri, source_paths[i])) { |
75 source_path = source_paths[i + 1]; | 80 const char* source_path = source_paths[i + 1]; |
76 break; | 81 Dart_Handle src = DartUtils::ReadStringFromFile(source_path); |
| 82 if (!Dart_IsString(src)) { |
| 83 // In case reading the file caused an error, use the sources directly. |
| 84 const char* source = source_paths[i + 2]; |
| 85 src = Dart_NewStringFromUTF8( |
| 86 reinterpret_cast<const uint8_t*>(source), strlen(source)); |
| 87 } |
| 88 return src; |
77 } | 89 } |
78 } | 90 } |
79 if (source_path == NULL) { | 91 return Dart_Null(); // Uri does not exist in path mapping information. |
80 return Dart_Null(); // Uri does not exist in path mapping information. | |
81 } | |
82 return DartUtils::ReadStringFromFile(source_path); | |
83 } | 92 } |
84 | 93 |
85 | 94 |
86 void Builtin::SetNativeResolver(BuiltinLibraryId id) { | 95 void Builtin::SetNativeResolver(BuiltinLibraryId id) { |
87 UNREACHABLE(); | 96 UNREACHABLE(); |
88 } | 97 } |
89 | 98 |
90 | 99 |
91 Dart_Handle Builtin::LoadLibrary(Dart_Handle url, BuiltinLibraryId id) { | 100 Dart_Handle Builtin::LoadLibrary(Dart_Handle url, BuiltinLibraryId id) { |
92 Dart_Handle library = Dart_LoadLibrary(url, Source(id), 0, 0); | 101 Dart_Handle library = Dart_LoadLibrary(url, Source(id), 0, 0); |
(...skipping 19 matching lines...) Expand all Loading... |
112 Dart_Handle url = DartUtils::NewString(builtin_libraries_[id].url_); | 121 Dart_Handle url = DartUtils::NewString(builtin_libraries_[id].url_); |
113 Dart_Handle library = Dart_LookupLibrary(url); | 122 Dart_Handle library = Dart_LookupLibrary(url); |
114 if (Dart_IsError(library)) { | 123 if (Dart_IsError(library)) { |
115 library = LoadLibrary(url, id); | 124 library = LoadLibrary(url, id); |
116 } | 125 } |
117 return library; | 126 return library; |
118 } | 127 } |
119 | 128 |
120 } // namespace bin | 129 } // namespace bin |
121 } // namespace dart | 130 } // namespace dart |
OLD | NEW |