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

Side by Side Diff: src/debug/debug.cc

Issue 2650193002: [debugger] remove debugger statement support from FCG/CS. (Closed)
Patch Set: rebase Created 3 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 | « src/compiler/ast-graph-builder.cc ('k') | src/full-codegen/full-codegen.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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/debug/debug.h" 5 #include "src/debug/debug.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "src/api.h" 9 #include "src/api.h"
10 #include "src/arguments.h" 10 #include "src/arguments.h"
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 DCHECK(!Done()); 176 DCHECK(!Done());
177 Next(); 177 Next();
178 } 178 }
179 179
180 int CodeBreakIterator::GetModeMask() { 180 int CodeBreakIterator::GetModeMask() {
181 int mask = 0; 181 int mask = 0;
182 mask |= RelocInfo::ModeMask(RelocInfo::DEBUG_BREAK_SLOT_AT_RETURN); 182 mask |= RelocInfo::ModeMask(RelocInfo::DEBUG_BREAK_SLOT_AT_RETURN);
183 mask |= RelocInfo::ModeMask(RelocInfo::DEBUG_BREAK_SLOT_AT_CALL); 183 mask |= RelocInfo::ModeMask(RelocInfo::DEBUG_BREAK_SLOT_AT_CALL);
184 mask |= RelocInfo::ModeMask(RelocInfo::DEBUG_BREAK_SLOT_AT_TAIL_CALL); 184 mask |= RelocInfo::ModeMask(RelocInfo::DEBUG_BREAK_SLOT_AT_TAIL_CALL);
185 mask |= RelocInfo::ModeMask(RelocInfo::DEBUG_BREAK_SLOT_AT_POSITION); 185 mask |= RelocInfo::ModeMask(RelocInfo::DEBUG_BREAK_SLOT_AT_POSITION);
186 mask |= RelocInfo::ModeMask(RelocInfo::DEBUGGER_STATEMENT);
187 return mask; 186 return mask;
188 } 187 }
189 188
190 void CodeBreakIterator::Next() { 189 void CodeBreakIterator::Next() {
191 DisallowHeapAllocation no_gc; 190 DisallowHeapAllocation no_gc;
192 DCHECK(!Done()); 191 DCHECK(!Done());
193 192
194 // Iterate through reloc info stopping at each breakable code target. 193 // Iterate through reloc info stopping at each breakable code target.
195 bool first = break_index_ == -1; 194 bool first = break_index_ == -1;
196 195
197 if (!first) reloc_iterator_.next(); 196 if (!first) reloc_iterator_.next();
198 first = false; 197 first = false;
199 if (Done()) return; 198 if (Done()) return;
200 199
201 int offset = code_offset(); 200 int offset = code_offset();
202 while (!source_position_iterator_.done() && 201 while (!source_position_iterator_.done() &&
203 source_position_iterator_.code_offset() <= offset) { 202 source_position_iterator_.code_offset() <= offset) {
204 position_ = source_position_iterator_.source_position().ScriptOffset(); 203 position_ = source_position_iterator_.source_position().ScriptOffset();
205 if (source_position_iterator_.is_statement()) { 204 if (source_position_iterator_.is_statement()) {
206 statement_position_ = position_; 205 statement_position_ = position_;
207 } 206 }
208 source_position_iterator_.Advance(); 207 source_position_iterator_.Advance();
209 } 208 }
210 209
211 DCHECK(RelocInfo::IsDebugBreakSlot(rmode()) || 210 DCHECK(RelocInfo::IsDebugBreakSlot(rmode()));
212 RelocInfo::IsDebuggerStatement(rmode()));
213 break_index_++; 211 break_index_++;
214 } 212 }
215 213
216 DebugBreakType CodeBreakIterator::GetDebugBreakType() { 214 DebugBreakType CodeBreakIterator::GetDebugBreakType() {
217 if (RelocInfo::IsDebugBreakSlotAtReturn(rmode())) { 215 if (RelocInfo::IsDebugBreakSlotAtReturn(rmode())) {
218 return DEBUG_BREAK_SLOT_AT_RETURN; 216 return DEBUG_BREAK_SLOT_AT_RETURN;
219 } else if (RelocInfo::IsDebugBreakSlotAtCall(rmode())) { 217 } else if (RelocInfo::IsDebugBreakSlotAtCall(rmode())) {
220 return DEBUG_BREAK_SLOT_AT_CALL; 218 return DEBUG_BREAK_SLOT_AT_CALL;
221 } else if (RelocInfo::IsDebugBreakSlotAtTailCall(rmode())) { 219 } else if (RelocInfo::IsDebugBreakSlotAtTailCall(rmode())) {
222 return isolate()->is_tail_call_elimination_enabled() 220 return isolate()->is_tail_call_elimination_enabled()
223 ? DEBUG_BREAK_SLOT_AT_TAIL_CALL 221 ? DEBUG_BREAK_SLOT_AT_TAIL_CALL
224 : DEBUG_BREAK_SLOT_AT_CALL; 222 : DEBUG_BREAK_SLOT_AT_CALL;
225 } else if (RelocInfo::IsDebuggerStatement(rmode())) {
226 return DEBUGGER_STATEMENT;
227 } else if (RelocInfo::IsDebugBreakSlot(rmode())) { 223 } else if (RelocInfo::IsDebugBreakSlot(rmode())) {
228 return DEBUG_BREAK_SLOT; 224 return DEBUG_BREAK_SLOT;
229 } else { 225 } else {
230 return NOT_DEBUG_BREAK; 226 return NOT_DEBUG_BREAK;
231 } 227 }
232 } 228 }
233 229
234 void CodeBreakIterator::SkipToPosition(int position, 230 void CodeBreakIterator::SkipToPosition(int position,
235 BreakPositionAlignment alignment) { 231 BreakPositionAlignment alignment) {
236 CodeBreakIterator it(debug_info_); 232 CodeBreakIterator it(debug_info_);
237 SkipTo(it.BreakIndexFromPosition(position, alignment)); 233 SkipTo(it.BreakIndexFromPosition(position, alignment));
238 } 234 }
239 235
240 void CodeBreakIterator::SetDebugBreak() { 236 void CodeBreakIterator::SetDebugBreak() {
241 DebugBreakType debug_break_type = GetDebugBreakType(); 237 DebugBreakType debug_break_type = GetDebugBreakType();
242 if (debug_break_type == DEBUGGER_STATEMENT) return;
243 DCHECK(debug_break_type >= DEBUG_BREAK_SLOT); 238 DCHECK(debug_break_type >= DEBUG_BREAK_SLOT);
244 Builtins* builtins = isolate()->builtins(); 239 Builtins* builtins = isolate()->builtins();
245 Handle<Code> target = debug_break_type == DEBUG_BREAK_SLOT_AT_RETURN 240 Handle<Code> target = debug_break_type == DEBUG_BREAK_SLOT_AT_RETURN
246 ? builtins->Return_DebugBreak() 241 ? builtins->Return_DebugBreak()
247 : builtins->Slot_DebugBreak(); 242 : builtins->Slot_DebugBreak();
248 DebugCodegen::PatchDebugBreakSlot(isolate(), rinfo()->pc(), target); 243 DebugCodegen::PatchDebugBreakSlot(isolate(), rinfo()->pc(), target);
249 } 244 }
250 245
251 void CodeBreakIterator::ClearDebugBreak() { 246 void CodeBreakIterator::ClearDebugBreak() {
252 DebugBreakType debug_break_type = GetDebugBreakType(); 247 DCHECK(GetDebugBreakType() >= DEBUG_BREAK_SLOT);
253 if (debug_break_type == DEBUGGER_STATEMENT) return;
254 DCHECK(debug_break_type >= DEBUG_BREAK_SLOT);
255 DebugCodegen::ClearDebugBreakSlot(isolate(), rinfo()->pc()); 248 DebugCodegen::ClearDebugBreakSlot(isolate(), rinfo()->pc());
256 } 249 }
257 250
258 bool CodeBreakIterator::IsDebugBreak() { 251 bool CodeBreakIterator::IsDebugBreak() {
259 DebugBreakType debug_break_type = GetDebugBreakType(); 252 DCHECK(GetDebugBreakType() >= DEBUG_BREAK_SLOT);
260 if (debug_break_type == DEBUGGER_STATEMENT) return false;
261 DCHECK(debug_break_type >= DEBUG_BREAK_SLOT);
262 return DebugCodegen::DebugBreakSlotIsPatched(rinfo()->pc()); 253 return DebugCodegen::DebugBreakSlotIsPatched(rinfo()->pc());
263 } 254 }
264 255
265 BreakLocation CodeBreakIterator::GetBreakLocation() { 256 BreakLocation CodeBreakIterator::GetBreakLocation() {
266 Handle<AbstractCode> code(AbstractCode::cast(debug_info_->DebugCode())); 257 Handle<AbstractCode> code(AbstractCode::cast(debug_info_->DebugCode()));
267 return BreakLocation(code, GetDebugBreakType(), code_offset(), position_); 258 return BreakLocation(code, GetDebugBreakType(), code_offset(), position_);
268 } 259 }
269 260
270 BytecodeArrayBreakIterator::BytecodeArrayBreakIterator( 261 BytecodeArrayBreakIterator::BytecodeArrayBreakIterator(
271 Handle<DebugInfo> debug_info) 262 Handle<DebugInfo> debug_info)
(...skipping 2145 matching lines...) Expand 10 before | Expand all | Expand 10 after
2417 isolate_->Throw(*isolate_->factory()->NewEvalError( 2408 isolate_->Throw(*isolate_->factory()->NewEvalError(
2418 MessageTemplate::kNoSideEffectDebugEvaluate)); 2409 MessageTemplate::kNoSideEffectDebugEvaluate));
2419 } 2410 }
2420 isolate_->set_needs_side_effect_check(old_needs_side_effect_check_); 2411 isolate_->set_needs_side_effect_check(old_needs_side_effect_check_);
2421 isolate_->debug()->UpdateHookOnFunctionCall(); 2412 isolate_->debug()->UpdateHookOnFunctionCall();
2422 isolate_->debug()->side_effect_check_failed_ = false; 2413 isolate_->debug()->side_effect_check_failed_ = false;
2423 } 2414 }
2424 2415
2425 } // namespace internal 2416 } // namespace internal
2426 } // namespace v8 2417 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/ast-graph-builder.cc ('k') | src/full-codegen/full-codegen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698