Chromium Code Reviews| Index: bin/builtin_nolib.cc |
| =================================================================== |
| --- bin/builtin_nolib.cc (revision 8133) |
| +++ bin/builtin_nolib.cc (working copy) |
| @@ -10,44 +10,42 @@ |
| #include "bin/dartutils.h" |
| +Builtin::builtin_lib_props Builtin::builtin_libraries_[] = { |
| + /* url_ source_ has_natives_ */ |
| + { DartUtils::kBuiltinLibURL, NULL, true }, |
| + { DartUtils::kJsonLibURL, NULL, false }, |
| + { DartUtils::kUriLibURL, NULL, false }, |
| + { DartUtils::kCryptoLibURL, NULL, false }, |
| + { DartUtils::kIOLibURL, NULL, true }, |
| + { DartUtils::kUtfLibURL, NULL, false } |
| +}; |
| + |
| + |
| Dart_Handle Builtin::Source(BuiltinLibraryId id) { |
| - UNREACHABLE(); |
| - return Dart_Null(); |
| + ASSERT(id >= kCryptoLibrary && id < kInvalidLibrary); |
|
hausner
2012/05/31 15:57:11
Also assumes a certain order in the enum. Add a co
siva
2012/05/31 20:57:19
Done.
|
| + return Dart_NewString(builtin_libraries_[id].source_); |
| } |
| void Builtin::SetupLibrary(Dart_Handle library, BuiltinLibraryId id) { |
| - UNREACHABLE(); |
| + ASSERT(id >= kCryptoLibrary && id < kInvalidLibrary); |
| + if (builtin_libraries_[id].has_natives_) { |
| + // Setup the native resolver for built in library functions. |
| + DART_CHECK_VALID(Dart_SetNativeResolver(library, NativeLookup)); |
| + } |
| } |
| Dart_Handle Builtin::LoadLibrary(BuiltinLibraryId id) { |
| - Dart_Handle url; |
| - switch (id) { |
| - case kBuiltinLibrary: |
| - url = Dart_NewString(DartUtils::kBuiltinLibURL); |
| - break; |
| - case kCryptoLibrary: |
| - url = Dart_NewString(DartUtils::kCryptoLibURL); |
| - break; |
| - case kIOLibrary: |
| - url = Dart_NewString(DartUtils::kIOLibURL); |
| - break; |
| - case kJsonLibrary: |
| - url = Dart_NewString(DartUtils::kJsonLibURL); |
| - break; |
| - case kUriLibrary: |
| - url = Dart_NewString(DartUtils::kUriLibURL); |
| - break; |
| - case kUtfLibrary: |
| - url = Dart_NewString(DartUtils::kUtfLibURL); |
| - break; |
| - default: |
| - return Dart_Error("Unknown builtin library requested."); |
| - } |
| + ASSERT(id >= kBuiltinLibrary && id < kInvalidLibrary); |
| + Dart_Handle url = Dart_NewString(builtin_libraries_[id].url_); |
| Dart_Handle library = Dart_LookupLibrary(url); |
| if (Dart_IsError(library)) { |
| - UNREACHABLE(); |
| + ASSERT(id >= kCryptoLibrary && id < kInvalidLibrary); |
| + library = Dart_LoadLibrary(url, Source(id)); |
| + if (!Dart_IsError(library)) { |
| + SetupLibrary(library, id); |
| + } |
| } |
| DART_CHECK_VALID(library); |
| return library; |