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

Side by Side Diff: src/debug/debug-evaluate.h

Issue 1264993002: Debugger: refactor ScopeIterator, FrameInspector and DebugEvaluate. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: readd include Created 5 years, 4 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
(Empty)
1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef V8_DEBUG_DEBUG_EVALUATE_H_
6 #define V8_DEBUG_DEBUG_EVALUATE_H_
7
8 #include "src/frames.h"
9 #include "src/objects.h"
10
11 namespace v8 {
12 namespace internal {
13
14 class DebugEvaluate : public AllStatic {
15 public:
16 static MaybeHandle<Object> Global(Isolate* isolate, Handle<String> source,
17 bool disable_break,
18 Handle<Object> context_extension);
19
20 // Evaluate a piece of JavaScript in the context of a stack frame for
21 // debugging. Things that need special attention are:
22 // - Parameters and stack-allocated locals need to be materialized. Altered
23 // values need to be written back to the stack afterwards.
24 // - The arguments object needs to materialized.
25 static MaybeHandle<Object> Local(Isolate* isolate, StackFrame::Id frame_id,
26 int inlined_jsframe_index,
27 Handle<String> source, bool disable_break,
28 Handle<Object> context_extension);
29
30 private:
31 // This class builds a context chain for evaluation of expressions
32 // in debugger.
33 // The scope chain leading up to a breakpoint where evaluation occurs
34 // looks like:
35 // - [a mix of with, catch and block scopes]
36 // - [function stack + context]
37 // - [outer context]
38 // The builder materializes all stack variables into properties of objects;
39 // the expression is then evaluated as if it is inside a series of 'with'
40 // statements using those objects. To this end, the builder builds a new
41 // context chain, based on a scope chain:
42 // - every With and Catch scope begets a cloned context
43 // - Block scope begets one or two contexts:
44 // - if a block has context-allocated varaibles, its context is cloned
45 // - stack locals are materizalized as a With context
46 // - Local scope begets a With context for materizalized locals, chained to
47 // original function context. Original function context is the end of
48 // the chain.
49 class ContextBuilder {
50 public:
51 ContextBuilder(Isolate* isolate, JavaScriptFrame* frame,
52 int inlined_jsframe_index);
53
54 void UpdateValues();
55
56 Handle<Context> innermost_context() const { return innermost_context_; }
57 Handle<SharedFunctionInfo> outer_info() const { return outer_info_; }
58
59 private:
60 struct ContextChainElement {
61 Handle<Context> original_context;
62 Handle<Context> cloned_context;
63 Handle<JSObject> materialized_object;
64 Handle<ScopeInfo> scope_info;
65 };
66
67 void RecordContextsInChain(Handle<Context>* inner_context,
68 Handle<Context> first, Handle<Context> last);
69
70 Handle<JSObject> NewJSObjectWithNullProto();
71
72 // Helper function to find or create the arguments object for
73 // Runtime_DebugEvaluate.
74 void MaterializeArgumentsObject(Handle<JSObject> target,
75 Handle<JSFunction> function);
76
77 Handle<Context> MaterializeReceiver(Handle<Context> target,
78 Handle<JSFunction> function);
79
80 Handle<SharedFunctionInfo> outer_info_;
81 Handle<Context> innermost_context_;
82 List<ContextChainElement> context_chain_;
83 Isolate* isolate_;
84 JavaScriptFrame* frame_;
85 int inlined_jsframe_index_;
86 };
87
88 static MaybeHandle<Object> Evaluate(Isolate* isolate,
89 Handle<SharedFunctionInfo> outer_info,
90 Handle<Context> context,
91 Handle<Object> context_extension,
92 Handle<Object> receiver,
93 Handle<String> source);
94 };
95
96
97 } // namespace internal
98 } // namespace v8
99
100 #endif // V8_DEBUG_DEBUG_EVALUATE_H_
OLDNEW
« no previous file with comments | « BUILD.gn ('k') | src/debug/debug-evaluate.cc » ('j') | src/debug/debug-scopes.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698