| Index: bin/builtin.cc
|
| ===================================================================
|
| --- bin/builtin.cc (revision 8133)
|
| +++ bin/builtin.cc (working copy)
|
| @@ -9,6 +9,18 @@
|
| #include "bin/builtin.h"
|
| #include "bin/dartutils.h"
|
|
|
| +
|
| +Builtin::builtin_lib_props Builtin::builtin_libraries_[] = {
|
| + /* url_ source_ has_natives_ */
|
| + { DartUtils::kBuiltinLibURL, builtin_source_, true },
|
| + { DartUtils::kJsonLibURL, json_source_, false },
|
| + { DartUtils::kUriLibURL, uri_source_, false },
|
| + { DartUtils::kCryptoLibURL, crypto_source_, false },
|
| + { DartUtils::kIOLibURL, io_source_, true },
|
| + { DartUtils::kUtfLibURL, utf_source_, false }
|
| +};
|
| +
|
| +
|
| static void ImportBuiltinLibIntoLib(
|
| const char* liburl, Dart_Handle builtin_lib) {
|
| Dart_Handle url = Dart_NewString(liburl);
|
| @@ -19,75 +31,35 @@
|
|
|
|
|
| Dart_Handle Builtin::Source(BuiltinLibraryId id) {
|
| - Dart_Handle source;
|
| - switch (id) {
|
| - case kBuiltinLibrary:
|
| - source = Dart_NewString(Builtin::builtin_source_);
|
| - break;
|
| - case kCryptoLibrary:
|
| - source = Dart_NewString(Builtin::crypto_source_);
|
| - break;
|
| - case kIOLibrary:
|
| - source = Dart_NewString(Builtin::io_source_);
|
| - break;
|
| - case kJsonLibrary:
|
| - source = Dart_NewString(Builtin::json_source_);
|
| - break;
|
| - case kUriLibrary:
|
| - source = Dart_NewString(Builtin::uri_source_);
|
| - break;
|
| - case kUtfLibrary:
|
| - source = Dart_NewString(Builtin::utf_source_);
|
| - break;
|
| - default:
|
| - return Dart_Error("Unknown builtin source requested.");
|
| - }
|
| - return source;
|
| + ASSERT((sizeof(builtin_libraries_) / sizeof(builtin_lib_props)) ==
|
| + kInvalidLibrary);
|
| + ASSERT(id >= kBuiltinLibrary && id < kInvalidLibrary);
|
| + return Dart_NewString(builtin_libraries_[id].source_);
|
| }
|
|
|
|
|
| void Builtin::SetupLibrary(Dart_Handle library, BuiltinLibraryId id) {
|
| - if ((id == kCryptoLibrary) ||
|
| - (id == kJsonLibrary) ||
|
| - (id == kUriLibrary) ||
|
| - (id == kUtfLibrary)) {
|
| - // No native resolver for these pure Dart libraries.
|
| - return;
|
| - } else if (id == kBuiltinLibrary) {
|
| + ASSERT((sizeof(builtin_libraries_) / sizeof(builtin_lib_props)) ==
|
| + kInvalidLibrary);
|
| + ASSERT(id >= kBuiltinLibrary && id < kInvalidLibrary);
|
| + if (builtin_libraries_[id].has_natives_) {
|
| + // Setup the native resolver for built in library functions.
|
| + DART_CHECK_VALID(Dart_SetNativeResolver(library, NativeLookup));
|
| + }
|
| + if (id == kBuiltinLibrary) {
|
| // Import the builtin library into the core and isolate libraries.
|
| ImportBuiltinLibIntoLib(DartUtils::kCoreLibURL, library);
|
| ImportBuiltinLibIntoLib(DartUtils::kCoreImplLibURL, library);
|
| ImportBuiltinLibIntoLib(DartUtils::kIsolateLibURL, library);
|
| }
|
| - // 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((sizeof(builtin_libraries_) / sizeof(builtin_lib_props)) ==
|
| + kInvalidLibrary);
|
| + ASSERT(id >= kBuiltinLibrary && id < kInvalidLibrary);
|
| + Dart_Handle url = Dart_NewString(builtin_libraries_[id].url_);
|
| Dart_Handle library = Dart_LookupLibrary(url);
|
| if (Dart_IsError(library)) {
|
| library = Dart_LoadLibrary(url, Source(id));
|
|
|