| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 | 5 |
| 6 // Defined when linking against shared lib on Windows. | 6 // Defined when linking against shared lib on Windows. |
| 7 #if defined(USING_V8_SHARED) && !defined(V8_SHARED) | 7 #if defined(USING_V8_SHARED) && !defined(V8_SHARED) |
| 8 #define V8_SHARED | 8 #define V8_SHARED |
| 9 #endif | 9 #endif |
| 10 | 10 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 #include "src/d8.h" | 37 #include "src/d8.h" |
| 38 | 38 |
| 39 #include "include/libplatform/libplatform.h" | 39 #include "include/libplatform/libplatform.h" |
| 40 #ifndef V8_SHARED | 40 #ifndef V8_SHARED |
| 41 #include "src/api.h" | 41 #include "src/api.h" |
| 42 #include "src/base/cpu.h" | 42 #include "src/base/cpu.h" |
| 43 #include "src/base/logging.h" | 43 #include "src/base/logging.h" |
| 44 #include "src/base/platform/platform.h" | 44 #include "src/base/platform/platform.h" |
| 45 #include "src/base/sys-info.h" | 45 #include "src/base/sys-info.h" |
| 46 #include "src/basic-block-profiler.h" | 46 #include "src/basic-block-profiler.h" |
| 47 #include "src/d8-debug.h" | |
| 48 #include "src/debug.h" | |
| 49 #include "src/snapshot/natives.h" | 47 #include "src/snapshot/natives.h" |
| 50 #include "src/utils.h" | 48 #include "src/utils.h" |
| 51 #include "src/v8.h" | 49 #include "src/v8.h" |
| 52 #endif // !V8_SHARED | 50 #endif // !V8_SHARED |
| 53 | 51 |
| 54 #ifdef V8_USE_EXTERNAL_STARTUP_DATA | 52 #ifdef V8_USE_EXTERNAL_STARTUP_DATA |
| 55 #include "src/startup-data-util.h" | 53 #include "src/startup-data-util.h" |
| 56 #endif // V8_USE_EXTERNAL_STARTUP_DATA | 54 #endif // V8_USE_EXTERNAL_STARTUP_DATA |
| 57 | 55 |
| 58 #if !defined(_WIN32) && !defined(_WIN64) | 56 #if !defined(_WIN32) && !defined(_WIN64) |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 321 compile_options); | 319 compile_options); |
| 322 CHECK(data == NULL || !data->rejected); | 320 CHECK(data == NULL || !data->rejected); |
| 323 return result; | 321 return result; |
| 324 } | 322 } |
| 325 | 323 |
| 326 | 324 |
| 327 // Executes a string within the current v8 context. | 325 // Executes a string within the current v8 context. |
| 328 bool Shell::ExecuteString(Isolate* isolate, Local<String> source, | 326 bool Shell::ExecuteString(Isolate* isolate, Local<String> source, |
| 329 Local<Value> name, bool print_result, | 327 Local<Value> name, bool print_result, |
| 330 bool report_exceptions, SourceType source_type) { | 328 bool report_exceptions, SourceType source_type) { |
| 331 #ifndef V8_SHARED | |
| 332 bool FLAG_debugger = i::FLAG_debugger; | |
| 333 #else | |
| 334 bool FLAG_debugger = false; | |
| 335 #endif // !V8_SHARED | |
| 336 HandleScope handle_scope(isolate); | 329 HandleScope handle_scope(isolate); |
| 337 TryCatch try_catch(isolate); | 330 TryCatch try_catch(isolate); |
| 338 options.script_executed = true; | 331 options.script_executed = true; |
| 339 if (FLAG_debugger) { | |
| 340 // When debugging make exceptions appear to be uncaught. | |
| 341 try_catch.SetVerbose(true); | |
| 342 } | |
| 343 | 332 |
| 344 MaybeLocal<Value> maybe_result; | 333 MaybeLocal<Value> maybe_result; |
| 345 { | 334 { |
| 346 PerIsolateData* data = PerIsolateData::Get(isolate); | 335 PerIsolateData* data = PerIsolateData::Get(isolate); |
| 347 Local<Context> realm = | 336 Local<Context> realm = |
| 348 Local<Context>::New(isolate, data->realms_[data->realm_current_]); | 337 Local<Context>::New(isolate, data->realms_[data->realm_current_]); |
| 349 Context::Scope context_scope(realm); | 338 Context::Scope context_scope(realm); |
| 350 Local<Script> script; | 339 Local<Script> script; |
| 351 if (!Shell::CompileString(isolate, source, name, options.compile_options, | 340 if (!Shell::CompileString(isolate, source, name, options.compile_options, |
| 352 source_type).ToLocal(&script)) { | 341 source_type).ToLocal(&script)) { |
| 353 // Print errors that happened during compilation. | 342 // Print errors that happened during compilation. |
| 354 if (report_exceptions && !FLAG_debugger) | 343 if (report_exceptions) ReportException(isolate, &try_catch); |
| 355 ReportException(isolate, &try_catch); | |
| 356 return false; | 344 return false; |
| 357 } | 345 } |
| 358 maybe_result = script->Run(realm); | 346 maybe_result = script->Run(realm); |
| 359 EmptyMessageQueues(isolate); | 347 EmptyMessageQueues(isolate); |
| 360 data->realm_current_ = data->realm_switch_; | 348 data->realm_current_ = data->realm_switch_; |
| 361 } | 349 } |
| 362 Local<Value> result; | 350 Local<Value> result; |
| 363 if (!maybe_result.ToLocal(&result)) { | 351 if (!maybe_result.ToLocal(&result)) { |
| 364 DCHECK(try_catch.HasCaught()); | 352 DCHECK(try_catch.HasCaught()); |
| 365 // Print errors that happened during execution. | 353 // Print errors that happened during execution. |
| 366 if (report_exceptions && !FLAG_debugger) | 354 if (report_exceptions) ReportException(isolate, &try_catch); |
| 367 ReportException(isolate, &try_catch); | |
| 368 return false; | 355 return false; |
| 369 } | 356 } |
| 370 DCHECK(!try_catch.HasCaught()); | 357 DCHECK(!try_catch.HasCaught()); |
| 371 if (print_result) { | 358 if (print_result) { |
| 372 #if !defined(V8_SHARED) | 359 #if !defined(V8_SHARED) |
| 373 if (options.test_shell) { | 360 if (options.test_shell) { |
| 374 #endif | 361 #endif |
| 375 if (!result->IsUndefined()) { | 362 if (!result->IsUndefined()) { |
| 376 // If all went well and the result wasn't undefined then print | 363 // If all went well and the result wasn't undefined then print |
| 377 // the returned value. | 364 // the returned value. |
| (...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 947 v8::Local<v8::Context> evaluation_context = | 934 v8::Local<v8::Context> evaluation_context = |
| 948 v8::Local<v8::Context>::New(isolate, evaluation_context_); | 935 v8::Local<v8::Context>::New(isolate, evaluation_context_); |
| 949 Local<Value> argv[kArgc] = {evaluation_context->Global(), text, full}; | 936 Local<Value> argv[kArgc] = {evaluation_context->Global(), text, full}; |
| 950 Local<Value> val = Local<Function>::Cast(fun) | 937 Local<Value> val = Local<Function>::Cast(fun) |
| 951 ->Call(utility_context, global, kArgc, argv) | 938 ->Call(utility_context, global, kArgc, argv) |
| 952 .ToLocalChecked(); | 939 .ToLocalChecked(); |
| 953 return handle_scope.Escape(Local<Array>::Cast(val)); | 940 return handle_scope.Escape(Local<Array>::Cast(val)); |
| 954 } | 941 } |
| 955 | 942 |
| 956 | 943 |
| 957 Local<Object> Shell::DebugMessageDetails(Isolate* isolate, | |
| 958 Local<String> message) { | |
| 959 EscapableHandleScope handle_scope(isolate); | |
| 960 v8::Local<v8::Context> context = | |
| 961 v8::Local<v8::Context>::New(isolate, utility_context_); | |
| 962 v8::Context::Scope context_scope(context); | |
| 963 Local<Object> global = context->Global(); | |
| 964 Local<Value> fun = | |
| 965 global->Get(context, String::NewFromUtf8(isolate, "DebugMessageDetails", | |
| 966 NewStringType::kNormal) | |
| 967 .ToLocalChecked()).ToLocalChecked(); | |
| 968 static const int kArgc = 1; | |
| 969 Local<Value> argv[kArgc] = {message}; | |
| 970 Local<Value> val = Local<Function>::Cast(fun) | |
| 971 ->Call(context, global, kArgc, argv) | |
| 972 .ToLocalChecked(); | |
| 973 return handle_scope.Escape(Local<Object>(Local<Object>::Cast(val))); | |
| 974 } | |
| 975 | |
| 976 | |
| 977 Local<Value> Shell::DebugCommandToJSONRequest(Isolate* isolate, | |
| 978 Local<String> command) { | |
| 979 EscapableHandleScope handle_scope(isolate); | |
| 980 v8::Local<v8::Context> context = | |
| 981 v8::Local<v8::Context>::New(isolate, utility_context_); | |
| 982 v8::Context::Scope context_scope(context); | |
| 983 Local<Object> global = context->Global(); | |
| 984 Local<Value> fun = | |
| 985 global->Get(context, | |
| 986 String::NewFromUtf8(isolate, "DebugCommandToJSONRequest", | |
| 987 NewStringType::kNormal).ToLocalChecked()) | |
| 988 .ToLocalChecked(); | |
| 989 static const int kArgc = 1; | |
| 990 Local<Value> argv[kArgc] = {command}; | |
| 991 Local<Value> val = Local<Function>::Cast(fun) | |
| 992 ->Call(context, global, kArgc, argv) | |
| 993 .ToLocalChecked(); | |
| 994 return handle_scope.Escape(Local<Value>(val)); | |
| 995 } | |
| 996 | |
| 997 | |
| 998 int32_t* Counter::Bind(const char* name, bool is_histogram) { | 944 int32_t* Counter::Bind(const char* name, bool is_histogram) { |
| 999 int i; | 945 int i; |
| 1000 for (i = 0; i < kMaxNameSize - 1 && name[i]; i++) | 946 for (i = 0; i < kMaxNameSize - 1 && name[i]; i++) |
| 1001 name_[i] = static_cast<char>(name[i]); | 947 name_[i] = static_cast<char>(name[i]); |
| 1002 name_[i] = '\0'; | 948 name_[i] = '\0'; |
| 1003 is_histogram_ = is_histogram; | 949 is_histogram_ = is_histogram; |
| 1004 return ptr(); | 950 return ptr(); |
| 1005 } | 951 } |
| 1006 | 952 |
| 1007 | 953 |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1103 private: | 1049 private: |
| 1104 bool flag_; | 1050 bool flag_; |
| 1105 }; | 1051 }; |
| 1106 | 1052 |
| 1107 | 1053 |
| 1108 void Shell::InstallUtilityScript(Isolate* isolate) { | 1054 void Shell::InstallUtilityScript(Isolate* isolate) { |
| 1109 NoUseStrongForUtilityScriptScope no_use_strong; | 1055 NoUseStrongForUtilityScriptScope no_use_strong; |
| 1110 HandleScope scope(isolate); | 1056 HandleScope scope(isolate); |
| 1111 // If we use the utility context, we have to set the security tokens so that | 1057 // If we use the utility context, we have to set the security tokens so that |
| 1112 // utility, evaluation and debug context can all access each other. | 1058 // utility, evaluation and debug context can all access each other. |
| 1059 Local<ObjectTemplate> global_template = CreateGlobalTemplate(isolate); |
| 1060 utility_context_.Reset(isolate, Context::New(isolate, NULL, global_template)); |
| 1113 v8::Local<v8::Context> utility_context = | 1061 v8::Local<v8::Context> utility_context = |
| 1114 v8::Local<v8::Context>::New(isolate, utility_context_); | 1062 v8::Local<v8::Context>::New(isolate, utility_context_); |
| 1115 v8::Local<v8::Context> evaluation_context = | 1063 v8::Local<v8::Context> evaluation_context = |
| 1116 v8::Local<v8::Context>::New(isolate, evaluation_context_); | 1064 v8::Local<v8::Context>::New(isolate, evaluation_context_); |
| 1117 utility_context->SetSecurityToken(Undefined(isolate)); | 1065 utility_context->SetSecurityToken(Undefined(isolate)); |
| 1118 evaluation_context->SetSecurityToken(Undefined(isolate)); | 1066 evaluation_context->SetSecurityToken(Undefined(isolate)); |
| 1119 v8::Context::Scope context_scope(utility_context); | 1067 v8::Context::Scope context_scope(utility_context); |
| 1120 | 1068 |
| 1121 if (i::FLAG_debugger) printf("JavaScript debugger enabled\n"); | |
| 1122 // Install the debugger object in the utility scope | |
| 1123 i::Debug* debug = reinterpret_cast<i::Isolate*>(isolate)->debug(); | |
| 1124 debug->Load(); | |
| 1125 i::Handle<i::Context> debug_context = debug->debug_context(); | |
| 1126 i::Handle<i::JSObject> js_debug | |
| 1127 = i::Handle<i::JSObject>(debug_context->global_object()); | |
| 1128 utility_context->Global() | |
| 1129 ->Set(utility_context, | |
| 1130 String::NewFromUtf8(isolate, "$debug", NewStringType::kNormal) | |
| 1131 .ToLocalChecked(), | |
| 1132 Utils::ToLocal(js_debug)) | |
| 1133 .FromJust(); | |
| 1134 debug_context->set_security_token( | |
| 1135 reinterpret_cast<i::Isolate*>(isolate)->heap()->undefined_value()); | |
| 1136 | |
| 1137 // Run the d8 shell utility script in the utility context | 1069 // Run the d8 shell utility script in the utility context |
| 1138 int source_index = i::NativesCollection<i::D8>::GetIndex("d8"); | 1070 int source_index = i::NativesCollection<i::D8>::GetIndex("d8"); |
| 1139 i::Vector<const char> shell_source = | 1071 i::Vector<const char> shell_source = |
| 1140 i::NativesCollection<i::D8>::GetScriptSource(source_index); | 1072 i::NativesCollection<i::D8>::GetScriptSource(source_index); |
| 1141 i::Vector<const char> shell_source_name = | 1073 i::Vector<const char> shell_source_name = |
| 1142 i::NativesCollection<i::D8>::GetScriptName(source_index); | 1074 i::NativesCollection<i::D8>::GetScriptName(source_index); |
| 1143 Local<String> source = | 1075 Local<String> source = |
| 1144 String::NewFromUtf8(isolate, shell_source.start(), NewStringType::kNormal, | 1076 String::NewFromUtf8(isolate, shell_source.start(), NewStringType::kNormal, |
| 1145 shell_source.length()).ToLocalChecked(); | 1077 shell_source.length()).ToLocalChecked(); |
| 1146 Local<String> name = | 1078 Local<String> name = |
| 1147 String::NewFromUtf8(isolate, shell_source_name.start(), | 1079 String::NewFromUtf8(isolate, shell_source_name.start(), |
| 1148 NewStringType::kNormal, | 1080 NewStringType::kNormal, |
| 1149 shell_source_name.length()).ToLocalChecked(); | 1081 shell_source_name.length()).ToLocalChecked(); |
| 1150 ScriptOrigin origin(name); | 1082 ScriptOrigin origin(name); |
| 1151 Local<Script> script = | 1083 Local<Script> script = |
| 1152 Script::Compile(utility_context, source, &origin).ToLocalChecked(); | 1084 Script::Compile(utility_context, source, &origin).ToLocalChecked(); |
| 1153 script->Run(utility_context).ToLocalChecked(); | 1085 script->Run(utility_context).ToLocalChecked(); |
| 1154 // Mark the d8 shell script as native to avoid it showing up as normal source | 1086 // Mark the d8 shell script as native to avoid it showing up as normal source |
| 1155 // in the debugger. | 1087 // in the debugger. |
| 1156 i::Handle<i::Object> compiled_script = Utils::OpenHandle(*script); | 1088 i::Handle<i::Object> compiled_script = Utils::OpenHandle(*script); |
| 1157 i::Handle<i::Script> script_object = compiled_script->IsJSFunction() | 1089 i::Handle<i::Script> script_object = compiled_script->IsJSFunction() |
| 1158 ? i::Handle<i::Script>(i::Script::cast( | 1090 ? i::Handle<i::Script>(i::Script::cast( |
| 1159 i::JSFunction::cast(*compiled_script)->shared()->script())) | 1091 i::JSFunction::cast(*compiled_script)->shared()->script())) |
| 1160 : i::Handle<i::Script>(i::Script::cast( | 1092 : i::Handle<i::Script>(i::Script::cast( |
| 1161 i::SharedFunctionInfo::cast(*compiled_script)->script())); | 1093 i::SharedFunctionInfo::cast(*compiled_script)->script())); |
| 1162 script_object->set_type(i::Smi::FromInt(i::Script::TYPE_NATIVE)); | 1094 script_object->set_type(i::Smi::FromInt(i::Script::TYPE_NATIVE)); |
| 1163 | |
| 1164 // Start the in-process debugger if requested. | |
| 1165 if (i::FLAG_debugger) v8::Debug::SetDebugEventListener(HandleDebugEvent); | |
| 1166 } | 1095 } |
| 1167 #endif // !V8_SHARED | 1096 #endif // !V8_SHARED |
| 1168 | 1097 |
| 1169 | 1098 |
| 1170 Local<ObjectTemplate> Shell::CreateGlobalTemplate(Isolate* isolate) { | 1099 Local<ObjectTemplate> Shell::CreateGlobalTemplate(Isolate* isolate) { |
| 1171 Local<ObjectTemplate> global_template = ObjectTemplate::New(isolate); | 1100 Local<ObjectTemplate> global_template = ObjectTemplate::New(isolate); |
| 1172 global_template->Set( | 1101 global_template->Set( |
| 1173 String::NewFromUtf8(isolate, "print", NewStringType::kNormal) | 1102 String::NewFromUtf8(isolate, "print", NewStringType::kNormal) |
| 1174 .ToLocalChecked(), | 1103 .ToLocalChecked(), |
| 1175 FunctionTemplate::New(isolate, Print)); | 1104 FunctionTemplate::New(isolate, Print)); |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1291 | 1220 |
| 1292 void Shell::Initialize(Isolate* isolate) { | 1221 void Shell::Initialize(Isolate* isolate) { |
| 1293 #ifndef V8_SHARED | 1222 #ifndef V8_SHARED |
| 1294 // Set up counters | 1223 // Set up counters |
| 1295 if (i::StrLength(i::FLAG_map_counters) != 0) | 1224 if (i::StrLength(i::FLAG_map_counters) != 0) |
| 1296 MapCounters(isolate, i::FLAG_map_counters); | 1225 MapCounters(isolate, i::FLAG_map_counters); |
| 1297 #endif // !V8_SHARED | 1226 #endif // !V8_SHARED |
| 1298 } | 1227 } |
| 1299 | 1228 |
| 1300 | 1229 |
| 1301 void Shell::InitializeDebugger(Isolate* isolate) { | |
| 1302 if (options.test_shell) return; | |
| 1303 #ifndef V8_SHARED | |
| 1304 HandleScope scope(isolate); | |
| 1305 Local<ObjectTemplate> global_template = CreateGlobalTemplate(isolate); | |
| 1306 utility_context_.Reset(isolate, | |
| 1307 Context::New(isolate, NULL, global_template)); | |
| 1308 if (utility_context_.IsEmpty()) { | |
| 1309 printf("Failed to initialize debugger\n"); | |
| 1310 Shell::Exit(1); | |
| 1311 } | |
| 1312 #endif // !V8_SHARED | |
| 1313 } | |
| 1314 | |
| 1315 | |
| 1316 Local<Context> Shell::CreateEvaluationContext(Isolate* isolate) { | 1230 Local<Context> Shell::CreateEvaluationContext(Isolate* isolate) { |
| 1317 #ifndef V8_SHARED | 1231 #ifndef V8_SHARED |
| 1318 // This needs to be a critical section since this is not thread-safe | 1232 // This needs to be a critical section since this is not thread-safe |
| 1319 base::LockGuard<base::Mutex> lock_guard(context_mutex_.Pointer()); | 1233 base::LockGuard<base::Mutex> lock_guard(context_mutex_.Pointer()); |
| 1320 #endif // !V8_SHARED | 1234 #endif // !V8_SHARED |
| 1321 // Initialize the global objects | 1235 // Initialize the global objects |
| 1322 Local<ObjectTemplate> global_template = CreateGlobalTemplate(isolate); | 1236 Local<ObjectTemplate> global_template = CreateGlobalTemplate(isolate); |
| 1323 EscapableHandleScope handle_scope(isolate); | 1237 EscapableHandleScope handle_scope(isolate); |
| 1324 Local<Context> context = Context::New(isolate, NULL, global_template); | 1238 Local<Context> context = Context::New(isolate, NULL, global_template); |
| 1325 DCHECK(!context.IsEmpty()); | 1239 DCHECK(!context.IsEmpty()); |
| (...skipping 694 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2020 } else if (strcmp(argv[i], "--throws") == 0) { | 1934 } else if (strcmp(argv[i], "--throws") == 0) { |
| 2021 options.expected_to_throw = true; | 1935 options.expected_to_throw = true; |
| 2022 argv[i] = NULL; | 1936 argv[i] = NULL; |
| 2023 } else if (strncmp(argv[i], "--icu-data-file=", 16) == 0) { | 1937 } else if (strncmp(argv[i], "--icu-data-file=", 16) == 0) { |
| 2024 options.icu_data_file = argv[i] + 16; | 1938 options.icu_data_file = argv[i] + 16; |
| 2025 argv[i] = NULL; | 1939 argv[i] = NULL; |
| 2026 #ifdef V8_SHARED | 1940 #ifdef V8_SHARED |
| 2027 } else if (strcmp(argv[i], "--dump-counters") == 0) { | 1941 } else if (strcmp(argv[i], "--dump-counters") == 0) { |
| 2028 printf("D8 with shared library does not include counters\n"); | 1942 printf("D8 with shared library does not include counters\n"); |
| 2029 return false; | 1943 return false; |
| 2030 } else if (strcmp(argv[i], "--debugger") == 0) { | |
| 2031 printf("Javascript debugger not included\n"); | |
| 2032 return false; | |
| 2033 #endif // V8_SHARED | 1944 #endif // V8_SHARED |
| 2034 #ifdef V8_USE_EXTERNAL_STARTUP_DATA | 1945 #ifdef V8_USE_EXTERNAL_STARTUP_DATA |
| 2035 } else if (strncmp(argv[i], "--natives_blob=", 15) == 0) { | 1946 } else if (strncmp(argv[i], "--natives_blob=", 15) == 0) { |
| 2036 options.natives_blob = argv[i] + 15; | 1947 options.natives_blob = argv[i] + 15; |
| 2037 argv[i] = NULL; | 1948 argv[i] = NULL; |
| 2038 } else if (strncmp(argv[i], "--snapshot_blob=", 16) == 0) { | 1949 } else if (strncmp(argv[i], "--snapshot_blob=", 16) == 0) { |
| 2039 options.snapshot_blob = argv[i] + 16; | 1950 options.snapshot_blob = argv[i] + 16; |
| 2040 argv[i] = NULL; | 1951 argv[i] = NULL; |
| 2041 #endif // V8_USE_EXTERNAL_STARTUP_DATA | 1952 #endif // V8_USE_EXTERNAL_STARTUP_DATA |
| 2042 } else if (strcmp(argv[i], "--cache") == 0 || | 1953 } else if (strcmp(argv[i], "--cache") == 0 || |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2096 for (int i = 1; i < options.num_isolates; ++i) { | 2007 for (int i = 1; i < options.num_isolates; ++i) { |
| 2097 options.isolate_sources[i].StartExecuteInThread(); | 2008 options.isolate_sources[i].StartExecuteInThread(); |
| 2098 } | 2009 } |
| 2099 #endif // !V8_SHARED | 2010 #endif // !V8_SHARED |
| 2100 { | 2011 { |
| 2101 HandleScope scope(isolate); | 2012 HandleScope scope(isolate); |
| 2102 Local<Context> context = CreateEvaluationContext(isolate); | 2013 Local<Context> context = CreateEvaluationContext(isolate); |
| 2103 if (options.last_run && options.use_interactive_shell()) { | 2014 if (options.last_run && options.use_interactive_shell()) { |
| 2104 // Keep using the same context in the interactive shell. | 2015 // Keep using the same context in the interactive shell. |
| 2105 evaluation_context_.Reset(isolate, context); | 2016 evaluation_context_.Reset(isolate, context); |
| 2106 #ifndef V8_SHARED | |
| 2107 // If the interactive debugger is enabled make sure to activate | |
| 2108 // it before running the files passed on the command line. | |
| 2109 if (i::FLAG_debugger) { | |
| 2110 InstallUtilityScript(isolate); | |
| 2111 } | |
| 2112 #endif // !V8_SHARED | |
| 2113 } | 2017 } |
| 2114 { | 2018 { |
| 2115 Context::Scope cscope(context); | 2019 Context::Scope cscope(context); |
| 2116 PerIsolateData::RealmScope realm_scope(PerIsolateData::Get(isolate)); | 2020 PerIsolateData::RealmScope realm_scope(PerIsolateData::Get(isolate)); |
| 2117 options.isolate_sources[0].Execute(isolate); | 2021 options.isolate_sources[0].Execute(isolate); |
| 2118 } | 2022 } |
| 2119 } | 2023 } |
| 2120 CollectGarbage(isolate); | 2024 CollectGarbage(isolate); |
| 2121 #ifndef V8_SHARED | 2025 #ifndef V8_SHARED |
| 2122 for (int i = 1; i < options.num_isolates; ++i) { | 2026 for (int i = 1; i < options.num_isolates; ++i) { |
| (...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2528 create_params.create_histogram_callback = CreateHistogram; | 2432 create_params.create_histogram_callback = CreateHistogram; |
| 2529 create_params.add_histogram_sample_callback = AddHistogramSample; | 2433 create_params.add_histogram_sample_callback = AddHistogramSample; |
| 2530 } | 2434 } |
| 2531 #endif | 2435 #endif |
| 2532 Isolate* isolate = Isolate::New(create_params); | 2436 Isolate* isolate = Isolate::New(create_params); |
| 2533 DumbLineEditor dumb_line_editor(isolate); | 2437 DumbLineEditor dumb_line_editor(isolate); |
| 2534 { | 2438 { |
| 2535 Isolate::Scope scope(isolate); | 2439 Isolate::Scope scope(isolate); |
| 2536 Initialize(isolate); | 2440 Initialize(isolate); |
| 2537 PerIsolateData data(isolate); | 2441 PerIsolateData data(isolate); |
| 2538 InitializeDebugger(isolate); | |
| 2539 | 2442 |
| 2540 #ifndef V8_SHARED | 2443 #ifndef V8_SHARED |
| 2541 if (options.dump_heap_constants) { | 2444 if (options.dump_heap_constants) { |
| 2542 DumpHeapConstants(reinterpret_cast<i::Isolate*>(isolate)); | 2445 DumpHeapConstants(reinterpret_cast<i::Isolate*>(isolate)); |
| 2543 return 0; | 2446 return 0; |
| 2544 } | 2447 } |
| 2545 #endif | 2448 #endif |
| 2546 | 2449 |
| 2547 if (options.stress_opt || options.stress_deopt) { | 2450 if (options.stress_opt || options.stress_deopt) { |
| 2548 Testing::SetStressRunType(options.stress_opt | 2451 Testing::SetStressRunType(options.stress_opt |
| (...skipping 18 matching lines...) Expand all Loading... |
| 2567 } | 2470 } |
| 2568 #endif | 2471 #endif |
| 2569 } else { | 2472 } else { |
| 2570 result = RunMain(isolate, argc, argv); | 2473 result = RunMain(isolate, argc, argv); |
| 2571 } | 2474 } |
| 2572 | 2475 |
| 2573 // Run interactive shell if explicitly requested or if no script has been | 2476 // Run interactive shell if explicitly requested or if no script has been |
| 2574 // executed, but never on --test | 2477 // executed, but never on --test |
| 2575 if (options.use_interactive_shell()) { | 2478 if (options.use_interactive_shell()) { |
| 2576 #ifndef V8_SHARED | 2479 #ifndef V8_SHARED |
| 2577 if (!i::FLAG_debugger) { | 2480 InstallUtilityScript(isolate); |
| 2578 InstallUtilityScript(isolate); | |
| 2579 } | |
| 2580 #endif // !V8_SHARED | 2481 #endif // !V8_SHARED |
| 2581 RunShell(isolate); | 2482 RunShell(isolate); |
| 2582 } | 2483 } |
| 2583 | 2484 |
| 2584 // Shut down contexts and collect garbage. | 2485 // Shut down contexts and collect garbage. |
| 2585 evaluation_context_.Reset(); | 2486 evaluation_context_.Reset(); |
| 2586 #ifndef V8_SHARED | 2487 #ifndef V8_SHARED |
| 2587 utility_context_.Reset(); | 2488 utility_context_.Reset(); |
| 2588 #endif // !V8_SHARED | 2489 #endif // !V8_SHARED |
| 2589 CollectGarbage(isolate); | 2490 CollectGarbage(isolate); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 2606 } | 2507 } |
| 2607 | 2508 |
| 2608 } // namespace v8 | 2509 } // namespace v8 |
| 2609 | 2510 |
| 2610 | 2511 |
| 2611 #ifndef GOOGLE3 | 2512 #ifndef GOOGLE3 |
| 2612 int main(int argc, char* argv[]) { | 2513 int main(int argc, char* argv[]) { |
| 2613 return v8::Shell::Main(argc, argv); | 2514 return v8::Shell::Main(argc, argv); |
| 2614 } | 2515 } |
| 2615 #endif | 2516 #endif |
| OLD | NEW |