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

Side by Side Diff: src/d8.cc

Issue 256653004: Always include debugger support. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Makefile Created 6 years, 7 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/d8.h ('k') | src/d8-debug.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 60
61 #ifndef V8_SHARED 61 #ifndef V8_SHARED
62 #include "api.h" 62 #include "api.h"
63 #include "checks.h" 63 #include "checks.h"
64 #include "cpu.h" 64 #include "cpu.h"
65 #include "d8-debug.h" 65 #include "d8-debug.h"
66 #include "debug.h" 66 #include "debug.h"
67 #include "natives.h" 67 #include "natives.h"
68 #include "platform.h" 68 #include "platform.h"
69 #include "v8.h" 69 #include "v8.h"
70 #endif // V8_SHARED 70 #endif // !V8_SHARED
71 71
72 #if !defined(_WIN32) && !defined(_WIN64) 72 #if !defined(_WIN32) && !defined(_WIN64)
73 #include <unistd.h> // NOLINT 73 #include <unistd.h> // NOLINT
74 #endif 74 #endif
75 75
76 #ifndef ASSERT 76 #ifndef ASSERT
77 #define ASSERT(condition) assert(condition) 77 #define ASSERT(condition) assert(condition)
78 #endif 78 #endif
79 79
80 namespace v8 { 80 namespace v8 {
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 156
157 157
158 #ifndef V8_SHARED 158 #ifndef V8_SHARED
159 CounterMap* Shell::counter_map_; 159 CounterMap* Shell::counter_map_;
160 i::OS::MemoryMappedFile* Shell::counters_file_ = NULL; 160 i::OS::MemoryMappedFile* Shell::counters_file_ = NULL;
161 CounterCollection Shell::local_counters_; 161 CounterCollection Shell::local_counters_;
162 CounterCollection* Shell::counters_ = &local_counters_; 162 CounterCollection* Shell::counters_ = &local_counters_;
163 i::Mutex Shell::context_mutex_; 163 i::Mutex Shell::context_mutex_;
164 const i::TimeTicks Shell::kInitialTicks = i::TimeTicks::HighResolutionNow(); 164 const i::TimeTicks Shell::kInitialTicks = i::TimeTicks::HighResolutionNow();
165 Persistent<Context> Shell::utility_context_; 165 Persistent<Context> Shell::utility_context_;
166 #endif // V8_SHARED 166 #endif // !V8_SHARED
167 167
168 Persistent<Context> Shell::evaluation_context_; 168 Persistent<Context> Shell::evaluation_context_;
169 ShellOptions Shell::options; 169 ShellOptions Shell::options;
170 const char* Shell::kPrompt = "d8> "; 170 const char* Shell::kPrompt = "d8> ";
171 171
172 172
173 #ifndef V8_SHARED 173 #ifndef V8_SHARED
174 const int MB = 1024 * 1024; 174 const int MB = 1024 * 1024;
175 175
176 bool CounterMap::Match(void* key1, void* key2) { 176 bool CounterMap::Match(void* key1, void* key2) {
177 const char* name1 = reinterpret_cast<const char*>(key1); 177 const char* name1 = reinterpret_cast<const char*>(key1);
178 const char* name2 = reinterpret_cast<const char*>(key2); 178 const char* name2 = reinterpret_cast<const char*>(key2);
179 return strcmp(name1, name2) == 0; 179 return strcmp(name1, name2) == 0;
180 } 180 }
181 #endif // V8_SHARED 181 #endif // !V8_SHARED
182 182
183 183
184 // Converts a V8 value to a C string. 184 // Converts a V8 value to a C string.
185 const char* Shell::ToCString(const v8::String::Utf8Value& value) { 185 const char* Shell::ToCString(const v8::String::Utf8Value& value) {
186 return *value ? *value : "<string conversion failed>"; 186 return *value ? *value : "<string conversion failed>";
187 } 187 }
188 188
189 189
190 // Executes a string within the current v8 context. 190 // Executes a string within the current v8 context.
191 bool Shell::ExecuteString(Isolate* isolate, 191 bool Shell::ExecuteString(Isolate* isolate,
192 Handle<String> source, 192 Handle<String> source,
193 Handle<Value> name, 193 Handle<Value> name,
194 bool print_result, 194 bool print_result,
195 bool report_exceptions) { 195 bool report_exceptions) {
196 #if !defined(V8_SHARED) && defined(ENABLE_DEBUGGER_SUPPORT) 196 #ifndef V8_SHARED
197 bool FLAG_debugger = i::FLAG_debugger; 197 bool FLAG_debugger = i::FLAG_debugger;
198 #else 198 #else
199 bool FLAG_debugger = false; 199 bool FLAG_debugger = false;
200 #endif // !V8_SHARED && ENABLE_DEBUGGER_SUPPORT 200 #endif // !V8_SHARED
201 HandleScope handle_scope(isolate); 201 HandleScope handle_scope(isolate);
202 TryCatch try_catch; 202 TryCatch try_catch;
203 options.script_executed = true; 203 options.script_executed = true;
204 if (FLAG_debugger) { 204 if (FLAG_debugger) {
205 // When debugging make exceptions appear to be uncaught. 205 // When debugging make exceptions appear to be uncaught.
206 try_catch.SetVerbose(true); 206 try_catch.SetVerbose(true);
207 } 207 }
208 ScriptOrigin origin(name); 208 ScriptOrigin origin(name);
209 ScriptCompiler::Source script_source(source, origin); 209 ScriptCompiler::Source script_source(source, origin);
210 Handle<UnboundScript> script = 210 Handle<UnboundScript> script =
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 return index; 310 return index;
311 } 311 }
312 312
313 313
314 #ifndef V8_SHARED 314 #ifndef V8_SHARED
315 // performance.now() returns a time stamp as double, measured in milliseconds. 315 // performance.now() returns a time stamp as double, measured in milliseconds.
316 void Shell::PerformanceNow(const v8::FunctionCallbackInfo<v8::Value>& args) { 316 void Shell::PerformanceNow(const v8::FunctionCallbackInfo<v8::Value>& args) {
317 i::TimeDelta delta = i::TimeTicks::HighResolutionNow() - kInitialTicks; 317 i::TimeDelta delta = i::TimeTicks::HighResolutionNow() - kInitialTicks;
318 args.GetReturnValue().Set(delta.InMillisecondsF()); 318 args.GetReturnValue().Set(delta.InMillisecondsF());
319 } 319 }
320 #endif // V8_SHARED 320 #endif // !V8_SHARED
321 321
322 322
323 // Realm.current() returns the index of the currently active realm. 323 // Realm.current() returns the index of the currently active realm.
324 void Shell::RealmCurrent(const v8::FunctionCallbackInfo<v8::Value>& args) { 324 void Shell::RealmCurrent(const v8::FunctionCallbackInfo<v8::Value>& args) {
325 Isolate* isolate = args.GetIsolate(); 325 Isolate* isolate = args.GetIsolate();
326 PerIsolateData* data = PerIsolateData::Get(isolate); 326 PerIsolateData* data = PerIsolateData::Get(isolate);
327 int index = data->RealmFind(isolate->GetEnteredContext()); 327 int index = data->RealmFind(isolate->GetEnteredContext());
328 if (index == -1) return; 328 if (index == -1) return;
329 args.GetReturnValue().Set(index); 329 args.GetReturnValue().Set(index);
330 } 330 }
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 554
555 555
556 void Shell::Version(const v8::FunctionCallbackInfo<v8::Value>& args) { 556 void Shell::Version(const v8::FunctionCallbackInfo<v8::Value>& args) {
557 args.GetReturnValue().Set( 557 args.GetReturnValue().Set(
558 String::NewFromUtf8(args.GetIsolate(), V8::GetVersion())); 558 String::NewFromUtf8(args.GetIsolate(), V8::GetVersion()));
559 } 559 }
560 560
561 561
562 void Shell::ReportException(Isolate* isolate, v8::TryCatch* try_catch) { 562 void Shell::ReportException(Isolate* isolate, v8::TryCatch* try_catch) {
563 HandleScope handle_scope(isolate); 563 HandleScope handle_scope(isolate);
564 #if !defined(V8_SHARED) && defined(ENABLE_DEBUGGER_SUPPORT) 564 #ifndef V8_SHARED
565 Handle<Context> utility_context; 565 Handle<Context> utility_context;
566 bool enter_context = !isolate->InContext(); 566 bool enter_context = !isolate->InContext();
567 if (enter_context) { 567 if (enter_context) {
568 utility_context = Local<Context>::New(isolate, utility_context_); 568 utility_context = Local<Context>::New(isolate, utility_context_);
569 utility_context->Enter(); 569 utility_context->Enter();
570 } 570 }
571 #endif // !V8_SHARED && ENABLE_DEBUGGER_SUPPORT 571 #endif // !V8_SHARED
572 v8::String::Utf8Value exception(try_catch->Exception()); 572 v8::String::Utf8Value exception(try_catch->Exception());
573 const char* exception_string = ToCString(exception); 573 const char* exception_string = ToCString(exception);
574 Handle<Message> message = try_catch->Message(); 574 Handle<Message> message = try_catch->Message();
575 if (message.IsEmpty()) { 575 if (message.IsEmpty()) {
576 // V8 didn't provide any extra information about this error; just 576 // V8 didn't provide any extra information about this error; just
577 // print the exception. 577 // print the exception.
578 printf("%s\n", exception_string); 578 printf("%s\n", exception_string);
579 } else { 579 } else {
580 // Print (filename):(line number): (message). 580 // Print (filename):(line number): (message).
581 v8::String::Utf8Value filename(message->GetScriptResourceName()); 581 v8::String::Utf8Value filename(message->GetScriptResourceName());
(...skipping 14 matching lines...) Expand all
596 printf("^"); 596 printf("^");
597 } 597 }
598 printf("\n"); 598 printf("\n");
599 v8::String::Utf8Value stack_trace(try_catch->StackTrace()); 599 v8::String::Utf8Value stack_trace(try_catch->StackTrace());
600 if (stack_trace.length() > 0) { 600 if (stack_trace.length() > 0) {
601 const char* stack_trace_string = ToCString(stack_trace); 601 const char* stack_trace_string = ToCString(stack_trace);
602 printf("%s\n", stack_trace_string); 602 printf("%s\n", stack_trace_string);
603 } 603 }
604 } 604 }
605 printf("\n"); 605 printf("\n");
606 #if !defined(V8_SHARED) && defined(ENABLE_DEBUGGER_SUPPORT) 606 #ifndef V8_SHARED
607 if (enter_context) utility_context->Exit(); 607 if (enter_context) utility_context->Exit();
608 #endif // !V8_SHARED && ENABLE_DEBUGGER_SUPPORT 608 #endif // !V8_SHARED
609 } 609 }
610 610
611 611
612 #ifndef V8_SHARED 612 #ifndef V8_SHARED
613 Handle<Array> Shell::GetCompletions(Isolate* isolate, 613 Handle<Array> Shell::GetCompletions(Isolate* isolate,
614 Handle<String> text, 614 Handle<String> text,
615 Handle<String> full) { 615 Handle<String> full) {
616 EscapableHandleScope handle_scope(isolate); 616 EscapableHandleScope handle_scope(isolate);
617 v8::Local<v8::Context> utility_context = 617 v8::Local<v8::Context> utility_context =
618 v8::Local<v8::Context>::New(isolate, utility_context_); 618 v8::Local<v8::Context>::New(isolate, utility_context_);
619 v8::Context::Scope context_scope(utility_context); 619 v8::Context::Scope context_scope(utility_context);
620 Handle<Object> global = utility_context->Global(); 620 Handle<Object> global = utility_context->Global();
621 Local<Value> fun = 621 Local<Value> fun =
622 global->Get(String::NewFromUtf8(isolate, "GetCompletions")); 622 global->Get(String::NewFromUtf8(isolate, "GetCompletions"));
623 static const int kArgc = 3; 623 static const int kArgc = 3;
624 v8::Local<v8::Context> evaluation_context = 624 v8::Local<v8::Context> evaluation_context =
625 v8::Local<v8::Context>::New(isolate, evaluation_context_); 625 v8::Local<v8::Context>::New(isolate, evaluation_context_);
626 Handle<Value> argv[kArgc] = { evaluation_context->Global(), text, full }; 626 Handle<Value> argv[kArgc] = { evaluation_context->Global(), text, full };
627 Local<Value> val = Local<Function>::Cast(fun)->Call(global, kArgc, argv); 627 Local<Value> val = Local<Function>::Cast(fun)->Call(global, kArgc, argv);
628 return handle_scope.Escape(Local<Array>::Cast(val)); 628 return handle_scope.Escape(Local<Array>::Cast(val));
629 } 629 }
630 630
631 631
632 #ifdef ENABLE_DEBUGGER_SUPPORT
633 Local<Object> Shell::DebugMessageDetails(Isolate* isolate, 632 Local<Object> Shell::DebugMessageDetails(Isolate* isolate,
634 Handle<String> message) { 633 Handle<String> message) {
635 EscapableHandleScope handle_scope(isolate); 634 EscapableHandleScope handle_scope(isolate);
636 v8::Local<v8::Context> context = 635 v8::Local<v8::Context> context =
637 v8::Local<v8::Context>::New(isolate, utility_context_); 636 v8::Local<v8::Context>::New(isolate, utility_context_);
638 v8::Context::Scope context_scope(context); 637 v8::Context::Scope context_scope(context);
639 Handle<Object> global = context->Global(); 638 Handle<Object> global = context->Global();
640 Handle<Value> fun = 639 Handle<Value> fun =
641 global->Get(String::NewFromUtf8(isolate, "DebugMessageDetails")); 640 global->Get(String::NewFromUtf8(isolate, "DebugMessageDetails"));
642 static const int kArgc = 1; 641 static const int kArgc = 1;
(...skipping 20 matching lines...) Expand all
663 662
664 663
665 void Shell::DispatchDebugMessages() { 664 void Shell::DispatchDebugMessages() {
666 Isolate* isolate = v8::Isolate::GetCurrent(); 665 Isolate* isolate = v8::Isolate::GetCurrent();
667 HandleScope handle_scope(isolate); 666 HandleScope handle_scope(isolate);
668 v8::Local<v8::Context> context = 667 v8::Local<v8::Context> context =
669 v8::Local<v8::Context>::New(isolate, Shell::evaluation_context_); 668 v8::Local<v8::Context>::New(isolate, Shell::evaluation_context_);
670 v8::Context::Scope context_scope(context); 669 v8::Context::Scope context_scope(context);
671 v8::Debug::ProcessDebugMessages(); 670 v8::Debug::ProcessDebugMessages();
672 } 671 }
673 #endif // ENABLE_DEBUGGER_SUPPORT
674 #endif // V8_SHARED
675 672
676 673
677 #ifndef V8_SHARED
678 int32_t* Counter::Bind(const char* name, bool is_histogram) { 674 int32_t* Counter::Bind(const char* name, bool is_histogram) {
679 int i; 675 int i;
680 for (i = 0; i < kMaxNameSize - 1 && name[i]; i++) 676 for (i = 0; i < kMaxNameSize - 1 && name[i]; i++)
681 name_[i] = static_cast<char>(name[i]); 677 name_[i] = static_cast<char>(name[i]);
682 name_[i] = '\0'; 678 name_[i] = '\0';
683 is_histogram_ = is_histogram; 679 is_histogram_ = is_histogram;
684 return ptr(); 680 return ptr();
685 } 681 }
686 682
687 683
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
779 // If we use the utility context, we have to set the security tokens so that 775 // If we use the utility context, we have to set the security tokens so that
780 // utility, evaluation and debug context can all access each other. 776 // utility, evaluation and debug context can all access each other.
781 v8::Local<v8::Context> utility_context = 777 v8::Local<v8::Context> utility_context =
782 v8::Local<v8::Context>::New(isolate, utility_context_); 778 v8::Local<v8::Context>::New(isolate, utility_context_);
783 v8::Local<v8::Context> evaluation_context = 779 v8::Local<v8::Context> evaluation_context =
784 v8::Local<v8::Context>::New(isolate, evaluation_context_); 780 v8::Local<v8::Context>::New(isolate, evaluation_context_);
785 utility_context->SetSecurityToken(Undefined(isolate)); 781 utility_context->SetSecurityToken(Undefined(isolate));
786 evaluation_context->SetSecurityToken(Undefined(isolate)); 782 evaluation_context->SetSecurityToken(Undefined(isolate));
787 v8::Context::Scope context_scope(utility_context); 783 v8::Context::Scope context_scope(utility_context);
788 784
789 #ifdef ENABLE_DEBUGGER_SUPPORT
790 if (i::FLAG_debugger) printf("JavaScript debugger enabled\n"); 785 if (i::FLAG_debugger) printf("JavaScript debugger enabled\n");
791 // Install the debugger object in the utility scope 786 // Install the debugger object in the utility scope
792 i::Debug* debug = reinterpret_cast<i::Isolate*>(isolate)->debug(); 787 i::Debug* debug = reinterpret_cast<i::Isolate*>(isolate)->debug();
793 debug->Load(); 788 debug->Load();
794 i::Handle<i::JSObject> js_debug 789 i::Handle<i::JSObject> js_debug
795 = i::Handle<i::JSObject>(debug->debug_context()->global_object()); 790 = i::Handle<i::JSObject>(debug->debug_context()->global_object());
796 utility_context->Global()->Set(String::NewFromUtf8(isolate, "$debug"), 791 utility_context->Global()->Set(String::NewFromUtf8(isolate, "$debug"),
797 Utils::ToLocal(js_debug)); 792 Utils::ToLocal(js_debug));
798 debug->debug_context()->set_security_token( 793 debug->debug_context()->set_security_token(
799 reinterpret_cast<i::Isolate*>(isolate)->heap()->undefined_value()); 794 reinterpret_cast<i::Isolate*>(isolate)->heap()->undefined_value());
800 #endif // ENABLE_DEBUGGER_SUPPORT
801 795
802 // Run the d8 shell utility script in the utility context 796 // Run the d8 shell utility script in the utility context
803 int source_index = i::NativesCollection<i::D8>::GetIndex("d8"); 797 int source_index = i::NativesCollection<i::D8>::GetIndex("d8");
804 i::Vector<const char> shell_source = 798 i::Vector<const char> shell_source =
805 i::NativesCollection<i::D8>::GetRawScriptSource(source_index); 799 i::NativesCollection<i::D8>::GetRawScriptSource(source_index);
806 i::Vector<const char> shell_source_name = 800 i::Vector<const char> shell_source_name =
807 i::NativesCollection<i::D8>::GetScriptName(source_index); 801 i::NativesCollection<i::D8>::GetScriptName(source_index);
808 Handle<String> source = 802 Handle<String> source =
809 String::NewFromUtf8(isolate, shell_source.start(), String::kNormalString, 803 String::NewFromUtf8(isolate, shell_source.start(), String::kNormalString,
810 shell_source.length()); 804 shell_source.length());
811 Handle<String> name = 805 Handle<String> name =
812 String::NewFromUtf8(isolate, shell_source_name.start(), 806 String::NewFromUtf8(isolate, shell_source_name.start(),
813 String::kNormalString, shell_source_name.length()); 807 String::kNormalString, shell_source_name.length());
814 ScriptOrigin origin(name); 808 ScriptOrigin origin(name);
815 Handle<Script> script = Script::Compile(source, &origin); 809 Handle<Script> script = Script::Compile(source, &origin);
816 script->Run(); 810 script->Run();
817 // Mark the d8 shell script as native to avoid it showing up as normal source 811 // Mark the d8 shell script as native to avoid it showing up as normal source
818 // in the debugger. 812 // in the debugger.
819 i::Handle<i::Object> compiled_script = Utils::OpenHandle(*script); 813 i::Handle<i::Object> compiled_script = Utils::OpenHandle(*script);
820 i::Handle<i::Script> script_object = compiled_script->IsJSFunction() 814 i::Handle<i::Script> script_object = compiled_script->IsJSFunction()
821 ? i::Handle<i::Script>(i::Script::cast( 815 ? i::Handle<i::Script>(i::Script::cast(
822 i::JSFunction::cast(*compiled_script)->shared()->script())) 816 i::JSFunction::cast(*compiled_script)->shared()->script()))
823 : i::Handle<i::Script>(i::Script::cast( 817 : i::Handle<i::Script>(i::Script::cast(
824 i::SharedFunctionInfo::cast(*compiled_script)->script())); 818 i::SharedFunctionInfo::cast(*compiled_script)->script()));
825 script_object->set_type(i::Smi::FromInt(i::Script::TYPE_NATIVE)); 819 script_object->set_type(i::Smi::FromInt(i::Script::TYPE_NATIVE));
826 820
827 #ifdef ENABLE_DEBUGGER_SUPPORT
828 // Start the in-process debugger if requested. 821 // Start the in-process debugger if requested.
829 if (i::FLAG_debugger && !i::FLAG_debugger_agent) { 822 if (i::FLAG_debugger && !i::FLAG_debugger_agent) {
830 v8::Debug::SetDebugEventListener2(HandleDebugEvent); 823 v8::Debug::SetDebugEventListener2(HandleDebugEvent);
831 } 824 }
832 #endif // ENABLE_DEBUGGER_SUPPORT
833 } 825 }
834 #endif // V8_SHARED 826 #endif // !V8_SHARED
835 827
836 828
837 #ifdef COMPRESS_STARTUP_DATA_BZ2 829 #ifdef COMPRESS_STARTUP_DATA_BZ2
838 class BZip2Decompressor : public v8::StartupDataDecompressor { 830 class BZip2Decompressor : public v8::StartupDataDecompressor {
839 public: 831 public:
840 virtual ~BZip2Decompressor() { } 832 virtual ~BZip2Decompressor() { }
841 833
842 protected: 834 protected:
843 virtual int DecompressData(char* raw_data, 835 virtual int DecompressData(char* raw_data,
844 int* raw_data_size, 836 int* raw_data_size,
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
900 realm_template->SetAccessor(String::NewFromUtf8(isolate, "shared"), 892 realm_template->SetAccessor(String::NewFromUtf8(isolate, "shared"),
901 RealmSharedGet, RealmSharedSet); 893 RealmSharedGet, RealmSharedSet);
902 global_template->Set(String::NewFromUtf8(isolate, "Realm"), realm_template); 894 global_template->Set(String::NewFromUtf8(isolate, "Realm"), realm_template);
903 895
904 #ifndef V8_SHARED 896 #ifndef V8_SHARED
905 Handle<ObjectTemplate> performance_template = ObjectTemplate::New(isolate); 897 Handle<ObjectTemplate> performance_template = ObjectTemplate::New(isolate);
906 performance_template->Set(String::NewFromUtf8(isolate, "now"), 898 performance_template->Set(String::NewFromUtf8(isolate, "now"),
907 FunctionTemplate::New(isolate, PerformanceNow)); 899 FunctionTemplate::New(isolate, PerformanceNow));
908 global_template->Set(String::NewFromUtf8(isolate, "performance"), 900 global_template->Set(String::NewFromUtf8(isolate, "performance"),
909 performance_template); 901 performance_template);
910 #endif // V8_SHARED 902 #endif // !V8_SHARED
911 903
912 #if !defined(V8_SHARED) && !defined(_WIN32) && !defined(_WIN64) 904 #if !defined(V8_SHARED) && !defined(_WIN32) && !defined(_WIN64)
913 Handle<ObjectTemplate> os_templ = ObjectTemplate::New(isolate); 905 Handle<ObjectTemplate> os_templ = ObjectTemplate::New(isolate);
914 AddOSMethods(isolate, os_templ); 906 AddOSMethods(isolate, os_templ);
915 global_template->Set(String::NewFromUtf8(isolate, "os"), os_templ); 907 global_template->Set(String::NewFromUtf8(isolate, "os"), os_templ);
916 #endif // V8_SHARED 908 #endif // !V8_SHARED && !_WIN32 && !_WIN64
917 909
918 return global_template; 910 return global_template;
919 } 911 }
920 912
921 913
922 void Shell::Initialize(Isolate* isolate) { 914 void Shell::Initialize(Isolate* isolate) {
923 #ifdef COMPRESS_STARTUP_DATA_BZ2 915 #ifdef COMPRESS_STARTUP_DATA_BZ2
924 BZip2Decompressor startup_data_decompressor; 916 BZip2Decompressor startup_data_decompressor;
925 int bz2_result = startup_data_decompressor.Decompress(); 917 int bz2_result = startup_data_decompressor.Decompress();
926 if (bz2_result != BZ_OK) { 918 if (bz2_result != BZ_OK) {
927 fprintf(stderr, "bzip error code: %d\n", bz2_result); 919 fprintf(stderr, "bzip error code: %d\n", bz2_result);
928 Exit(1); 920 Exit(1);
929 } 921 }
930 #endif 922 #endif
931 923
932 #ifndef V8_SHARED 924 #ifndef V8_SHARED
933 Shell::counter_map_ = new CounterMap(); 925 Shell::counter_map_ = new CounterMap();
934 // Set up counters 926 // Set up counters
935 if (i::StrLength(i::FLAG_map_counters) != 0) 927 if (i::StrLength(i::FLAG_map_counters) != 0)
936 MapCounters(i::FLAG_map_counters); 928 MapCounters(i::FLAG_map_counters);
937 if (i::FLAG_dump_counters || i::FLAG_track_gc_object_stats) { 929 if (i::FLAG_dump_counters || i::FLAG_track_gc_object_stats) {
938 V8::SetCounterFunction(LookupCounter); 930 V8::SetCounterFunction(LookupCounter);
939 V8::SetCreateHistogramFunction(CreateHistogram); 931 V8::SetCreateHistogramFunction(CreateHistogram);
940 V8::SetAddHistogramSampleFunction(AddHistogramSample); 932 V8::SetAddHistogramSampleFunction(AddHistogramSample);
941 } 933 }
942 #endif // V8_SHARED 934 #endif // !V8_SHARED
943 } 935 }
944 936
945 937
946 void Shell::InitializeDebugger(Isolate* isolate) { 938 void Shell::InitializeDebugger(Isolate* isolate) {
947 if (options.test_shell) return; 939 if (options.test_shell) return;
948 #ifndef V8_SHARED 940 #ifndef V8_SHARED
949 Locker lock(isolate); 941 Locker lock(isolate);
950 HandleScope scope(isolate); 942 HandleScope scope(isolate);
951 Handle<ObjectTemplate> global_template = CreateGlobalTemplate(isolate); 943 Handle<ObjectTemplate> global_template = CreateGlobalTemplate(isolate);
952 utility_context_.Reset(isolate, 944 utility_context_.Reset(isolate,
953 Context::New(isolate, NULL, global_template)); 945 Context::New(isolate, NULL, global_template));
954 946
955 #ifdef ENABLE_DEBUGGER_SUPPORT
956 // Start the debugger agent if requested. 947 // Start the debugger agent if requested.
957 if (i::FLAG_debugger_agent) { 948 if (i::FLAG_debugger_agent) {
958 v8::Debug::EnableAgent("d8 shell", i::FLAG_debugger_port, true); 949 v8::Debug::EnableAgent("d8 shell", i::FLAG_debugger_port, true);
959 v8::Debug::SetDebugMessageDispatchHandler(DispatchDebugMessages, true); 950 v8::Debug::SetDebugMessageDispatchHandler(DispatchDebugMessages, true);
960 } 951 }
961 #endif // ENABLE_DEBUGGER_SUPPORT 952 #endif // !V8_SHARED
962 #endif // V8_SHARED
963 } 953 }
964 954
965 955
966 Local<Context> Shell::CreateEvaluationContext(Isolate* isolate) { 956 Local<Context> Shell::CreateEvaluationContext(Isolate* isolate) {
967 #ifndef V8_SHARED 957 #ifndef V8_SHARED
968 // This needs to be a critical section since this is not thread-safe 958 // This needs to be a critical section since this is not thread-safe
969 i::LockGuard<i::Mutex> lock_guard(&context_mutex_); 959 i::LockGuard<i::Mutex> lock_guard(&context_mutex_);
970 #endif // V8_SHARED 960 #endif // !V8_SHARED
971 // Initialize the global objects 961 // Initialize the global objects
972 Handle<ObjectTemplate> global_template = CreateGlobalTemplate(isolate); 962 Handle<ObjectTemplate> global_template = CreateGlobalTemplate(isolate);
973 EscapableHandleScope handle_scope(isolate); 963 EscapableHandleScope handle_scope(isolate);
974 Local<Context> context = Context::New(isolate, NULL, global_template); 964 Local<Context> context = Context::New(isolate, NULL, global_template);
975 ASSERT(!context.IsEmpty()); 965 ASSERT(!context.IsEmpty());
976 Context::Scope scope(context); 966 Context::Scope scope(context);
977 967
978 #ifndef V8_SHARED 968 #ifndef V8_SHARED
979 i::Factory* factory = reinterpret_cast<i::Isolate*>(isolate)->factory(); 969 i::Factory* factory = reinterpret_cast<i::Isolate*>(isolate)->factory();
980 i::JSArguments js_args = i::FLAG_js_arguments; 970 i::JSArguments js_args = i::FLAG_js_arguments;
981 i::Handle<i::FixedArray> arguments_array = 971 i::Handle<i::FixedArray> arguments_array =
982 factory->NewFixedArray(js_args.argc); 972 factory->NewFixedArray(js_args.argc);
983 for (int j = 0; j < js_args.argc; j++) { 973 for (int j = 0; j < js_args.argc; j++) {
984 i::Handle<i::String> arg = 974 i::Handle<i::String> arg =
985 factory->NewStringFromUtf8(i::CStrVector(js_args[j])).ToHandleChecked(); 975 factory->NewStringFromUtf8(i::CStrVector(js_args[j])).ToHandleChecked();
986 arguments_array->set(j, *arg); 976 arguments_array->set(j, *arg);
987 } 977 }
988 i::Handle<i::JSArray> arguments_jsarray = 978 i::Handle<i::JSArray> arguments_jsarray =
989 factory->NewJSArrayWithElements(arguments_array); 979 factory->NewJSArrayWithElements(arguments_array);
990 context->Global()->Set(String::NewFromUtf8(isolate, "arguments"), 980 context->Global()->Set(String::NewFromUtf8(isolate, "arguments"),
991 Utils::ToLocal(arguments_jsarray)); 981 Utils::ToLocal(arguments_jsarray));
992 #endif // V8_SHARED 982 #endif // !V8_SHARED
993 return handle_scope.Escape(context); 983 return handle_scope.Escape(context);
994 } 984 }
995 985
996 986
997 void Shell::Exit(int exit_code) { 987 void Shell::Exit(int exit_code) {
998 // Use _exit instead of exit to avoid races between isolate 988 // Use _exit instead of exit to avoid races between isolate
999 // threads and static destructors. 989 // threads and static destructors.
1000 fflush(stdout); 990 fflush(stdout);
1001 fflush(stderr); 991 fflush(stderr);
1002 _exit(exit_code); 992 _exit(exit_code);
1003 } 993 }
1004 994
1005 995
1006 #ifndef V8_SHARED 996 #ifndef V8_SHARED
1007 struct CounterAndKey { 997 struct CounterAndKey {
1008 Counter* counter; 998 Counter* counter;
1009 const char* key; 999 const char* key;
1010 }; 1000 };
1011 1001
1012 1002
1013 inline bool operator<(const CounterAndKey& lhs, const CounterAndKey& rhs) { 1003 inline bool operator<(const CounterAndKey& lhs, const CounterAndKey& rhs) {
1014 return strcmp(lhs.key, rhs.key) < 0; 1004 return strcmp(lhs.key, rhs.key) < 0;
1015 } 1005 }
1016 #endif // V8_SHARED 1006 #endif // !V8_SHARED
1017 1007
1018 1008
1019 void Shell::OnExit() { 1009 void Shell::OnExit() {
1020 LineEditor* line_editor = LineEditor::Get(); 1010 LineEditor* line_editor = LineEditor::Get();
1021 if (line_editor) line_editor->Close(); 1011 if (line_editor) line_editor->Close();
1022 #ifndef V8_SHARED 1012 #ifndef V8_SHARED
1023 if (i::FLAG_dump_counters) { 1013 if (i::FLAG_dump_counters) {
1024 int number_of_counters = 0; 1014 int number_of_counters = 0;
1025 for (CounterMap::Iterator i(counter_map_); i.More(); i.Next()) { 1015 for (CounterMap::Iterator i(counter_map_); i.More(); i.Next()) {
1026 number_of_counters++; 1016 number_of_counters++;
(...skipping 20 matching lines...) Expand all
1047 } else { 1037 } else {
1048 printf("| %-62s | %11i |\n", key, counter->count()); 1038 printf("| %-62s | %11i |\n", key, counter->count());
1049 } 1039 }
1050 } 1040 }
1051 printf("+----------------------------------------------------------------+" 1041 printf("+----------------------------------------------------------------+"
1052 "-------------+\n"); 1042 "-------------+\n");
1053 delete [] counters; 1043 delete [] counters;
1054 } 1044 }
1055 delete counters_file_; 1045 delete counters_file_;
1056 delete counter_map_; 1046 delete counter_map_;
1057 #endif // V8_SHARED 1047 #endif // !V8_SHARED
1058 } 1048 }
1059 1049
1060 1050
1061 1051
1062 static FILE* FOpen(const char* path, const char* mode) { 1052 static FILE* FOpen(const char* path, const char* mode) {
1063 #if defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64)) 1053 #if defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64))
1064 FILE* result; 1054 FILE* result;
1065 if (fopen_s(&result, path, mode) == 0) { 1055 if (fopen_s(&result, path, mode) == 0) {
1066 return result; 1056 return result;
1067 } else { 1057 } else {
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1162 1152
1163 1153
1164 static char* ReadLine(char* data) { 1154 static char* ReadLine(char* data) {
1165 return ReadToken(data, '\n'); 1155 return ReadToken(data, '\n');
1166 } 1156 }
1167 1157
1168 1158
1169 static char* ReadWord(char* data) { 1159 static char* ReadWord(char* data) {
1170 return ReadToken(data, ' '); 1160 return ReadToken(data, ' ');
1171 } 1161 }
1172 #endif // V8_SHARED 1162 #endif // !V8_SHARED
1173 1163
1174 1164
1175 // Reads a file into a v8 string. 1165 // Reads a file into a v8 string.
1176 Handle<String> Shell::ReadFile(Isolate* isolate, const char* name) { 1166 Handle<String> Shell::ReadFile(Isolate* isolate, const char* name) {
1177 int size = 0; 1167 int size = 0;
1178 char* chars = ReadChars(isolate, name, &size); 1168 char* chars = ReadChars(isolate, name, &size);
1179 if (chars == NULL) return Handle<String>(); 1169 if (chars == NULL) return Handle<String>();
1180 Handle<String> result = 1170 Handle<String> result =
1181 String::NewFromUtf8(isolate, chars, String::kNormalString, size); 1171 String::NewFromUtf8(isolate, chars, String::kNormalString, size);
1182 delete[] chars; 1172 delete[] chars;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1260 Shell::Exit(1); 1250 Shell::Exit(1);
1261 } 1251 }
1262 1252
1263 Shell::ExecuteString( 1253 Shell::ExecuteString(
1264 isolate_, str, String::NewFromUtf8(isolate_, filename), false, false); 1254 isolate_, str, String::NewFromUtf8(isolate_, filename), false, false);
1265 } 1255 }
1266 1256
1267 ptr = next_line; 1257 ptr = next_line;
1268 } 1258 }
1269 } 1259 }
1270 #endif // V8_SHARED 1260 #endif // !V8_SHARED
1271 1261
1272 1262
1273 SourceGroup::~SourceGroup() { 1263 SourceGroup::~SourceGroup() {
1274 #ifndef V8_SHARED 1264 #ifndef V8_SHARED
1275 delete thread_; 1265 delete thread_;
1276 thread_ = NULL; 1266 thread_ = NULL;
1277 #endif // V8_SHARED 1267 #endif // !V8_SHARED
1278 } 1268 }
1279 1269
1280 1270
1281 void SourceGroup::Execute(Isolate* isolate) { 1271 void SourceGroup::Execute(Isolate* isolate) {
1282 bool exception_was_thrown = false; 1272 bool exception_was_thrown = false;
1283 for (int i = begin_offset_; i < end_offset_; ++i) { 1273 for (int i = begin_offset_; i < end_offset_; ++i) {
1284 const char* arg = argv_[i]; 1274 const char* arg = argv_[i];
1285 if (strcmp(arg, "-e") == 0 && i + 1 < end_offset_) { 1275 if (strcmp(arg, "-e") == 0 && i + 1 < end_offset_) {
1286 // Execute argument given to -e option directly. 1276 // Execute argument given to -e option directly.
1287 HandleScope handle_scope(isolate); 1277 HandleScope handle_scope(isolate);
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1375 1365
1376 1366
1377 void SourceGroup::WaitForThread() { 1367 void SourceGroup::WaitForThread() {
1378 if (thread_ == NULL) return; 1368 if (thread_ == NULL) return;
1379 if (Shell::options.last_run) { 1369 if (Shell::options.last_run) {
1380 thread_->Join(); 1370 thread_->Join();
1381 } else { 1371 } else {
1382 done_semaphore_.Wait(); 1372 done_semaphore_.Wait();
1383 } 1373 }
1384 } 1374 }
1385 #endif // V8_SHARED 1375 #endif // !V8_SHARED
1386 1376
1387 1377
1388 bool Shell::SetOptions(int argc, char* argv[]) { 1378 bool Shell::SetOptions(int argc, char* argv[]) {
1389 for (int i = 0; i < argc; i++) { 1379 for (int i = 0; i < argc; i++) {
1390 if (strcmp(argv[i], "--stress-opt") == 0) { 1380 if (strcmp(argv[i], "--stress-opt") == 0) {
1391 options.stress_opt = true; 1381 options.stress_opt = true;
1392 argv[i] = NULL; 1382 argv[i] = NULL;
1393 } else if (strcmp(argv[i], "--nostress-opt") == 0) { 1383 } else if (strcmp(argv[i], "--nostress-opt") == 0) {
1394 options.stress_opt = false; 1384 options.stress_opt = false;
1395 argv[i] = NULL; 1385 argv[i] = NULL;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1429 #else 1419 #else
1430 options.num_parallel_files++; 1420 options.num_parallel_files++;
1431 #endif // V8_SHARED 1421 #endif // V8_SHARED
1432 } else if (strcmp(argv[i], "--dump-heap-constants") == 0) { 1422 } else if (strcmp(argv[i], "--dump-heap-constants") == 0) {
1433 #ifdef V8_SHARED 1423 #ifdef V8_SHARED
1434 printf("D8 with shared library does not support constant dumping\n"); 1424 printf("D8 with shared library does not support constant dumping\n");
1435 return false; 1425 return false;
1436 #else 1426 #else
1437 options.dump_heap_constants = true; 1427 options.dump_heap_constants = true;
1438 argv[i] = NULL; 1428 argv[i] = NULL;
1439 #endif 1429 #endif // V8_SHARED
1440 } else if (strcmp(argv[i], "--throws") == 0) { 1430 } else if (strcmp(argv[i], "--throws") == 0) {
1441 options.expected_to_throw = true; 1431 options.expected_to_throw = true;
1442 argv[i] = NULL; 1432 argv[i] = NULL;
1443 } else if (strncmp(argv[i], "--icu-data-file=", 16) == 0) { 1433 } else if (strncmp(argv[i], "--icu-data-file=", 16) == 0) {
1444 options.icu_data_file = argv[i] + 16; 1434 options.icu_data_file = argv[i] + 16;
1445 argv[i] = NULL; 1435 argv[i] = NULL;
1446 } 1436 }
1447 #ifdef V8_SHARED 1437 #ifdef V8_SHARED
1448 else if (strcmp(argv[i], "--dump-counters") == 0) { 1438 else if (strcmp(argv[i], "--dump-counters") == 0) {
1449 printf("D8 with shared library does not include counters\n"); 1439 printf("D8 with shared library does not include counters\n");
(...skipping 20 matching lines...) Expand all
1470 i++; 1460 i++;
1471 options.parallel_files[parallel_files_set] = argv[i]; 1461 options.parallel_files[parallel_files_set] = argv[i];
1472 parallel_files_set++; 1462 parallel_files_set++;
1473 argv[i] = NULL; 1463 argv[i] = NULL;
1474 } 1464 }
1475 } 1465 }
1476 if (parallel_files_set != options.num_parallel_files) { 1466 if (parallel_files_set != options.num_parallel_files) {
1477 printf("-p requires a file containing a list of files as parameter\n"); 1467 printf("-p requires a file containing a list of files as parameter\n");
1478 return false; 1468 return false;
1479 } 1469 }
1480 #endif // V8_SHARED 1470 #endif // !V8_SHARED
1481 1471
1482 v8::V8::SetFlagsFromCommandLine(&argc, argv, true); 1472 v8::V8::SetFlagsFromCommandLine(&argc, argv, true);
1483 1473
1484 // Set up isolated source groups. 1474 // Set up isolated source groups.
1485 options.isolate_sources = new SourceGroup[options.num_isolates]; 1475 options.isolate_sources = new SourceGroup[options.num_isolates];
1486 SourceGroup* current = options.isolate_sources; 1476 SourceGroup* current = options.isolate_sources;
1487 current->Begin(argv, 1); 1477 current->Begin(argv, 1);
1488 for (int i = 1; i < argc; i++) { 1478 for (int i = 1; i < argc; i++) {
1489 const char* str = argv[i]; 1479 const char* str = argv[i];
1490 if (strcmp(str, "--isolate") == 0) { 1480 if (strcmp(str, "--isolate") == 0) {
(...skipping 25 matching lines...) Expand all
1516 Exit(1); 1506 Exit(1);
1517 } 1507 }
1518 ShellThread* thread = new ShellThread(isolate, files); 1508 ShellThread* thread = new ShellThread(isolate, files);
1519 thread->Start(); 1509 thread->Start();
1520 threads.Add(thread); 1510 threads.Add(thread);
1521 } 1511 }
1522 } 1512 }
1523 for (int i = 1; i < options.num_isolates; ++i) { 1513 for (int i = 1; i < options.num_isolates; ++i) {
1524 options.isolate_sources[i].StartExecuteInThread(); 1514 options.isolate_sources[i].StartExecuteInThread();
1525 } 1515 }
1526 #endif // V8_SHARED 1516 #endif // !V8_SHARED
1527 { // NOLINT 1517 { // NOLINT
1528 Locker lock(isolate); 1518 Locker lock(isolate);
1529 { 1519 {
1530 HandleScope scope(isolate); 1520 HandleScope scope(isolate);
1531 Local<Context> context = CreateEvaluationContext(isolate); 1521 Local<Context> context = CreateEvaluationContext(isolate);
1532 if (options.last_run) { 1522 if (options.last_run) {
1533 // Keep using the same context in the interactive shell. 1523 // Keep using the same context in the interactive shell.
1534 evaluation_context_.Reset(isolate, context); 1524 evaluation_context_.Reset(isolate, context);
1535 #if !defined(V8_SHARED) && defined(ENABLE_DEBUGGER_SUPPORT) 1525 #ifndef V8_SHARED
1536 // If the interactive debugger is enabled make sure to activate 1526 // If the interactive debugger is enabled make sure to activate
1537 // it before running the files passed on the command line. 1527 // it before running the files passed on the command line.
1538 if (i::FLAG_debugger) { 1528 if (i::FLAG_debugger) {
1539 InstallUtilityScript(isolate); 1529 InstallUtilityScript(isolate);
1540 } 1530 }
1541 #endif // !V8_SHARED && ENABLE_DEBUGGER_SUPPORT 1531 #endif // !V8_SHARED
1542 } 1532 }
1543 { 1533 {
1544 Context::Scope cscope(context); 1534 Context::Scope cscope(context);
1545 PerIsolateData::RealmScope realm_scope(PerIsolateData::Get(isolate)); 1535 PerIsolateData::RealmScope realm_scope(PerIsolateData::Get(isolate));
1546 options.isolate_sources[0].Execute(isolate); 1536 options.isolate_sources[0].Execute(isolate);
1547 } 1537 }
1548 } 1538 }
1549 if (!options.last_run) { 1539 if (!options.last_run) {
1550 if (options.send_idle_notification) { 1540 if (options.send_idle_notification) {
1551 const int kLongIdlePauseInMs = 1000; 1541 const int kLongIdlePauseInMs = 1000;
1552 V8::ContextDisposedNotification(); 1542 V8::ContextDisposedNotification();
1553 V8::IdleNotification(kLongIdlePauseInMs); 1543 V8::IdleNotification(kLongIdlePauseInMs);
1554 } 1544 }
1555 } 1545 }
1556 } 1546 }
1557 1547
1558 #ifndef V8_SHARED 1548 #ifndef V8_SHARED
1559 for (int i = 1; i < options.num_isolates; ++i) { 1549 for (int i = 1; i < options.num_isolates; ++i) {
1560 options.isolate_sources[i].WaitForThread(); 1550 options.isolate_sources[i].WaitForThread();
1561 } 1551 }
1562 1552
1563 for (int i = 0; i < threads.length(); i++) { 1553 for (int i = 0; i < threads.length(); i++) {
1564 i::Thread* thread = threads[i]; 1554 i::Thread* thread = threads[i];
1565 thread->Join(); 1555 thread->Join();
1566 delete thread; 1556 delete thread;
1567 } 1557 }
1568 #endif // V8_SHARED 1558 #endif // !V8_SHARED
1569 return 0; 1559 return 0;
1570 } 1560 }
1571 1561
1572 1562
1573 #ifdef V8_SHARED 1563 #ifdef V8_SHARED
1574 static void SetStandaloneFlagsViaCommandLine() { 1564 static void SetStandaloneFlagsViaCommandLine() {
1575 int fake_argc = 3; 1565 int fake_argc = 3;
1576 char **fake_argv = new char*[3]; 1566 char **fake_argv = new char*[3];
1577 fake_argv[0] = NULL; 1567 fake_argv[0] = NULL;
1578 fake_argv[1] = strdup("--trace-hydrogen-file=hydrogen.cfg"); 1568 fake_argv[1] = strdup("--trace-hydrogen-file=hydrogen.cfg");
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1632 const char* n = NULL; 1622 const char* n = NULL;
1633 intptr_t p = reinterpret_cast<intptr_t>(o) & 0xfffff; 1623 intptr_t p = reinterpret_cast<intptr_t>(o) & 0xfffff;
1634 ROOT_LIST(ROOT_LIST_CASE) 1624 ROOT_LIST(ROOT_LIST_CASE)
1635 if (n == NULL) continue; 1625 if (n == NULL) continue;
1636 printf(" (\"%s\", 0x%05" V8PRIxPTR "): \"%s\",\n", sname, p, n); 1626 printf(" (\"%s\", 0x%05" V8PRIxPTR "): \"%s\",\n", sname, p, n);
1637 } 1627 }
1638 } 1628 }
1639 printf("}\n"); 1629 printf("}\n");
1640 #undef ROOT_LIST_CASE 1630 #undef ROOT_LIST_CASE
1641 } 1631 }
1642 #endif // V8_SHARED 1632 #endif // !V8_SHARED
1643 1633
1644 1634
1645 class ShellArrayBufferAllocator : public v8::ArrayBuffer::Allocator { 1635 class ShellArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
1646 public: 1636 public:
1647 virtual void* Allocate(size_t length) { 1637 virtual void* Allocate(size_t length) {
1648 void* result = malloc(length); 1638 void* result = malloc(length);
1649 memset(result, 0, length); 1639 memset(result, 0, length);
1650 return result; 1640 return result;
1651 } 1641 }
1652 virtual void* AllocateUninitialized(size_t length) { 1642 virtual void* AllocateUninitialized(size_t length) {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1736 printf("============ Run %d/%d ============\n", i + 1, stress_runs); 1726 printf("============ Run %d/%d ============\n", i + 1, stress_runs);
1737 options.last_run = (i == stress_runs - 1); 1727 options.last_run = (i == stress_runs - 1);
1738 result = RunMain(isolate, argc, argv); 1728 result = RunMain(isolate, argc, argv);
1739 } 1729 }
1740 #endif 1730 #endif
1741 } else { 1731 } else {
1742 result = RunMain(isolate, argc, argv); 1732 result = RunMain(isolate, argc, argv);
1743 } 1733 }
1744 1734
1745 1735
1746 #if !defined(V8_SHARED) && defined(ENABLE_DEBUGGER_SUPPORT) 1736 #ifndef V8_SHARED
1747 // Run remote debugger if requested, but never on --test 1737 // Run remote debugger if requested, but never on --test
1748 if (i::FLAG_remote_debugger && !options.test_shell) { 1738 if (i::FLAG_remote_debugger && !options.test_shell) {
1749 InstallUtilityScript(isolate); 1739 InstallUtilityScript(isolate);
1750 RunRemoteDebugger(isolate, i::FLAG_debugger_port); 1740 RunRemoteDebugger(isolate, i::FLAG_debugger_port);
1751 return 0; 1741 return 0;
1752 } 1742 }
1753 #endif // !V8_SHARED && ENABLE_DEBUGGER_SUPPORT 1743 #endif // !V8_SHARED
1754 1744
1755 // Run interactive shell if explicitly requested or if no script has been 1745 // Run interactive shell if explicitly requested or if no script has been
1756 // executed, but never on --test 1746 // executed, but never on --test
1757 1747
1758 if (( options.interactive_shell || !options.script_executed ) 1748 if (( options.interactive_shell || !options.script_executed )
1759 && !options.test_shell ) { 1749 && !options.test_shell ) {
1760 #if !defined(V8_SHARED) && defined(ENABLE_DEBUGGER_SUPPORT) 1750 #ifndef V8_SHARED
1761 if (!i::FLAG_debugger) { 1751 if (!i::FLAG_debugger) {
1762 InstallUtilityScript(isolate); 1752 InstallUtilityScript(isolate);
1763 } 1753 }
1764 #endif // !V8_SHARED && ENABLE_DEBUGGER_SUPPORT 1754 #endif // !V8_SHARED
1765 RunShell(isolate); 1755 RunShell(isolate);
1766 } 1756 }
1767 } 1757 }
1768 V8::Dispose(); 1758 V8::Dispose();
1769 1759
1770 OnExit(); 1760 OnExit();
1771 1761
1772 return result; 1762 return result;
1773 } 1763 }
1774 1764
1775 } // namespace v8 1765 } // namespace v8
1776 1766
1777 1767
1778 #ifndef GOOGLE3 1768 #ifndef GOOGLE3
1779 int main(int argc, char* argv[]) { 1769 int main(int argc, char* argv[]) {
1780 return v8::Shell::Main(argc, argv); 1770 return v8::Shell::Main(argc, argv);
1781 } 1771 }
1782 #endif 1772 #endif
OLDNEW
« 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