| 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" | 
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 56     // Prepend the patch library URI to form a unique script URI for the patch. | 56     // Prepend the patch library URI to form a unique script URI for the patch. | 
| 57     intptr_t len = snprintf(NULL, 0, "%s/%s", patch_uri, patch_files[j]); | 57     intptr_t len = snprintf(NULL, 0, "%s/%s", patch_uri, patch_files[j]); | 
| 58     char* patch_filename = DartUtils::ScopedCString(len + 1); | 58     char* patch_filename = DartUtils::ScopedCString(len + 1); | 
| 59     snprintf(patch_filename, len + 1, "%s/%s", patch_uri, patch_files[j]); | 59     snprintf(patch_filename, len + 1, "%s/%s", patch_uri, patch_files[j]); | 
| 60     Dart_Handle patch_file_uri = DartUtils::NewString(patch_filename); | 60     Dart_Handle patch_file_uri = DartUtils::NewString(patch_filename); | 
| 61 | 61 | 
| 62     DART_CHECK_VALID(Dart_LibraryLoadPatch(library, patch_file_uri, patch_src)); | 62     DART_CHECK_VALID(Dart_LibraryLoadPatch(library, patch_file_uri, patch_src)); | 
| 63   } | 63   } | 
| 64 } | 64 } | 
| 65 | 65 | 
| 66 |  | 
| 67 Dart_Handle Builtin::Source(BuiltinLibraryId id) { | 66 Dart_Handle Builtin::Source(BuiltinLibraryId id) { | 
| 68   ASSERT(static_cast<int>(id) >= 0); | 67   ASSERT(static_cast<int>(id) >= 0); | 
| 69   ASSERT(static_cast<int>(id) < num_libs_); | 68   ASSERT(static_cast<int>(id) < num_libs_); | 
| 70 | 69 | 
| 71   // Try to read the source using the path specified for the uri. | 70   // Try to read the source using the path specified for the uri. | 
| 72   const char* uri = builtin_libraries_[id].url_; | 71   const char* uri = builtin_libraries_[id].url_; | 
| 73   const char** source_paths = builtin_libraries_[id].source_paths_; | 72   const char** source_paths = builtin_libraries_[id].source_paths_; | 
| 74   return GetSource(source_paths, uri); | 73   return GetSource(source_paths, uri); | 
| 75 } | 74 } | 
| 76 | 75 | 
| 77 |  | 
| 78 Dart_Handle Builtin::PartSource(BuiltinLibraryId id, const char* part_uri) { | 76 Dart_Handle Builtin::PartSource(BuiltinLibraryId id, const char* part_uri) { | 
| 79   ASSERT(static_cast<int>(id) >= 0); | 77   ASSERT(static_cast<int>(id) >= 0); | 
| 80   ASSERT(static_cast<int>(id) < num_libs_); | 78   ASSERT(static_cast<int>(id) < num_libs_); | 
| 81 | 79 | 
| 82   // Try to read the source using the path specified for the uri. | 80   // Try to read the source using the path specified for the uri. | 
| 83   const char** source_paths = builtin_libraries_[id].source_paths_; | 81   const char** source_paths = builtin_libraries_[id].source_paths_; | 
| 84   return GetSource(source_paths, part_uri); | 82   return GetSource(source_paths, part_uri); | 
| 85 } | 83 } | 
| 86 | 84 | 
| 87 |  | 
| 88 Dart_Handle Builtin::GetSource(const char** source_paths, const char* uri) { | 85 Dart_Handle Builtin::GetSource(const char** source_paths, const char* uri) { | 
| 89   if (source_paths == NULL) { | 86   if (source_paths == NULL) { | 
| 90     return Dart_Null();  // No path mapping information exists for library. | 87     return Dart_Null();  // No path mapping information exists for library. | 
| 91   } | 88   } | 
| 92   for (intptr_t i = 0; source_paths[i] != NULL; i += 2) { | 89   for (intptr_t i = 0; source_paths[i] != NULL; i += 2) { | 
| 93     if (!strcmp(uri, source_paths[i])) { | 90     if (!strcmp(uri, source_paths[i])) { | 
| 94       // Use the sources linked in the binary. | 91       // Use the sources linked in the binary. | 
| 95       const char* source = source_paths[i + 1]; | 92       const char* source = source_paths[i + 1]; | 
| 96       return Dart_NewStringFromUTF8(reinterpret_cast<const uint8_t*>(source), | 93       return Dart_NewStringFromUTF8(reinterpret_cast<const uint8_t*>(source), | 
| 97                                     strlen(source)); | 94                                     strlen(source)); | 
| 98     } | 95     } | 
| 99   } | 96   } | 
| 100   return Dart_Null();  // Uri does not exist in path mapping information. | 97   return Dart_Null();  // Uri does not exist in path mapping information. | 
| 101 } | 98 } | 
| 102 | 99 | 
| 103 |  | 
| 104 void Builtin::SetNativeResolver(BuiltinLibraryId id) { | 100 void Builtin::SetNativeResolver(BuiltinLibraryId id) { | 
| 105   ASSERT(static_cast<int>(id) >= 0); | 101   ASSERT(static_cast<int>(id) >= 0); | 
| 106   ASSERT(static_cast<int>(id) < num_libs_); | 102   ASSERT(static_cast<int>(id) < num_libs_); | 
| 107 | 103 | 
| 108   if (builtin_libraries_[id].has_natives_) { | 104   if (builtin_libraries_[id].has_natives_) { | 
| 109     Dart_Handle url = DartUtils::NewString(builtin_libraries_[id].url_); | 105     Dart_Handle url = DartUtils::NewString(builtin_libraries_[id].url_); | 
| 110     Dart_Handle library = Dart_LookupLibrary(url); | 106     Dart_Handle library = Dart_LookupLibrary(url); | 
| 111     ASSERT(!Dart_IsError(library)); | 107     ASSERT(!Dart_IsError(library)); | 
| 112     // Setup the native resolver for built in library functions. | 108     // Setup the native resolver for built in library functions. | 
| 113     DART_CHECK_VALID( | 109     DART_CHECK_VALID( | 
| 114         Dart_SetNativeResolver(library, NativeLookup, NativeSymbol)); | 110         Dart_SetNativeResolver(library, NativeLookup, NativeSymbol)); | 
| 115   } | 111   } | 
| 116 } | 112 } | 
| 117 | 113 | 
| 118 |  | 
| 119 Dart_Handle Builtin::LoadLibrary(Dart_Handle url, BuiltinLibraryId id) { | 114 Dart_Handle Builtin::LoadLibrary(Dart_Handle url, BuiltinLibraryId id) { | 
| 120   ASSERT(static_cast<int>(id) >= 0); | 115   ASSERT(static_cast<int>(id) >= 0); | 
| 121   ASSERT(static_cast<int>(id) < num_libs_); | 116   ASSERT(static_cast<int>(id) < num_libs_); | 
| 122 | 117 | 
| 123   Dart_Handle library = Dart_LoadLibrary(url, Dart_Null(), Source(id), 0, 0); | 118   Dart_Handle library = Dart_LoadLibrary(url, Dart_Null(), Source(id), 0, 0); | 
| 124   if (!Dart_IsError(library) && (builtin_libraries_[id].has_natives_)) { | 119   if (!Dart_IsError(library) && (builtin_libraries_[id].has_natives_)) { | 
| 125     // Setup the native resolver for built in library functions. | 120     // Setup the native resolver for built in library functions. | 
| 126     DART_CHECK_VALID( | 121     DART_CHECK_VALID( | 
| 127         Dart_SetNativeResolver(library, NativeLookup, NativeSymbol)); | 122         Dart_SetNativeResolver(library, NativeLookup, NativeSymbol)); | 
| 128   } | 123   } | 
| 129   if (builtin_libraries_[id].patch_url_ != NULL) { | 124   if (builtin_libraries_[id].patch_url_ != NULL) { | 
| 130     ASSERT(builtin_libraries_[id].patch_paths_ != NULL); | 125     ASSERT(builtin_libraries_[id].patch_paths_ != NULL); | 
| 131     LoadPatchFiles(library, builtin_libraries_[id].patch_url_, | 126     LoadPatchFiles(library, builtin_libraries_[id].patch_url_, | 
| 132                    builtin_libraries_[id].patch_paths_); | 127                    builtin_libraries_[id].patch_paths_); | 
| 133   } | 128   } | 
| 134   return library; | 129   return library; | 
| 135 } | 130 } | 
| 136 | 131 | 
| 137 |  | 
| 138 Builtin::BuiltinLibraryId Builtin::FindId(const char* url_string) { | 132 Builtin::BuiltinLibraryId Builtin::FindId(const char* url_string) { | 
| 139   int id = 0; | 133   int id = 0; | 
| 140   while (true) { | 134   while (true) { | 
| 141     if (builtin_libraries_[id].url_ == NULL) { | 135     if (builtin_libraries_[id].url_ == NULL) { | 
| 142       return kInvalidLibrary; | 136       return kInvalidLibrary; | 
| 143     } | 137     } | 
| 144     if (strcmp(url_string, builtin_libraries_[id].url_) == 0) { | 138     if (strcmp(url_string, builtin_libraries_[id].url_) == 0) { | 
| 145       return static_cast<BuiltinLibraryId>(id); | 139       return static_cast<BuiltinLibraryId>(id); | 
| 146     } | 140     } | 
| 147     id++; | 141     id++; | 
| 148   } | 142   } | 
| 149 } | 143 } | 
| 150 | 144 | 
| 151 |  | 
| 152 Dart_Handle Builtin::LoadAndCheckLibrary(BuiltinLibraryId id) { | 145 Dart_Handle Builtin::LoadAndCheckLibrary(BuiltinLibraryId id) { | 
| 153   ASSERT(static_cast<int>(id) >= 0); | 146   ASSERT(static_cast<int>(id) >= 0); | 
| 154   ASSERT(static_cast<int>(id) < num_libs_); | 147   ASSERT(static_cast<int>(id) < num_libs_); | 
| 155 | 148 | 
| 156   Dart_Handle url = DartUtils::NewString(builtin_libraries_[id].url_); | 149   Dart_Handle url = DartUtils::NewString(builtin_libraries_[id].url_); | 
| 157   Dart_Handle library = Dart_LookupLibrary(url); | 150   Dart_Handle library = Dart_LookupLibrary(url); | 
| 158   if (Dart_IsError(library)) { | 151   if (Dart_IsError(library)) { | 
| 159     library = LoadLibrary(url, id); | 152     library = LoadLibrary(url, id); | 
| 160   } | 153   } | 
| 161   return library; | 154   return library; | 
| 162 } | 155 } | 
| 163 | 156 | 
| 164 }  // namespace bin | 157 }  // namespace bin | 
| 165 }  // namespace dart | 158 }  // namespace dart | 
| OLD | NEW | 
|---|