Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 0caaa47bd57f79ba52b8b46959a590c9fe918041..d8448d80322be527bdfa12c8ab058ceb5e6fdabb 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -12298,6 +12298,48 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetScopeDetails) { |
} |
+// Return an array of scope details |
+// args[0]: number: break id |
+// args[1]: number: frame index |
+// args[2]: number: inlined frame index |
+// |
+// The array returned contains arrays with the following information: |
+// 0: Scope type |
+// 1: Scope object |
Yang
2014/03/04 11:31:35
Now this seems just a broader case of %GetScopeDet
|
+RUNTIME_FUNCTION(MaybeObject*, Runtime_GetAllScopesDetails) { |
+ HandleScope scope(isolate); |
+ ASSERT(args.length() == 3); |
+ |
+ // Check arguments. |
+ Object* check; |
+ { MaybeObject* maybe_check = Runtime_CheckExecutionState( |
+ RUNTIME_ARGUMENTS(isolate, args)); |
+ if (!maybe_check->ToObject(&check)) return maybe_check; |
+ } |
+ CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); |
+ CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]); |
+ |
+ // Get the frame where the debugging is performed. |
+ StackFrame::Id id = UnwrapFrameId(wrapped_id); |
+ JavaScriptFrameIterator frame_it(isolate, id); |
+ JavaScriptFrame* frame = frame_it.frame(); |
+ |
+ List<Handle<Object> > result(4); |
+ 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.
|
+ for (; !it.Done(); it.Next()) { |
+ 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.
|
+ if (maybe_object->IsFailure()) return maybe_object; |
+ result.Add(handle(maybe_object->ToObjectUnchecked(), isolate)); |
+ } |
+ |
+ Handle<FixedArray> array = isolate->factory()->NewFixedArray(result.length()); |
+ for (int i = 0; i < result.length(); ++i) { |
+ array->set(i, *result[i]); |
+ } |
+ return *isolate->factory()->NewJSArrayWithElements(array); |
+} |
+ |
+ |
RUNTIME_FUNCTION(MaybeObject*, Runtime_GetFunctionScopeCount) { |
HandleScope scope(isolate); |
ASSERT(args.length() == 1); |