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

Side by Side Diff: src/runtime/runtime-function.cc

Issue 1567393003: [runtime] Make Runtime::GetCallerArguments local to scopes. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@local_cleanup-runtime-rest
Patch Set: Created 4 years, 11 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
« no previous file with comments | « src/runtime/runtime.h ('k') | src/runtime/runtime-scopes.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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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 #include "src/runtime/runtime-utils.h" 5 #include "src/runtime/runtime-utils.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/arguments.h" 8 #include "src/arguments.h"
9 #include "src/compiler.h" 9 #include "src/compiler.h"
10 #include "src/deoptimizer.h"
11 #include "src/frames-inl.h" 10 #include "src/frames-inl.h"
12 #include "src/isolate-inl.h" 11 #include "src/isolate-inl.h"
13 #include "src/messages.h" 12 #include "src/messages.h"
14 #include "src/profiler/cpu-profiler.h" 13 #include "src/profiler/cpu-profiler.h"
15 14
16 namespace v8 { 15 namespace v8 {
17 namespace internal { 16 namespace internal {
18 17
19 RUNTIME_FUNCTION(Runtime_FunctionGetName) { 18 RUNTIME_FUNCTION(Runtime_FunctionGetName) {
20 SealHandleScope shs(isolate); 19 SealHandleScope shs(isolate);
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0); 239 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0);
241 240
242 if (object->IsJSFunction()) { 241 if (object->IsJSFunction()) {
243 JSFunction* func = JSFunction::cast(*object); 242 JSFunction* func = JSFunction::cast(*object);
244 func->shared()->set_force_inline(true); 243 func->shared()->set_force_inline(true);
245 } 244 }
246 return isolate->heap()->undefined_value(); 245 return isolate->heap()->undefined_value();
247 } 246 }
248 247
249 248
250 // Find the arguments of the JavaScript function invocation that called
251 // into C++ code. Collect these in a newly allocated array of handles (possibly
252 // prefixed by a number of empty handles).
253 base::SmartArrayPointer<Handle<Object>> Runtime::GetCallerArguments(
254 Isolate* isolate, int prefix_argc, int* total_argc) {
255 // Find frame containing arguments passed to the caller.
256 JavaScriptFrameIterator it(isolate);
257 JavaScriptFrame* frame = it.frame();
258 List<JSFunction*> functions(2);
259 frame->GetFunctions(&functions);
260 if (functions.length() > 1) {
261 int inlined_jsframe_index = functions.length() - 1;
262 TranslatedState translated_values(frame);
263 translated_values.Prepare(false, frame->fp());
264
265 int argument_count = 0;
266 TranslatedFrame* translated_frame =
267 translated_values.GetArgumentsInfoFromJSFrameIndex(
268 inlined_jsframe_index, &argument_count);
269 TranslatedFrame::iterator iter = translated_frame->begin();
270
271 // Skip the function.
272 iter++;
273
274 // Skip the receiver.
275 iter++;
276 argument_count--;
277
278 *total_argc = prefix_argc + argument_count;
279 base::SmartArrayPointer<Handle<Object> > param_data(
280 NewArray<Handle<Object> >(*total_argc));
281 bool should_deoptimize = false;
282 for (int i = 0; i < argument_count; i++) {
283 should_deoptimize = should_deoptimize || iter->IsMaterializedObject();
284 Handle<Object> value = iter->GetValue();
285 param_data[prefix_argc + i] = value;
286 iter++;
287 }
288
289 if (should_deoptimize) {
290 translated_values.StoreMaterializedValuesAndDeopt();
291 }
292
293 return param_data;
294 } else {
295 it.AdvanceToArgumentsFrame();
296 frame = it.frame();
297 int args_count = frame->ComputeParametersCount();
298
299 *total_argc = prefix_argc + args_count;
300 base::SmartArrayPointer<Handle<Object> > param_data(
301 NewArray<Handle<Object> >(*total_argc));
302 for (int i = 0; i < args_count; i++) {
303 Handle<Object> val = Handle<Object>(frame->GetParameter(i), isolate);
304 param_data[prefix_argc + i] = val;
305 }
306 return param_data;
307 }
308 }
309
310
311 RUNTIME_FUNCTION(Runtime_Call) { 249 RUNTIME_FUNCTION(Runtime_Call) {
312 HandleScope scope(isolate); 250 HandleScope scope(isolate);
313 DCHECK_LE(2, args.length()); 251 DCHECK_LE(2, args.length());
314 int const argc = args.length() - 2; 252 int const argc = args.length() - 2;
315 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, target, 0); 253 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, target, 0);
316 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 1); 254 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 1);
317 ScopedVector<Handle<Object>> argv(argc); 255 ScopedVector<Handle<Object>> argv(argc);
318 for (int i = 0; i < argc; ++i) { 256 for (int i = 0; i < argc; ++i) {
319 argv[i] = args.at<Object>(2 + i); 257 argv[i] = args.at<Object>(2 + i);
320 } 258 }
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 DCHECK_EQ(1, args.length()); 352 DCHECK_EQ(1, args.length());
415 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, function, 0); 353 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, function, 0);
416 return function->IsJSBoundFunction() 354 return function->IsJSBoundFunction()
417 ? *JSBoundFunction::ToString( 355 ? *JSBoundFunction::ToString(
418 Handle<JSBoundFunction>::cast(function)) 356 Handle<JSBoundFunction>::cast(function))
419 : *JSFunction::ToString(Handle<JSFunction>::cast(function)); 357 : *JSFunction::ToString(Handle<JSFunction>::cast(function));
420 } 358 }
421 359
422 } // namespace internal 360 } // namespace internal
423 } // namespace v8 361 } // namespace v8
OLDNEW
« no previous file with comments | « src/runtime/runtime.h ('k') | src/runtime/runtime-scopes.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698