| Index: samples/shell.cc
|
| diff --git a/samples/shell.cc b/samples/shell.cc
|
| index e9057f9e90ab523ba33929fabf755eae6222ba75..0b71c2c6dc0047dc8611dd1cdd881807dd7c8a93 100644
|
| --- a/samples/shell.cc
|
| +++ b/samples/shell.cc
|
| @@ -47,8 +47,9 @@
|
|
|
| v8::Persistent<v8::Context> CreateShellContext();
|
| void RunShell(v8::Handle<v8::Context> context);
|
| -int RunMain(int argc, char* argv[]);
|
| -bool ExecuteString(v8::Handle<v8::String> source,
|
| +int RunMain(v8::Isolate* isolate, int argc, char* argv[]);
|
| +bool ExecuteString(v8::Isolate* isolate,
|
| + v8::Handle<v8::String> source,
|
| v8::Handle<v8::Value> name,
|
| bool print_result,
|
| bool report_exceptions);
|
| @@ -58,7 +59,7 @@ v8::Handle<v8::Value> Load(const v8::Arguments& args);
|
| v8::Handle<v8::Value> Quit(const v8::Arguments& args);
|
| v8::Handle<v8::Value> Version(const v8::Arguments& args);
|
| v8::Handle<v8::String> ReadFile(const char* name);
|
| -void ReportException(v8::TryCatch* handler);
|
| +void ReportException(v8::Isolate* isolate, v8::TryCatch* handler);
|
|
|
|
|
| static bool run_shell;
|
| @@ -66,20 +67,21 @@ static bool run_shell;
|
|
|
| int main(int argc, char* argv[]) {
|
| v8::V8::SetFlagsFromCommandLine(&argc, argv, true);
|
| + v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| run_shell = (argc == 1);
|
| int result;
|
| {
|
| - v8::HandleScope handle_scope;
|
| + v8::HandleScope handle_scope(isolate);
|
| v8::Persistent<v8::Context> context = CreateShellContext();
|
| if (context.IsEmpty()) {
|
| fprintf(stderr, "Error creating context\n");
|
| return 1;
|
| }
|
| context->Enter();
|
| - result = RunMain(argc, argv);
|
| + result = RunMain(isolate, argc, argv);
|
| if (run_shell) RunShell(context);
|
| context->Exit();
|
| - context.Dispose(context->GetIsolate());
|
| + context.Dispose(isolate);
|
| }
|
| v8::V8::Dispose();
|
| return result;
|
| @@ -118,7 +120,7 @@ v8::Persistent<v8::Context> CreateShellContext() {
|
| v8::Handle<v8::Value> Print(const v8::Arguments& args) {
|
| bool first = true;
|
| for (int i = 0; i < args.Length(); i++) {
|
| - v8::HandleScope handle_scope;
|
| + v8::HandleScope handle_scope(args.GetIsolate());
|
| if (first) {
|
| first = false;
|
| } else {
|
| @@ -158,7 +160,7 @@ v8::Handle<v8::Value> Read(const v8::Arguments& args) {
|
| // JavaScript file.
|
| v8::Handle<v8::Value> Load(const v8::Arguments& args) {
|
| for (int i = 0; i < args.Length(); i++) {
|
| - v8::HandleScope handle_scope;
|
| + v8::HandleScope handle_scope(args.GetIsolate());
|
| v8::String::Utf8Value file(args[i]);
|
| if (*file == NULL) {
|
| return v8::ThrowException(v8::String::New("Error loading file"));
|
| @@ -167,7 +169,11 @@ v8::Handle<v8::Value> Load(const v8::Arguments& args) {
|
| if (source.IsEmpty()) {
|
| return v8::ThrowException(v8::String::New("Error loading file"));
|
| }
|
| - if (!ExecuteString(source, v8::String::New(*file), false, false)) {
|
| + if (!ExecuteString(args.GetIsolate(),
|
| + source,
|
| + v8::String::New(*file),
|
| + false,
|
| + false)) {
|
| return v8::ThrowException(v8::String::New("Error executing file"));
|
| }
|
| }
|
| @@ -216,7 +222,7 @@ v8::Handle<v8::String> ReadFile(const char* name) {
|
|
|
|
|
| // Process remaining command line arguments and execute files
|
| -int RunMain(int argc, char* argv[]) {
|
| +int RunMain(v8::Isolate* isolate, int argc, char* argv[]) {
|
| for (int i = 1; i < argc; i++) {
|
| const char* str = argv[i];
|
| if (strcmp(str, "--shell") == 0) {
|
| @@ -232,7 +238,7 @@ int RunMain(int argc, char* argv[]) {
|
| // Execute argument given to -e option directly.
|
| v8::Handle<v8::String> file_name = v8::String::New("unnamed");
|
| v8::Handle<v8::String> source = v8::String::New(argv[++i]);
|
| - if (!ExecuteString(source, file_name, false, true)) return 1;
|
| + if (!ExecuteString(isolate, source, file_name, false, true)) return 1;
|
| } else {
|
| // Use all other arguments as names of files to load and run.
|
| v8::Handle<v8::String> file_name = v8::String::New(str);
|
| @@ -241,7 +247,7 @@ int RunMain(int argc, char* argv[]) {
|
| fprintf(stderr, "Error reading '%s'\n", str);
|
| continue;
|
| }
|
| - if (!ExecuteString(source, file_name, false, true)) return 1;
|
| + if (!ExecuteString(isolate, source, file_name, false, true)) return 1;
|
| }
|
| }
|
| return 0;
|
| @@ -260,25 +266,30 @@ void RunShell(v8::Handle<v8::Context> context) {
|
| fprintf(stderr, "> ");
|
| char* str = fgets(buffer, kBufferSize, stdin);
|
| if (str == NULL) break;
|
| - v8::HandleScope handle_scope;
|
| - ExecuteString(v8::String::New(str), name, true, true);
|
| + v8::HandleScope handle_scope(context->GetIsolate());
|
| + ExecuteString(context->GetIsolate(),
|
| + v8::String::New(str),
|
| + name,
|
| + true,
|
| + true);
|
| }
|
| fprintf(stderr, "\n");
|
| }
|
|
|
|
|
| // Executes a string within the current v8 context.
|
| -bool ExecuteString(v8::Handle<v8::String> source,
|
| +bool ExecuteString(v8::Isolate* isolate,
|
| + v8::Handle<v8::String> source,
|
| v8::Handle<v8::Value> name,
|
| bool print_result,
|
| bool report_exceptions) {
|
| - v8::HandleScope handle_scope;
|
| + v8::HandleScope handle_scope(isolate);
|
| v8::TryCatch try_catch;
|
| v8::Handle<v8::Script> script = v8::Script::Compile(source, name);
|
| if (script.IsEmpty()) {
|
| // Print errors that happened during compilation.
|
| if (report_exceptions)
|
| - ReportException(&try_catch);
|
| + ReportException(isolate, &try_catch);
|
| return false;
|
| } else {
|
| v8::Handle<v8::Value> result = script->Run();
|
| @@ -286,7 +297,7 @@ bool ExecuteString(v8::Handle<v8::String> source,
|
| assert(try_catch.HasCaught());
|
| // Print errors that happened during execution.
|
| if (report_exceptions)
|
| - ReportException(&try_catch);
|
| + ReportException(isolate, &try_catch);
|
| return false;
|
| } else {
|
| assert(!try_catch.HasCaught());
|
| @@ -303,8 +314,8 @@ bool ExecuteString(v8::Handle<v8::String> source,
|
| }
|
|
|
|
|
| -void ReportException(v8::TryCatch* try_catch) {
|
| - v8::HandleScope handle_scope;
|
| +void ReportException(v8::Isolate* isolate, v8::TryCatch* try_catch) {
|
| + v8::HandleScope handle_scope(isolate);
|
| v8::String::Utf8Value exception(try_catch->Exception());
|
| const char* exception_string = ToCString(exception);
|
| v8::Handle<v8::Message> message = try_catch->Message();
|
|
|