Revision: 8424
Author: [email protected]
Date: Fri Jun 24 13:04:32 2011
Log: removed some unnecessary stuff from d8's initialization
and got rid of the utility context unless interactive shell is used
Review URL: http://codereview.chromium.org/7219003
http://code.google.com/p/v8/source/detail?r=8424
Modified:
/branches/bleeding_edge/src/d8-debug.cc
/branches/bleeding_edge/src/d8-posix.cc
/branches/bleeding_edge/src/d8.cc
/branches/bleeding_edge/src/d8.h
=======================================
--- /branches/bleeding_edge/src/d8-debug.cc Fri Jun 10 05:41:35 2011
+++ /branches/bleeding_edge/src/d8-debug.cc Fri Jun 24 13:04:32 2011
@@ -272,6 +272,7 @@
void RemoteDebugger::HandleMessageReceived(char* message) {
+ Locker lock;
HandleScope scope;
// Print the event details.
@@ -300,6 +301,7 @@
void RemoteDebugger::HandleKeyboardCommand(char* command) {
+ Locker lock;
HandleScope scope;
// Convert the debugger command to a JSON debugger request.
=======================================
--- /branches/bleeding_edge/src/d8-posix.cc Wed Mar 16 04:15:43 2011
+++ /branches/bleeding_edge/src/d8-posix.cc Fri Jun 24 13:04:32 2011
@@ -311,10 +311,6 @@
int read_timeout,
int total_timeout) {
Handle<String> accumulator = String::Empty();
- const char* source = "(function(a, b) { return a + b; })";
- Handle<Value> cons_as_obj(Script::Compile(String::New(source))->Run());
- Handle<Function> cons_function(Function::Cast(*cons_as_obj));
- Handle<Value> cons_args[2];
int fullness = 0;
static const int kStdoutReadBufferSize = 4096;
@@ -350,12 +346,7 @@
bytes_read + fullness :
LengthWithoutIncompleteUtf8(buffer, bytes_read +
fullness);
Handle<String> addition = String::New(buffer, length);
- cons_args[0] = accumulator;
- cons_args[1] = addition;
- accumulator = Handle<String>::Cast(cons_function->Call(
- Shell::utility_context()->Global(),
- 2,
- cons_args));
+ accumulator = String::Concat(accumulator, addition);
fullness = bytes_read + fullness - length;
memcpy(buffer, buffer + length, fullness);
}
=======================================
--- /branches/bleeding_edge/src/d8.cc Wed Jun 22 10:32:35 2011
+++ /branches/bleeding_edge/src/d8.cc Fri Jun 24 13:04:32 2011
@@ -489,7 +489,23 @@
void Shell::InstallUtilityScript() {
Locker lock;
HandleScope scope;
+ // If we use the utility context, we have to set the security tokens so
that
+ // utility, evaluation and debug context can all access each other.
+ 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 =
@@ -513,6 +529,7 @@
i::SharedFunctionInfo::cast(*compiled_script)->script()));
script_object->set_type(i::Smi::FromInt(i::Script::TYPE_NATIVE));
}
+
#ifdef COMPRESS_STARTUP_DATA_BZ2
class BZip2Decompressor : public v8::StartupDataDecompressor {
@@ -585,7 +602,8 @@
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 +623,23 @@
V8::SetAddHistogramSampleFunction(AddHistogramSample);
}
- // Initialize the global objects
+ if (test_shell) 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 +654,8 @@
evaluation_context_.Dispose();
}
evaluation_context_ = Context::New(NULL, global_template);
- evaluation_context_->SetSecurityToken(Undefined());
-
- Context::Scope utility_scope(utility_context_);
+ Context::Scope utility_scope(evaluation_context_);
+
i::JSArguments js_args = i::FLAG_js_arguments;
i::Handle<i::FixedArray> arguments_array =
FACTORY->NewFixedArray(js_args.argc());
@@ -650,24 +668,6 @@
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 +753,7 @@
if (i::FLAG_debugger) {
printf("JavaScript debugger enabled\n");
}
+
editor->Open();
while (true) {
Locker locker;
@@ -800,7 +801,6 @@
}
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 +826,7 @@
}
}
-int Shell::RunMain(int argc, char* argv[]) {
+int Shell::RunMain(int argc, char* argv[], bool* executed) {
// Default use preemption if threads are created.
bool use_preemption = true;
@@ -871,6 +871,7 @@
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 +885,13 @@
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 +925,9 @@
// optimization in the last run.
bool FLAG_stress_opt = false;
bool FLAG_stress_deopt = false;
- bool FLAG_run_shell = false;
+ bool FLAG_interactive_shell = false;
+ bool FLAG_test_shell = false;
+ bool script_executed = false;
for (int i = 0; i < argc; i++) {
if (strcmp(argv[i], "--stress-opt") == 0) {
@@ -936,18 +941,17 @@
FLAG_stress_opt = false;
FLAG_stress_deopt = false;
} else if (strcmp(argv[i], "--shell") == 0) {
- FLAG_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);
- // Allow SetFlagsFromCommandLine to decrement argc before deciding to
- // run the shell or not.
- bool run_shell = FLAG_run_shell || (argc == 1);
-
- Initialize();
+ Initialize(FLAG_test_shell);
int result = 0;
if (FLAG_stress_opt || FLAG_stress_deopt) {
@@ -958,22 +962,26 @@
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, &script_executed);
}
printf("======== Full Deoptimization =======\n");
v8::Testing::DeoptimizeAll();
} else {
- result = RunMain(argc, argv);
+ result = RunMain(argc, argv, &script_executed);
}
#ifdef ENABLE_DEBUGGER_SUPPORT
- if (i::FLAG_remote_debugger) {
+ // Run remote debugger if requested, but never on --test
+ if (i::FLAG_remote_debugger && !FLAG_test_shell) {
+ 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 || !script_executed) && !FLAG_test_shell) {
InstallUtilityScript();
RunShell();
}
=======================================
--- /branches/bleeding_edge/src/d8.h Thu Jun 9 07:28:49 2011
+++ /branches/bleeding_edge/src/d8.h Fri Jun 24 13:04:32 2011
@@ -129,12 +129,12 @@
static void AddHistogramSample(void* histogram, int sample);
static void MapCounters(const char* name);
static Handle<String> ReadFile(const char* name);
- static void Initialize();
+ static void Initialize(bool test_shell);
static void RenewEvaluationContext();
static void InstallUtilityScript();
static void RunShell();
static int RunScript(char* filename);
- static int RunMain(int argc, char* argv[]);
+ static int RunMain(int argc, char* argv[], bool* executed);
static int Main(int argc, char* argv[]);
static Handle<ObjectTemplate> CreateGlobalTemplate();
static Handle<Array> GetCompletions(Handle<String> text,
@@ -201,8 +201,6 @@
static Handle<Value> RemoveDirectory(const Arguments& args);
static void AddOSMethods(Handle<ObjectTemplate> os_template);
-
- static Handle<Context> utility_context() { return utility_context_; }
static const char* kHistoryFileName;
static const char* kPrompt;
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev