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

Side by Side Diff: runtime/bin/builtin.cc

Issue 14752008: Final step towards loading core library scripts directly from the sources (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 7 months 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 | Annotate | Revision Log
« no previous file with comments | « runtime/bin/builtin.h ('k') | runtime/bin/builtin_gen_snapshot.cc » ('j') | 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 <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/io_natives.h"
12 11
13 namespace dart { 12 namespace dart {
14 namespace bin { 13 namespace bin {
15 14
16 Builtin::builtin_lib_props Builtin::builtin_libraries_[] = { 15 Builtin::builtin_lib_props Builtin::builtin_libraries_[] = {
17 /* { url_, source_, patch_url_, patch_source_, has_natives_ } */ 16 /* { url_, source_, patch_url_, patch_source_, has_natives_ } */
18 { DartUtils::kBuiltinLibURL, builtin_source_, NULL, NULL, true }, 17 { DartUtils::kBuiltinLibURL, builtin_source_paths_, NULL, NULL, true },
19 { DartUtils::kIOLibURL, io_source_, 18 { DartUtils::kIOLibURL, io_source_paths_,
20 DartUtils::kIOLibPatchURL, io_patch_, true }, 19 DartUtils::kIOLibPatchURL, io_patch_paths_, true },
21 }; 20 };
22 21
23 22
23 // Patch all the specified patch files in the array 'patch_files' into the
24 // library specified in 'library'.
25 static void LoadPatchFiles(Dart_Handle library,
26 const char* patch_uri,
27 const char** patch_files) {
28 for (intptr_t j = 0; patch_files[j] != NULL; j += 2) {
29 Dart_Handle patch_src = DartUtils::ReadStringFromFile(patch_files[j + 1]);
30
31 // Prepend the patch library URI to form a unique script URI for the patch.
32 intptr_t len = snprintf(NULL, 0, "%s/%s", patch_uri, patch_files[j]);
33 char* patch_filename = reinterpret_cast<char*>(malloc(len + 1));
34 snprintf(patch_filename, len + 1, "%s/%s", patch_uri, patch_files[j]);
35 Dart_Handle patch_file_uri = DartUtils::NewString(patch_filename);
36 free(patch_filename);
37
38 DART_CHECK_VALID(Dart_LoadPatch(library, patch_file_uri, patch_src));
39 }
40 }
41
42
24 Dart_Handle Builtin::Source(BuiltinLibraryId id) { 43 Dart_Handle Builtin::Source(BuiltinLibraryId id) {
25 ASSERT((sizeof(builtin_libraries_) / sizeof(builtin_lib_props)) == 44 ASSERT((sizeof(builtin_libraries_) / sizeof(builtin_lib_props)) ==
26 kInvalidLibrary); 45 kInvalidLibrary);
27 ASSERT(id >= kBuiltinLibrary && id < kInvalidLibrary); 46 ASSERT(id >= kBuiltinLibrary && id < kInvalidLibrary);
28 return DartUtils::NewString(builtin_libraries_[id].source_); 47
48 // Try to read the source using the path specified for the uri.
49 const char* uri = builtin_libraries_[id].url_;
50 const char** source_paths = builtin_libraries_[id].source_paths_;
51 return GetSource(source_paths, uri);
29 } 52 }
30 53
31 /** 54
32 * Looks up native functions in both libdart_builtin and libdart_io. 55 Dart_Handle Builtin::PartSource(BuiltinLibraryId id, const char* part_uri) {
33 */ 56 ASSERT((sizeof(builtin_libraries_) / sizeof(builtin_lib_props)) ==
34 Dart_NativeFunction Builtin::NativeLookup(Dart_Handle name, 57 kInvalidLibrary);
35 int argument_count) { 58 ASSERT(id >= kBuiltinLibrary && id < kInvalidLibrary);
36 Dart_NativeFunction result = BuiltinNativeLookup(name, argument_count); 59
37 if (result != NULL) return result; 60 // Try to read the source using the path specified for the uri.
38 return IONativeLookup(name, argument_count); 61 const char** source_paths = builtin_libraries_[id].source_paths_;
62 return GetSource(source_paths, part_uri);
39 } 63 }
40 64
65
66 Dart_Handle Builtin::GetSource(const char** source_paths, const char* uri) {
67 if (source_paths == NULL) {
68 return Dart_Null(); // No path mapping information exists for library.
69 }
70 const char* source_path = NULL;
71 for (intptr_t i = 0; source_paths[i] != NULL; i += 2) {
72 if (!strcmp(uri, source_paths[i])) {
73 source_path = source_paths[i + 1];
74 break;
75 }
76 }
77 if (source_path == NULL) {
78 return Dart_Null(); // Uri does not exist in path mapping information.
79 }
80 return DartUtils::ReadStringFromFile(source_path);
81 }
82
83
41 void Builtin::SetNativeResolver(BuiltinLibraryId id) { 84 void Builtin::SetNativeResolver(BuiltinLibraryId id) {
42 UNREACHABLE(); 85 UNREACHABLE();
43 } 86 }
44 87
45 88
46 Dart_Handle Builtin::LoadAndCheckLibrary(BuiltinLibraryId id) { 89 Dart_Handle Builtin::LoadAndCheckLibrary(BuiltinLibraryId id) {
47 ASSERT((sizeof(builtin_libraries_) / sizeof(builtin_lib_props)) == 90 ASSERT((sizeof(builtin_libraries_) / sizeof(builtin_lib_props)) ==
48 kInvalidLibrary); 91 kInvalidLibrary);
49 ASSERT(id >= kBuiltinLibrary && id < kInvalidLibrary); 92 ASSERT(id >= kBuiltinLibrary && id < kInvalidLibrary);
50 Dart_Handle url = DartUtils::NewString(builtin_libraries_[id].url_); 93 Dart_Handle url = DartUtils::NewString(builtin_libraries_[id].url_);
51 Dart_Handle library = Dart_LookupLibrary(url); 94 Dart_Handle library = Dart_LookupLibrary(url);
52 if (Dart_IsError(library)) { 95 if (Dart_IsError(library)) {
53 library = Dart_LoadLibrary(url, Source(id)); 96 library = Dart_LoadLibrary(url, Source(id));
54 if (!Dart_IsError(library) && (builtin_libraries_[id].has_natives_)) { 97 if (!Dart_IsError(library) && (builtin_libraries_[id].has_natives_)) {
55 // Setup the native resolver for built in library functions. 98 // Setup the native resolver for built in library functions.
56 DART_CHECK_VALID(Dart_SetNativeResolver(library, NativeLookup)); 99 DART_CHECK_VALID(Dart_SetNativeResolver(library, NativeLookup));
57 } 100 }
58 if (builtin_libraries_[id].patch_url_ != NULL) { 101 if (builtin_libraries_[id].patch_url_ != NULL) {
59 ASSERT(builtin_libraries_[id].patch_source_ != NULL); 102 ASSERT(builtin_libraries_[id].patch_paths_ != NULL);
60 Dart_Handle patch_url = 103 LoadPatchFiles(library,
61 DartUtils::NewString(builtin_libraries_[id].patch_url_); 104 builtin_libraries_[id].patch_url_,
62 Dart_Handle patch_source = 105 builtin_libraries_[id].patch_paths_);
63 DartUtils::NewString(builtin_libraries_[id].patch_source_);
64 DART_CHECK_VALID(Dart_LoadPatch(library, patch_url, patch_source));
65 } 106 }
66 } 107 }
67 DART_CHECK_VALID(library); 108 DART_CHECK_VALID(library);
68 return library; 109 return library;
69 } 110 }
70 111
71 } // namespace bin 112 } // namespace bin
72 } // namespace dart 113 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/bin/builtin.h ('k') | runtime/bin/builtin_gen_snapshot.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698