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

Side by Side Diff: src/api.cc

Issue 2728563002: [inspector] added type of break location into getPossibleBreakpoints output (Closed)
Patch Set: moved filtering Created 3 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
« no previous file with comments | « no previous file | src/debug/debug.h » ('j') | src/inspector/v8-debugger-script.cc » ('J')
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/api.h" 5 #include "src/api.h"
6 6
7 #include <string.h> // For memcpy, strlen. 7 #include <string.h> // For memcpy, strlen.
8 #ifdef V8_USE_ADDRESS_SANITIZER 8 #ifdef V8_USE_ADDRESS_SANITIZER
9 #include <sanitizer/asan_interface.h> 9 #include <sanitizer/asan_interface.h>
10 #endif // V8_USE_ADDRESS_SANITIZER 10 #endif // V8_USE_ADDRESS_SANITIZER
(...skipping 9193 matching lines...) Expand 10 before | Expand all | Expand 10 after
9204 } 9204 }
9205 9205
9206 bool debug::Script::IsModule() const { 9206 bool debug::Script::IsModule() const {
9207 return Utils::OpenHandle(this)->origin_options().IsModule(); 9207 return Utils::OpenHandle(this)->origin_options().IsModule();
9208 } 9208 }
9209 9209
9210 namespace { 9210 namespace {
9211 int GetSmiValue(i::Handle<i::FixedArray> array, int index) { 9211 int GetSmiValue(i::Handle<i::FixedArray> array, int index) {
9212 return i::Smi::cast(array->get(index))->value(); 9212 return i::Smi::cast(array->get(index))->value();
9213 } 9213 }
9214
9215 bool CompareBreakLocation(const i::BreakLocation& loc1,
9216 const i::BreakLocation& loc2) {
9217 return loc1.position() < loc2.position();
9218 }
9214 } // namespace 9219 } // namespace
9215 9220
9216 bool debug::Script::GetPossibleBreakpoints( 9221 bool debug::Script::GetPossibleBreakpoints(
9217 const debug::Location& start, const debug::Location& end, 9222 const debug::Location& start, const debug::Location& end,
9218 bool restrict_to_function, std::vector<debug::Location>* locations) const { 9223 bool restrict_to_function,
9224 std::vector<debug::BreakLocation>* locations) const {
9219 CHECK(!start.IsEmpty()); 9225 CHECK(!start.IsEmpty());
9220 i::Handle<i::Script> script = Utils::OpenHandle(this); 9226 i::Handle<i::Script> script = Utils::OpenHandle(this);
9221 if (script->type() == i::Script::TYPE_WASM) { 9227 if (script->type() == i::Script::TYPE_WASM) {
9222 i::Handle<i::WasmCompiledModule> compiled_module( 9228 i::Handle<i::WasmCompiledModule> compiled_module(
9223 i::WasmCompiledModule::cast(script->wasm_compiled_module())); 9229 i::WasmCompiledModule::cast(script->wasm_compiled_module()));
9224 return compiled_module->GetPossibleBreakpoints(start, end, locations); 9230 return compiled_module->GetPossibleBreakpoints(start, end, locations);
9225 } 9231 }
9226 9232
9227 i::Script::InitLineEnds(script); 9233 i::Script::InitLineEnds(script);
9228 CHECK(script->line_ends()->IsFixedArray()); 9234 CHECK(script->line_ends()->IsFixedArray());
9229 i::Isolate* isolate = script->GetIsolate(); 9235 i::Isolate* isolate = script->GetIsolate();
9230 i::Handle<i::FixedArray> line_ends = 9236 i::Handle<i::FixedArray> line_ends =
9231 i::Handle<i::FixedArray>::cast(i::handle(script->line_ends(), isolate)); 9237 i::Handle<i::FixedArray>::cast(i::handle(script->line_ends(), isolate));
9232 CHECK(line_ends->length()); 9238 CHECK(line_ends->length());
9233 9239
9234 int start_offset = GetSourceOffset(start); 9240 int start_offset = GetSourceOffset(start);
9235 int end_offset = end.IsEmpty() 9241 int end_offset = end.IsEmpty()
9236 ? GetSmiValue(line_ends, line_ends->length() - 1) + 1 9242 ? GetSmiValue(line_ends, line_ends->length() - 1) + 1
9237 : GetSourceOffset(end); 9243 : GetSourceOffset(end);
9238 if (start_offset >= end_offset) return true; 9244 if (start_offset >= end_offset) return true;
9239 9245
9240 std::set<int> offsets; 9246 std::vector<i::BreakLocation> v8_locations;
9241 if (!isolate->debug()->GetPossibleBreakpoints( 9247 if (!isolate->debug()->GetPossibleBreakpoints(
9242 script, start_offset, end_offset, restrict_to_function, &offsets)) { 9248 script, start_offset, end_offset, restrict_to_function,
9249 &v8_locations)) {
9243 return false; 9250 return false;
9244 } 9251 }
9245 9252
9253 std::sort(v8_locations.begin(), v8_locations.end(), CompareBreakLocation);
9246 int current_line_end_index = 0; 9254 int current_line_end_index = 0;
9247 for (const auto& it : offsets) { 9255 for (const auto& v8_location : v8_locations) {
9248 int offset = it; 9256 int offset = v8_location.position();
9249 while (offset > GetSmiValue(line_ends, current_line_end_index)) { 9257 while (offset > GetSmiValue(line_ends, current_line_end_index)) {
9250 ++current_line_end_index; 9258 ++current_line_end_index;
9251 CHECK(current_line_end_index < line_ends->length()); 9259 CHECK(current_line_end_index < line_ends->length());
9252 } 9260 }
9253 int line_offset = 0; 9261 int line_offset = 0;
9254 9262
9255 if (current_line_end_index > 0) { 9263 if (current_line_end_index > 0) {
9256 line_offset = GetSmiValue(line_ends, current_line_end_index - 1) + 1; 9264 line_offset = GetSmiValue(line_ends, current_line_end_index - 1) + 1;
9257 } 9265 }
9258 locations->push_back(debug::Location( 9266 locations->emplace_back(
9259 current_line_end_index + script->line_offset(), 9267 current_line_end_index + script->line_offset(),
9260 offset - line_offset + 9268 offset - line_offset +
9261 (current_line_end_index == 0 ? script->column_offset() : 0))); 9269 (current_line_end_index == 0 ? script->column_offset() : 0),
9270 v8_location.type());
9262 } 9271 }
9263 return true; 9272 return true;
9264 } 9273 }
9265 9274
9266 int debug::Script::GetSourceOffset(const debug::Location& location) const { 9275 int debug::Script::GetSourceOffset(const debug::Location& location) const {
9267 i::Handle<i::Script> script = Utils::OpenHandle(this); 9276 i::Handle<i::Script> script = Utils::OpenHandle(this);
9268 if (script->type() == i::Script::TYPE_WASM) { 9277 if (script->type() == i::Script::TYPE_WASM) {
9269 // TODO(clemensh): Return the proper thing for wasm. 9278 // TODO(clemensh): Return the proper thing for wasm.
9270 return 0; 9279 return 0;
9271 } 9280 }
(...skipping 975 matching lines...) Expand 10 before | Expand all | Expand 10 after
10247 Address callback_address = 10256 Address callback_address =
10248 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); 10257 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback));
10249 VMState<EXTERNAL> state(isolate); 10258 VMState<EXTERNAL> state(isolate);
10250 ExternalCallbackScope call_scope(isolate, callback_address); 10259 ExternalCallbackScope call_scope(isolate, callback_address);
10251 callback(info); 10260 callback(info);
10252 } 10261 }
10253 10262
10254 10263
10255 } // namespace internal 10264 } // namespace internal
10256 } // namespace v8 10265 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/debug/debug.h » ('j') | src/inspector/v8-debugger-script.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698