| 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 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 int realm_switch_; | 160 int realm_switch_; |
| 161 Global<Context>* realms_; | 161 Global<Context>* realms_; |
| 162 Global<Value> realm_shared_; | 162 Global<Value> realm_shared_; |
| 163 | 163 |
| 164 int RealmIndexOrThrow(const v8::FunctionCallbackInfo<v8::Value>& args, | 164 int RealmIndexOrThrow(const v8::FunctionCallbackInfo<v8::Value>& args, |
| 165 int arg_offset); | 165 int arg_offset); |
| 166 int RealmFind(Local<Context> context); | 166 int RealmFind(Local<Context> context); |
| 167 }; | 167 }; |
| 168 | 168 |
| 169 | 169 |
| 170 LineEditor *LineEditor::current_ = NULL; | |
| 171 | |
| 172 | |
| 173 LineEditor::LineEditor(Type type, const char* name) | |
| 174 : type_(type), name_(name) { | |
| 175 if (current_ == NULL || current_->type_ < type) current_ = this; | |
| 176 } | |
| 177 | |
| 178 | |
| 179 class DumbLineEditor: public LineEditor { | |
| 180 public: | |
| 181 explicit DumbLineEditor(Isolate* isolate) | |
| 182 : LineEditor(LineEditor::DUMB, "dumb"), isolate_(isolate) { } | |
| 183 virtual Local<String> Prompt(const char* prompt); | |
| 184 | |
| 185 private: | |
| 186 Isolate* isolate_; | |
| 187 }; | |
| 188 | |
| 189 | |
| 190 Local<String> DumbLineEditor::Prompt(const char* prompt) { | |
| 191 printf("%s", prompt); | |
| 192 #if defined(__native_client__) | |
| 193 // Native Client libc is used to being embedded in Chrome and | |
| 194 // has trouble recognizing when to flush. | |
| 195 fflush(stdout); | |
| 196 #endif | |
| 197 return Shell::ReadFromStdin(isolate_); | |
| 198 } | |
| 199 | |
| 200 | |
| 201 #ifndef V8_SHARED | 170 #ifndef V8_SHARED |
| 202 CounterMap* Shell::counter_map_; | 171 CounterMap* Shell::counter_map_; |
| 203 base::OS::MemoryMappedFile* Shell::counters_file_ = NULL; | 172 base::OS::MemoryMappedFile* Shell::counters_file_ = NULL; |
| 204 CounterCollection Shell::local_counters_; | 173 CounterCollection Shell::local_counters_; |
| 205 CounterCollection* Shell::counters_ = &local_counters_; | 174 CounterCollection* Shell::counters_ = &local_counters_; |
| 206 base::LazyMutex Shell::context_mutex_; | 175 base::LazyMutex Shell::context_mutex_; |
| 207 const base::TimeTicks Shell::kInitialTicks = | 176 const base::TimeTicks Shell::kInitialTicks = |
| 208 base::TimeTicks::HighResolutionNow(); | 177 base::TimeTicks::HighResolutionNow(); |
| 209 Global<Context> Shell::utility_context_; | 178 Global<Context> Shell::utility_context_; |
| 210 base::LazyMutex Shell::workers_mutex_; | 179 base::LazyMutex Shell::workers_mutex_; |
| 211 bool Shell::allow_new_workers_ = true; | 180 bool Shell::allow_new_workers_ = true; |
| 212 i::List<Worker*> Shell::workers_; | 181 i::List<Worker*> Shell::workers_; |
| 213 i::List<SharedArrayBuffer::Contents> Shell::externalized_shared_contents_; | 182 i::List<SharedArrayBuffer::Contents> Shell::externalized_shared_contents_; |
| 214 #endif // !V8_SHARED | 183 #endif // !V8_SHARED |
| 215 | 184 |
| 216 Global<Context> Shell::evaluation_context_; | 185 Global<Context> Shell::evaluation_context_; |
| 217 ArrayBuffer::Allocator* Shell::array_buffer_allocator; | 186 ArrayBuffer::Allocator* Shell::array_buffer_allocator; |
| 218 ShellOptions Shell::options; | 187 ShellOptions Shell::options; |
| 219 const char* Shell::kPrompt = "d8> "; | |
| 220 base::OnceType Shell::quit_once_ = V8_ONCE_INIT; | 188 base::OnceType Shell::quit_once_ = V8_ONCE_INIT; |
| 221 | 189 |
| 222 #ifndef V8_SHARED | 190 #ifndef V8_SHARED |
| 223 bool CounterMap::Match(void* key1, void* key2) { | 191 bool CounterMap::Match(void* key1, void* key2) { |
| 224 const char* name1 = reinterpret_cast<const char*>(key1); | 192 const char* name1 = reinterpret_cast<const char*>(key1); |
| 225 const char* name2 = reinterpret_cast<const char*>(key2); | 193 const char* name2 = reinterpret_cast<const char*>(key2); |
| 226 return strcmp(name1, name2) == 0; | 194 return strcmp(name1, name2) == 0; |
| 227 } | 195 } |
| 228 #endif // !V8_SHARED | 196 #endif // !V8_SHARED |
| 229 | 197 |
| (...skipping 682 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 912 } | 880 } |
| 913 } | 881 } |
| 914 printf("\n"); | 882 printf("\n"); |
| 915 #ifndef V8_SHARED | 883 #ifndef V8_SHARED |
| 916 if (enter_context) utility_context->Exit(); | 884 if (enter_context) utility_context->Exit(); |
| 917 #endif // !V8_SHARED | 885 #endif // !V8_SHARED |
| 918 } | 886 } |
| 919 | 887 |
| 920 | 888 |
| 921 #ifndef V8_SHARED | 889 #ifndef V8_SHARED |
| 922 Local<Array> Shell::GetCompletions(Isolate* isolate, Local<String> text, | |
| 923 Local<String> full) { | |
| 924 EscapableHandleScope handle_scope(isolate); | |
| 925 v8::Local<v8::Context> utility_context = | |
| 926 v8::Local<v8::Context>::New(isolate, utility_context_); | |
| 927 v8::Context::Scope context_scope(utility_context); | |
| 928 Local<Object> global = utility_context->Global(); | |
| 929 Local<Value> fun = global->Get(utility_context, | |
| 930 String::NewFromUtf8(isolate, "GetCompletions", | |
| 931 NewStringType::kNormal) | |
| 932 .ToLocalChecked()).ToLocalChecked(); | |
| 933 static const int kArgc = 3; | |
| 934 v8::Local<v8::Context> evaluation_context = | |
| 935 v8::Local<v8::Context>::New(isolate, evaluation_context_); | |
| 936 Local<Value> argv[kArgc] = {evaluation_context->Global(), text, full}; | |
| 937 Local<Value> val = Local<Function>::Cast(fun) | |
| 938 ->Call(utility_context, global, kArgc, argv) | |
| 939 .ToLocalChecked(); | |
| 940 return handle_scope.Escape(Local<Array>::Cast(val)); | |
| 941 } | |
| 942 | |
| 943 | |
| 944 int32_t* Counter::Bind(const char* name, bool is_histogram) { | 890 int32_t* Counter::Bind(const char* name, bool is_histogram) { |
| 945 int i; | 891 int i; |
| 946 for (i = 0; i < kMaxNameSize - 1 && name[i]; i++) | 892 for (i = 0; i < kMaxNameSize - 1 && name[i]; i++) |
| 947 name_[i] = static_cast<char>(name[i]); | 893 name_[i] = static_cast<char>(name[i]); |
| 948 name_[i] = '\0'; | 894 name_[i] = '\0'; |
| 949 is_histogram_ = is_histogram; | 895 is_histogram_ = is_histogram; |
| 950 return ptr(); | 896 return ptr(); |
| 951 } | 897 } |
| 952 | 898 |
| 953 | 899 |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1278 }; | 1224 }; |
| 1279 | 1225 |
| 1280 | 1226 |
| 1281 inline bool operator<(const CounterAndKey& lhs, const CounterAndKey& rhs) { | 1227 inline bool operator<(const CounterAndKey& lhs, const CounterAndKey& rhs) { |
| 1282 return strcmp(lhs.key, rhs.key) < 0; | 1228 return strcmp(lhs.key, rhs.key) < 0; |
| 1283 } | 1229 } |
| 1284 #endif // !V8_SHARED | 1230 #endif // !V8_SHARED |
| 1285 | 1231 |
| 1286 | 1232 |
| 1287 void Shell::OnExit(v8::Isolate* isolate) { | 1233 void Shell::OnExit(v8::Isolate* isolate) { |
| 1288 LineEditor* line_editor = LineEditor::Get(); | |
| 1289 if (line_editor) line_editor->Close(); | |
| 1290 #ifndef V8_SHARED | 1234 #ifndef V8_SHARED |
| 1291 reinterpret_cast<i::Isolate*>(isolate)->DumpAndResetCompilationStats(); | 1235 reinterpret_cast<i::Isolate*>(isolate)->DumpAndResetCompilationStats(); |
| 1292 if (i::FLAG_dump_counters) { | 1236 if (i::FLAG_dump_counters) { |
| 1293 int number_of_counters = 0; | 1237 int number_of_counters = 0; |
| 1294 for (CounterMap::Iterator i(counter_map_); i.More(); i.Next()) { | 1238 for (CounterMap::Iterator i(counter_map_); i.More(); i.Next()) { |
| 1295 number_of_counters++; | 1239 number_of_counters++; |
| 1296 } | 1240 } |
| 1297 CounterAndKey* counters = new CounterAndKey[number_of_counters]; | 1241 CounterAndKey* counters = new CounterAndKey[number_of_counters]; |
| 1298 int j = 0; | 1242 int j = 0; |
| 1299 for (CounterMap::Iterator i(counter_map_); i.More(); i.Next(), j++) { | 1243 for (CounterMap::Iterator i(counter_map_); i.More(); i.Next(), j++) { |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1437 | 1381 |
| 1438 void Shell::RunShell(Isolate* isolate) { | 1382 void Shell::RunShell(Isolate* isolate) { |
| 1439 HandleScope outer_scope(isolate); | 1383 HandleScope outer_scope(isolate); |
| 1440 v8::Local<v8::Context> context = | 1384 v8::Local<v8::Context> context = |
| 1441 v8::Local<v8::Context>::New(isolate, evaluation_context_); | 1385 v8::Local<v8::Context>::New(isolate, evaluation_context_); |
| 1442 v8::Context::Scope context_scope(context); | 1386 v8::Context::Scope context_scope(context); |
| 1443 PerIsolateData::RealmScope realm_scope(PerIsolateData::Get(isolate)); | 1387 PerIsolateData::RealmScope realm_scope(PerIsolateData::Get(isolate)); |
| 1444 Local<String> name = | 1388 Local<String> name = |
| 1445 String::NewFromUtf8(isolate, "(d8)", NewStringType::kNormal) | 1389 String::NewFromUtf8(isolate, "(d8)", NewStringType::kNormal) |
| 1446 .ToLocalChecked(); | 1390 .ToLocalChecked(); |
| 1447 LineEditor* console = LineEditor::Get(); | 1391 printf("V8 version %s\n", V8::GetVersion()); |
| 1448 printf("V8 version %s [console: %s]\n", V8::GetVersion(), console->name()); | |
| 1449 console->Open(isolate); | |
| 1450 while (true) { | 1392 while (true) { |
| 1451 HandleScope inner_scope(isolate); | 1393 HandleScope inner_scope(isolate); |
| 1452 Local<String> input = console->Prompt(Shell::kPrompt); | 1394 printf(" d8>"); |
| 1395 #if defined(__native_client__) |
| 1396 // Native Client libc is used to being embedded in Chrome and |
| 1397 // has trouble recognizing when to flush. |
| 1398 fflush(stdout); |
| 1399 #endif |
| 1400 Local<String> input = Shell::ReadFromStdin(isolate); |
| 1453 if (input.IsEmpty()) break; | 1401 if (input.IsEmpty()) break; |
| 1454 ExecuteString(isolate, input, name, true, true); | 1402 ExecuteString(isolate, input, name, true, true); |
| 1455 } | 1403 } |
| 1456 printf("\n"); | 1404 printf("\n"); |
| 1457 } | 1405 } |
| 1458 | 1406 |
| 1459 | 1407 |
| 1460 SourceGroup::~SourceGroup() { | 1408 SourceGroup::~SourceGroup() { |
| 1461 #ifndef V8_SHARED | 1409 #ifndef V8_SHARED |
| 1462 delete thread_; | 1410 delete thread_; |
| (...skipping 964 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2427 base::SysInfo::AmountOfVirtualMemory()); | 2375 base::SysInfo::AmountOfVirtualMemory()); |
| 2428 | 2376 |
| 2429 Shell::counter_map_ = new CounterMap(); | 2377 Shell::counter_map_ = new CounterMap(); |
| 2430 if (i::FLAG_dump_counters || i::FLAG_track_gc_object_stats) { | 2378 if (i::FLAG_dump_counters || i::FLAG_track_gc_object_stats) { |
| 2431 create_params.counter_lookup_callback = LookupCounter; | 2379 create_params.counter_lookup_callback = LookupCounter; |
| 2432 create_params.create_histogram_callback = CreateHistogram; | 2380 create_params.create_histogram_callback = CreateHistogram; |
| 2433 create_params.add_histogram_sample_callback = AddHistogramSample; | 2381 create_params.add_histogram_sample_callback = AddHistogramSample; |
| 2434 } | 2382 } |
| 2435 #endif | 2383 #endif |
| 2436 Isolate* isolate = Isolate::New(create_params); | 2384 Isolate* isolate = Isolate::New(create_params); |
| 2437 DumbLineEditor dumb_line_editor(isolate); | |
| 2438 { | 2385 { |
| 2439 Isolate::Scope scope(isolate); | 2386 Isolate::Scope scope(isolate); |
| 2440 Initialize(isolate); | 2387 Initialize(isolate); |
| 2441 PerIsolateData data(isolate); | 2388 PerIsolateData data(isolate); |
| 2442 | 2389 |
| 2443 #ifndef V8_SHARED | 2390 #ifndef V8_SHARED |
| 2444 if (options.dump_heap_constants) { | 2391 if (options.dump_heap_constants) { |
| 2445 DumpHeapConstants(reinterpret_cast<i::Isolate*>(isolate)); | 2392 DumpHeapConstants(reinterpret_cast<i::Isolate*>(isolate)); |
| 2446 return 0; | 2393 return 0; |
| 2447 } | 2394 } |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2507 } | 2454 } |
| 2508 | 2455 |
| 2509 } // namespace v8 | 2456 } // namespace v8 |
| 2510 | 2457 |
| 2511 | 2458 |
| 2512 #ifndef GOOGLE3 | 2459 #ifndef GOOGLE3 |
| 2513 int main(int argc, char* argv[]) { | 2460 int main(int argc, char* argv[]) { |
| 2514 return v8::Shell::Main(argc, argv); | 2461 return v8::Shell::Main(argc, argv); |
| 2515 } | 2462 } |
| 2516 #endif | 2463 #endif |
| OLD | NEW |