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

Side by Side Diff: src/execution.cc

Issue 23606012: remove Isolate::Current from most files starting with 'd' and 'e' (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 3 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/execution.h ('k') | src/factory.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 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 149
150 150
151 Handle<Object> Execution::Call(Handle<Object> callable, 151 Handle<Object> Execution::Call(Handle<Object> callable,
152 Handle<Object> receiver, 152 Handle<Object> receiver,
153 int argc, 153 int argc,
154 Handle<Object> argv[], 154 Handle<Object> argv[],
155 bool* pending_exception, 155 bool* pending_exception,
156 bool convert_receiver) { 156 bool convert_receiver) {
157 *pending_exception = false; 157 *pending_exception = false;
158 158
159 Isolate* isolate = Isolate::Current();
Sven Panne 2013/09/02 14:23:45 I think all callers have the Isolate already, so w
dcarney 2013/09/02 15:38:44 You missed nothing. I didn't want to transform th
159 if (!callable->IsJSFunction()) { 160 if (!callable->IsJSFunction()) {
160 callable = TryGetFunctionDelegate(callable, pending_exception); 161 callable = TryGetFunctionDelegate(isolate, callable, pending_exception);
161 if (*pending_exception) return callable; 162 if (*pending_exception) return callable;
162 } 163 }
163 Handle<JSFunction> func = Handle<JSFunction>::cast(callable); 164 Handle<JSFunction> func = Handle<JSFunction>::cast(callable);
164 165
165 // In non-strict mode, convert receiver. 166 // In non-strict mode, convert receiver.
166 if (convert_receiver && !receiver->IsJSReceiver() && 167 if (convert_receiver && !receiver->IsJSReceiver() &&
167 !func->shared()->native() && func->shared()->is_classic_mode()) { 168 !func->shared()->native() && func->shared()->is_classic_mode()) {
168 if (receiver->IsUndefined() || receiver->IsNull()) { 169 if (receiver->IsUndefined() || receiver->IsNull()) {
169 Object* global = func->context()->global_object()->global_receiver(); 170 Object* global = func->context()->global_object()->global_receiver();
170 // Under some circumstances, 'global' can be the JSBuiltinsObject 171 // Under some circumstances, 'global' can be the JSBuiltinsObject
171 // In that case, don't rewrite. (FWIW, the same holds for 172 // In that case, don't rewrite. (FWIW, the same holds for
172 // GetIsolate()->global_object()->global_receiver().) 173 // GetIsolate()->global_object()->global_receiver().)
173 if (!global->IsJSBuiltinsObject()) { 174 if (!global->IsJSBuiltinsObject()) {
174 receiver = Handle<Object>(global, func->GetIsolate()); 175 receiver = Handle<Object>(global, func->GetIsolate());
175 } 176 }
176 } else { 177 } else {
177 receiver = ToObject(receiver, pending_exception); 178 receiver = ToObject(isolate, receiver, pending_exception);
178 } 179 }
179 if (*pending_exception) return callable; 180 if (*pending_exception) return callable;
180 } 181 }
181 182
182 return Invoke(false, func, receiver, argc, argv, pending_exception); 183 return Invoke(false, func, receiver, argc, argv, pending_exception);
183 } 184 }
184 185
185 186
186 Handle<Object> Execution::New(Handle<JSFunction> func, 187 Handle<Object> Execution::New(Handle<JSFunction> func,
187 int argc, 188 int argc,
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 } 228 }
228 isolate->OptionalRescheduleException(true); 229 isolate->OptionalRescheduleException(true);
229 } 230 }
230 231
231 ASSERT(!isolate->has_pending_exception()); 232 ASSERT(!isolate->has_pending_exception());
232 ASSERT(!isolate->external_caught_exception()); 233 ASSERT(!isolate->external_caught_exception());
233 return result; 234 return result;
234 } 235 }
235 236
236 237
237 Handle<Object> Execution::GetFunctionDelegate(Handle<Object> object) { 238 Handle<Object> Execution::GetFunctionDelegate(Isolate* isolate,
239 Handle<Object> object) {
238 ASSERT(!object->IsJSFunction()); 240 ASSERT(!object->IsJSFunction());
239 Isolate* isolate = Isolate::Current();
240 Factory* factory = isolate->factory(); 241 Factory* factory = isolate->factory();
241 242
242 // If you return a function from here, it will be called when an 243 // If you return a function from here, it will be called when an
243 // attempt is made to call the given object as a function. 244 // attempt is made to call the given object as a function.
244 245
245 // If object is a function proxy, get its handler. Iterate if necessary. 246 // If object is a function proxy, get its handler. Iterate if necessary.
246 Object* fun = *object; 247 Object* fun = *object;
247 while (fun->IsJSFunctionProxy()) { 248 while (fun->IsJSFunctionProxy()) {
248 fun = JSFunctionProxy::cast(fun)->call_trap(); 249 fun = JSFunctionProxy::cast(fun)->call_trap();
249 } 250 }
250 if (fun->IsJSFunction()) return Handle<Object>(fun, isolate); 251 if (fun->IsJSFunction()) return Handle<Object>(fun, isolate);
251 252
252 // Objects created through the API can have an instance-call handler 253 // Objects created through the API can have an instance-call handler
253 // that should be used when calling the object as a function. 254 // that should be used when calling the object as a function.
254 if (fun->IsHeapObject() && 255 if (fun->IsHeapObject() &&
255 HeapObject::cast(fun)->map()->has_instance_call_handler()) { 256 HeapObject::cast(fun)->map()->has_instance_call_handler()) {
256 return Handle<JSFunction>( 257 return Handle<JSFunction>(
257 isolate->native_context()->call_as_function_delegate()); 258 isolate->native_context()->call_as_function_delegate());
258 } 259 }
259 260
260 return factory->undefined_value(); 261 return factory->undefined_value();
261 } 262 }
262 263
263 264
264 Handle<Object> Execution::TryGetFunctionDelegate(Handle<Object> object, 265 Handle<Object> Execution::TryGetFunctionDelegate(Isolate* isolate,
266 Handle<Object> object,
265 bool* has_pending_exception) { 267 bool* has_pending_exception) {
266 ASSERT(!object->IsJSFunction()); 268 ASSERT(!object->IsJSFunction());
267 Isolate* isolate = Isolate::Current();
268 269
269 // If object is a function proxy, get its handler. Iterate if necessary. 270 // If object is a function proxy, get its handler. Iterate if necessary.
270 Object* fun = *object; 271 Object* fun = *object;
271 while (fun->IsJSFunctionProxy()) { 272 while (fun->IsJSFunctionProxy()) {
272 fun = JSFunctionProxy::cast(fun)->call_trap(); 273 fun = JSFunctionProxy::cast(fun)->call_trap();
273 } 274 }
274 if (fun->IsJSFunction()) return Handle<Object>(fun, isolate); 275 if (fun->IsJSFunction()) return Handle<Object>(fun, isolate);
275 276
276 // Objects created through the API can have an instance-call handler 277 // Objects created through the API can have an instance-call handler
277 // that should be used when calling the object as a function. 278 // that should be used when calling the object as a function.
278 if (fun->IsHeapObject() && 279 if (fun->IsHeapObject() &&
279 HeapObject::cast(fun)->map()->has_instance_call_handler()) { 280 HeapObject::cast(fun)->map()->has_instance_call_handler()) {
280 return Handle<JSFunction>( 281 return Handle<JSFunction>(
281 isolate->native_context()->call_as_function_delegate()); 282 isolate->native_context()->call_as_function_delegate());
282 } 283 }
283 284
284 // If the Object doesn't have an instance-call handler we should 285 // If the Object doesn't have an instance-call handler we should
285 // throw a non-callable exception. 286 // throw a non-callable exception.
286 i::Handle<i::Object> error_obj = isolate->factory()->NewTypeError( 287 i::Handle<i::Object> error_obj = isolate->factory()->NewTypeError(
287 "called_non_callable", i::HandleVector<i::Object>(&object, 1)); 288 "called_non_callable", i::HandleVector<i::Object>(&object, 1));
288 isolate->Throw(*error_obj); 289 isolate->Throw(*error_obj);
289 *has_pending_exception = true; 290 *has_pending_exception = true;
290 291
291 return isolate->factory()->undefined_value(); 292 return isolate->factory()->undefined_value();
292 } 293 }
293 294
294 295
295 Handle<Object> Execution::GetConstructorDelegate(Handle<Object> object) { 296 Handle<Object> Execution::GetConstructorDelegate(Isolate* isolate,
297 Handle<Object> object) {
296 ASSERT(!object->IsJSFunction()); 298 ASSERT(!object->IsJSFunction());
297 Isolate* isolate = Isolate::Current();
298 299
299 // If you return a function from here, it will be called when an 300 // If you return a function from here, it will be called when an
300 // attempt is made to call the given object as a constructor. 301 // attempt is made to call the given object as a constructor.
301 302
302 // If object is a function proxies, get its handler. Iterate if necessary. 303 // If object is a function proxies, get its handler. Iterate if necessary.
303 Object* fun = *object; 304 Object* fun = *object;
304 while (fun->IsJSFunctionProxy()) { 305 while (fun->IsJSFunctionProxy()) {
305 fun = JSFunctionProxy::cast(fun)->call_trap(); 306 fun = JSFunctionProxy::cast(fun)->call_trap();
306 } 307 }
307 if (fun->IsJSFunction()) return Handle<Object>(fun, isolate); 308 if (fun->IsJSFunction()) return Handle<Object>(fun, isolate);
308 309
309 // Objects created through the API can have an instance-call handler 310 // Objects created through the API can have an instance-call handler
310 // that should be used when calling the object as a function. 311 // that should be used when calling the object as a function.
311 if (fun->IsHeapObject() && 312 if (fun->IsHeapObject() &&
312 HeapObject::cast(fun)->map()->has_instance_call_handler()) { 313 HeapObject::cast(fun)->map()->has_instance_call_handler()) {
313 return Handle<JSFunction>( 314 return Handle<JSFunction>(
314 isolate->native_context()->call_as_constructor_delegate()); 315 isolate->native_context()->call_as_constructor_delegate());
315 } 316 }
316 317
317 return isolate->factory()->undefined_value(); 318 return isolate->factory()->undefined_value();
318 } 319 }
319 320
320 321
321 Handle<Object> Execution::TryGetConstructorDelegate( 322 Handle<Object> Execution::TryGetConstructorDelegate(
323 Isolate* isolate,
322 Handle<Object> object, 324 Handle<Object> object,
323 bool* has_pending_exception) { 325 bool* has_pending_exception) {
324 ASSERT(!object->IsJSFunction()); 326 ASSERT(!object->IsJSFunction());
325 Isolate* isolate = Isolate::Current();
326 327
327 // If you return a function from here, it will be called when an 328 // If you return a function from here, it will be called when an
328 // attempt is made to call the given object as a constructor. 329 // attempt is made to call the given object as a constructor.
329 330
330 // If object is a function proxies, get its handler. Iterate if necessary. 331 // If object is a function proxies, get its handler. Iterate if necessary.
331 Object* fun = *object; 332 Object* fun = *object;
332 while (fun->IsJSFunctionProxy()) { 333 while (fun->IsJSFunctionProxy()) {
333 fun = JSFunctionProxy::cast(fun)->call_trap(); 334 fun = JSFunctionProxy::cast(fun)->call_trap();
334 } 335 }
335 if (fun->IsJSFunction()) return Handle<Object>(fun, isolate); 336 if (fun->IsJSFunction()) return Handle<Object>(fun, isolate);
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 if (stored_limit != 0) { 590 if (stored_limit != 0) {
590 SetStackLimit(stored_limit); 591 SetStackLimit(stored_limit);
591 } 592 }
592 } 593 }
593 594
594 595
595 // --- C a l l s t o n a t i v e s --- 596 // --- C a l l s t o n a t i v e s ---
596 597
597 #define RETURN_NATIVE_CALL(name, args, has_pending_exception) \ 598 #define RETURN_NATIVE_CALL(name, args, has_pending_exception) \
598 do { \ 599 do { \
599 Isolate* isolate = Isolate::Current(); \
600 Handle<Object> argv[] = args; \ 600 Handle<Object> argv[] = args; \
601 ASSERT(has_pending_exception != NULL); \ 601 ASSERT(has_pending_exception != NULL); \
602 return Call(isolate->name##_fun(), \ 602 return Call(isolate->name##_fun(), \
603 isolate->js_builtins_object(), \ 603 isolate->js_builtins_object(), \
604 ARRAY_SIZE(argv), argv, \ 604 ARRAY_SIZE(argv), argv, \
605 has_pending_exception); \ 605 has_pending_exception); \
606 } while (false) 606 } while (false)
607 607
608 608
609 Handle<Object> Execution::ToNumber(Handle<Object> obj, bool* exc) { 609 Handle<Object> Execution::ToNumber(
610 Isolate* isolate, Handle<Object> obj, bool* exc) {
610 RETURN_NATIVE_CALL(to_number, { obj }, exc); 611 RETURN_NATIVE_CALL(to_number, { obj }, exc);
611 } 612 }
612 613
613 614
614 Handle<Object> Execution::ToString(Handle<Object> obj, bool* exc) { 615 Handle<Object> Execution::ToString(
616 Isolate* isolate, Handle<Object> obj, bool* exc) {
615 RETURN_NATIVE_CALL(to_string, { obj }, exc); 617 RETURN_NATIVE_CALL(to_string, { obj }, exc);
616 } 618 }
617 619
618 620
619 Handle<Object> Execution::ToDetailString(Handle<Object> obj, bool* exc) { 621 Handle<Object> Execution::ToDetailString(
622 Isolate* isolate, Handle<Object> obj, bool* exc) {
620 RETURN_NATIVE_CALL(to_detail_string, { obj }, exc); 623 RETURN_NATIVE_CALL(to_detail_string, { obj }, exc);
621 } 624 }
622 625
623 626
624 Handle<Object> Execution::ToObject(Handle<Object> obj, bool* exc) { 627 Handle<Object> Execution::ToObject(
628 Isolate* isolate, Handle<Object> obj, bool* exc) {
625 if (obj->IsSpecObject()) return obj; 629 if (obj->IsSpecObject()) return obj;
626 RETURN_NATIVE_CALL(to_object, { obj }, exc); 630 RETURN_NATIVE_CALL(to_object, { obj }, exc);
627 } 631 }
628 632
629 633
630 Handle<Object> Execution::ToInteger(Handle<Object> obj, bool* exc) { 634 Handle<Object> Execution::ToInteger(
635 Isolate* isolate, Handle<Object> obj, bool* exc) {
631 RETURN_NATIVE_CALL(to_integer, { obj }, exc); 636 RETURN_NATIVE_CALL(to_integer, { obj }, exc);
632 } 637 }
633 638
634 639
635 Handle<Object> Execution::ToUint32(Handle<Object> obj, bool* exc) { 640 Handle<Object> Execution::ToUint32(
641 Isolate* isolate, Handle<Object> obj, bool* exc) {
636 RETURN_NATIVE_CALL(to_uint32, { obj }, exc); 642 RETURN_NATIVE_CALL(to_uint32, { obj }, exc);
637 } 643 }
638 644
639 645
640 Handle<Object> Execution::ToInt32(Handle<Object> obj, bool* exc) { 646 Handle<Object> Execution::ToInt32(
647 Isolate* isolate, Handle<Object> obj, bool* exc) {
641 RETURN_NATIVE_CALL(to_int32, { obj }, exc); 648 RETURN_NATIVE_CALL(to_int32, { obj }, exc);
642 } 649 }
643 650
644 651
645 Handle<Object> Execution::NewDate(double time, bool* exc) { 652 Handle<Object> Execution::NewDate(Isolate* isolate, double time, bool* exc) {
646 Isolate* isolate = Isolate::Current();
647 Handle<Object> time_obj = isolate->factory()->NewNumber(time); 653 Handle<Object> time_obj = isolate->factory()->NewNumber(time);
648 RETURN_NATIVE_CALL(create_date, { time_obj }, exc); 654 RETURN_NATIVE_CALL(create_date, { time_obj }, exc);
649 } 655 }
650 656
651 657
652 #undef RETURN_NATIVE_CALL 658 #undef RETURN_NATIVE_CALL
653 659
654 660
655 Handle<JSRegExp> Execution::NewJSRegExp(Handle<String> pattern, 661 Handle<JSRegExp> Execution::NewJSRegExp(Handle<String> pattern,
656 Handle<String> flags, 662 Handle<String> flags,
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
742 isolate->js_builtins_object(), 748 isolate->js_builtins_object(),
743 ARRAY_SIZE(args), 749 ARRAY_SIZE(args),
744 args, 750 args,
745 exc); 751 exc);
746 if (*exc) return Handle<JSObject>::null(); 752 if (*exc) return Handle<JSObject>::null();
747 return Handle<JSObject>::cast(result); 753 return Handle<JSObject>::cast(result);
748 } 754 }
749 } 755 }
750 756
751 757
752 void Execution::ConfigureInstance(Handle<Object> instance, 758 void Execution::ConfigureInstance(Isolate* isolate,
759 Handle<Object> instance,
753 Handle<Object> instance_template, 760 Handle<Object> instance_template,
754 bool* exc) { 761 bool* exc) {
755 Isolate* isolate = Isolate::Current();
756 Handle<Object> args[] = { instance, instance_template }; 762 Handle<Object> args[] = { instance, instance_template };
757 Execution::Call(isolate->configure_instance_fun(), 763 Execution::Call(isolate->configure_instance_fun(),
758 isolate->js_builtins_object(), 764 isolate->js_builtins_object(),
759 ARRAY_SIZE(args), 765 ARRAY_SIZE(args),
760 args, 766 args,
761 exc); 767 exc);
762 } 768 }
763 769
764 770
765 Handle<String> Execution::GetStackTraceLine(Handle<Object> recv, 771 Handle<String> Execution::GetStackTraceLine(Handle<Object> recv,
766 Handle<JSFunction> fun, 772 Handle<JSFunction> fun,
767 Handle<Object> pos, 773 Handle<Object> pos,
768 Handle<Object> is_global) { 774 Handle<Object> is_global) {
769 Isolate* isolate = fun->GetIsolate(); 775 Isolate* isolate = fun->GetIsolate();
770 Handle<Object> args[] = { recv, fun, pos, is_global }; 776 Handle<Object> args[] = { recv, fun, pos, is_global };
771 bool caught_exception; 777 bool caught_exception;
772 Handle<Object> result = TryCall(isolate->get_stack_trace_line_fun(), 778 Handle<Object> result = TryCall(isolate->get_stack_trace_line_fun(),
773 isolate->js_builtins_object(), 779 isolate->js_builtins_object(),
774 ARRAY_SIZE(args), 780 ARRAY_SIZE(args),
775 args, 781 args,
776 &caught_exception); 782 &caught_exception);
777 if (caught_exception || !result->IsString()) { 783 if (caught_exception || !result->IsString()) {
778 return isolate->factory()->empty_string(); 784 return isolate->factory()->empty_string();
779 } 785 }
780 786
781 return Handle<String>::cast(result); 787 return Handle<String>::cast(result);
782 } 788 }
783 789
784 790
785 static Object* RuntimePreempt() { 791 static Object* RuntimePreempt(Isolate* isolate) {
786 Isolate* isolate = Isolate::Current();
787
788 // Clear the preempt request flag. 792 // Clear the preempt request flag.
789 isolate->stack_guard()->Continue(PREEMPT); 793 isolate->stack_guard()->Continue(PREEMPT);
790 794
791 ContextSwitcher::PreemptionReceived(); 795 ContextSwitcher::PreemptionReceived();
792 796
793 #ifdef ENABLE_DEBUGGER_SUPPORT 797 #ifdef ENABLE_DEBUGGER_SUPPORT
794 if (isolate->debug()->InDebugger()) { 798 if (isolate->debug()->InDebugger()) {
795 // If currently in the debugger don't do any actual preemption but record 799 // If currently in the debugger don't do any actual preemption but record
796 // that preemption occoured while in the debugger. 800 // that preemption occoured while in the debugger.
797 isolate->debug()->PreemptionWhileInDebugger(); 801 isolate->debug()->PreemptionWhileInDebugger();
798 } else { 802 } else {
799 // Perform preemption. 803 // Perform preemption.
800 v8::Unlocker unlocker(reinterpret_cast<v8::Isolate*>(isolate)); 804 v8::Unlocker unlocker(reinterpret_cast<v8::Isolate*>(isolate));
801 Thread::YieldCPU(); 805 Thread::YieldCPU();
802 } 806 }
803 #else 807 #else
804 { // NOLINT 808 { // NOLINT
805 // Perform preemption. 809 // Perform preemption.
806 v8::Unlocker unlocker(reinterpret_cast<v8::Isolate*>(isolate)); 810 v8::Unlocker unlocker(reinterpret_cast<v8::Isolate*>(isolate));
807 Thread::YieldCPU(); 811 Thread::YieldCPU();
808 } 812 }
809 #endif 813 #endif
810 814
811 return isolate->heap()->undefined_value(); 815 return isolate->heap()->undefined_value();
812 } 816 }
813 817
814 818
815 #ifdef ENABLE_DEBUGGER_SUPPORT 819 #ifdef ENABLE_DEBUGGER_SUPPORT
816 Object* Execution::DebugBreakHelper() { 820 Object* Execution::DebugBreakHelper(Isolate* isolate) {
817 Isolate* isolate = Isolate::Current();
818
819 // Just continue if breaks are disabled. 821 // Just continue if breaks are disabled.
820 if (isolate->debug()->disable_break()) { 822 if (isolate->debug()->disable_break()) {
821 return isolate->heap()->undefined_value(); 823 return isolate->heap()->undefined_value();
822 } 824 }
823 825
824 // Ignore debug break during bootstrapping. 826 // Ignore debug break during bootstrapping.
825 if (isolate->bootstrapper()->IsActive()) { 827 if (isolate->bootstrapper()->IsActive()) {
826 return isolate->heap()->undefined_value(); 828 return isolate->heap()->undefined_value();
827 } 829 }
828 830
(...skipping 25 matching lines...) Expand all
854 } 856 }
855 857
856 // Collect the break state before clearing the flags. 858 // Collect the break state before clearing the flags.
857 bool debug_command_only = 859 bool debug_command_only =
858 isolate->stack_guard()->IsDebugCommand() && 860 isolate->stack_guard()->IsDebugCommand() &&
859 !isolate->stack_guard()->IsDebugBreak(); 861 !isolate->stack_guard()->IsDebugBreak();
860 862
861 // Clear the debug break request flag. 863 // Clear the debug break request flag.
862 isolate->stack_guard()->Continue(DEBUGBREAK); 864 isolate->stack_guard()->Continue(DEBUGBREAK);
863 865
864 ProcessDebugMessages(debug_command_only); 866 ProcessDebugMessages(isolate, debug_command_only);
865 867
866 // Return to continue execution. 868 // Return to continue execution.
867 return isolate->heap()->undefined_value(); 869 return isolate->heap()->undefined_value();
868 } 870 }
869 871
870 872
871 void Execution::ProcessDebugMessages(bool debug_command_only) { 873 void Execution::ProcessDebugMessages(Isolate* isolate,
872 Isolate* isolate = Isolate::Current(); 874 bool debug_command_only) {
873 // Clear the debug command request flag. 875 // Clear the debug command request flag.
874 isolate->stack_guard()->Continue(DEBUGCOMMAND); 876 isolate->stack_guard()->Continue(DEBUGCOMMAND);
875 877
876 StackLimitCheck check(isolate); 878 StackLimitCheck check(isolate);
877 if (check.HasOverflowed()) { 879 if (check.HasOverflowed()) {
878 return; 880 return;
879 } 881 }
880 882
881 HandleScope scope(isolate); 883 HandleScope scope(isolate);
882 // Enter the debugger. Just continue if we fail to enter the debugger. 884 // Enter the debugger. Just continue if we fail to enter the debugger.
883 EnterDebugger debugger; 885 EnterDebugger debugger(isolate);
884 if (debugger.FailedToEnter()) { 886 if (debugger.FailedToEnter()) {
885 return; 887 return;
886 } 888 }
887 889
888 // Notify the debug event listeners. Indicate auto continue if the break was 890 // Notify the debug event listeners. Indicate auto continue if the break was
889 // a debug command break. 891 // a debug command break.
890 isolate->debugger()->OnDebugBreak(isolate->factory()->undefined_value(), 892 isolate->debugger()->OnDebugBreak(isolate->factory()->undefined_value(),
891 debug_command_only); 893 debug_command_only);
892 } 894 }
893 895
(...skipping 10 matching lines...) Expand all
904 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, 906 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags,
905 "StackGuard GC request"); 907 "StackGuard GC request");
906 stack_guard->Continue(GC_REQUEST); 908 stack_guard->Continue(GC_REQUEST);
907 } 909 }
908 910
909 isolate->counters()->stack_interrupts()->Increment(); 911 isolate->counters()->stack_interrupts()->Increment();
910 isolate->counters()->runtime_profiler_ticks()->Increment(); 912 isolate->counters()->runtime_profiler_ticks()->Increment();
911 isolate->runtime_profiler()->OptimizeNow(); 913 isolate->runtime_profiler()->OptimizeNow();
912 #ifdef ENABLE_DEBUGGER_SUPPORT 914 #ifdef ENABLE_DEBUGGER_SUPPORT
913 if (stack_guard->IsDebugBreak() || stack_guard->IsDebugCommand()) { 915 if (stack_guard->IsDebugBreak() || stack_guard->IsDebugCommand()) {
914 DebugBreakHelper(); 916 DebugBreakHelper(isolate);
915 } 917 }
916 #endif 918 #endif
917 if (stack_guard->IsPreempted()) RuntimePreempt(); 919 if (stack_guard->IsPreempted()) RuntimePreempt(isolate);
918 if (stack_guard->IsTerminateExecution()) { 920 if (stack_guard->IsTerminateExecution()) {
919 stack_guard->Continue(TERMINATE); 921 stack_guard->Continue(TERMINATE);
920 return isolate->TerminateExecution(); 922 return isolate->TerminateExecution();
921 } 923 }
922 if (stack_guard->IsInterrupted()) { 924 if (stack_guard->IsInterrupted()) {
923 stack_guard->Continue(INTERRUPT); 925 stack_guard->Continue(INTERRUPT);
924 return isolate->StackOverflow(); 926 return isolate->StackOverflow();
925 } 927 }
926 if (stack_guard->IsFullDeopt()) { 928 if (stack_guard->IsFullDeopt()) {
927 stack_guard->Continue(FULL_DEOPT); 929 stack_guard->Continue(FULL_DEOPT);
928 Deoptimizer::DeoptimizeAll(isolate); 930 Deoptimizer::DeoptimizeAll(isolate);
929 } 931 }
930 return isolate->heap()->undefined_value(); 932 return isolate->heap()->undefined_value();
931 } 933 }
932 934
933 935
934 } } // namespace v8::internal 936 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/execution.h ('k') | src/factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698