| Index: src/inspector/v8-debugger-script.cc
 | 
| diff --git a/src/inspector/v8-debugger-script.cc b/src/inspector/v8-debugger-script.cc
 | 
| index d4f94dd15a238ce5ea4140f4c0e5490315d4804c..f8dae51812a526c951aee9472ce7eba637e484ee 100644
 | 
| --- a/src/inspector/v8-debugger-script.cc
 | 
| +++ b/src/inspector/v8-debugger-script.cc
 | 
| @@ -155,11 +155,40 @@ class ActualScript : public V8DebuggerScript {
 | 
|    bool getPossibleBreakpoints(
 | 
|        const v8::debug::Location& start, const v8::debug::Location& end,
 | 
|        bool restrictToFunction,
 | 
| -      std::vector<v8::debug::Location>* locations) override {
 | 
| +      std::vector<v8::debug::BreakLocation>* locations) override {
 | 
|      v8::HandleScope scope(m_isolate);
 | 
|      v8::Local<v8::debug::Script> script = m_script.Get(m_isolate);
 | 
| -    return script->GetPossibleBreakpoints(start, end, restrictToFunction,
 | 
| -                                          locations);
 | 
| +    std::vector<v8::debug::BreakLocation> allLocations;
 | 
| +    if (!script->GetPossibleBreakpoints(start, end, restrictToFunction,
 | 
| +                                        &allLocations)) {
 | 
| +      return false;
 | 
| +    }
 | 
| +    if (!allLocations.size()) return true;
 | 
| +    v8::debug::BreakLocation current = allLocations[0];
 | 
| +    for (size_t i = 1; i < allLocations.size(); ++i) {
 | 
| +      if (allLocations[i].GetLineNumber() == current.GetLineNumber() &&
 | 
| +          allLocations[i].GetColumnNumber() == current.GetColumnNumber()) {
 | 
| +        if (allLocations[i].type() != v8::debug::kCommonBreakLocation) {
 | 
| +          DCHECK(allLocations[i].type() == v8::debug::kCallBreakLocation ||
 | 
| +                 allLocations[i].type() == v8::debug::kReturnBreakLocation);
 | 
| +          // debugger can returns more then one break location at the same
 | 
| +          // source location, e.g. foo() - in this case there are two break
 | 
| +          // locations before foo: for statement and for function call, we can
 | 
| +          // merge them for inspector and report only one with call type.
 | 
| +          current = allLocations[i];
 | 
| +        }
 | 
| +      } else {
 | 
| +        // we assume that returned break locations are sorted.
 | 
| +        DCHECK(
 | 
| +            allLocations[i].GetLineNumber() > current.GetLineNumber() ||
 | 
| +            (allLocations[i].GetColumnNumber() >= current.GetColumnNumber() &&
 | 
| +             allLocations[i].GetLineNumber() == current.GetLineNumber()));
 | 
| +        locations->push_back(current);
 | 
| +        current = allLocations[i];
 | 
| +      }
 | 
| +    }
 | 
| +    locations->push_back(current);
 | 
| +    return true;
 | 
|    }
 | 
|  
 | 
|    void resetBlackboxedStateCache() override {
 | 
| @@ -223,7 +252,7 @@ class WasmVirtualScript : public V8DebuggerScript {
 | 
|    bool getPossibleBreakpoints(
 | 
|        const v8::debug::Location& start, const v8::debug::Location& end,
 | 
|        bool restrictToFunction,
 | 
| -      std::vector<v8::debug::Location>* locations) override {
 | 
| +      std::vector<v8::debug::BreakLocation>* locations) override {
 | 
|      v8::HandleScope scope(m_isolate);
 | 
|      v8::Local<v8::debug::Script> script = m_script.Get(m_isolate);
 | 
|      String16 v8ScriptId = String16::fromInteger(script->Id());
 | 
| @@ -244,7 +273,7 @@ class WasmVirtualScript : public V8DebuggerScript {
 | 
|  
 | 
|      bool success = script->GetPossibleBreakpoints(
 | 
|          translatedStart, translatedEnd, restrictToFunction, locations);
 | 
| -    for (v8::debug::Location& loc : *locations) {
 | 
| +    for (v8::debug::BreakLocation& loc : *locations) {
 | 
|        TranslateV8LocationToProtocolLocation(m_wasmTranslation, &loc, v8ScriptId,
 | 
|                                              scriptId());
 | 
|      }
 | 
| 
 |