Chromium Code Reviews| 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,29 @@ |
| 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(id >= kBuiltinLibrary && id < kInvalidLibrary); |
|
hausner
2012/05/31 15:57:11
This code assumes that kBuiltinLibrary is the firs
siva
2012/05/31 20:57:19
I have added an assertion to ensure that the size
|
| + 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(id >= kBuiltinLibrary && id < kInvalidLibrary); |
|
hausner
2012/05/31 15:57:11
ditto.
siva
2012/05/31 20:57:19
Ditto.
On 2012/05/31 15:57:11, hausner wrote:
|
| + 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(id >= kBuiltinLibrary && id < kInvalidLibrary); |
|
hausner
2012/05/31 15:57:11
ditto.
siva
2012/05/31 20:57:19
Ditto.
On 2012/05/31 15:57:11, hausner wrote:
|
| + 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)); |