OLD | NEW |
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 <stdlib.h> | 5 #include <stdlib.h> |
6 #include <string.h> | 6 #include <string.h> |
7 #include <stdio.h> | 7 #include <stdio.h> |
8 | 8 |
9 #include "include/dart_api.h" | 9 #include "include/dart_api.h" |
10 #include "include/dart_debugger_api.h" | 10 #include "include/dart_debugger_api.h" |
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 | 420 |
421 return Dart_SetField(runtime_options_class, native_name, dart_arguments); | 421 return Dart_SetField(runtime_options_class, native_name, dart_arguments); |
422 } | 422 } |
423 | 423 |
424 | 424 |
425 #define CHECK_RESULT(result) \ | 425 #define CHECK_RESULT(result) \ |
426 if (Dart_IsError(result)) { \ | 426 if (Dart_IsError(result)) { \ |
427 *error = strdup(Dart_GetError(result)); \ | 427 *error = strdup(Dart_GetError(result)); \ |
428 Dart_ExitScope(); \ | 428 Dart_ExitScope(); \ |
429 Dart_ShutdownIsolate(); \ | 429 Dart_ShutdownIsolate(); \ |
430 return false; \ | 430 return NULL; \ |
431 } \ | 431 } \ |
432 | 432 |
433 | 433 |
434 // Returns true on success, false on failure. | 434 // Returns true on success, false on failure. |
435 static bool CreateIsolateAndSetupHelper(const char* script_uri, | 435 static Dart_Isolate CreateIsolateAndSetupHelper(const char* script_uri, |
436 const char* main, | 436 const char* main, |
437 void* data, | 437 void* data, |
438 char** error) { | 438 char** error) { |
439 Dart_Isolate isolate = | 439 Dart_Isolate isolate = |
440 Dart_CreateIsolate(script_uri, main, snapshot_buffer, data, error); | 440 Dart_CreateIsolate(script_uri, main, snapshot_buffer, data, error); |
441 if (isolate == NULL) { | 441 if (isolate == NULL) { |
442 return false; | 442 return NULL; |
443 } | 443 } |
444 | 444 |
445 Dart_EnterScope(); | 445 Dart_EnterScope(); |
446 | 446 |
447 if (snapshot_buffer != NULL) { | 447 if (snapshot_buffer != NULL) { |
448 // Setup the native resolver as the snapshot does not carry it. | 448 // Setup the native resolver as the snapshot does not carry it. |
449 Builtin::SetNativeResolver(Builtin::kBuiltinLibrary); | 449 Builtin::SetNativeResolver(Builtin::kBuiltinLibrary); |
450 Builtin::SetNativeResolver(Builtin::kIOLibrary); | 450 Builtin::SetNativeResolver(Builtin::kIOLibrary); |
451 } | 451 } |
452 | 452 |
(...skipping 21 matching lines...) Expand all Loading... |
474 Dart_Handle library = DartUtils::LoadScript(script_uri, builtin_lib); | 474 Dart_Handle library = DartUtils::LoadScript(script_uri, builtin_lib); |
475 CHECK_RESULT(library); | 475 CHECK_RESULT(library); |
476 if (!Dart_IsLibrary(library)) { | 476 if (!Dart_IsLibrary(library)) { |
477 char errbuf[256]; | 477 char errbuf[256]; |
478 snprintf(errbuf, sizeof(errbuf), | 478 snprintf(errbuf, sizeof(errbuf), |
479 "Expected a library when loading script: %s", | 479 "Expected a library when loading script: %s", |
480 script_uri); | 480 script_uri); |
481 *error = strdup(errbuf); | 481 *error = strdup(errbuf); |
482 Dart_ExitScope(); | 482 Dart_ExitScope(); |
483 Dart_ShutdownIsolate(); | 483 Dart_ShutdownIsolate(); |
484 return false; | 484 return NULL; |
485 } | 485 } |
| 486 |
| 487 // Make the isolate runnable so that it is ready to handle messages. |
486 Dart_ExitScope(); | 488 Dart_ExitScope(); |
| 489 Dart_ExitIsolate(); |
| 490 bool retval = Dart_IsolateMakeRunnable(isolate); |
| 491 if (!retval) { |
| 492 *error = strdup("Invalid isolate state - Unable to make it runnable"); |
| 493 Dart_EnterIsolate(isolate); |
| 494 Dart_ShutdownIsolate(); |
| 495 return NULL; |
| 496 } |
| 497 |
487 VmStats::AddIsolate(reinterpret_cast<IsolateData*>(data), isolate); | 498 VmStats::AddIsolate(reinterpret_cast<IsolateData*>(data), isolate); |
488 return true; | 499 return isolate; |
489 } | 500 } |
490 | 501 |
491 | 502 |
492 static bool CreateIsolateAndSetup(const char* script_uri, | 503 static Dart_Isolate CreateIsolateAndSetup(const char* script_uri, |
493 const char* main, | 504 const char* main, |
494 void* data, char** error) { | 505 void* data, char** error) { |
495 return CreateIsolateAndSetupHelper(script_uri, | 506 return CreateIsolateAndSetupHelper(script_uri, |
496 main, | 507 main, |
497 new IsolateData(), | 508 new IsolateData(), |
498 error); | 509 error); |
499 } | 510 } |
500 | 511 |
501 | 512 |
502 static void PrintVersion() { | 513 static void PrintVersion() { |
503 Log::PrintErr("Dart VM version: %s\n", Dart_VersionString()); | 514 Log::PrintErr("Dart VM version: %s\n", Dart_VersionString()); |
504 } | 515 } |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
737 DebuggerConnectionHandler::StartHandler(debug_ip, debug_port); | 748 DebuggerConnectionHandler::StartHandler(debug_ip, debug_port); |
738 if (verbose_debug_seen) { | 749 if (verbose_debug_seen) { |
739 Log::Print("Debugger initialized\n"); | 750 Log::Print("Debugger initialized\n"); |
740 } | 751 } |
741 } | 752 } |
742 | 753 |
743 // Call CreateIsolateAndSetup which creates an isolate and loads up | 754 // Call CreateIsolateAndSetup which creates an isolate and loads up |
744 // the specified application script. | 755 // the specified application script. |
745 char* error = NULL; | 756 char* error = NULL; |
746 char* isolate_name = BuildIsolateName(script_name, "main"); | 757 char* isolate_name = BuildIsolateName(script_name, "main"); |
747 if (!CreateIsolateAndSetupHelper(script_name, | 758 Dart_Isolate isolate = CreateIsolateAndSetupHelper(script_name, |
748 "main", | 759 "main", |
749 new IsolateData(), | 760 new IsolateData(), |
750 &error)) { | 761 &error); |
| 762 if (isolate == NULL) { |
751 Log::PrintErr("%s\n", error); | 763 Log::PrintErr("%s\n", error); |
752 free(error); | 764 free(error); |
753 delete [] isolate_name; | 765 delete [] isolate_name; |
754 return kErrorExitCode; // Indicates we encountered an error. | 766 return kErrorExitCode; // Indicates we encountered an error. |
755 } | 767 } |
756 delete [] isolate_name; | 768 delete [] isolate_name; |
757 | 769 |
758 Dart_Isolate isolate = Dart_CurrentIsolate(); | 770 Dart_EnterIsolate(isolate); |
| 771 ASSERT(isolate == Dart_CurrentIsolate()); |
759 ASSERT(isolate != NULL); | 772 ASSERT(isolate != NULL); |
760 Dart_Handle result; | 773 Dart_Handle result; |
761 | 774 |
762 Dart_EnterScope(); | 775 Dart_EnterScope(); |
763 | 776 |
764 if (vmstats_port >= 0) { | 777 if (vmstats_port >= 0) { |
765 VmStats::Start(vmstats_port, vmstats_root); | 778 VmStats::Start(vmstats_port, vmstats_root); |
766 } | 779 } |
767 | 780 |
768 if (generate_script_snapshot) { | 781 if (generate_script_snapshot) { |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
841 Dart_ShutdownIsolate(); | 854 Dart_ShutdownIsolate(); |
842 // Terminate process exit-code handler. | 855 // Terminate process exit-code handler. |
843 Process::TerminateExitCodeHandler(); | 856 Process::TerminateExitCodeHandler(); |
844 // Free copied argument strings if converted. | 857 // Free copied argument strings if converted. |
845 if (argv_converted) { | 858 if (argv_converted) { |
846 for (int i = 0; i < argc; i++) free(argv[i]); | 859 for (int i = 0; i < argc; i++) free(argv[i]); |
847 } | 860 } |
848 | 861 |
849 return Process::GlobalExitCode(); | 862 return Process::GlobalExitCode(); |
850 } | 863 } |
OLD | NEW |