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

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

Issue 1663963002: - reorganize DartUtils::PrepareForScriptLoading so that it does not have the wait for service load … (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: code-review-comments Created 4 years, 10 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
« no previous file with comments | « runtime/bin/dartutils.h ('k') | runtime/bin/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 "bin/dartutils.h" 5 #include "bin/dartutils.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 #include "include/dart_tools_api.h" 8 #include "include/dart_tools_api.h"
9 #include "include/dart_native_api.h" 9 #include "include/dart_native_api.h"
10 10
11 #include "platform/assert.h" 11 #include "platform/assert.h"
12 #include "platform/globals.h" 12 #include "platform/globals.h"
13 13
14 #include "bin/crypto.h" 14 #include "bin/crypto.h"
15 #include "bin/directory.h" 15 #include "bin/directory.h"
16 #include "bin/extensions.h" 16 #include "bin/extensions.h"
17 #include "bin/file.h" 17 #include "bin/file.h"
18 #include "bin/io_buffer.h" 18 #include "bin/io_buffer.h"
19 #include "bin/isolate_data.h"
20 #include "bin/platform.h" 19 #include "bin/platform.h"
21 #include "bin/socket.h" 20 #include "bin/socket.h"
22 #include "bin/utils.h" 21 #include "bin/utils.h"
23 22
24 // Return the error from the containing function if handle is in error handle. 23 // Return the error from the containing function if handle is in error handle.
25 #define RETURN_IF_ERROR(handle) \ 24 #define RETURN_IF_ERROR(handle) \
26 { \ 25 { \
27 Dart_Handle __handle = handle; \ 26 Dart_Handle __handle = handle; \
28 if (Dart_IsError((__handle))) { \ 27 if (Dart_IsError((__handle))) { \
29 return __handle; \ 28 return __handle; \
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 ASSERT(td_len == len); 297 ASSERT(td_len == len);
299 ASSERT(td_data != NULL); 298 ASSERT(td_data != NULL);
300 memmove(td_data, buffer, td_len); 299 memmove(td_data, buffer, td_len);
301 result = Dart_TypedDataReleaseData(array); 300 result = Dart_TypedDataReleaseData(array);
302 RETURN_IF_ERROR(result); 301 RETURN_IF_ERROR(result);
303 } 302 }
304 return array; 303 return array;
305 } 304 }
306 305
307 306
308 Dart_Handle DartUtils::SetWorkingDirectory(Dart_Handle builtin_lib) { 307 Dart_Handle DartUtils::SetWorkingDirectory() {
308 IsolateData* isolate_data =
309 reinterpret_cast<IsolateData*>(Dart_CurrentIsolateData());
310 Dart_Handle builtin_lib = isolate_data->builtin_lib();
309 Dart_Handle directory = NewString(original_working_directory); 311 Dart_Handle directory = NewString(original_working_directory);
310 return SingleArgDart_Invoke(builtin_lib, "_setWorkingDirectory", directory); 312 return SingleArgDart_Invoke(builtin_lib, "_setWorkingDirectory", directory);
311 } 313 }
312 314
313 315
314 Dart_Handle DartUtils::ResolveUriInWorkingDirectory(Dart_Handle script_uri, 316 Dart_Handle DartUtils::ResolveUriInWorkingDirectory(Dart_Handle script_uri) {
315 Dart_Handle builtin_lib) {
316 const int kNumArgs = 1; 317 const int kNumArgs = 1;
317 Dart_Handle dart_args[kNumArgs]; 318 Dart_Handle dart_args[kNumArgs];
318 dart_args[0] = script_uri; 319 dart_args[0] = script_uri;
319 return Dart_Invoke(builtin_lib, 320 return Dart_Invoke(DartUtils::BuiltinLib(),
320 NewString("_resolveInWorkingDirectory"), 321 NewString("_resolveInWorkingDirectory"),
321 kNumArgs, 322 kNumArgs,
322 dart_args); 323 dart_args);
323 } 324 }
324 325
325 326
326 Dart_Handle DartUtils::FilePathFromUri(Dart_Handle script_uri, 327 Dart_Handle DartUtils::FilePathFromUri(Dart_Handle script_uri) {
327 Dart_Handle builtin_lib) {
328 const int kNumArgs = 1; 328 const int kNumArgs = 1;
329 Dart_Handle dart_args[kNumArgs]; 329 Dart_Handle dart_args[kNumArgs];
330 dart_args[0] = script_uri; 330 dart_args[0] = script_uri;
331 return Dart_Invoke(builtin_lib, 331 return Dart_Invoke(DartUtils::BuiltinLib(),
332 NewString("_filePathFromUri"), 332 NewString("_filePathFromUri"),
333 kNumArgs, 333 kNumArgs,
334 dart_args); 334 dart_args);
335 } 335 }
336 336
337 337
338 Dart_Handle DartUtils::ExtensionPathFromUri(Dart_Handle extension_uri, 338 Dart_Handle DartUtils::ExtensionPathFromUri(Dart_Handle extension_uri) {
339 Dart_Handle builtin_lib) {
340 const int kNumArgs = 1; 339 const int kNumArgs = 1;
341 Dart_Handle dart_args[kNumArgs]; 340 Dart_Handle dart_args[kNumArgs];
342 dart_args[0] = extension_uri; 341 dart_args[0] = extension_uri;
343 return Dart_Invoke(builtin_lib, 342 return Dart_Invoke(DartUtils::BuiltinLib(),
344 NewString("_extensionPathFromUri"), 343 NewString("_extensionPathFromUri"),
345 kNumArgs, 344 kNumArgs,
346 dart_args); 345 dart_args);
347 } 346 }
348 347
349 348
350 Dart_Handle DartUtils::ResolveUri(Dart_Handle library_url, 349 Dart_Handle DartUtils::ResolveUri(Dart_Handle library_url, Dart_Handle url) {
351 Dart_Handle url,
352 Dart_Handle builtin_lib) {
353 const int kNumArgs = 2; 350 const int kNumArgs = 2;
354 Dart_Handle dart_args[kNumArgs]; 351 Dart_Handle dart_args[kNumArgs];
355 dart_args[0] = library_url; 352 dart_args[0] = library_url;
356 dart_args[1] = url; 353 dart_args[1] = url;
357 return Dart_Invoke( 354 return Dart_Invoke(DartUtils::BuiltinLib(),
358 builtin_lib, NewString("_resolveUri"), kNumArgs, dart_args); 355 NewString("_resolveUri"),
356 kNumArgs,
357 dart_args);
359 } 358 }
360 359
361 360
362 static Dart_Handle LoadDataAsync_Invoke(Dart_Handle tag, 361 static Dart_Handle LoadDataAsync_Invoke(Dart_Handle tag,
363 Dart_Handle url, 362 Dart_Handle url,
364 Dart_Handle library_url, 363 Dart_Handle library_url) {
365 Dart_Handle builtin_lib) {
366 const int kNumArgs = 3; 364 const int kNumArgs = 3;
367 Dart_Handle dart_args[kNumArgs]; 365 Dart_Handle dart_args[kNumArgs];
368 dart_args[0] = tag; 366 dart_args[0] = tag;
369 dart_args[1] = url; 367 dart_args[1] = url;
370 dart_args[2] = library_url; 368 dart_args[2] = library_url;
371 return Dart_Invoke(builtin_lib, 369 return Dart_Invoke(DartUtils::BuiltinLib(),
372 DartUtils::NewString("_loadDataAsync"), 370 DartUtils::NewString("_loadDataAsync"),
373 kNumArgs, 371 kNumArgs,
374 dart_args); 372 dart_args);
375 } 373 }
376 374
377 375
378 Dart_Handle DartUtils::LibraryTagHandler(Dart_LibraryTag tag, 376 Dart_Handle DartUtils::LibraryTagHandler(Dart_LibraryTag tag,
379 Dart_Handle library, 377 Dart_Handle library,
380 Dart_Handle url) { 378 Dart_Handle url) {
381 if (!Dart_IsLibrary(library)) { 379 if (!Dart_IsLibrary(library)) {
(...skipping 18 matching lines...) Expand all
400 bool is_io_library = DartUtils::IsDartIOLibURL(library_url_string); 398 bool is_io_library = DartUtils::IsDartIOLibURL(library_url_string);
401 399
402 // Handle URI canonicalization requests. 400 // Handle URI canonicalization requests.
403 if (tag == Dart_kCanonicalizeUrl) { 401 if (tag == Dart_kCanonicalizeUrl) {
404 // If this is a Dart Scheme URL or 'part' of a io library 402 // If this is a Dart Scheme URL or 'part' of a io library
405 // then it is not modified as it will be handled internally. 403 // then it is not modified as it will be handled internally.
406 if (is_dart_scheme_url || is_io_library) { 404 if (is_dart_scheme_url || is_io_library) {
407 return url; 405 return url;
408 } 406 }
409 // Resolve the url within the context of the library's URL. 407 // Resolve the url within the context of the library's URL.
410 Dart_Handle builtin_lib = 408 return ResolveUri(library_url, url);
411 Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary);
412 RETURN_IF_ERROR(builtin_lib);
413 return ResolveUri(library_url, url, builtin_lib);
414 } 409 }
415 410
416 // Handle 'import' of dart scheme URIs (i.e they start with 'dart:'). 411 // Handle 'import' of dart scheme URIs (i.e they start with 'dart:').
417 if (is_dart_scheme_url) { 412 if (is_dart_scheme_url) {
418 if (tag == Dart_kImportTag) { 413 if (tag == Dart_kImportTag) {
419 // Handle imports of other built-in libraries present in the SDK. 414 // Handle imports of other built-in libraries present in the SDK.
420 if (DartUtils::IsDartIOLibURL(url_string)) { 415 if (DartUtils::IsDartIOLibURL(url_string)) {
421 return Builtin::LoadLibrary(url, Builtin::kIOLibrary); 416 return Builtin::LoadLibrary(url, Builtin::kIOLibrary);
422 } 417 }
423 return NewError("The built-in library '%s' is not available" 418 return NewError("The built-in library '%s' is not available"
(...skipping 16 matching lines...) Expand all
440 return Dart_LoadSource( 435 return Dart_LoadSource(
441 library, 436 library,
442 part_uri_obj, 437 part_uri_obj,
443 Builtin::PartSource(Builtin::kIOLibrary, url_string), 0, 0); 438 Builtin::PartSource(Builtin::kIOLibrary, url_string), 0, 0);
444 } else { 439 } else {
445 ASSERT(tag == Dart_kImportTag); 440 ASSERT(tag == Dart_kImportTag);
446 return NewError("Unable to import '%s' ", url_string); 441 return NewError("Unable to import '%s' ", url_string);
447 } 442 }
448 } 443 }
449 444
450 Dart_Handle builtin_lib =
451 Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary);
452 RETURN_IF_ERROR(builtin_lib);
453 if (DartUtils::IsDartExtensionSchemeURL(url_string)) { 445 if (DartUtils::IsDartExtensionSchemeURL(url_string)) {
454 // Load a native code shared library to use in a native extension 446 // Load a native code shared library to use in a native extension
455 if (tag != Dart_kImportTag) { 447 if (tag != Dart_kImportTag) {
456 return NewError("Dart extensions must use import: '%s'", url_string); 448 return NewError("Dart extensions must use import: '%s'", url_string);
457 } 449 }
458 Dart_Handle path_parts = DartUtils::ExtensionPathFromUri(url, builtin_lib); 450 Dart_Handle path_parts = DartUtils::ExtensionPathFromUri(url);
459 if (Dart_IsError(path_parts)) { 451 if (Dart_IsError(path_parts)) {
460 return path_parts; 452 return path_parts;
461 } 453 }
462 const char* extension_directory = NULL; 454 const char* extension_directory = NULL;
463 Dart_StringToCString(Dart_ListGetAt(path_parts, 0), &extension_directory); 455 Dart_StringToCString(Dart_ListGetAt(path_parts, 0), &extension_directory);
464 const char* extension_filename = NULL; 456 const char* extension_filename = NULL;
465 Dart_StringToCString(Dart_ListGetAt(path_parts, 1), &extension_filename); 457 Dart_StringToCString(Dart_ListGetAt(path_parts, 1), &extension_filename);
466 const char* extension_name = NULL; 458 const char* extension_name = NULL;
467 Dart_StringToCString(Dart_ListGetAt(path_parts, 2), &extension_name); 459 Dart_StringToCString(Dart_ListGetAt(path_parts, 2), &extension_name);
468 460
469 return Extensions::LoadExtension(extension_directory, 461 return Extensions::LoadExtension(extension_directory,
470 extension_filename, 462 extension_filename,
471 extension_name, 463 extension_name,
472 library); 464 library);
473 } 465 }
474 466
475 // Handle 'import' or 'part' requests for all other URIs. Call dart code to 467 // Handle 'import' or 'part' requests for all other URIs. Call dart code to
476 // read the source code asynchronously. 468 // read the source code asynchronously.
477 return LoadDataAsync_Invoke(Dart_NewInteger(tag), 469 return LoadDataAsync_Invoke(Dart_NewInteger(tag), url, library_url);
478 url,
479 library_url,
480 builtin_lib);
481 } 470 }
482 471
483 472
484 const uint8_t* DartUtils::SniffForMagicNumber(const uint8_t* text_buffer, 473 const uint8_t* DartUtils::SniffForMagicNumber(const uint8_t* text_buffer,
485 intptr_t* buffer_len, 474 intptr_t* buffer_len,
486 bool* is_snapshot) { 475 bool* is_snapshot) {
487 intptr_t len = sizeof(magic_number); 476 intptr_t len = sizeof(magic_number);
488 if (*buffer_len <= len) { 477 if (*buffer_len <= len) {
489 *is_snapshot = false; 478 *is_snapshot = false;
490 return text_buffer; 479 return text_buffer;
(...skipping 11 matching lines...) Expand all
502 } 491 }
503 492
504 493
505 void DartUtils::WriteMagicNumber(File* file) { 494 void DartUtils::WriteMagicNumber(File* file) {
506 // Write a magic number and version information into the snapshot file. 495 // Write a magic number and version information into the snapshot file.
507 bool bytes_written = file->WriteFully(magic_number, sizeof(magic_number)); 496 bool bytes_written = file->WriteFully(magic_number, sizeof(magic_number));
508 ASSERT(bytes_written); 497 ASSERT(bytes_written);
509 } 498 }
510 499
511 500
512 Dart_Handle DartUtils::LoadScript(const char* script_uri, 501 Dart_Handle DartUtils::LoadScript(const char* script_uri) {
513 Dart_Handle builtin_lib) {
514 Dart_Handle uri = Dart_NewStringFromCString(script_uri); 502 Dart_Handle uri = Dart_NewStringFromCString(script_uri);
515 IsolateData* isolate_data = 503 IsolateData* isolate_data =
516 reinterpret_cast<IsolateData*>(Dart_CurrentIsolateData()); 504 reinterpret_cast<IsolateData*>(Dart_CurrentIsolateData());
517 Dart_TimelineAsyncBegin("LoadScript", &(isolate_data->load_async_id)); 505 Dart_TimelineAsyncBegin("LoadScript", &(isolate_data->load_async_id));
518 return LoadDataAsync_Invoke(Dart_Null(), uri, Dart_Null(), builtin_lib); 506 return LoadDataAsync_Invoke(Dart_Null(), uri, Dart_Null());
519 } 507 }
520 508
521 509
522 // Callback function, gets called from asynchronous script and library 510 // Callback function, gets called from asynchronous script and library
523 // reading code when there is an i/o error. 511 // reading code when there is an i/o error.
524 void FUNCTION_NAME(Builtin_AsyncLoadError)(Dart_NativeArguments args) { 512 void FUNCTION_NAME(Builtin_AsyncLoadError)(Dart_NativeArguments args) {
525 // Dart_Handle source_uri = Dart_GetNativeArgument(args, 0); 513 // Dart_Handle source_uri = Dart_GetNativeArgument(args, 0);
526 Dart_Handle library_uri = Dart_GetNativeArgument(args, 1); 514 Dart_Handle library_uri = Dart_GetNativeArgument(args, 1);
527 Dart_Handle error = Dart_GetNativeArgument(args, 2); 515 Dart_Handle error = Dart_GetNativeArgument(args, 2);
528 516
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 } else { 637 } else {
650 Dart_Handle err = DartUtils::NewError("Failed to get current directory."); 638 Dart_Handle err = DartUtils::NewError("Failed to get current directory.");
651 Dart_PropagateError(err); 639 Dart_PropagateError(err);
652 } 640 }
653 } 641 }
654 642
655 643
656 Dart_Handle DartUtils::PrepareBuiltinLibrary(Dart_Handle builtin_lib, 644 Dart_Handle DartUtils::PrepareBuiltinLibrary(Dart_Handle builtin_lib,
657 Dart_Handle internal_lib, 645 Dart_Handle internal_lib,
658 bool is_service_isolate, 646 bool is_service_isolate,
659 bool trace_loading, 647 bool trace_loading) {
660 const char* package_root,
661 const char* packages_config) {
662 // Setup the internal library's 'internalPrint' function. 648 // Setup the internal library's 'internalPrint' function.
663 Dart_Handle print = Dart_Invoke( 649 Dart_Handle print = Dart_Invoke(
664 builtin_lib, NewString("_getPrintClosure"), 0, NULL); 650 builtin_lib, NewString("_getPrintClosure"), 0, NULL);
665 RETURN_IF_ERROR(print); 651 RETURN_IF_ERROR(print);
666 Dart_Handle result = 652 Dart_Handle result =
667 Dart_SetField(internal_lib, NewString("_printClosure"), print); 653 Dart_SetField(internal_lib, NewString("_printClosure"), print);
668 RETURN_IF_ERROR(result); 654 RETURN_IF_ERROR(result);
669 655
670 if (!is_service_isolate) { 656 if (!is_service_isolate) {
671 if (IsWindowsHost()) { 657 if (IsWindowsHost()) {
672 result = Dart_SetField(builtin_lib, NewString("_isWindows"), Dart_True()); 658 result = Dart_SetField(builtin_lib, NewString("_isWindows"), Dart_True());
673 RETURN_IF_ERROR(result); 659 RETURN_IF_ERROR(result);
674 } 660 }
675 if (trace_loading) { 661 if (trace_loading) {
676 result = Dart_SetField(builtin_lib, 662 result = Dart_SetField(builtin_lib,
677 NewString("_traceLoading"), Dart_True()); 663 NewString("_traceLoading"), Dart_True());
678 RETURN_IF_ERROR(result); 664 RETURN_IF_ERROR(result);
679 } 665 }
680 // Set current working directory. 666 // Set current working directory.
681 result = SetWorkingDirectory(builtin_lib); 667 result = SetWorkingDirectory();
682 RETURN_IF_ERROR(result);
683 // Wait for the service isolate to initialize the load port.
684 Dart_Port load_port = Dart_ServiceWaitForLoadPort();
685 if (load_port == ILLEGAL_PORT) {
686 return Dart_NewUnhandledExceptionError(
687 NewDartUnsupportedError("Service did not return load port."));
688 }
689 result = Builtin::SetLoadPort(load_port);
690 RETURN_IF_ERROR(result);
691 }
692
693 // Set up package root if specified.
694 if (package_root != NULL) {
695 ASSERT(packages_config == NULL);
696 result = NewString(package_root);
697 RETURN_IF_ERROR(result);
698 const int kNumArgs = 1;
699 Dart_Handle dart_args[kNumArgs];
700 dart_args[0] = result;
701 result = Dart_Invoke(builtin_lib,
702 NewString("_setPackageRoot"),
703 kNumArgs,
704 dart_args);
705 RETURN_IF_ERROR(result);
706 } else if (packages_config != NULL) {
707 result = NewString(packages_config);
708 RETURN_IF_ERROR(result);
709 const int kNumArgs = 1;
710 Dart_Handle dart_args[kNumArgs];
711 dart_args[0] = result;
712 result = Dart_Invoke(builtin_lib,
713 NewString("_loadPackagesMap"),
714 kNumArgs,
715 dart_args);
716 RETURN_IF_ERROR(result); 668 RETURN_IF_ERROR(result);
717 } 669 }
718 return Dart_True(); 670 return Dart_True();
719 } 671 }
720 672
721 673
722 Dart_Handle DartUtils::PrepareCoreLibrary(Dart_Handle core_lib, 674 Dart_Handle DartUtils::PrepareCoreLibrary(Dart_Handle core_lib,
723 Dart_Handle builtin_lib, 675 Dart_Handle builtin_lib,
724 bool is_service_isolate) { 676 bool is_service_isolate) {
725 if (!is_service_isolate) { 677 if (!is_service_isolate) {
(...skipping 26 matching lines...) Expand all
752 Dart_Handle DartUtils::PrepareIOLibrary(Dart_Handle io_lib) { 704 Dart_Handle DartUtils::PrepareIOLibrary(Dart_Handle io_lib) {
753 return Dart_Invoke(io_lib, NewString("_setupHooks"), 0, NULL); 705 return Dart_Invoke(io_lib, NewString("_setupHooks"), 0, NULL);
754 } 706 }
755 707
756 708
757 Dart_Handle DartUtils::PrepareIsolateLibrary(Dart_Handle isolate_lib) { 709 Dart_Handle DartUtils::PrepareIsolateLibrary(Dart_Handle isolate_lib) {
758 return Dart_Invoke(isolate_lib, NewString("_setupHooks"), 0, NULL); 710 return Dart_Invoke(isolate_lib, NewString("_setupHooks"), 0, NULL);
759 } 711 }
760 712
761 713
762 Dart_Handle DartUtils::PrepareForScriptLoading(const char* package_root, 714 Dart_Handle DartUtils::SetupServiceLoadPort() {
763 const char* packages_config, 715 // Wait for the service isolate to initialize the load port.
764 bool is_service_isolate, 716 Dart_Port load_port = Dart_ServiceWaitForLoadPort();
765 bool trace_loading, 717 if (load_port == ILLEGAL_PORT) {
766 Dart_Handle builtin_lib) { 718 return Dart_NewUnhandledExceptionError(
719 NewDartUnsupportedError("Service did not return load port."));
720 }
721 return Builtin::SetLoadPort(load_port);
722 }
723
724
725 Dart_Handle DartUtils::SetupPackageRoot(const char* package_root,
726 const char* packages_config) {
727 // Set up package root if specified.
728 if (package_root != NULL) {
729 ASSERT(packages_config == NULL);
730 Dart_Handle result = NewString(package_root);
731 RETURN_IF_ERROR(result);
732 const int kNumArgs = 1;
733 Dart_Handle dart_args[kNumArgs];
734 dart_args[0] = result;
735 result = Dart_Invoke(DartUtils::BuiltinLib(),
736 NewString("_setPackageRoot"),
737 kNumArgs,
738 dart_args);
739 RETURN_IF_ERROR(result);
740 } else if (packages_config != NULL) {
741 Dart_Handle result = NewString(packages_config);
742 RETURN_IF_ERROR(result);
743 const int kNumArgs = 1;
744 Dart_Handle dart_args[kNumArgs];
745 dart_args[0] = result;
746 result = Dart_Invoke(DartUtils::BuiltinLib(),
747 NewString("_loadPackagesMap"),
748 kNumArgs,
749 dart_args);
750 RETURN_IF_ERROR(result);
751 }
752 return Dart_True();
753 }
754
755
756 Dart_Handle DartUtils::PrepareForScriptLoading(bool is_service_isolate,
757 bool trace_loading) {
767 // First ensure all required libraries are available. 758 // First ensure all required libraries are available.
768 Dart_Handle url = NewString(kCoreLibURL); 759 Dart_Handle url = NewString(kCoreLibURL);
769 RETURN_IF_ERROR(url); 760 RETURN_IF_ERROR(url);
770 Dart_Handle core_lib = Dart_LookupLibrary(url); 761 Dart_Handle core_lib = Dart_LookupLibrary(url);
771 RETURN_IF_ERROR(core_lib); 762 RETURN_IF_ERROR(core_lib);
772 url = NewString(kAsyncLibURL); 763 url = NewString(kAsyncLibURL);
773 RETURN_IF_ERROR(url); 764 RETURN_IF_ERROR(url);
774 Dart_Handle async_lib = Dart_LookupLibrary(url); 765 Dart_Handle async_lib = Dart_LookupLibrary(url);
775 RETURN_IF_ERROR(async_lib); 766 RETURN_IF_ERROR(async_lib);
776 url = NewString(kIsolateLibURL); 767 url = NewString(kIsolateLibURL);
777 RETURN_IF_ERROR(url); 768 RETURN_IF_ERROR(url);
778 Dart_Handle isolate_lib = Dart_LookupLibrary(url); 769 Dart_Handle isolate_lib = Dart_LookupLibrary(url);
779 RETURN_IF_ERROR(isolate_lib); 770 RETURN_IF_ERROR(isolate_lib);
780 url = NewString(kInternalLibURL); 771 url = NewString(kInternalLibURL);
781 RETURN_IF_ERROR(url); 772 RETURN_IF_ERROR(url);
782 Dart_Handle internal_lib = Dart_LookupLibrary(url); 773 Dart_Handle internal_lib = Dart_LookupLibrary(url);
783 RETURN_IF_ERROR(internal_lib); 774 RETURN_IF_ERROR(internal_lib);
775 Dart_Handle builtin_lib =
776 Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary);
777 RETURN_IF_ERROR(builtin_lib);
784 Dart_Handle io_lib = Builtin::LoadAndCheckLibrary(Builtin::kIOLibrary); 778 Dart_Handle io_lib = Builtin::LoadAndCheckLibrary(Builtin::kIOLibrary);
785 RETURN_IF_ERROR(io_lib); 779 RETURN_IF_ERROR(io_lib);
786 780
781 // Setup the builtin library in a persistent handle attached the isolate
782 // specific data as we seem to lookup and use builtin lib a lot.
783 IsolateData* isolate_data =
784 reinterpret_cast<IsolateData*>(Dart_CurrentIsolateData());
785 ASSERT(isolate_data != NULL);
786 isolate_data->set_builtin_lib(builtin_lib);
787
787 // We need to ensure that all the scripts loaded so far are finalized 788 // We need to ensure that all the scripts loaded so far are finalized
788 // as we are about to invoke some Dart code below to setup closures. 789 // as we are about to invoke some Dart code below to setup closures.
789 Dart_Handle result = Dart_FinalizeLoading(false); 790 Dart_Handle result = Dart_FinalizeLoading(false);
790 RETURN_IF_ERROR(result); 791 RETURN_IF_ERROR(result);
791 792
792 result = PrepareBuiltinLibrary(builtin_lib, 793 result = PrepareBuiltinLibrary(builtin_lib,
793 internal_lib, 794 internal_lib,
794 is_service_isolate, 795 is_service_isolate,
795 trace_loading, 796 trace_loading);
796 package_root,
797 packages_config);
798 RETURN_IF_ERROR(result); 797 RETURN_IF_ERROR(result);
799 798
800 RETURN_IF_ERROR(PrepareAsyncLibrary(async_lib, isolate_lib)); 799 RETURN_IF_ERROR(PrepareAsyncLibrary(async_lib, isolate_lib));
801 RETURN_IF_ERROR(PrepareCoreLibrary( 800 RETURN_IF_ERROR(PrepareCoreLibrary(
802 core_lib, builtin_lib, is_service_isolate)); 801 core_lib, builtin_lib, is_service_isolate));
803 RETURN_IF_ERROR(PrepareIsolateLibrary(isolate_lib)); 802 RETURN_IF_ERROR(PrepareIsolateLibrary(isolate_lib));
804 RETURN_IF_ERROR(PrepareIOLibrary(io_lib)); 803 RETURN_IF_ERROR(PrepareIOLibrary(io_lib));
805 return result; 804 return result;
806 } 805 }
807 806
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after
1262 new CObjectString(CObject::NewString(os_error->message())); 1261 new CObjectString(CObject::NewString(os_error->message()));
1263 CObjectArray* result = new CObjectArray(CObject::NewArray(3)); 1262 CObjectArray* result = new CObjectArray(CObject::NewArray(3));
1264 result->SetAt(0, new CObjectInt32(CObject::NewInt32(kOSError))); 1263 result->SetAt(0, new CObjectInt32(CObject::NewInt32(kOSError)));
1265 result->SetAt(1, new CObjectInt32(CObject::NewInt32(os_error->code()))); 1264 result->SetAt(1, new CObjectInt32(CObject::NewInt32(os_error->code())));
1266 result->SetAt(2, error_message); 1265 result->SetAt(2, error_message);
1267 return result; 1266 return result;
1268 } 1267 }
1269 1268
1270 } // namespace bin 1269 } // namespace bin
1271 } // namespace dart 1270 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/bin/dartutils.h ('k') | runtime/bin/gen_snapshot.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698