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

Side by Side Diff: runtime/vm/debugger.h

Issue 1644793002: Replace intptr_t with TokenDescriptor (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 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 | « runtime/vm/dart_api_impl.cc ('k') | runtime/vm/debugger.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 (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef VM_DEBUGGER_H_ 5 #ifndef VM_DEBUGGER_H_
6 #define VM_DEBUGGER_H_ 6 #define VM_DEBUGGER_H_
7 7
8 #include "include/dart_tools_api.h" 8 #include "include/dart_tools_api.h"
9 9
10 #include "vm/object.h" 10 #include "vm/object.h"
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 // the definitive source location yet. The requested source location may 91 // the definitive source location yet. The requested source location may
92 // change when the underlying code gets compiled. 92 // change when the underlying code gets compiled.
93 // A latent breakpoint represents a breakpoint location in Dart source 93 // A latent breakpoint represents a breakpoint location in Dart source
94 // that is not loaded in the VM when the breakpoint is requested. 94 // that is not loaded in the VM when the breakpoint is requested.
95 // When a script with matching url is loaded, a latent breakpoint 95 // When a script with matching url is loaded, a latent breakpoint
96 // becomes an unresolved breakpoint. 96 // becomes an unresolved breakpoint.
97 class BreakpointLocation { 97 class BreakpointLocation {
98 public: 98 public:
99 // Create a new unresolved breakpoint. 99 // Create a new unresolved breakpoint.
100 BreakpointLocation(const Script& script, 100 BreakpointLocation(const Script& script,
101 intptr_t token_pos, 101 TokenPosition token_pos,
102 intptr_t end_token_pos, 102 TokenPosition end_token_pos,
103 intptr_t requested_line_number, 103 intptr_t requested_line_number,
104 intptr_t requested_column_number); 104 intptr_t requested_column_number);
105 // Create a new latent breakpoint. 105 // Create a new latent breakpoint.
106 BreakpointLocation(const String& url, 106 BreakpointLocation(const String& url,
107 intptr_t requested_line_number, 107 intptr_t requested_line_number,
108 intptr_t requested_column_number); 108 intptr_t requested_column_number);
109 109
110 ~BreakpointLocation(); 110 ~BreakpointLocation();
111 111
112 RawFunction* function() const { return function_; } 112 RawFunction* function() const { return function_; }
113 intptr_t token_pos() const { return token_pos_; } 113 TokenPosition token_pos() const { return token_pos_; }
114 intptr_t end_token_pos() const { return end_token_pos_; } 114 TokenPosition end_token_pos() const { return end_token_pos_; }
115 115
116 RawScript* script() const { return script_; } 116 RawScript* script() const { return script_; }
117 RawString* url() const { return url_; } 117 RawString* url() const { return url_; }
118 118
119 intptr_t requested_line_number() const { return requested_line_number_; } 119 intptr_t requested_line_number() const { return requested_line_number_; }
120 intptr_t requested_column_number() const { return requested_column_number_; } 120 intptr_t requested_column_number() const { return requested_column_number_; }
121 121
122 intptr_t LineNumber(); 122 intptr_t LineNumber();
123 intptr_t ColumnNumber(); 123 intptr_t ColumnNumber();
124 124
125 void GetCodeLocation(Library* lib, 125 void GetCodeLocation(Library* lib,
126 Script* script, 126 Script* script,
127 intptr_t* token_pos) const; 127 TokenPosition* token_pos) const;
128 128
129 Breakpoint* AddRepeated(Debugger* dbg); 129 Breakpoint* AddRepeated(Debugger* dbg);
130 Breakpoint* AddSingleShot(Debugger* dbg); 130 Breakpoint* AddSingleShot(Debugger* dbg);
131 Breakpoint* AddPerClosure(Debugger* dbg, const Instance& closure); 131 Breakpoint* AddPerClosure(Debugger* dbg, const Instance& closure);
132 132
133 bool AnyEnabled() const; 133 bool AnyEnabled() const;
134 bool IsResolved() const { return is_resolved_; } 134 bool IsResolved() const { return is_resolved_; }
135 bool IsLatent() const { return token_pos_ < 0; } 135 bool IsLatent() const { return !token_pos_.IsReal(); }
136 136
137 private: 137 private:
138 void VisitObjectPointers(ObjectPointerVisitor* visitor); 138 void VisitObjectPointers(ObjectPointerVisitor* visitor);
139 139
140 void SetResolved(const Function& func, intptr_t token_pos); 140 void SetResolved(const Function& func, TokenPosition token_pos);
141 141
142 BreakpointLocation* next() const { return this->next_; } 142 BreakpointLocation* next() const { return this->next_; }
143 void set_next(BreakpointLocation* value) { next_ = value; } 143 void set_next(BreakpointLocation* value) { next_ = value; }
144 144
145 void AddBreakpoint(Breakpoint* bpt, Debugger* dbg); 145 void AddBreakpoint(Breakpoint* bpt, Debugger* dbg);
146 146
147 Breakpoint* breakpoints() const { return this->conditions_; } 147 Breakpoint* breakpoints() const { return this->conditions_; }
148 void set_breakpoints(Breakpoint* head) { this->conditions_ = head; } 148 void set_breakpoints(Breakpoint* head) { this->conditions_ = head; }
149 149
150 RawScript* script_; 150 RawScript* script_;
151 RawString* url_; 151 RawString* url_;
152 intptr_t token_pos_; 152 TokenPosition token_pos_;
153 intptr_t end_token_pos_; 153 TokenPosition end_token_pos_;
154 bool is_resolved_; 154 bool is_resolved_;
155 BreakpointLocation* next_; 155 BreakpointLocation* next_;
156 Breakpoint* conditions_; 156 Breakpoint* conditions_;
157 intptr_t requested_line_number_; 157 intptr_t requested_line_number_;
158 intptr_t requested_column_number_; 158 intptr_t requested_column_number_;
159 159
160 // Valid for resolved breakpoints: 160 // Valid for resolved breakpoints:
161 RawFunction* function_; 161 RawFunction* function_;
162 intptr_t line_number_; 162 intptr_t line_number_;
163 intptr_t column_number_; 163 intptr_t column_number_;
164 164
165 friend class Debugger; 165 friend class Debugger;
166 DISALLOW_COPY_AND_ASSIGN(BreakpointLocation); 166 DISALLOW_COPY_AND_ASSIGN(BreakpointLocation);
167 }; 167 };
168 168
169 169
170 // CodeBreakpoint represents a location in compiled code. There may be 170 // CodeBreakpoint represents a location in compiled code. There may be
171 // more than one CodeBreakpoint for one BreakpointLocation, e.g. when a 171 // more than one CodeBreakpoint for one BreakpointLocation, e.g. when a
172 // function gets compiled as a regular function and as a closure. 172 // function gets compiled as a regular function and as a closure.
173 class CodeBreakpoint { 173 class CodeBreakpoint {
174 public: 174 public:
175 CodeBreakpoint(const Code& code, 175 CodeBreakpoint(const Code& code,
176 intptr_t token_pos, 176 TokenPosition token_pos,
177 uword pc, 177 uword pc,
178 RawPcDescriptors::Kind kind); 178 RawPcDescriptors::Kind kind);
179 ~CodeBreakpoint(); 179 ~CodeBreakpoint();
180 180
181 RawFunction* function() const; 181 RawFunction* function() const;
182 uword pc() const { return pc_; } 182 uword pc() const { return pc_; }
183 intptr_t token_pos() const { return token_pos_; } 183 TokenPosition token_pos() const { return token_pos_; }
184 bool IsInternal() const { return bpt_location_ == NULL; } 184 bool IsInternal() const { return bpt_location_ == NULL; }
185 185
186 RawScript* SourceCode(); 186 RawScript* SourceCode();
187 RawString* SourceUrl(); 187 RawString* SourceUrl();
188 intptr_t LineNumber(); 188 intptr_t LineNumber();
189 189
190 void Enable(); 190 void Enable();
191 void Disable(); 191 void Disable();
192 bool IsEnabled() const { return is_enabled_; } 192 bool IsEnabled() const { return is_enabled_; }
193 193
194 RawCode* OrigStubAddress() const; 194 RawCode* OrigStubAddress() const;
195 195
196 private: 196 private:
197 void VisitObjectPointers(ObjectPointerVisitor* visitor); 197 void VisitObjectPointers(ObjectPointerVisitor* visitor);
198 198
199 BreakpointLocation* bpt_location() const { return bpt_location_; } 199 BreakpointLocation* bpt_location() const { return bpt_location_; }
200 void set_bpt_location(BreakpointLocation* value) { bpt_location_ = value; } 200 void set_bpt_location(BreakpointLocation* value) { bpt_location_ = value; }
201 201
202 void set_next(CodeBreakpoint* value) { next_ = value; } 202 void set_next(CodeBreakpoint* value) { next_ = value; }
203 CodeBreakpoint* next() const { return this->next_; } 203 CodeBreakpoint* next() const { return this->next_; }
204 204
205 void PatchCode(); 205 void PatchCode();
206 void RestoreCode(); 206 void RestoreCode();
207 207
208 RawCode* code_; 208 RawCode* code_;
209 intptr_t token_pos_; 209 TokenPosition token_pos_;
210 uword pc_; 210 uword pc_;
211 intptr_t line_number_; 211 intptr_t line_number_;
212 bool is_enabled_; 212 bool is_enabled_;
213 213
214 BreakpointLocation* bpt_location_; 214 BreakpointLocation* bpt_location_;
215 CodeBreakpoint* next_; 215 CodeBreakpoint* next_;
216 216
217 RawPcDescriptors::Kind breakpoint_kind_; 217 RawPcDescriptors::Kind breakpoint_kind_;
218 RawCode* saved_value_; 218 RawCode* saved_value_;
219 219
(...skipping 18 matching lines...) Expand all
238 } 238 }
239 const Code& code() const { 239 const Code& code() const {
240 ASSERT(!code_.IsNull()); 240 ASSERT(!code_.IsNull());
241 return code_; 241 return code_;
242 } 242 }
243 243
244 RawString* QualifiedFunctionName(); 244 RawString* QualifiedFunctionName();
245 RawString* SourceUrl(); 245 RawString* SourceUrl();
246 RawScript* SourceScript(); 246 RawScript* SourceScript();
247 RawLibrary* Library(); 247 RawLibrary* Library();
248 intptr_t TokenPos(); 248 TokenPosition TokenPos();
249 intptr_t LineNumber(); 249 intptr_t LineNumber();
250 intptr_t ColumnNumber(); 250 intptr_t ColumnNumber();
251 251
252 // Returns true if this frame is for a function that is visible 252 // Returns true if this frame is for a function that is visible
253 // to the user and can be debugged. 253 // to the user and can be debugged.
254 bool IsDebuggable() const; 254 bool IsDebuggable() const;
255 255
256 // The context level of a frame is the context level at the 256 // The context level of a frame is the context level at the
257 // PC/token index of the frame. It determines the depth of the context 257 // PC/token index of the frame. It determines the depth of the context
258 // chain that belongs to the function of this activation frame. 258 // chain that belongs to the function of this activation frame.
259 intptr_t ContextLevel(); 259 intptr_t ContextLevel();
260 260
261 const char* ToCString(); 261 const char* ToCString();
262 262
263 intptr_t NumLocalVariables(); 263 intptr_t NumLocalVariables();
264 264
265 void VariableAt(intptr_t i, 265 void VariableAt(intptr_t i,
266 String* name, 266 String* name,
267 intptr_t* token_pos, 267 TokenPosition* token_pos,
268 intptr_t* end_pos, 268 TokenPosition* end_pos,
269 Object* value); 269 Object* value);
270 270
271 RawArray* GetLocalVariables(); 271 RawArray* GetLocalVariables();
272 RawObject* GetParameter(intptr_t index); 272 RawObject* GetParameter(intptr_t index);
273 RawObject* GetClosure(); 273 RawObject* GetClosure();
274 RawObject* GetReceiver(); 274 RawObject* GetReceiver();
275 275
276 const Context& GetSavedCurrentContext(); 276 const Context& GetSavedCurrentContext();
277 RawObject* GetAsyncOperation(); 277 RawObject* GetAsyncOperation();
278 278
(...skipping 19 matching lines...) Expand all
298 298
299 uword pc_; 299 uword pc_;
300 uword fp_; 300 uword fp_;
301 uword sp_; 301 uword sp_;
302 302
303 // The anchor of the context chain for this function. 303 // The anchor of the context chain for this function.
304 Context& ctx_; 304 Context& ctx_;
305 const Code& code_; 305 const Code& code_;
306 const Function& function_; 306 const Function& function_;
307 bool token_pos_initialized_; 307 bool token_pos_initialized_;
308 intptr_t token_pos_; 308 TokenPosition token_pos_;
309 intptr_t try_index_; 309 intptr_t try_index_;
310 310
311 intptr_t line_number_; 311 intptr_t line_number_;
312 intptr_t column_number_; 312 intptr_t column_number_;
313 intptr_t context_level_; 313 intptr_t context_level_;
314 314
315 // Some frames are deoptimized into a side array in order to inspect them. 315 // Some frames are deoptimized into a side array in order to inspect them.
316 const Array& deopt_frame_; 316 const Array& deopt_frame_;
317 const intptr_t deopt_frame_offset_; 317 const intptr_t deopt_frame_offset_;
318 318
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 kStepOver, 582 kStepOver,
583 kStepOut, 583 kStepOut,
584 kSingleStep 584 kSingleStep
585 }; 585 };
586 586
587 static bool HasAnyEventHandler(); 587 static bool HasAnyEventHandler();
588 static bool HasDebugEventHandler(); 588 static bool HasDebugEventHandler();
589 void InvokeEventHandler(DebuggerEvent* event); 589 void InvokeEventHandler(DebuggerEvent* event);
590 590
591 void FindCompiledFunctions(const Script& script, 591 void FindCompiledFunctions(const Script& script,
592 intptr_t start_pos, 592 TokenPosition start_pos,
593 intptr_t end_pos, 593 TokenPosition end_pos,
594 GrowableObjectArray* function_list); 594 GrowableObjectArray* function_list);
595 RawFunction* FindBestFit(const Script& script, intptr_t token_pos); 595 RawFunction* FindBestFit(const Script& script, TokenPosition token_pos);
596 RawFunction* FindInnermostClosure(const Function& function, 596 RawFunction* FindInnermostClosure(const Function& function,
597 intptr_t token_pos); 597 TokenPosition token_pos);
598 intptr_t ResolveBreakpointPos(const Function& func, 598 TokenPosition ResolveBreakpointPos(const Function& func,
599 intptr_t requested_token_pos, 599 TokenPosition requested_token_pos,
600 intptr_t last_token_pos, 600 TokenPosition last_token_pos,
601 intptr_t requested_column); 601 intptr_t requested_column);
602 void DeoptimizeWorld(); 602 void DeoptimizeWorld();
603 BreakpointLocation* SetBreakpoint(const Script& script, 603 BreakpointLocation* SetBreakpoint(const Script& script,
604 intptr_t token_pos, 604 TokenPosition token_pos,
605 intptr_t last_token_pos, 605 TokenPosition last_token_pos,
606 intptr_t requested_line, 606 intptr_t requested_line,
607 intptr_t requested_column); 607 intptr_t requested_column);
608 void RemoveInternalBreakpoints(); 608 void RemoveInternalBreakpoints();
609 void UnlinkCodeBreakpoints(BreakpointLocation* bpt_location); 609 void UnlinkCodeBreakpoints(BreakpointLocation* bpt_location);
610 BreakpointLocation* GetLatentBreakpoint(const String& url, 610 BreakpointLocation* GetLatentBreakpoint(const String& url,
611 intptr_t line, 611 intptr_t line,
612 intptr_t column); 612 intptr_t column);
613 void RegisterBreakpointLocation(BreakpointLocation* bpt); 613 void RegisterBreakpointLocation(BreakpointLocation* bpt);
614 void RegisterCodeBreakpoint(CodeBreakpoint* bpt); 614 void RegisterCodeBreakpoint(CodeBreakpoint* bpt);
615 BreakpointLocation* GetBreakpointLocation(const Script& script, 615 BreakpointLocation* GetBreakpointLocation(const Script& script,
616 intptr_t token_pos, 616 TokenPosition token_pos,
617 intptr_t requested_column); 617 intptr_t requested_column);
618 void MakeCodeBreakpointAt(const Function& func, 618 void MakeCodeBreakpointAt(const Function& func,
619 BreakpointLocation* bpt); 619 BreakpointLocation* bpt);
620 // Returns NULL if no breakpoint exists for the given address. 620 // Returns NULL if no breakpoint exists for the given address.
621 CodeBreakpoint* GetCodeBreakpoint(uword breakpoint_address); 621 CodeBreakpoint* GetCodeBreakpoint(uword breakpoint_address);
622 622
623 void SyncBreakpointLocation(BreakpointLocation* loc); 623 void SyncBreakpointLocation(BreakpointLocation* loc);
624 624
625 ActivationFrame* TopDartFrame() const; 625 ActivationFrame* TopDartFrame() const;
626 static ActivationFrame* CollectDartFrame(Isolate* isolate, 626 static ActivationFrame* CollectDartFrame(Isolate* isolate,
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 702
703 friend class Isolate; 703 friend class Isolate;
704 friend class BreakpointLocation; 704 friend class BreakpointLocation;
705 DISALLOW_COPY_AND_ASSIGN(Debugger); 705 DISALLOW_COPY_AND_ASSIGN(Debugger);
706 }; 706 };
707 707
708 708
709 } // namespace dart 709 } // namespace dart
710 710
711 #endif // VM_DEBUGGER_H_ 711 #endif // VM_DEBUGGER_H_
OLDNEW
« no previous file with comments | « runtime/vm/dart_api_impl.cc ('k') | runtime/vm/debugger.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698