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

Unified Diff: src/d8.cc

Issue 7219003: removed some unnecessary stuff from d8's initialization (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: corrected the behavior of when to launch interactive shell Created 9 years, 6 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 | « src/d8.h ('k') | src/d8-debug.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/d8.cc
diff --git a/src/d8.cc b/src/d8.cc
index 56a43ad2411e375f529beca5a62dd6c2df5469ac..4a05277ec5e09e34e66210ad3b9cc8d0e6650888 100644
--- a/src/d8.cc
+++ b/src/d8.cc
@@ -489,7 +489,21 @@ void Shell::AddHistogramSample(void* histogram, int sample) {
void Shell::InstallUtilityScript() {
Locker lock;
HandleScope scope;
Søren Thygesen Gjesse 2011/06/24 11:36:09 Maybe add a comment here that when the utility con
+ utility_context_->SetSecurityToken(Undefined());
+ evaluation_context_->SetSecurityToken(Undefined());
Context::Scope utility_scope(utility_context_);
+
+#ifdef ENABLE_DEBUGGER_SUPPORT
+ // Install the debugger object in the utility scope
+ i::Debug* debug = i::Isolate::Current()->debug();
+ debug->Load();
+ i::Handle<i::JSObject> js_debug
+ = i::Handle<i::JSObject>(debug->debug_context()->global());
+ utility_context_->Global()->Set(String::New("$debug"),
+ Utils::ToLocal(js_debug));
+ debug->debug_context()->set_security_token(HEAP->undefined_value());
+#endif
+
// Run the d8 shell utility script in the utility context
int source_index = i::NativesCollection<i::D8>::GetIndex("d8");
i::Vector<const char> shell_source =
@@ -514,6 +528,7 @@ void Shell::InstallUtilityScript() {
script_object->set_type(i::Smi::FromInt(i::Script::TYPE_NATIVE));
}
+
#ifdef COMPRESS_STARTUP_DATA_BZ2
class BZip2Decompressor : public v8::StartupDataDecompressor {
public:
@@ -585,7 +600,8 @@ Handle<ObjectTemplate> Shell::CreateGlobalTemplate() {
return global_template;
}
-void Shell::Initialize() {
+
+void Shell::Initialize(bool test_shell) {
#ifdef COMPRESS_STARTUP_DATA_BZ2
BZip2Decompressor startup_data_decompressor;
int bz2_result = startup_data_decompressor.Decompress();
@@ -605,22 +621,23 @@ void Shell::Initialize() {
V8::SetAddHistogramSampleFunction(AddHistogramSample);
}
- // Initialize the global objects
+ if (test_shell && !i::FLAG_remote_debugger) return;
+
+ Locker lock;
HandleScope scope;
Handle<ObjectTemplate> global_template = CreateGlobalTemplate();
-
utility_context_ = Context::New(NULL, global_template);
- utility_context_->SetSecurityToken(Undefined());
- Context::Scope utility_scope(utility_context_);
#ifdef ENABLE_DEBUGGER_SUPPORT
- // Install the debugger object in the utility scope
- i::Debug* debug = i::Isolate::Current()->debug();
- debug->Load();
- i::Handle<i::JSObject> js_debug
- = i::Handle<i::JSObject>(debug->debug_context()->global());
- utility_context_->Global()->Set(String::New("$debug"),
- Utils::ToLocal(js_debug));
+ // Start the debugger agent if requested.
+ if (i::FLAG_debugger_agent) {
+ v8::Debug::EnableAgent("d8 shell", i::FLAG_debugger_port, true);
+ }
+
+ // Start the in-process debugger if requested.
+ if (i::FLAG_debugger && !i::FLAG_debugger_agent) {
+ v8::Debug::SetDebugEventListener(HandleDebugEvent);
+ }
#endif
}
@@ -635,9 +652,8 @@ void Shell::RenewEvaluationContext() {
evaluation_context_.Dispose();
}
evaluation_context_ = Context::New(NULL, global_template);
- evaluation_context_->SetSecurityToken(Undefined());
+ Context::Scope utility_scope(evaluation_context_);
- Context::Scope utility_scope(utility_context_);
i::JSArguments js_args = i::FLAG_js_arguments;
i::Handle<i::FixedArray> arguments_array =
FACTORY->NewFixedArray(js_args.argc());
@@ -650,24 +666,6 @@ void Shell::RenewEvaluationContext() {
FACTORY->NewJSArrayWithElements(arguments_array);
evaluation_context_->Global()->Set(String::New("arguments"),
Utils::ToLocal(arguments_jsarray));
-
-#ifdef ENABLE_DEBUGGER_SUPPORT
- i::Debug* debug = i::Isolate::Current()->debug();
- debug->Load();
-
- // Set the security token of the debug context to allow access.
- debug->debug_context()->set_security_token(HEAP->undefined_value());
-
- // Start the debugger agent if requested.
- if (i::FLAG_debugger_agent) {
- v8::Debug::EnableAgent("d8 shell", i::FLAG_debugger_port, true);
- }
-
- // Start the in-process debugger if requested.
- if (i::FLAG_debugger && !i::FLAG_debugger_agent) {
- v8::Debug::SetDebugEventListener(HandleDebugEvent);
- }
-#endif
}
@@ -753,6 +751,7 @@ void Shell::RunShell() {
if (i::FLAG_debugger) {
printf("JavaScript debugger enabled\n");
}
+
editor->Open();
while (true) {
Locker locker;
@@ -800,7 +799,6 @@ void ShellThread::Run() {
}
Persistent<Context> thread_context = Context::New(NULL, global_template);
- thread_context->SetSecurityToken(Undefined());
Context::Scope context_scope(thread_context);
while ((ptr != NULL) && (*ptr != '\0')) {
@@ -826,7 +824,7 @@ void ShellThread::Run() {
}
}
-int Shell::RunMain(int argc, char* argv[]) {
+int Shell::RunMain(int argc, char* argv[], bool* executed) {
Yang 2011/06/23 21:45:53 Pass this flag by reference to track whether somet
// Default use preemption if threads are created.
bool use_preemption = true;
@@ -871,6 +869,7 @@ int Shell::RunMain(int argc, char* argv[]) {
v8::HandleScope handle_scope;
v8::Handle<v8::String> file_name = v8::String::New("unnamed");
v8::Handle<v8::String> source = v8::String::New(argv[++i]);
+ (*executed) = true;
if (!ExecuteString(source, file_name, false, true)) {
OnExit();
return 1;
@@ -884,11 +883,13 @@ int Shell::RunMain(int argc, char* argv[]) {
i::Vector<const char>(files, size));
thread->Start();
threads.Add(thread);
+ (*executed) = true;
} else {
// Use all other arguments as names of files to load and run.
HandleScope handle_scope;
Handle<String> file_name = v8::String::New(str);
Handle<String> source = ReadFile(str);
+ (*executed) = true;
if (source.IsEmpty()) {
printf("Error reading '%s'\n", str);
return 1;
@@ -922,7 +923,9 @@ int Shell::Main(int argc, char* argv[]) {
// optimization in the last run.
bool FLAG_stress_opt = false;
bool FLAG_stress_deopt = false;
- bool run_shell = (argc == 1);
+ bool FLAG_interactive_shell = false;
+ bool FLAG_test_shell = false;
+ bool FLAG_executed = false;
Søren Thygesen Gjesse 2011/06/24 11:36:09 FLAG_executed -> executed or script_executed. It i
for (int i = 0; i < argc; i++) {
if (strcmp(argv[i], "--stress-opt") == 0) {
@@ -936,14 +939,17 @@ int Shell::Main(int argc, char* argv[]) {
FLAG_stress_opt = false;
FLAG_stress_deopt = false;
} else if (strcmp(argv[i], "--shell") == 0) {
- run_shell = true;
+ FLAG_interactive_shell = true;
+ argv[i] = NULL;
+ } else if (strcmp(argv[i], "--test") == 0) {
+ FLAG_test_shell = true;
argv[i] = NULL;
}
}
v8::V8::SetFlagsFromCommandLine(&argc, argv, true);
- Initialize();
+ Initialize(FLAG_test_shell);
int result = 0;
if (FLAG_stress_opt || FLAG_stress_deopt) {
@@ -954,22 +960,25 @@ int Shell::Main(int argc, char* argv[]) {
for (int i = 0; i < stress_runs && result == 0; i++) {
printf("============ Stress %d/%d ============\n", i + 1, stress_runs);
v8::Testing::PrepareStressRun(i);
- result = RunMain(argc, argv);
+ result = RunMain(argc, argv, &FLAG_executed);
}
printf("======== Full Deoptimization =======\n");
v8::Testing::DeoptimizeAll();
} else {
- result = RunMain(argc, argv);
+ result = RunMain(argc, argv, &FLAG_executed);
}
#ifdef ENABLE_DEBUGGER_SUPPORT
if (i::FLAG_remote_debugger) {
+ InstallUtilityScript();
RunRemoteDebugger(i::FLAG_debugger_port);
return 0;
}
#endif
- if (run_shell) {
+ // Run interactive shell if explicitly requested or if no script has been
+ // executed, but never on --test
+ if ((FLAG_interactive_shell || !FLAG_executed) && !FLAG_test_shell) {
InstallUtilityScript();
RunShell();
}
« no previous file with comments | « src/d8.h ('k') | src/d8-debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698