| 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 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 415 | 415 |
| 416 return Dart_SetField(runtime_options_class, native_name, dart_arguments); | 416 return Dart_SetField(runtime_options_class, native_name, dart_arguments); |
| 417 } | 417 } |
| 418 | 418 |
| 419 | 419 |
| 420 #define CHECK_RESULT(result) \ | 420 #define CHECK_RESULT(result) \ |
| 421 if (Dart_IsError(result)) { \ | 421 if (Dart_IsError(result)) { \ |
| 422 *error = strdup(Dart_GetError(result)); \ | 422 *error = strdup(Dart_GetError(result)); \ |
| 423 Dart_ExitScope(); \ | 423 Dart_ExitScope(); \ |
| 424 Dart_ShutdownIsolate(); \ | 424 Dart_ShutdownIsolate(); \ |
| 425 return false; \ | 425 return NULL; \ |
| 426 } \ | 426 } \ |
| 427 | 427 |
| 428 | 428 |
| 429 // Returns true on success, false on failure. | 429 // Returns true on success, false on failure. |
| 430 static bool CreateIsolateAndSetupHelper(const char* script_uri, | 430 static Dart_Isolate CreateIsolateAndSetupHelper(const char* script_uri, |
| 431 const char* main, | 431 const char* main, |
| 432 void* data, | 432 void* data, |
| 433 char** error) { | 433 char** error) { |
| 434 Dart_Isolate isolate = | 434 Dart_Isolate isolate = |
| 435 Dart_CreateIsolate(script_uri, main, snapshot_buffer, data, error); | 435 Dart_CreateIsolate(script_uri, main, snapshot_buffer, data, error); |
| 436 if (isolate == NULL) { | 436 if (isolate == NULL) { |
| 437 return false; | 437 return NULL; |
| 438 } | 438 } |
| 439 | 439 |
| 440 Dart_EnterScope(); | 440 Dart_EnterScope(); |
| 441 | 441 |
| 442 if (snapshot_buffer != NULL) { | 442 if (snapshot_buffer != NULL) { |
| 443 // Setup the native resolver as the snapshot does not carry it. | 443 // Setup the native resolver as the snapshot does not carry it. |
| 444 Builtin::SetNativeResolver(Builtin::kBuiltinLibrary); | 444 Builtin::SetNativeResolver(Builtin::kBuiltinLibrary); |
| 445 Builtin::SetNativeResolver(Builtin::kIOLibrary); | 445 Builtin::SetNativeResolver(Builtin::kIOLibrary); |
| 446 } | 446 } |
| 447 | 447 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 469 Dart_Handle library = DartUtils::LoadScript(script_uri, builtin_lib); | 469 Dart_Handle library = DartUtils::LoadScript(script_uri, builtin_lib); |
| 470 CHECK_RESULT(library); | 470 CHECK_RESULT(library); |
| 471 if (!Dart_IsLibrary(library)) { | 471 if (!Dart_IsLibrary(library)) { |
| 472 char errbuf[256]; | 472 char errbuf[256]; |
| 473 snprintf(errbuf, sizeof(errbuf), | 473 snprintf(errbuf, sizeof(errbuf), |
| 474 "Expected a library when loading script: %s", | 474 "Expected a library when loading script: %s", |
| 475 script_uri); | 475 script_uri); |
| 476 *error = strdup(errbuf); | 476 *error = strdup(errbuf); |
| 477 Dart_ExitScope(); | 477 Dart_ExitScope(); |
| 478 Dart_ShutdownIsolate(); | 478 Dart_ShutdownIsolate(); |
| 479 return false; | 479 return NULL; |
| 480 } | 480 } |
| 481 |
| 482 // Make the isolate runnable so that it is ready to handle messages. |
| 481 Dart_ExitScope(); | 483 Dart_ExitScope(); |
| 484 Dart_ExitIsolate(); |
| 485 bool retval = Dart_IsolateMakeRunnable(isolate); |
| 486 if (!retval) { |
| 487 *error = strdup("Invalid isolate state - Unable to make it runnable"); |
| 488 Dart_EnterIsolate(isolate); |
| 489 Dart_ShutdownIsolate(); |
| 490 return NULL; |
| 491 } |
| 492 |
| 482 VmStats::AddIsolate(reinterpret_cast<IsolateData*>(data), isolate); | 493 VmStats::AddIsolate(reinterpret_cast<IsolateData*>(data), isolate); |
| 483 return true; | 494 return isolate; |
| 484 } | 495 } |
| 485 | 496 |
| 486 | 497 |
| 487 static bool CreateIsolateAndSetup(const char* script_uri, | 498 static Dart_Isolate CreateIsolateAndSetup(const char* script_uri, |
| 488 const char* main, | 499 const char* main, |
| 489 void* data, char** error) { | 500 void* data, char** error) { |
| 490 return CreateIsolateAndSetupHelper(script_uri, | 501 return CreateIsolateAndSetupHelper(script_uri, |
| 491 main, | 502 main, |
| 492 new IsolateData(), | 503 new IsolateData(), |
| 493 error); | 504 error); |
| 494 } | 505 } |
| 495 | 506 |
| 496 | 507 |
| 497 static void PrintVersion() { | 508 static void PrintVersion() { |
| 498 Log::PrintErr("Dart VM version: %s\n", Dart_VersionString()); | 509 Log::PrintErr("Dart VM version: %s\n", Dart_VersionString()); |
| 499 } | 510 } |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 727 // Start the debugger wire protocol handler if necessary. | 738 // Start the debugger wire protocol handler if necessary. |
| 728 if (start_debugger) { | 739 if (start_debugger) { |
| 729 ASSERT(debug_port != 0); | 740 ASSERT(debug_port != 0); |
| 730 DebuggerConnectionHandler::StartHandler(debug_ip, debug_port); | 741 DebuggerConnectionHandler::StartHandler(debug_ip, debug_port); |
| 731 } | 742 } |
| 732 | 743 |
| 733 // Call CreateIsolateAndSetup which creates an isolate and loads up | 744 // Call CreateIsolateAndSetup which creates an isolate and loads up |
| 734 // the specified application script. | 745 // the specified application script. |
| 735 char* error = NULL; | 746 char* error = NULL; |
| 736 char* isolate_name = BuildIsolateName(script_name, "main"); | 747 char* isolate_name = BuildIsolateName(script_name, "main"); |
| 737 if (!CreateIsolateAndSetupHelper(script_name, | 748 Dart_Isolate isolate = CreateIsolateAndSetupHelper(script_name, |
| 738 "main", | 749 "main", |
| 739 new IsolateData(), | 750 new IsolateData(), |
| 740 &error)) { | 751 &error); |
| 752 if (isolate == NULL) { |
| 741 Log::PrintErr("%s\n", error); | 753 Log::PrintErr("%s\n", error); |
| 742 free(error); | 754 free(error); |
| 743 delete [] isolate_name; | 755 delete [] isolate_name; |
| 744 return kErrorExitCode; // Indicates we encountered an error. | 756 return kErrorExitCode; // Indicates we encountered an error. |
| 745 } | 757 } |
| 746 delete [] isolate_name; | 758 delete [] isolate_name; |
| 747 | 759 |
| 748 Dart_Isolate isolate = Dart_CurrentIsolate(); | 760 Dart_EnterIsolate(isolate); |
| 761 ASSERT(isolate == Dart_CurrentIsolate()); |
| 749 ASSERT(isolate != NULL); | 762 ASSERT(isolate != NULL); |
| 750 Dart_Handle result; | 763 Dart_Handle result; |
| 751 | 764 |
| 752 Dart_EnterScope(); | 765 Dart_EnterScope(); |
| 753 | 766 |
| 754 if (vmstats_port >= 0) { | 767 if (vmstats_port >= 0) { |
| 755 VmStats::Start(vmstats_port, vmstats_root); | 768 VmStats::Start(vmstats_port, vmstats_root); |
| 756 } | 769 } |
| 757 | 770 |
| 758 if (generate_script_snapshot) { | 771 if (generate_script_snapshot) { |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 831 Dart_ShutdownIsolate(); | 844 Dart_ShutdownIsolate(); |
| 832 // Terminate process exit-code handler. | 845 // Terminate process exit-code handler. |
| 833 Process::TerminateExitCodeHandler(); | 846 Process::TerminateExitCodeHandler(); |
| 834 // Free copied argument strings if converted. | 847 // Free copied argument strings if converted. |
| 835 if (argv_converted) { | 848 if (argv_converted) { |
| 836 for (int i = 0; i < argc; i++) free(argv[i]); | 849 for (int i = 0; i < argc; i++) free(argv[i]); |
| 837 } | 850 } |
| 838 | 851 |
| 839 return Process::GlobalExitCode(); | 852 return Process::GlobalExitCode(); |
| 840 } | 853 } |
| OLD | NEW |