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

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

Issue 2715463003: Add option to gen_snapshot for creating a Makefile describing a snapshot's dependencies. (Closed)
Patch Set: Created 3 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
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 5
6 #include "bin/loader.h" 6 #include "bin/loader.h"
7 7
8 #include "bin/builtin.h" 8 #include "bin/builtin.h"
9 #include "bin/dartutils.h" 9 #include "bin/dartutils.h"
10 #include "bin/extensions.h" 10 #include "bin/extensions.h"
11 #include "bin/file.h" 11 #include "bin/file.h"
12 #include "bin/lockers.h" 12 #include "bin/lockers.h"
13 #include "bin/utils.h" 13 #include "bin/utils.h"
14 #include "include/dart_tools_api.h" 14 #include "include/dart_tools_api.h"
15 15
16 namespace dart { 16 namespace dart {
17 namespace bin { 17 namespace bin {
18 18
19 // Development flag. 19 // Development flag.
20 static bool trace_loader = false; 20 static bool trace_loader = false;
21 // Keep in sync with loader.dart. 21 // Keep in sync with loader.dart.
22 static const intptr_t _Dart_kImportExtension = 9; 22 static const intptr_t _Dart_kImportExtension = 9;
23 static const intptr_t _Dart_kResolveAsFilePath = 10;
23 24
24 Loader::Loader(IsolateData* isolate_data) 25 Loader::Loader(IsolateData* isolate_data)
25 : port_(ILLEGAL_PORT), 26 : port_(ILLEGAL_PORT),
26 isolate_data_(isolate_data), 27 isolate_data_(isolate_data),
27 error_(Dart_Null()), 28 error_(Dart_Null()),
28 monitor_(NULL), 29 monitor_(NULL),
29 pending_operations_(0), 30 pending_operations_(0),
30 results_(NULL), 31 results_(NULL),
31 results_length_(0), 32 results_length_(0),
32 results_capacity_(0), 33 results_capacity_(0),
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 // Remember the error if we encountered one. 418 // Remember the error if we encountered one.
418 loader->error_ = dart_result; 419 loader->error_ = dart_result;
419 return false; 420 return false;
420 } 421 }
421 } 422 }
422 423
423 return true; 424 return true;
424 } 425 }
425 426
426 427
427 bool Loader::ProcessUrlLoadResultLocked(Loader* loader, 428 bool Loader::ProcessPayloadResultLocked(Loader* loader,
428 Loader::IOResult* result) { 429 Loader::IOResult* result) {
429 // A negative result tag indicates a loading error occurred in the service 430 // A negative result tag indicates a loading error occurred in the service
430 // isolate. The payload is a C string of the error message. 431 // isolate. The payload is a C string of the error message.
431 if (result->tag < 0) { 432 if (result->tag < 0) {
432 Dart_Handle error = 433 Dart_Handle error =
433 Dart_NewStringFromUTF8(result->payload, result->payload_length); 434 Dart_NewStringFromUTF8(result->payload, result->payload_length);
434 loader->error_ = Dart_NewUnhandledExceptionError(error); 435 loader->error_ = Dart_NewUnhandledExceptionError(error);
435 return false; 436 return false;
436 } 437 }
437 loader->payload_length_ = result->payload_length; 438 loader->payload_length_ = result->payload_length;
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 loader = new Loader(isolate_data); 531 loader = new Loader(isolate_data);
531 loader->Init(isolate_data->package_root, isolate_data->packages_file, 532 loader->Init(isolate_data->package_root, isolate_data->packages_file,
532 DartUtils::original_working_directory, NULL); 533 DartUtils::original_working_directory, NULL);
533 ASSERT(loader != NULL); 534 ASSERT(loader != NULL);
534 ASSERT(isolate_data->HasLoader()); 535 ASSERT(isolate_data->HasLoader());
535 536
536 // Now send a load request to the service isolate. 537 // Now send a load request to the service isolate.
537 loader->SendRequest(Dart_kScriptTag, url, Dart_Null()); 538 loader->SendRequest(Dart_kScriptTag, url, Dart_Null());
538 539
539 // Wait for a reply to the load request. 540 // Wait for a reply to the load request.
540 loader->BlockUntilComplete(ProcessUrlLoadResultLocked); 541 loader->BlockUntilComplete(ProcessPayloadResultLocked);
541 542
542 // Copy fields from the loader before deleting it. 543 // Copy fields from the loader before deleting it.
543 // The payload array itself which was malloced above is freed by 544 // The payload array itself which was malloced above is freed by
545 // the caller of LoadUrlContents.
546 Dart_Handle error = loader->error();
547 *payload = loader->payload_;
548 *payload_length = loader->payload_length_;
549
550 // Destroy the loader. The destructor does a bunch of leg work.
551 delete loader;
552
553 // An error occurred during loading.
554 if (!Dart_IsNull(error)) {
555 return error;
556 }
557 return Dart_Null();
558 }
559
560
561 Dart_Handle Loader::ResolveAsFilePath(Dart_Handle url,
562 uint8_t** payload,
563 intptr_t* payload_length) {
564 IsolateData* isolate_data =
565 reinterpret_cast<IsolateData*>(Dart_CurrentIsolateData());
566 ASSERT(isolate_data != NULL);
567 ASSERT(!isolate_data->HasLoader());
568 Loader* loader = NULL;
569
570 // Setup the loader. The constructor does a bunch of leg work.
571 loader = new Loader(isolate_data);
572 loader->Init(isolate_data->package_root, isolate_data->packages_file,
573 DartUtils::original_working_directory, NULL);
574 ASSERT(loader != NULL);
575 ASSERT(isolate_data->HasLoader());
576
577 // Now send a load request to the service isolate.
578 // TODO(28863) The use of tags that aren't declared in dart_api.h's enum
579 // is undefined behavior.
580 Dart_LibraryTag tag = static_cast<Dart_LibraryTag>(_Dart_kResolveAsFilePath);
581 loader->SendRequest(tag, url, Dart_Null());
582
583 // Wait for a reply to the load request.
584 loader->BlockUntilComplete(ProcessPayloadResultLocked);
585
586 // Copy fields from the loader before deleting it.
587 // The payload array itself which was malloced above is freed by
544 // the caller of LoadUrlContents. 588 // the caller of LoadUrlContents.
545 Dart_Handle error = loader->error(); 589 Dart_Handle error = loader->error();
546 *payload = loader->payload_; 590 *payload = loader->payload_;
547 *payload_length = loader->payload_length_; 591 *payload_length = loader->payload_length_;
548 592
549 // Destroy the loader. The destructor does a bunch of leg work. 593 // Destroy the loader. The destructor does a bunch of leg work.
550 delete loader; 594 delete loader;
551 595
552 // An error occurred during loading. 596 // An error occurred during loading.
553 if (!Dart_IsNull(error)) { 597 if (!Dart_IsNull(error)) {
554 return error; 598 return error;
555 } 599 }
556 return Dart_Null(); 600 return Dart_Null();
siva 2017/02/22 23:37:16 It looks like the core of this function can be fac
rmacnak 2017/02/23 19:00:17 Done.
557 } 601 }
558 602
559 603
560 Dart_Handle Loader::LibraryTagHandler(Dart_LibraryTag tag, 604 Dart_Handle Loader::LibraryTagHandler(Dart_LibraryTag tag,
561 Dart_Handle library, 605 Dart_Handle library,
562 Dart_Handle url) { 606 Dart_Handle url) {
563 if (tag == Dart_kCanonicalizeUrl) { 607 if (tag == Dart_kCanonicalizeUrl) {
564 Dart_Handle library_url = Dart_LibraryUrl(library); 608 Dart_Handle library_url = Dart_LibraryUrl(library);
565 if (Dart_IsError(library_url)) { 609 if (Dart_IsError(library_url)) {
566 return library_url; 610 return library_url;
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
821 MutexLocker ml(loader_infos_lock_); 865 MutexLocker ml(loader_infos_lock_);
822 Loader* loader = LoaderForLocked(dest_port_id); 866 Loader* loader = LoaderForLocked(dest_port_id);
823 if (loader == NULL) { 867 if (loader == NULL) {
824 return; 868 return;
825 } 869 }
826 loader->QueueMessage(message); 870 loader->QueueMessage(message);
827 } 871 }
828 872
829 } // namespace bin 873 } // namespace bin
830 } // namespace dart 874 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698