String ScriptDebugServer::setBreakpoint(const String& sourceID, const ScriptBreakpoint& scriptBreakpoint, int* actualLineNumber, int* actualColumnNumber) { intptr_t sourceIDValue = sourceID.toIntPtr(); if (!sourceIDValue) return ""; SourceIdToBreakpointsMap::iterator it = m_sourceIdToBreakpoints.find(sourceIDValue); if (it == m_sourceIdToBreakpoints.end()) it = m_sourceIdToBreakpoints.set(sourceIDValue, LineToBreakpointMap()).iterator; if (it->second.contains(scriptBreakpoint.lineNumber + 1)) return ""; it->second.set(scriptBreakpoint.lineNumber + 1, scriptBreakpoint); *actualLineNumber = scriptBreakpoint.lineNumber; // FIXME(WK53003): implement setting breakpoints by line:column. *actualColumnNumber = 0; return sourceID + ":" + String::number(scriptBreakpoint.lineNumber); }
String ScriptDebugServer::setBreakpoint(const String& sourceID, const ScriptBreakpoint& scriptBreakpoint, int* actualLineNumber, int* actualColumnNumber) { intptr_t sourceIDValue = sourceID.toIntPtr(); if (!sourceIDValue) return ""; SourceIdToBreakpointsMap::iterator it = m_sourceIdToBreakpoints.find(sourceIDValue); if (it == m_sourceIdToBreakpoints.end()) it = m_sourceIdToBreakpoints.set(sourceIDValue, LineToBreakpointMap()).iterator; LineToBreakpointMap::iterator breaksIt = it->value.find(scriptBreakpoint.lineNumber + 1); if (breaksIt == it->value.end()) breaksIt = it->value.set(scriptBreakpoint.lineNumber + 1, BreakpointsInLine()).iterator; BreakpointsInLine& breaksVector = breaksIt->value; unsigned breaksCount = breaksVector.size(); for (unsigned i = 0; i < breaksCount; i++) { if (breaksVector.at(i).columnNumber == scriptBreakpoint.columnNumber) return ""; } breaksVector.append(scriptBreakpoint); *actualLineNumber = scriptBreakpoint.lineNumber; *actualColumnNumber = scriptBreakpoint.columnNumber; return sourceID + ":" + String::number(scriptBreakpoint.lineNumber) + ":" + String::number(scriptBreakpoint.columnNumber); }