Index: src/d8.cc |
diff --git a/src/d8.cc b/src/d8.cc |
index 22f1671d10e210f94aa84d4349ef89f4e1df41c1..f0d30a98d3411487100c38c8135ee2069ff4a800 100644 |
--- a/src/d8.cc |
+++ b/src/d8.cc |
@@ -1539,7 +1539,8 @@ void Shell::InitializeDebugger(Isolate* isolate) { |
Locker lock(isolate); |
HandleScope scope(isolate); |
Handle<ObjectTemplate> global_template = CreateGlobalTemplate(isolate); |
- utility_context_ = Context::New(NULL, global_template); |
+ utility_context_.Reset(isolate, |
+ Context::New(isolate, NULL, global_template)); |
#ifdef ENABLE_DEBUGGER_SUPPORT |
// Start the debugger agent if requested. |
@@ -1552,17 +1553,17 @@ void Shell::InitializeDebugger(Isolate* isolate) { |
} |
-Persistent<Context> Shell::CreateEvaluationContext(Isolate* isolate) { |
+Local<Context> Shell::CreateEvaluationContext(Isolate* isolate) { |
#ifndef V8_SHARED |
// This needs to be a critical section since this is not thread-safe |
i::ScopedLock lock(context_mutex_); |
#endif // V8_SHARED |
// Initialize the global objects |
Handle<ObjectTemplate> global_template = CreateGlobalTemplate(isolate); |
- Persistent<Context> context = Context::New(NULL, global_template); |
- ASSERT(!context.IsEmpty()); |
HandleScope handle_scope(isolate); |
- Context::Scope scope(isolate, context); |
+ Local<Context> context = Context::New(isolate, NULL, global_template); |
+ ASSERT(!context.IsEmpty()); |
+ Context::Scope scope(context); |
#ifndef V8_SHARED |
i::JSArguments js_args = i::FLAG_js_arguments; |
@@ -1578,7 +1579,7 @@ Persistent<Context> Shell::CreateEvaluationContext(Isolate* isolate) { |
context->Global()->Set(String::New("arguments"), |
Utils::ToLocal(arguments_jsarray)); |
#endif // V8_SHARED |
- return context; |
+ return handle_scope.Close(context); |
} |
@@ -1809,9 +1810,9 @@ void ShellThread::Run() { |
// Prepare the context for this thread. |
Locker locker(isolate_); |
HandleScope outer_scope(isolate_); |
- Persistent<Context> thread_context = |
+ Local<Context> thread_context = |
Shell::CreateEvaluationContext(isolate_); |
- Context::Scope context_scope(isolate_, thread_context); |
+ Context::Scope context_scope(thread_context); |
PerIsolateData::RealmScope realm_scope(PerIsolateData::Get(isolate_)); |
while ((ptr != NULL) && (*ptr != '\0')) { |
@@ -1833,7 +1834,6 @@ void ShellThread::Run() { |
Shell::ExecuteString(isolate_, str, String::New(filename), false, false); |
} |
- thread_context.Dispose(thread_context->GetIsolate()); |
ptr = next_line; |
} |
} |
@@ -1910,15 +1910,16 @@ void SourceGroup::ExecuteInThread() { |
{ |
Isolate::Scope iscope(isolate); |
Locker lock(isolate); |
- HandleScope scope(isolate); |
- PerIsolateData data(isolate); |
- Persistent<Context> context = Shell::CreateEvaluationContext(isolate); |
{ |
- Context::Scope cscope(isolate, context); |
- PerIsolateData::RealmScope realm_scope(PerIsolateData::Get(isolate)); |
- Execute(isolate); |
+ HandleScope scope(isolate); |
+ PerIsolateData data(isolate); |
+ Local<Context> context = Shell::CreateEvaluationContext(isolate); |
+ { |
+ Context::Scope cscope(context); |
+ PerIsolateData::RealmScope realm_scope(PerIsolateData::Get(isolate)); |
+ Execute(isolate); |
+ } |
} |
- context.Dispose(isolate); |
if (Shell::options.send_idle_notification) { |
const int kLongIdlePauseInMs = 1000; |
V8::ContextDisposedNotification(); |
@@ -2109,26 +2110,27 @@ int Shell::RunMain(Isolate* isolate, int argc, char* argv[]) { |
#endif // V8_SHARED |
{ // NOLINT |
Locker lock(isolate); |
- HandleScope scope(isolate); |
- Persistent<Context> context = CreateEvaluationContext(isolate); |
- if (options.last_run) { |
- // Keep using the same context in the interactive shell. |
- evaluation_context_ = context; |
+ { |
+ HandleScope scope(isolate); |
+ Local<Context> context = CreateEvaluationContext(isolate); |
+ if (options.last_run) { |
+ // Keep using the same context in the interactive shell. |
+ evaluation_context_.Reset(isolate, context); |
#if !defined(V8_SHARED) && defined(ENABLE_DEBUGGER_SUPPORT) |
- // If the interactive debugger is enabled make sure to activate |
- // it before running the files passed on the command line. |
- if (i::FLAG_debugger) { |
- InstallUtilityScript(isolate); |
- } |
+ // If the interactive debugger is enabled make sure to activate |
+ // it before running the files passed on the command line. |
+ if (i::FLAG_debugger) { |
+ InstallUtilityScript(isolate); |
+ } |
#endif // !V8_SHARED && ENABLE_DEBUGGER_SUPPORT |
- } |
- { |
- Context::Scope cscope(isolate, context); |
- PerIsolateData::RealmScope realm_scope(PerIsolateData::Get(isolate)); |
- options.isolate_sources[0].Execute(isolate); |
+ } |
+ { |
+ Context::Scope cscope(context); |
+ PerIsolateData::RealmScope realm_scope(PerIsolateData::Get(isolate)); |
+ options.isolate_sources[0].Execute(isolate); |
+ } |
} |
if (!options.last_run) { |
- context.Dispose(isolate); |
if (options.send_idle_notification) { |
const int kLongIdlePauseInMs = 1000; |
V8::ContextDisposedNotification(); |