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

Side by Side Diff: src/execution.cc

Issue 23661004: add isolate parameter for Execution::Call (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: rebase 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/handles.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 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 #endif // ENABLE_DEBUGGER_SUPPORT 141 #endif // ENABLE_DEBUGGER_SUPPORT
142 return Handle<Object>(); 142 return Handle<Object>();
143 } else { 143 } else {
144 isolate->clear_pending_message(); 144 isolate->clear_pending_message();
145 } 145 }
146 146
147 return Handle<Object>(value->ToObjectUnchecked(), isolate); 147 return Handle<Object>(value->ToObjectUnchecked(), isolate);
148 } 148 }
149 149
150 150
151 Handle<Object> Execution::Call(Handle<Object> callable, 151 Handle<Object> Execution::Call(Isolate* isolate,
152 Handle<Object> callable,
152 Handle<Object> receiver, 153 Handle<Object> receiver,
153 int argc, 154 int argc,
154 Handle<Object> argv[], 155 Handle<Object> argv[],
155 bool* pending_exception, 156 bool* pending_exception,
156 bool convert_receiver) { 157 bool convert_receiver) {
157 *pending_exception = false; 158 *pending_exception = false;
158 159
159 Isolate* isolate = Isolate::Current();
160 if (!callable->IsJSFunction()) { 160 if (!callable->IsJSFunction()) {
161 callable = TryGetFunctionDelegate(isolate, callable, pending_exception); 161 callable = TryGetFunctionDelegate(isolate, callable, pending_exception);
162 if (*pending_exception) return callable; 162 if (*pending_exception) return callable;
163 } 163 }
164 Handle<JSFunction> func = Handle<JSFunction>::cast(callable); 164 Handle<JSFunction> func = Handle<JSFunction>::cast(callable);
165 165
166 // In non-strict mode, convert receiver. 166 // In non-strict mode, convert receiver.
167 if (convert_receiver && !receiver->IsJSReceiver() && 167 if (convert_receiver && !receiver->IsJSReceiver() &&
168 !func->shared()->native() && func->shared()->is_classic_mode()) { 168 !func->shared()->native() && func->shared()->is_classic_mode()) {
169 if (receiver->IsUndefined() || receiver->IsNull()) { 169 if (receiver->IsUndefined() || receiver->IsNull()) {
(...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after
592 } 592 }
593 } 593 }
594 594
595 595
596 // --- 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 ---
597 597
598 #define RETURN_NATIVE_CALL(name, args, has_pending_exception) \ 598 #define RETURN_NATIVE_CALL(name, args, has_pending_exception) \
599 do { \ 599 do { \
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, \
603 isolate->name##_fun(), \
603 isolate->js_builtins_object(), \ 604 isolate->js_builtins_object(), \
604 ARRAY_SIZE(argv), argv, \ 605 ARRAY_SIZE(argv), argv, \
605 has_pending_exception); \ 606 has_pending_exception); \
606 } while (false) 607 } while (false)
607 608
608 609
609 Handle<Object> Execution::ToNumber( 610 Handle<Object> Execution::ToNumber(
610 Isolate* isolate, Handle<Object> obj, bool* exc) { 611 Isolate* isolate, Handle<Object> obj, bool* exc) {
611 RETURN_NATIVE_CALL(to_number, { obj }, exc); 612 RETURN_NATIVE_CALL(to_number, { obj }, exc);
612 } 613 }
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
705 bool* exc) { 706 bool* exc) {
706 Isolate* isolate = data->GetIsolate(); 707 Isolate* isolate = data->GetIsolate();
707 // Fast case: see if the function has already been instantiated 708 // Fast case: see if the function has already been instantiated
708 int serial_number = Smi::cast(data->serial_number())->value(); 709 int serial_number = Smi::cast(data->serial_number())->value();
709 Object* elm = 710 Object* elm =
710 isolate->native_context()->function_cache()-> 711 isolate->native_context()->function_cache()->
711 GetElementNoExceptionThrown(isolate, serial_number); 712 GetElementNoExceptionThrown(isolate, serial_number);
712 if (elm->IsJSFunction()) return Handle<JSFunction>(JSFunction::cast(elm)); 713 if (elm->IsJSFunction()) return Handle<JSFunction>(JSFunction::cast(elm));
713 // The function has not yet been instantiated in this context; do it. 714 // The function has not yet been instantiated in this context; do it.
714 Handle<Object> args[] = { data }; 715 Handle<Object> args[] = { data };
715 Handle<Object> result = Call(isolate->instantiate_fun(), 716 Handle<Object> result = Call(isolate,
717 isolate->instantiate_fun(),
716 isolate->js_builtins_object(), 718 isolate->js_builtins_object(),
717 ARRAY_SIZE(args), 719 ARRAY_SIZE(args),
718 args, 720 args,
719 exc); 721 exc);
720 if (*exc) return Handle<JSFunction>::null(); 722 if (*exc) return Handle<JSFunction>::null();
721 return Handle<JSFunction>::cast(result); 723 return Handle<JSFunction>::cast(result);
722 } 724 }
723 725
724 726
725 Handle<JSObject> Execution::InstantiateObject(Handle<ObjectTemplateInfo> data, 727 Handle<JSObject> Execution::InstantiateObject(Handle<ObjectTemplateInfo> data,
(...skipping 11 matching lines...) Expand all
737 Handle<JSFunction> cons = InstantiateFunction(cons_template, exc); 739 Handle<JSFunction> cons = InstantiateFunction(cons_template, exc);
738 if (*exc) return Handle<JSObject>::null(); 740 if (*exc) return Handle<JSObject>::null();
739 Handle<Object> value = New(cons, 0, NULL, exc); 741 Handle<Object> value = New(cons, 0, NULL, exc);
740 if (*exc) return Handle<JSObject>::null(); 742 if (*exc) return Handle<JSObject>::null();
741 result = *value; 743 result = *value;
742 } 744 }
743 ASSERT(!*exc); 745 ASSERT(!*exc);
744 return Handle<JSObject>(JSObject::cast(result)); 746 return Handle<JSObject>(JSObject::cast(result));
745 } else { 747 } else {
746 Handle<Object> args[] = { data }; 748 Handle<Object> args[] = { data };
747 Handle<Object> result = Call(isolate->instantiate_fun(), 749 Handle<Object> result = Call(isolate,
750 isolate->instantiate_fun(),
748 isolate->js_builtins_object(), 751 isolate->js_builtins_object(),
749 ARRAY_SIZE(args), 752 ARRAY_SIZE(args),
750 args, 753 args,
751 exc); 754 exc);
752 if (*exc) return Handle<JSObject>::null(); 755 if (*exc) return Handle<JSObject>::null();
753 return Handle<JSObject>::cast(result); 756 return Handle<JSObject>::cast(result);
754 } 757 }
755 } 758 }
756 759
757 760
758 void Execution::ConfigureInstance(Isolate* isolate, 761 void Execution::ConfigureInstance(Isolate* isolate,
759 Handle<Object> instance, 762 Handle<Object> instance,
760 Handle<Object> instance_template, 763 Handle<Object> instance_template,
761 bool* exc) { 764 bool* exc) {
762 Handle<Object> args[] = { instance, instance_template }; 765 Handle<Object> args[] = { instance, instance_template };
763 Execution::Call(isolate->configure_instance_fun(), 766 Execution::Call(isolate,
767 isolate->configure_instance_fun(),
764 isolate->js_builtins_object(), 768 isolate->js_builtins_object(),
765 ARRAY_SIZE(args), 769 ARRAY_SIZE(args),
766 args, 770 args,
767 exc); 771 exc);
768 } 772 }
769 773
770 774
771 Handle<String> Execution::GetStackTraceLine(Handle<Object> recv, 775 Handle<String> Execution::GetStackTraceLine(Handle<Object> recv,
772 Handle<JSFunction> fun, 776 Handle<JSFunction> fun,
773 Handle<Object> pos, 777 Handle<Object> pos,
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
927 } 931 }
928 if (stack_guard->IsFullDeopt()) { 932 if (stack_guard->IsFullDeopt()) {
929 stack_guard->Continue(FULL_DEOPT); 933 stack_guard->Continue(FULL_DEOPT);
930 Deoptimizer::DeoptimizeAll(isolate); 934 Deoptimizer::DeoptimizeAll(isolate);
931 } 935 }
932 return isolate->heap()->undefined_value(); 936 return isolate->heap()->undefined_value();
933 } 937 }
934 938
935 939
936 } } // namespace v8::internal 940 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/execution.h ('k') | src/handles.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698