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

Unified Diff: runtime/bin/main.cc

Issue 867113003: Revert r43217, r43215, r43208, r43207, and r43202. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/bin/io_impl_sources.gypi ('k') | runtime/bin/platform.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/main.cc
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index 586491488dd298e1c3da2f80c625b7e8e92f7d69..ed4726300561835410a8fc9a814a0b11b6516024 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -589,19 +589,6 @@ static Dart_Isolate CreateIsolateAndSetupHelper(const char* script_uri,
result = DartUtils::PrepareForScriptLoading(package_root, builtin_lib);
CHECK_RESULT(result);
-
- if (Dart_IsServiceIsolate(isolate)) {
- // If this is the service isolate, load embedder specific bits and return.
- if (!VmService::Setup(vm_service_server_ip, vm_service_server_port)) {
- *error = strdup(VmService::GetErrorMessage());
- return NULL;
- }
- Dart_ExitScope();
- Dart_ExitIsolate();
- return isolate;
- }
-
- // Load the script.
result = DartUtils::LoadScript(script_uri, builtin_lib);
CHECK_RESULT(result);
@@ -610,8 +597,20 @@ static Dart_Isolate CreateIsolateAndSetupHelper(const char* script_uri,
CHECK_RESULT(result);
Platform::SetPackageRoot(package_root);
-
- DartUtils::SetupIOLibrary(script_uri);
+ Dart_Handle io_lib_url = DartUtils::NewString(DartUtils::kIOLibURL);
+ CHECK_RESULT(io_lib_url);
+ Dart_Handle io_lib = Dart_LookupLibrary(io_lib_url);
+ CHECK_RESULT(io_lib);
+ Dart_Handle platform_type = DartUtils::GetDartType(DartUtils::kIOLibURL,
+ "_Platform");
+ CHECK_RESULT(platform_type);
+ Dart_Handle script_name = DartUtils::NewString("_nativeScript");
+ CHECK_RESULT(script_name);
+ Dart_Handle dart_script = DartUtils::NewString(script_uri);
+ CHECK_RESULT(dart_script);
+ Dart_Handle set_script_name =
+ Dart_SetField(platform_type, script_name, dart_script);
+ CHECK_RESULT(set_script_name);
// Make the isolate runnable so that it is ready to handle messages.
Dart_ExitScope();
@@ -647,11 +646,7 @@ static Dart_Isolate CreateIsolateAndSetup(const char* script_uri,
}
}
if (package_root == NULL) {
- if (parent_isolate_data != NULL) {
- package_root = parent_isolate_data->package_root;
- } else {
- package_root = ".";
- }
+ package_root = parent_isolate_data->package_root;
}
return CreateIsolateAndSetupHelper(script_uri,
main,
@@ -661,6 +656,50 @@ static Dart_Isolate CreateIsolateAndSetup(const char* script_uri,
}
+#define CHECK_RESULT(result) \
+ if (Dart_IsError(result)) { \
+ *error = strdup(Dart_GetError(result)); \
+ Dart_ExitScope(); \
+ Dart_ShutdownIsolate(); \
+ return NULL; \
+ } \
+
+static Dart_Isolate CreateServiceIsolate(void* data, char** error) {
+ const char* script_uri = DartUtils::kVMServiceLibURL;
+ IsolateData* isolate_data = new IsolateData(script_uri, NULL);
+ Dart_Isolate isolate =
+ Dart_CreateIsolate(script_uri, "main", snapshot_buffer, isolate_data,
+ error);
+ if (isolate == NULL) {
+ return NULL;
+ }
+ Dart_EnterScope();
+ if (snapshot_buffer != NULL) {
+ // Setup the native resolver as the snapshot does not carry it.
+ Builtin::SetNativeResolver(Builtin::kBuiltinLibrary);
+ Builtin::SetNativeResolver(Builtin::kIOLibrary);
+ }
+ // Set up the library tag handler for this isolate.
+ Dart_Handle result = Dart_SetLibraryTagHandler(DartUtils::LibraryTagHandler);
+ CHECK_RESULT(result);
+ result = Dart_SetEnvironmentCallback(EnvironmentCallback);
+ CHECK_RESULT(result);
+ // Prepare builtin and its dependent libraries for use to resolve URIs.
+ Dart_Handle builtin_lib =
+ Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary);
+ CHECK_RESULT(builtin_lib);
+ // Prepare for script loading by setting up the 'print' and 'timer'
+ // closures and setting up 'package root' for URI resolution.
+ result = DartUtils::PrepareForScriptLoading(NULL, builtin_lib);
+ CHECK_RESULT(result);
+
+ Dart_ExitScope();
+ Dart_ExitIsolate();
+ return isolate;
+}
+
+#undef CHECK_RESULT
+
static void PrintVersion() {
Log::PrintErr("Dart VM version: %s\n", Dart_VersionString());
}
@@ -941,22 +980,21 @@ void main(int argc, char** argv) {
Dart_SetVMFlags(vm_options.count(), vm_options.arguments());
- // Start event handler.
- EventHandler::Start();
-
// Initialize the Dart VM.
if (!Dart_Initialize(CreateIsolateAndSetup, NULL, NULL, ShutdownIsolate,
DartUtils::OpenFile,
DartUtils::ReadFile,
DartUtils::WriteFile,
DartUtils::CloseFile,
- DartUtils::EntropySource)) {
+ DartUtils::EntropySource,
+ CreateServiceIsolate)) {
fprintf(stderr, "%s", "VM initialization failed\n");
fflush(stderr);
exit(kErrorExitCode);
}
-
+ // Start event handler.
+ EventHandler::Start();
// Start the debugger wire protocol handler if necessary.
if (start_debugger) {
@@ -966,12 +1004,23 @@ void main(int argc, char** argv) {
if (print_msg) {
Log::Print("Debugger listening on port %d\n", debug_port);
}
- } else {
- DebuggerConnectionHandler::InitForVmService();
}
- Dart_RegisterIsolateServiceRequestCallback(
+ ASSERT(Dart_CurrentIsolate() == NULL);
+ // Start the VM service isolate, if necessary.
+ if (start_vm_service) {
+ if (!start_debugger) {
+ DebuggerConnectionHandler::InitForVmService();
+ }
+ bool r = VmService::Start(vm_service_server_ip, vm_service_server_port);
+ if (!r) {
+ Log::PrintErr("Could not start VM Service isolate %s\n",
+ VmService::GetErrorMessage());
+ }
+ Dart_RegisterIsolateServiceRequestCallback(
"io", &ServiceRequestHandler, NULL);
+ }
+ ASSERT(Dart_CurrentIsolate() == NULL);
// Call CreateIsolateAndSetup which creates an isolate and loads up
// the specified application script.
« no previous file with comments | « runtime/bin/io_impl_sources.gypi ('k') | runtime/bin/platform.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698