Index: samples/shell.cc |
diff --git a/samples/shell.cc b/samples/shell.cc |
index 3a743d6c13bebe4e919bb69f01146fb3568363ab..a6b01d99e7a51d07226700d63a07a7a33cfc3e7d 100644 |
--- a/samples/shell.cc |
+++ b/samples/shell.cc |
@@ -45,8 +45,9 @@ |
v8::Local<v8::Context> CreateShellContext(v8::Isolate* isolate); |
-void RunShell(v8::Local<v8::Context> context); |
-int RunMain(v8::Isolate* isolate, int argc, char* argv[]); |
+void RunShell(v8::Local<v8::Context> context, v8::Platform* platform); |
+int RunMain(v8::Isolate* isolate, v8::Platform* platform, int argc, |
+ char* argv[]); |
bool ExecuteString(v8::Isolate* isolate, v8::Local<v8::String> source, |
v8::Local<v8::Value> name, bool print_result, |
bool report_exceptions); |
@@ -94,8 +95,8 @@ int main(int argc, char* argv[]) { |
return 1; |
} |
v8::Context::Scope context_scope(context); |
- result = RunMain(isolate, argc, argv); |
- if (run_shell) RunShell(context); |
+ result = RunMain(isolate, platform, argc, argv); |
+ if (run_shell) RunShell(context, platform); |
} |
isolate->Dispose(); |
v8::V8::Dispose(); |
@@ -269,7 +270,8 @@ v8::MaybeLocal<v8::String> ReadFile(v8::Isolate* isolate, const char* name) { |
// Process remaining command line arguments and execute files |
-int RunMain(v8::Isolate* isolate, int argc, char* argv[]) { |
+int RunMain(v8::Isolate* isolate, v8::Platform* platform, int argc, |
+ char* argv[]) { |
for (int i = 1; i < argc; i++) { |
const char* str = argv[i]; |
if (strcmp(str, "--shell") == 0) { |
@@ -292,7 +294,9 @@ int RunMain(v8::Isolate* isolate, int argc, char* argv[]) { |
.ToLocal(&source)) { |
return 1; |
} |
- if (!ExecuteString(isolate, source, file_name, false, true)) return 1; |
+ bool success = ExecuteString(isolate, source, file_name, false, true); |
+ while (v8::platform::PumpMessageLoop(platform, isolate)) continue; |
+ if (!success) return 1; |
} else { |
// Use all other arguments as names of files to load and run. |
v8::Local<v8::String> file_name = |
@@ -303,7 +307,9 @@ int RunMain(v8::Isolate* isolate, int argc, char* argv[]) { |
fprintf(stderr, "Error reading '%s'\n", str); |
continue; |
} |
- if (!ExecuteString(isolate, source, file_name, false, true)) return 1; |
+ bool success = ExecuteString(isolate, source, file_name, false, true); |
+ while (v8::platform::PumpMessageLoop(platform, isolate)) continue; |
+ if (!success) return 1; |
} |
} |
return 0; |
@@ -311,7 +317,7 @@ int RunMain(v8::Isolate* isolate, int argc, char* argv[]) { |
// The read-eval-execute loop of the shell. |
-void RunShell(v8::Local<v8::Context> context) { |
+void RunShell(v8::Local<v8::Context> context, v8::Platform* platform) { |
fprintf(stderr, "V8 version %s [sample shell]\n", v8::V8::GetVersion()); |
static const int kBufferSize = 256; |
// Enter the execution environment before evaluating any code. |
@@ -330,6 +336,8 @@ void RunShell(v8::Local<v8::Context> context) { |
v8::String::NewFromUtf8(context->GetIsolate(), str, |
v8::NewStringType::kNormal).ToLocalChecked(), |
name, true, true); |
+ while (v8::platform::PumpMessageLoop(platform, context->GetIsolate())) |
+ continue; |
} |
fprintf(stderr, "\n"); |
} |