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

Side by Side Diff: src/runtime.cc

Issue 181063008: Introduce Runtime_GetAllScopesDetails to get all scopes at once for a frame. (Closed) Base URL: git://github.com/v8/v8.git@master
Patch Set: Created 6 years, 9 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
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 12280 matching lines...) Expand 10 before | Expand all | Expand 10 after
12291 for (; !it.Done() && n < index; it.Next()) { 12291 for (; !it.Done() && n < index; it.Next()) {
12292 n++; 12292 n++;
12293 } 12293 }
12294 if (it.Done()) { 12294 if (it.Done()) {
12295 return isolate->heap()->undefined_value(); 12295 return isolate->heap()->undefined_value();
12296 } 12296 }
12297 return MaterializeScopeDetails(isolate, &it); 12297 return MaterializeScopeDetails(isolate, &it);
12298 } 12298 }
12299 12299
12300 12300
12301 // Return an array of scope details
12302 // args[0]: number: break id
12303 // args[1]: number: frame index
12304 // args[2]: number: inlined frame index
12305 //
12306 // The array returned contains arrays with the following information:
12307 // 0: Scope type
12308 // 1: Scope object
Yang 2014/03/04 11:31:35 Now this seems just a broader case of %GetScopeDet
12309 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetAllScopesDetails) {
12310 HandleScope scope(isolate);
12311 ASSERT(args.length() == 3);
12312
12313 // Check arguments.
12314 Object* check;
12315 { MaybeObject* maybe_check = Runtime_CheckExecutionState(
12316 RUNTIME_ARGUMENTS(isolate, args));
12317 if (!maybe_check->ToObject(&check)) return maybe_check;
12318 }
12319 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1);
12320 CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]);
12321
12322 // Get the frame where the debugging is performed.
12323 StackFrame::Id id = UnwrapFrameId(wrapped_id);
12324 JavaScriptFrameIterator frame_it(isolate, id);
12325 JavaScriptFrame* frame = frame_it.frame();
12326
12327 List<Handle<Object> > result(4);
12328 ScopeIterator it(isolate, frame, inlined_jsframe_index);
ulan 2014/03/04 10:41:59 This code seems to work, but it is fragile because
aandrey 2014/03/04 11:04:19 You mean the JavaScriptFrame* pointer? I'm not an
ulan 2014/03/04 11:28:15 That pointer should be fine. This code works, but
Yang 2014/03/04 11:31:35 Seems fine to me.
12329 for (; !it.Done(); it.Next()) {
12330 MaybeObject* maybe_object = MaterializeScopeDetails(isolate, &it);
ulan 2014/03/04 10:41:59 MaterializeScopeDetails looks already handlified,
aandrey 2014/03/04 11:04:19 As far as I understand, it may return a Failure wh
ulan 2014/03/04 11:28:15 Something like this: Handle<Object> MaterializeSc
Yang 2014/03/04 11:31:35 I suggest changing MaterializedScopeDetails to ret
aandrey 2014/03/04 12:39:07 Done.
12331 if (maybe_object->IsFailure()) return maybe_object;
12332 result.Add(handle(maybe_object->ToObjectUnchecked(), isolate));
12333 }
12334
12335 Handle<FixedArray> array = isolate->factory()->NewFixedArray(result.length());
12336 for (int i = 0; i < result.length(); ++i) {
12337 array->set(i, *result[i]);
12338 }
12339 return *isolate->factory()->NewJSArrayWithElements(array);
12340 }
12341
12342
12301 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetFunctionScopeCount) { 12343 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetFunctionScopeCount) {
12302 HandleScope scope(isolate); 12344 HandleScope scope(isolate);
12303 ASSERT(args.length() == 1); 12345 ASSERT(args.length() == 1);
12304 12346
12305 // Check arguments. 12347 // Check arguments.
12306 CONVERT_ARG_HANDLE_CHECKED(JSFunction, fun, 0); 12348 CONVERT_ARG_HANDLE_CHECKED(JSFunction, fun, 0);
12307 12349
12308 // Count the visible scopes. 12350 // Count the visible scopes.
12309 int n = 0; 12351 int n = 0;
12310 for (ScopeIterator it(isolate, fun); !it.Done(); it.Next()) { 12352 for (ScopeIterator it(isolate, fun); !it.Done(); it.Next()) {
(...skipping 2654 matching lines...) Expand 10 before | Expand all | Expand 10 after
14965 // Handle last resort GC and make sure to allow future allocations 15007 // Handle last resort GC and make sure to allow future allocations
14966 // to grow the heap without causing GCs (if possible). 15008 // to grow the heap without causing GCs (if possible).
14967 isolate->counters()->gc_last_resort_from_js()->Increment(); 15009 isolate->counters()->gc_last_resort_from_js()->Increment();
14968 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, 15010 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags,
14969 "Runtime::PerformGC"); 15011 "Runtime::PerformGC");
14970 } 15012 }
14971 } 15013 }
14972 15014
14973 15015
14974 } } // namespace v8::internal 15016 } } // namespace v8::internal
OLDNEW
« src/mirror-debugger.js ('K') | « src/runtime.h ('k') | test/mjsunit/debug-scopes.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698