static QScriptValue scriptMapToScriptValue(QScriptEngine *eng, const QScriptScriptMap &in) { QScriptValue out = eng->newObject(); QScriptScriptMap::const_iterator it; for (it = in.constBegin(); it != in.constEnd(); ++it) { out.setProperty(QString::number(it.key()), eng->toScriptValue(it.value())); } return out; }
/*! Returns the identifier of the script that has the given \a fileName, or -1 if there is no such script. */ qint64 QScriptDebuggerAgent::resolveScript(const QString &fileName) const { Q_D(const QScriptDebuggerAgent); QScriptScriptMap::const_iterator it; for (it = d->scripts.constBegin(); it != d->scripts.constEnd(); ++it) { if (it.value().fileName() == fileName) return it.key(); } return -1; }
/*! Sets a breakpoint defined by the given \a data. Returns an integer that uniquely identifies the new breakpoint, or -1 if setting the breakpoint failed. */ int QScriptDebuggerAgent::setBreakpoint(const QScriptBreakpointData &data) { Q_D(QScriptDebuggerAgent); qint64 scriptId = data.scriptId(); if (scriptId != -1) { if (!d->scripts.contains(scriptId)) { // that script has been unloaded, so invalidate the ID scriptId = -1; const_cast<QScriptBreakpointData&>(data).setScriptId(-1); } else if (data.fileName().isEmpty()) { QString fileName = d->scripts[scriptId].fileName(); const_cast<QScriptBreakpointData&>(data).setFileName(fileName); } } int id = d->nextBreakpointId; ++d->nextBreakpointId; if (scriptId != -1) { d->resolvedBreakpoints[scriptId].append(id); } else { QString fileName = data.fileName(); bool resolved = false; QScriptScriptMap::const_iterator it; for (it = d->scripts.constBegin(); it != d->scripts.constEnd(); ++it) { if (it.value().fileName() == fileName) { d->resolvedBreakpoints[it.key()].append(id); resolved = true; break; } } if (!resolved) d->unresolvedBreakpoints[fileName].append(id); } d->breakpoints.insert(id, data); return id; }