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

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

Issue 1232593003: - Implement .packages specification. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Address review comments. Created 5 years, 4 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
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 void DartUtils::WriteMagicNumber(File* file) { 475 void DartUtils::WriteMagicNumber(File* file) {
476 // Write a magic number and version information into the snapshot file. 476 // Write a magic number and version information into the snapshot file.
477 bool bytes_written = file->WriteFully(magic_number, sizeof(magic_number)); 477 bool bytes_written = file->WriteFully(magic_number, sizeof(magic_number));
478 ASSERT(bytes_written); 478 ASSERT(bytes_written);
479 } 479 }
480 480
481 481
482 Dart_Handle DartUtils::LoadScript(const char* script_uri, 482 Dart_Handle DartUtils::LoadScript(const char* script_uri,
483 Dart_Handle builtin_lib) { 483 Dart_Handle builtin_lib) {
484 Dart_Handle uri = Dart_NewStringFromCString(script_uri); 484 Dart_Handle uri = Dart_NewStringFromCString(script_uri);
485
486 Dart_Port load_port = Dart_ServiceWaitForLoadPort();
487 if (load_port == ILLEGAL_PORT) {
488 return NewDartUnsupportedError("Service did not return load port.");
489 }
490 Builtin::SetLoadPort(load_port);
491 IsolateData* isolate_data = 485 IsolateData* isolate_data =
492 reinterpret_cast<IsolateData*>(Dart_CurrentIsolateData()); 486 reinterpret_cast<IsolateData*>(Dart_CurrentIsolateData());
493 Dart_TimelineAsyncBegin("LoadScript", &(isolate_data->load_async_id)); 487 Dart_TimelineAsyncBegin("LoadScript", &(isolate_data->load_async_id));
494 return LoadDataAsync_Invoke(Dart_Null(), uri, Dart_Null(), builtin_lib); 488 return LoadDataAsync_Invoke(Dart_Null(), uri, Dart_Null(), builtin_lib);
495 } 489 }
496 490
497 491
498 // Callback function, gets called from asynchronous script and library 492 // Callback function, gets called from asynchronous script and library
499 // reading code when there is an i/o error. 493 // reading code when there is an i/o error.
500 void FUNCTION_NAME(Builtin_AsyncLoadError)(Dart_NativeArguments args) { 494 void FUNCTION_NAME(Builtin_AsyncLoadError)(Dart_NativeArguments args) {
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 if (current != NULL) { 619 if (current != NULL) {
626 Dart_SetReturnValue(args, DartUtils::NewString(current)); 620 Dart_SetReturnValue(args, DartUtils::NewString(current));
627 free(current); 621 free(current);
628 } else { 622 } else {
629 Dart_Handle err = DartUtils::NewError("Failed to get current directory."); 623 Dart_Handle err = DartUtils::NewError("Failed to get current directory.");
630 Dart_PropagateError(err); 624 Dart_PropagateError(err);
631 } 625 }
632 } 626 }
633 627
634 628
635 void DartUtils::PrepareBuiltinLibrary(Dart_Handle builtin_lib, 629 Dart_Handle DartUtils::PrepareBuiltinLibrary(Dart_Handle builtin_lib,
636 Dart_Handle internal_lib, 630 Dart_Handle internal_lib,
637 bool is_service_isolate, 631 bool is_service_isolate,
638 bool trace_loading, 632 bool trace_loading,
639 const char* package_root) { 633 const char* package_root,
634 const char* packages_file) {
640 // Setup the internal library's 'internalPrint' function. 635 // Setup the internal library's 'internalPrint' function.
641 Dart_Handle print = Dart_Invoke( 636 Dart_Handle print = Dart_Invoke(
642 builtin_lib, NewString("_getPrintClosure"), 0, NULL); 637 builtin_lib, NewString("_getPrintClosure"), 0, NULL);
643 DART_CHECK_VALID(print); 638 DART_CHECK_VALID(print);
644 Dart_Handle result = 639 Dart_Handle result =
645 Dart_SetField(internal_lib, NewString("_printClosure"), print); 640 Dart_SetField(internal_lib, NewString("_printClosure"), print);
646 DART_CHECK_VALID(result); 641 DART_CHECK_VALID(result);
647 642
648 if (!is_service_isolate) { 643 if (!is_service_isolate) {
649 if (IsWindowsHost()) { 644 if (IsWindowsHost()) {
650 result = Dart_SetField(builtin_lib, NewString("_isWindows"), Dart_True()); 645 result = Dart_SetField(builtin_lib, NewString("_isWindows"), Dart_True());
651 DART_CHECK_VALID(result); 646 DART_CHECK_VALID(result);
652 } 647 }
653 if (trace_loading) { 648 if (trace_loading) {
654 result = Dart_SetField(builtin_lib, 649 result = Dart_SetField(builtin_lib,
655 NewString("_traceLoading"), Dart_True()); 650 NewString("_traceLoading"), Dart_True());
656 DART_CHECK_VALID(result); 651 DART_CHECK_VALID(result);
657 } 652 }
658 }
659
660 if (!is_service_isolate) {
661 // Set current working directory. 653 // Set current working directory.
662 result = SetWorkingDirectory(builtin_lib); 654 result = SetWorkingDirectory(builtin_lib);
663 DART_CHECK_VALID(result); 655 DART_CHECK_VALID(result);
656 // Wait for the service isolate to initialize the load port.
657 Dart_Port load_port = Dart_ServiceWaitForLoadPort();
658 if (load_port == ILLEGAL_PORT) {
659 return NewDartUnsupportedError("Service did not return load port.");
660 }
661 Builtin::SetLoadPort(load_port);
664 } 662 }
665 663
666 // Set up package root if specified. 664 // Set up package root if specified.
667 if (package_root != NULL) { 665 if (package_root != NULL) {
666 ASSERT(packages_file == NULL);
668 result = NewString(package_root); 667 result = NewString(package_root);
669 DART_CHECK_VALID(result); 668 DART_CHECK_VALID(result);
670 const int kNumArgs = 1; 669 const int kNumArgs = 1;
671 Dart_Handle dart_args[kNumArgs]; 670 Dart_Handle dart_args[kNumArgs];
672 dart_args[0] = result; 671 dart_args[0] = result;
673 result = Dart_Invoke(builtin_lib, 672 result = Dart_Invoke(builtin_lib,
674 NewString("_setPackageRoot"), 673 NewString("_setPackageRoot"),
675 kNumArgs, 674 kNumArgs,
676 dart_args); 675 dart_args);
677 DART_CHECK_VALID(result); 676 DART_CHECK_VALID(result);
677 } else if (packages_file != NULL) {
678 result = NewString(packages_file);
679 DART_CHECK_VALID(result);
680 const int kNumArgs = 1;
681 Dart_Handle dart_args[kNumArgs];
682 dart_args[0] = result;
683 result = Dart_Invoke(builtin_lib,
684 NewString("_loadPackagesMap"),
685 kNumArgs,
686 dart_args);
687 DART_CHECK_VALID(result);
678 } 688 }
689 return Dart_True();
679 } 690 }
680 691
681 692
682 void DartUtils::PrepareCoreLibrary(Dart_Handle core_lib, 693 void DartUtils::PrepareCoreLibrary(Dart_Handle core_lib,
683 Dart_Handle builtin_lib, 694 Dart_Handle builtin_lib,
684 bool is_service_isolate) { 695 bool is_service_isolate) {
685 if (!is_service_isolate) { 696 if (!is_service_isolate) {
686 // Setup the 'Uri.base' getter in dart:core. 697 // Setup the 'Uri.base' getter in dart:core.
687 Dart_Handle uri_base = Dart_Invoke( 698 Dart_Handle uri_base = Dart_Invoke(
688 builtin_lib, NewString("_getUriBaseClosure"), 0, NULL); 699 builtin_lib, NewString("_getUriBaseClosure"), 0, NULL);
(...skipping 22 matching lines...) Expand all
711 DART_CHECK_VALID(Dart_Invoke(io_lib, NewString("_setupHooks"), 0, NULL)); 722 DART_CHECK_VALID(Dart_Invoke(io_lib, NewString("_setupHooks"), 0, NULL));
712 } 723 }
713 724
714 725
715 void DartUtils::PrepareIsolateLibrary(Dart_Handle isolate_lib) { 726 void DartUtils::PrepareIsolateLibrary(Dart_Handle isolate_lib) {
716 DART_CHECK_VALID(Dart_Invoke(isolate_lib, NewString("_setupHooks"), 0, NULL)); 727 DART_CHECK_VALID(Dart_Invoke(isolate_lib, NewString("_setupHooks"), 0, NULL));
717 } 728 }
718 729
719 730
720 Dart_Handle DartUtils::PrepareForScriptLoading(const char* package_root, 731 Dart_Handle DartUtils::PrepareForScriptLoading(const char* package_root,
732 const char* packages_file,
721 bool is_service_isolate, 733 bool is_service_isolate,
722 bool trace_loading, 734 bool trace_loading,
723 Dart_Handle builtin_lib) { 735 Dart_Handle builtin_lib) {
724 // First ensure all required libraries are available. 736 // First ensure all required libraries are available.
725 Dart_Handle url = NewString(kCoreLibURL); 737 Dart_Handle url = NewString(kCoreLibURL);
726 DART_CHECK_VALID(url); 738 DART_CHECK_VALID(url);
727 Dart_Handle core_lib = Dart_LookupLibrary(url); 739 Dart_Handle core_lib = Dart_LookupLibrary(url);
728 DART_CHECK_VALID(core_lib); 740 DART_CHECK_VALID(core_lib);
729 url = NewString(kAsyncLibURL); 741 url = NewString(kAsyncLibURL);
730 DART_CHECK_VALID(url); 742 DART_CHECK_VALID(url);
731 Dart_Handle async_lib = Dart_LookupLibrary(url); 743 Dart_Handle async_lib = Dart_LookupLibrary(url);
732 DART_CHECK_VALID(async_lib); 744 DART_CHECK_VALID(async_lib);
733 url = NewString(kIsolateLibURL); 745 url = NewString(kIsolateLibURL);
734 DART_CHECK_VALID(url); 746 DART_CHECK_VALID(url);
735 Dart_Handle isolate_lib = Dart_LookupLibrary(url); 747 Dart_Handle isolate_lib = Dart_LookupLibrary(url);
736 DART_CHECK_VALID(isolate_lib); 748 DART_CHECK_VALID(isolate_lib);
737 url = NewString(kInternalLibURL); 749 url = NewString(kInternalLibURL);
738 DART_CHECK_VALID(url); 750 DART_CHECK_VALID(url);
739 Dart_Handle internal_lib = Dart_LookupLibrary(url); 751 Dart_Handle internal_lib = Dart_LookupLibrary(url);
740 DART_CHECK_VALID(internal_lib); 752 DART_CHECK_VALID(internal_lib);
741 Dart_Handle io_lib = Builtin::LoadAndCheckLibrary(Builtin::kIOLibrary); 753 Dart_Handle io_lib = Builtin::LoadAndCheckLibrary(Builtin::kIOLibrary);
742 DART_CHECK_VALID(io_lib); 754 DART_CHECK_VALID(io_lib);
743 755
744 // We need to ensure that all the scripts loaded so far are finalized 756 // We need to ensure that all the scripts loaded so far are finalized
745 // as we are about to invoke some Dart code below to setup closures. 757 // as we are about to invoke some Dart code below to setup closures.
746 Dart_Handle result = Dart_FinalizeLoading(false); 758 Dart_Handle result = Dart_FinalizeLoading(false);
747 DART_CHECK_VALID(result); 759 DART_CHECK_VALID(result);
748 760
749 PrepareBuiltinLibrary(builtin_lib, 761 result = PrepareBuiltinLibrary(builtin_lib,
750 internal_lib, 762 internal_lib,
751 is_service_isolate, 763 is_service_isolate,
752 trace_loading, 764 trace_loading,
753 package_root); 765 package_root,
766 packages_file);
767 DART_CHECK_VALID(result);
768
754 PrepareAsyncLibrary(async_lib, isolate_lib); 769 PrepareAsyncLibrary(async_lib, isolate_lib);
755 PrepareCoreLibrary(core_lib, builtin_lib, is_service_isolate); 770 PrepareCoreLibrary(core_lib, builtin_lib, is_service_isolate);
756 PrepareIsolateLibrary(isolate_lib); 771 PrepareIsolateLibrary(isolate_lib);
757 PrepareIOLibrary(io_lib); 772 PrepareIOLibrary(io_lib);
758 return result; 773 return result;
759 } 774 }
760 775
761 776
762 void DartUtils::SetupIOLibrary(const char* script_uri) { 777 void DartUtils::SetupIOLibrary(const char* script_uri) {
763 Dart_Handle io_lib_url = NewString(kIOLibURL); 778 Dart_Handle io_lib_url = NewString(kIOLibURL);
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after
1214 new CObjectString(CObject::NewString(os_error->message())); 1229 new CObjectString(CObject::NewString(os_error->message()));
1215 CObjectArray* result = new CObjectArray(CObject::NewArray(3)); 1230 CObjectArray* result = new CObjectArray(CObject::NewArray(3));
1216 result->SetAt(0, new CObjectInt32(CObject::NewInt32(kOSError))); 1231 result->SetAt(0, new CObjectInt32(CObject::NewInt32(kOSError)));
1217 result->SetAt(1, new CObjectInt32(CObject::NewInt32(os_error->code()))); 1232 result->SetAt(1, new CObjectInt32(CObject::NewInt32(os_error->code())));
1218 result->SetAt(2, error_message); 1233 result->SetAt(2, error_message);
1219 return result; 1234 return result;
1220 } 1235 }
1221 1236
1222 } // namespace bin 1237 } // namespace bin
1223 } // namespace dart 1238 } // 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