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

Unified Diff: bin/main.cc

Issue 8673002: - Refactor the isolate callback mechanism to also include creation of the (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: '' Created 9 years, 1 month 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 | « bin/gen_snapshot.cc ('k') | bin/run_vm_tests.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: bin/main.cc
===================================================================
--- bin/main.cc (revision 1955)
+++ bin/main.cc (working copy)
@@ -19,6 +19,10 @@
extern const uint8_t* snapshot_buffer;
+// Global state that stores a pointer to the application script file.
+static char* canonical_script_name = NULL;
+
+
// Global state that indicates whether pprof symbol information is
// to be generated or not.
static const char* generate_pprof_symbols_filename = NULL;
@@ -187,7 +191,7 @@
}
result = DartUtils::LoadSource(NULL, library, url, tag, url_string);
if (!Dart_IsError(result) && (tag == kImportTag)) {
- Builtin_ImportLibrary(result);
+ Builtin::ImportLibrary(result);
}
return result;
}
@@ -204,30 +208,40 @@
}
-static void* MainIsolateInitCallback(void* data) {
- const char* script_name = reinterpret_cast<const char*>(data);
+static bool CreateIsolateAndSetup(void* data, char** error) {
+ Dart_Isolate isolate = Dart_CreateIsolate(snapshot_buffer, data, error);
+ if (isolate == NULL) {
+ return false;
+ }
+
Dart_Handle library;
Dart_EnterScope();
- // Load the specified script.
- library = LoadScript(script_name);
+ // Load the specified application script into the newly created isolate.
+ library = LoadScript(canonical_script_name);
if (Dart_IsError(library)) {
- const char* err_msg = Dart_GetError(library);
- fprintf(stderr, "Errors encountered while loading script: %s\n", err_msg);
+ *error = strdup(Dart_GetError(library));
Dart_ExitScope();
- exit(255);
+ Dart_ShutdownIsolate();
+ return false;
}
if (!Dart_IsLibrary(library)) {
- fprintf(stderr,
- "Expected a library when loading script: %s",
- script_name);
+ char errbuf[256];
+ snprintf(errbuf, sizeof(errbuf),
+ "Expected a library when loading script: %s",
+ canonical_script_name);
+ *error = strdup(errbuf);
Dart_ExitScope();
- exit(255);
+ Dart_ShutdownIsolate();
+ return false;
}
- Builtin_ImportLibrary(library); // Import builtin library.
-
+ Builtin::ImportLibrary(library); // Implicitly import builtin into app.
+ if (snapshot_buffer != NULL) {
+ // Setup the native resolver as the snapshot does not carry it.
+ Builtin::SetNativeResolver();
+ }
Dart_ExitScope();
- return data;
+ return true;
}
@@ -267,35 +281,35 @@
return 255;
}
- // Initialize the Dart VM (TODO(asiva) - remove const_cast once
- // dart API is fixed to take a const char** in Dart_Initialize).
+ // Initialize the Dart VM.
Dart_Initialize(vm_options.count(),
vm_options.arguments(),
- MainIsolateInitCallback);
+ CreateIsolateAndSetup);
- // Create an isolate. As a side effect, MainIsolateInitCallback
- // gets called, which loads the scripts and libraries.
- char* canonical_script_name = File::GetCanonicalPath(script_name);
+ canonical_script_name = File::GetCanonicalPath(script_name);
if (canonical_script_name == NULL) {
fprintf(stderr, "Unable to find '%s'\n", script_name);
return 255; // Indicates we encountered an error.
}
- Dart_Isolate isolate = Dart_CreateIsolate(snapshot_buffer,
- canonical_script_name);
- if (isolate == NULL) {
+
+ // Call CreateIsolateAndSetup which creates an isolate and loads up
+ // the specified application script.
+ char* error = NULL;
+ if (!CreateIsolateAndSetup(NULL, &error)) {
+ fprintf(stderr, "%s\n", error);
free(canonical_script_name);
- return 255;
+ free(error);
+ return 255; // Indicates we encountered an error.
}
+ Dart_Isolate isolate = Dart_CurrentIsolate();
+ ASSERT(isolate != NULL);
+ Dart_Handle result;
+
Dart_EnterScope();
- if (snapshot_buffer != NULL) {
- // Setup the native resolver as the snapshot does not carry it.
- Builtin_SetNativeResolver();
- }
-
if (HasCompileAll(vm_options)) {
- Dart_Handle result = Dart_CompileAll();
+ result = Dart_CompileAll();
if (Dart_IsError(result)) {
fprintf(stderr, "%s\n", Dart_GetError(result));
Dart_ExitScope();
@@ -325,11 +339,11 @@
free(canonical_script_name);
return 255; // Indicates we encountered an error.
}
- Dart_Handle result = Dart_InvokeStatic(library,
- Dart_NewString(""),
- Dart_NewString("main"),
- 0,
- NULL);
+ result = Dart_InvokeStatic(library,
+ Dart_NewString(""),
+ Dart_NewString("main"),
+ 0,
+ NULL);
if (Dart_IsError(result)) {
fprintf(stderr, "%s\n", Dart_GetError(result));
Dart_ExitScope();
« no previous file with comments | « bin/gen_snapshot.cc ('k') | bin/run_vm_tests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698