| Index: src/api.cc
|
| diff --git a/src/api.cc b/src/api.cc
|
| index 22e863ae3ecbd389cf98e9dff57d56633a0d6bc6..866a0bc22441e84f5339397ba42f9ce2c190ea44 100644
|
| --- a/src/api.cc
|
| +++ b/src/api.cc
|
| @@ -9212,11 +9212,17 @@ namespace {
|
| int GetSmiValue(i::Handle<i::FixedArray> array, int index) {
|
| return i::Smi::cast(array->get(index))->value();
|
| }
|
| +
|
| +bool CompareBreakLocation(const i::BreakLocation& loc1,
|
| + const i::BreakLocation& loc2) {
|
| + return loc1.position() < loc2.position();
|
| +}
|
| } // namespace
|
|
|
| bool debug::Script::GetPossibleBreakpoints(
|
| const debug::Location& start, const debug::Location& end,
|
| - bool restrict_to_function, std::vector<debug::Location>* locations) const {
|
| + bool restrict_to_function,
|
| + std::vector<debug::BreakLocation>* locations) const {
|
| CHECK(!start.IsEmpty());
|
| i::Handle<i::Script> script = Utils::OpenHandle(this);
|
| if (script->type() == i::Script::TYPE_WASM) {
|
| @@ -9238,15 +9244,17 @@ bool debug::Script::GetPossibleBreakpoints(
|
| : GetSourceOffset(end);
|
| if (start_offset >= end_offset) return true;
|
|
|
| - std::set<int> offsets;
|
| + std::vector<i::BreakLocation> v8_locations;
|
| if (!isolate->debug()->GetPossibleBreakpoints(
|
| - script, start_offset, end_offset, restrict_to_function, &offsets)) {
|
| + script, start_offset, end_offset, restrict_to_function,
|
| + &v8_locations)) {
|
| return false;
|
| }
|
|
|
| + std::sort(v8_locations.begin(), v8_locations.end(), CompareBreakLocation);
|
| int current_line_end_index = 0;
|
| - for (const auto& it : offsets) {
|
| - int offset = it;
|
| + for (const auto& v8_location : v8_locations) {
|
| + int offset = v8_location.position();
|
| while (offset > GetSmiValue(line_ends, current_line_end_index)) {
|
| ++current_line_end_index;
|
| CHECK(current_line_end_index < line_ends->length());
|
| @@ -9256,10 +9264,11 @@ bool debug::Script::GetPossibleBreakpoints(
|
| if (current_line_end_index > 0) {
|
| line_offset = GetSmiValue(line_ends, current_line_end_index - 1) + 1;
|
| }
|
| - locations->push_back(debug::Location(
|
| + locations->emplace_back(
|
| current_line_end_index + script->line_offset(),
|
| offset - line_offset +
|
| - (current_line_end_index == 0 ? script->column_offset() : 0)));
|
| + (current_line_end_index == 0 ? script->column_offset() : 0),
|
| + v8_location.type());
|
| }
|
| return true;
|
| }
|
|
|