Merge remote-tracking branch 'origin/2.5'
Conflicts: src/plugins/debugger/qml/qmlengine.cpp src/plugins/qtsupport/gettingstartedwelcomepage.cpp Change-Id: I9157b9b9c05564ddeb3c72cec6b59523b8165d76
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 3.3 KiB |
@@ -54,8 +54,9 @@
|
|||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
|
|
||||||
\o Select \gui Projects, and then select the \gui QML check box in the
|
\o In \gui Projects mode \gui {Run Settings}, select the
|
||||||
\gui {Run Settings}, to enable QML debugging.
|
\gui {Enable QML} check box in the \gui {Debugger Settings} to
|
||||||
|
enable QML debugging.
|
||||||
|
|
||||||
\o For Qt 4.7, compile the QML Inspector debugging helper. For more information,
|
\o For Qt 4.7, compile the QML Inspector debugging helper. For more information,
|
||||||
see \l{Debugging Helpers for QML}.
|
see \l{Debugging Helpers for QML}.
|
||||||
@@ -82,7 +83,8 @@
|
|||||||
functions. Therefore, you must make sure that the port is properly
|
functions. Therefore, you must make sure that the port is properly
|
||||||
protected by a firewall.
|
protected by a firewall.
|
||||||
|
|
||||||
\o In the \gui {Run Settings}, select the \gui QML check box to enable
|
\o In the \gui {Run Settings}, \gui {Debugger Settings} section, select
|
||||||
|
the \gui {Enable QML} check box to enable
|
||||||
QML debugging.
|
QML debugging.
|
||||||
|
|
||||||
\o Select \gui {Build > Rebuild Project} to clean and rebuild the
|
\o Select \gui {Build > Rebuild Project} to clean and rebuild the
|
||||||
@@ -98,7 +100,9 @@
|
|||||||
\section1 Mixed C++/QML Debugging
|
\section1 Mixed C++/QML Debugging
|
||||||
|
|
||||||
To debug both the C++ and QML parts of your application at the same time,
|
To debug both the C++ and QML parts of your application at the same time,
|
||||||
select the checkboxes for both languages in the \gui{Run Settings}.
|
select the \gui {Enable C++} and \gui {Enable QML} checkboxes for both
|
||||||
|
languages in the \gui {Debugger Settings} section in the project
|
||||||
|
\gui{Run Settings}.
|
||||||
|
|
||||||
\image qtquick-debugging-settings.png
|
\image qtquick-debugging-settings.png
|
||||||
|
|
||||||
|
19
doc/src/projects/creator-projects-settings-run-debug.qdocinc
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
\section2 Specifying Debugger Settings
|
||||||
|
|
||||||
|
\image qtquick-debugging-settings.png "Debugger Settings"
|
||||||
|
|
||||||
|
To select the languages to debug, select the \gui {Enable C++} and
|
||||||
|
\gui {Enable QML} check boxes. The \gui {Debug port} is the port to
|
||||||
|
communicate with the debugger. You can use any free port in the registered
|
||||||
|
or dynamic port range.
|
||||||
|
|
||||||
|
\note Opening a socket at a well-known port presents a security risk. Anyone
|
||||||
|
on the Internet could connect to the application that you are debugging and
|
||||||
|
execute any JavaScript functions. Therefore, you must make sure that the
|
||||||
|
port is properly protected by a firewall.
|
||||||
|
|
||||||
|
If you debug more than one application at a time, you might receive an error
|
||||||
|
message stating that the port is already in use. Specify a free port number
|
||||||
|
in \gui {Debug port} and try again.
|
||||||
|
|
||||||
|
For more information about debugging, see \l{Debugging}.
|
@@ -13,16 +13,6 @@
|
|||||||
\o In the \gui {Main QML file}, select the file that \QQV will be
|
\o In the \gui {Main QML file}, select the file that \QQV will be
|
||||||
started with.
|
started with.
|
||||||
|
|
||||||
\o In the \gui Debugger group, select the languages to debug:
|
|
||||||
\gui{C++} and \gui QML. \gui {Debug port} is the port to access
|
|
||||||
\QQV. You can use any free port in the registered port range.
|
|
||||||
For more information, see \l{Debugging Qt Quick Projects}.
|
|
||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
\note Opening a socket at a well-known port presents a security risk. Anyone
|
|
||||||
on the Internet could connect to the application that you are debugging and
|
|
||||||
execute any JavaScript functions. Therefore, you must make sure that the
|
|
||||||
port is properly protected by a firewall.
|
|
||||||
|
|
||||||
\image qmldesigner-run-settings.png "Run settings for Qt Quick UI projects"
|
\image qmldesigner-run-settings.png "Run settings for Qt Quick UI projects"
|
||||||
|
@@ -249,7 +249,10 @@ QString Environment::searchInPath(const QStringList &executables,
|
|||||||
if (exec.indexOf(slash) != -1)
|
if (exec.indexOf(slash) != -1)
|
||||||
continue;
|
continue;
|
||||||
foreach (const QString &p, path()) {
|
foreach (const QString &p, path()) {
|
||||||
QString fp = p;
|
QString fp = QDir::fromNativeSeparators(p);
|
||||||
|
// Avoid turing / into // on windows which triggers windows to check
|
||||||
|
// for network drives!
|
||||||
|
if (!fp.endsWith(slash))
|
||||||
fp += slash;
|
fp += slash;
|
||||||
fp += exec;
|
fp += exec;
|
||||||
const QFileInfo fi(fp);
|
const QFileInfo fi(fp);
|
||||||
|
Before Width: | Height: | Size: 216 B After Width: | Height: | Size: 286 B |
Before Width: | Height: | Size: 229 B After Width: | Height: | Size: 288 B |
Before Width: | Height: | Size: 238 B After Width: | Height: | Size: 283 B |
Before Width: | Height: | Size: 210 B After Width: | Height: | Size: 272 B |
Before Width: | Height: | Size: 196 B After Width: | Height: | Size: 238 B |
@@ -1060,9 +1060,15 @@ void QmlEngine::expressionEvaluated(quint32 queryId, const QVariant &result)
|
|||||||
{
|
{
|
||||||
if (d->queryIds.contains(queryId)) {
|
if (d->queryIds.contains(queryId)) {
|
||||||
d->queryIds.removeOne(queryId);
|
d->queryIds.removeOne(queryId);
|
||||||
QtMessageLogItem *item = constructLogItemTree(result);
|
QtMessageLogItem *item = constructLogItemTree(qtMessageLogHandler()->root(),
|
||||||
|
result);
|
||||||
if (item)
|
if (item)
|
||||||
qtMessageLogHandler()->appendItem(item);
|
qtMessageLogHandler()->appendItem(item);
|
||||||
|
} else {
|
||||||
|
qtMessageLogHandler()->
|
||||||
|
appendItem(new QtMessageLogItem(qtMessageLogHandler()->root(),
|
||||||
|
QtMessageLogHandler::ErrorType,
|
||||||
|
_("Error evaluating expression.")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1133,7 +1139,8 @@ void QmlEngine::appendDebugOutput(QtMsgType type, const QString &message,
|
|||||||
//This case is not possible
|
//This case is not possible
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QtMessageLogItem *item = new QtMessageLogItem(itemType, message);
|
QtMessageLogItem *item = new QtMessageLogItem(qtMessageLogHandler()->root(),
|
||||||
|
itemType, message);
|
||||||
item->file = info.file;
|
item->file = info.file;
|
||||||
item->line = info.line;
|
item->line = info.line;
|
||||||
qtMessageLogHandler()->appendItem(item);
|
qtMessageLogHandler()->appendItem(item);
|
||||||
@@ -1175,6 +1182,7 @@ bool QmlEngine::evaluateScriptExpression(const QString& expression)
|
|||||||
qtMessageLogHandler()->
|
qtMessageLogHandler()->
|
||||||
appendItem(
|
appendItem(
|
||||||
new QtMessageLogItem(
|
new QtMessageLogItem(
|
||||||
|
qtMessageLogHandler()->root(),
|
||||||
QtMessageLogHandler::ErrorType,
|
QtMessageLogHandler::ErrorType,
|
||||||
_("Error evaluating expression.")));
|
_("Error evaluating expression.")));
|
||||||
}
|
}
|
||||||
@@ -1189,6 +1197,7 @@ bool QmlEngine::evaluateScriptExpression(const QString& expression)
|
|||||||
//Incase of invalid context, show Error message
|
//Incase of invalid context, show Error message
|
||||||
qtMessageLogHandler()->
|
qtMessageLogHandler()->
|
||||||
appendItem(new QtMessageLogItem(
|
appendItem(new QtMessageLogItem(
|
||||||
|
qtMessageLogHandler()->root(),
|
||||||
QtMessageLogHandler::ErrorType,
|
QtMessageLogHandler::ErrorType,
|
||||||
_("Cannot evaluate without "
|
_("Cannot evaluate without "
|
||||||
"a valid QML/JS Context.")),
|
"a valid QML/JS Context.")),
|
||||||
@@ -1301,12 +1310,12 @@ bool QmlEngine::canEvaluateScript(const QString &script)
|
|||||||
}
|
}
|
||||||
|
|
||||||
QtMessageLogItem *QmlEngine::constructLogItemTree(
|
QtMessageLogItem *QmlEngine::constructLogItemTree(
|
||||||
const QVariant &result, const QString &key)
|
QtMessageLogItem *parent, const QVariant &result, const QString &key)
|
||||||
{
|
{
|
||||||
if (!result.isValid())
|
if (!result.isValid())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
QtMessageLogItem *item = new QtMessageLogItem();
|
QtMessageLogItem *item = new QtMessageLogItem(parent);
|
||||||
if (result.type() == QVariant::Map) {
|
if (result.type() == QVariant::Map) {
|
||||||
if (key.isEmpty())
|
if (key.isEmpty())
|
||||||
item->text = _("Object");
|
item->text = _("Object");
|
||||||
@@ -1316,9 +1325,10 @@ QtMessageLogItem *QmlEngine::constructLogItemTree(
|
|||||||
QMapIterator<QString, QVariant> i(result.toMap());
|
QMapIterator<QString, QVariant> i(result.toMap());
|
||||||
while (i.hasNext()) {
|
while (i.hasNext()) {
|
||||||
i.next();
|
i.next();
|
||||||
QtMessageLogItem *child = constructLogItemTree(i.value(), i.key());
|
QtMessageLogItem *child = constructLogItemTree(item,
|
||||||
|
i.value(), i.key());
|
||||||
if (child)
|
if (child)
|
||||||
item->insertChild(item->childCount(), child);
|
item->insertChild(child);
|
||||||
}
|
}
|
||||||
} else if (result.type() == QVariant::List) {
|
} else if (result.type() == QVariant::List) {
|
||||||
if (key.isEmpty())
|
if (key.isEmpty())
|
||||||
@@ -1327,10 +1337,10 @@ QtMessageLogItem *QmlEngine::constructLogItemTree(
|
|||||||
item->text = QString(_("[%1] : List")).arg(key);
|
item->text = QString(_("[%1] : List")).arg(key);
|
||||||
QVariantList resultList = result.toList();
|
QVariantList resultList = result.toList();
|
||||||
for (int i = 0; i < resultList.count(); i++) {
|
for (int i = 0; i < resultList.count(); i++) {
|
||||||
QtMessageLogItem *child = constructLogItemTree(resultList.at(i),
|
QtMessageLogItem *child = constructLogItemTree(item, resultList.at(i),
|
||||||
QString::number(i));
|
QString::number(i));
|
||||||
if (child)
|
if (child)
|
||||||
item->insertChild(item->childCount(), child);
|
item->insertChild(child);
|
||||||
}
|
}
|
||||||
} else if (result.canConvert(QVariant::String)) {
|
} else if (result.canConvert(QVariant::String)) {
|
||||||
item->text = result.toString();
|
item->text = result.toString();
|
||||||
|
@@ -185,7 +185,8 @@ private:
|
|||||||
|
|
||||||
void updateEditor(Core::IEditor *editor, const QTextDocument *document);
|
void updateEditor(Core::IEditor *editor, const QTextDocument *document);
|
||||||
bool canEvaluateScript(const QString &script);
|
bool canEvaluateScript(const QString &script);
|
||||||
QtMessageLogItem *constructLogItemTree(const QVariant &result,
|
QtMessageLogItem *constructLogItemTree(QtMessageLogItem *parent,
|
||||||
|
const QVariant &result,
|
||||||
const QString &key = QString());
|
const QString &key = QString());
|
||||||
bool adjustBreakpointLineAndColumn(const QString &filePath, quint32 *line,
|
bool adjustBreakpointLineAndColumn(const QString &filePath, quint32 *line,
|
||||||
quint32 *column, bool *valid);
|
quint32 *column, bool *valid);
|
||||||
|
@@ -128,8 +128,8 @@ public:
|
|||||||
//TODO:: remove this method
|
//TODO:: remove this method
|
||||||
void reformatRequest(QByteArray &request);
|
void reformatRequest(QByteArray &request);
|
||||||
|
|
||||||
QtMessageLogItem *constructLogItemTree(const QmlV8ObjectData &objectData,
|
QtMessageLogItem *constructLogItemTree(QtMessageLogItem *parent,
|
||||||
const QVariant &refsVal);
|
const QmlV8ObjectData &objectData, const QVariant &refsVal);
|
||||||
private:
|
private:
|
||||||
QByteArray packMessage(const QByteArray &type, const QByteArray &message = QByteArray());
|
QByteArray packMessage(const QByteArray &type, const QByteArray &message = QByteArray());
|
||||||
QScriptValue initObject();
|
QScriptValue initObject();
|
||||||
@@ -150,6 +150,8 @@ public:
|
|||||||
|
|
||||||
QHash<int, QString> evaluatingExpression;
|
QHash<int, QString> evaluatingExpression;
|
||||||
QHash<int, QByteArray> localsAndWatchers;
|
QHash<int, QByteArray> localsAndWatchers;
|
||||||
|
QList<int> updateLocalsAndWatchers;
|
||||||
|
QList<int> debuggerCommands;
|
||||||
|
|
||||||
//Cache
|
//Cache
|
||||||
QStringList watchedExpressions;
|
QStringList watchedExpressions;
|
||||||
@@ -831,6 +833,7 @@ QmlV8ObjectData QmlV8DebuggerClientPrivate::extractData(const QVariant &data,
|
|||||||
objectData.properties = data.properties;
|
objectData.properties = data.properties;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
objectData.handle = dataMap.value(_(HANDLE)).toInt();
|
||||||
QString type = dataMap.value(_(TYPE)).toString();
|
QString type = dataMap.value(_(TYPE)).toString();
|
||||||
|
|
||||||
if (type == _("undefined")) {
|
if (type == _("undefined")) {
|
||||||
@@ -876,6 +879,8 @@ void QmlV8DebuggerClientPrivate::clearCache()
|
|||||||
{
|
{
|
||||||
watchedExpressions.clear();
|
watchedExpressions.clear();
|
||||||
currentFrameScopes.clear();
|
currentFrameScopes.clear();
|
||||||
|
evaluatingExpression.clear();
|
||||||
|
updateLocalsAndWatchers.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray QmlV8DebuggerClientPrivate::packMessage(const QByteArray &type, const QByteArray &message)
|
QByteArray QmlV8DebuggerClientPrivate::packMessage(const QByteArray &type, const QByteArray &message)
|
||||||
@@ -969,6 +974,7 @@ void QmlV8DebuggerClientPrivate::reformatRequest(QByteArray &request)
|
|||||||
}
|
}
|
||||||
|
|
||||||
QtMessageLogItem *QmlV8DebuggerClientPrivate::constructLogItemTree(
|
QtMessageLogItem *QmlV8DebuggerClientPrivate::constructLogItemTree(
|
||||||
|
QtMessageLogItem *parent,
|
||||||
const QmlV8ObjectData &objectData,
|
const QmlV8ObjectData &objectData,
|
||||||
const QVariant &refsVal)
|
const QVariant &refsVal)
|
||||||
{
|
{
|
||||||
@@ -982,14 +988,14 @@ QtMessageLogItem *QmlV8DebuggerClientPrivate::constructLogItemTree(
|
|||||||
text = QString(_("%1: %2")).arg(QString::fromAscii(objectData.name))
|
text = QString(_("%1: %2")).arg(QString::fromAscii(objectData.name))
|
||||||
.arg(objectData.value.toString());
|
.arg(objectData.value.toString());
|
||||||
|
|
||||||
QtMessageLogItem *item = new QtMessageLogItem(
|
QtMessageLogItem *item = new QtMessageLogItem(parent,
|
||||||
QtMessageLogHandler::UndefinedType, text);
|
QtMessageLogHandler::UndefinedType, text);
|
||||||
|
|
||||||
foreach (const QVariant &property, objectData.properties) {
|
foreach (const QVariant &property, objectData.properties) {
|
||||||
QtMessageLogItem *child = constructLogItemTree(
|
QtMessageLogItem *child = constructLogItemTree(
|
||||||
extractData(property, refsVal), refsVal);
|
item, extractData(property, refsVal), refsVal);
|
||||||
if (child)
|
if (child)
|
||||||
item->insertChild(item->childCount(), child);
|
item->insertChild(child);
|
||||||
}
|
}
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
@@ -1161,6 +1167,7 @@ void QmlV8DebuggerClient::assignValueInDebugger(const WatchData * /*data*/,
|
|||||||
QString expression = QString(_("%1 = %2;")).arg(expr).arg(valueV.toString());
|
QString expression = QString(_("%1 = %2;")).arg(expr).arg(valueV.toString());
|
||||||
if (stackHandler->isContentsValid() && stackHandler->currentFrame().isUsable()) {
|
if (stackHandler->isContentsValid() && stackHandler->currentFrame().isUsable()) {
|
||||||
d->evaluate(expression, false, false, stackHandler->currentIndex());
|
d->evaluate(expression, false, false, stackHandler->currentIndex());
|
||||||
|
d->updateLocalsAndWatchers.append(d->sequence);
|
||||||
} else {
|
} else {
|
||||||
d->engine->showMessage(QString(_("Cannot evaluate"
|
d->engine->showMessage(QString(_("Cannot evaluate"
|
||||||
"%1 in current stack frame")).
|
"%1 in current stack frame")).
|
||||||
@@ -1178,7 +1185,7 @@ void QmlV8DebuggerClient::executeDebuggerCommand(const QString &command)
|
|||||||
StackHandler *stackHandler = d->engine->stackHandler();
|
StackHandler *stackHandler = d->engine->stackHandler();
|
||||||
if (stackHandler->isContentsValid() && stackHandler->currentFrame().isUsable()) {
|
if (stackHandler->isContentsValid() && stackHandler->currentFrame().isUsable()) {
|
||||||
d->evaluate(command, false, false, stackHandler->currentIndex());
|
d->evaluate(command, false, false, stackHandler->currentIndex());
|
||||||
d->evaluatingExpression.insert(d->sequence, command);
|
d->debuggerCommands.append(d->sequence);
|
||||||
} else {
|
} else {
|
||||||
//Currently cannot evaluate if not in a javascript break
|
//Currently cannot evaluate if not in a javascript break
|
||||||
d->engine->showMessage(QString(_("Cannot evaluate %1"
|
d->engine->showMessage(QString(_("Cannot evaluate %1"
|
||||||
@@ -1192,7 +1199,6 @@ void QmlV8DebuggerClient::synchronizeWatchers(const QStringList &watchers)
|
|||||||
SDEBUG(watchers);
|
SDEBUG(watchers);
|
||||||
foreach (const QString &exp, watchers) {
|
foreach (const QString &exp, watchers) {
|
||||||
if (!d->watchedExpressions.contains(exp)) {
|
if (!d->watchedExpressions.contains(exp)) {
|
||||||
d->watchedExpressions << exp;
|
|
||||||
StackHandler *stackHandler = d->engine->stackHandler();
|
StackHandler *stackHandler = d->engine->stackHandler();
|
||||||
if (stackHandler->isContentsValid() && stackHandler->currentFrame().isUsable()) {
|
if (stackHandler->isContentsValid() && stackHandler->currentFrame().isUsable()) {
|
||||||
d->evaluate(exp, false, false, stackHandler->currentIndex());
|
d->evaluate(exp, false, false, stackHandler->currentIndex());
|
||||||
@@ -1200,11 +1206,24 @@ void QmlV8DebuggerClient::synchronizeWatchers(const QStringList &watchers)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
d->watchedExpressions = watchers;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmlV8DebuggerClient::expandObject(const QByteArray &iname, quint64 objectId)
|
void QmlV8DebuggerClient::expandObject(const QByteArray &iname, quint64 objectId)
|
||||||
{
|
{
|
||||||
d->localsAndWatchers.insert(objectId, iname);
|
if (objectId == 0) {
|
||||||
|
//We may have got the global object
|
||||||
|
const WatchData *watch = d->engine->watchHandler()->findItem(iname);
|
||||||
|
if (watch->value == QLatin1String("global")) {
|
||||||
|
StackHandler *stackHandler = d->engine->stackHandler();
|
||||||
|
if (stackHandler->isContentsValid() && stackHandler->currentFrame().isUsable()) {
|
||||||
|
d->evaluate(watch->name, false, false, stackHandler->currentIndex());
|
||||||
|
d->evaluatingExpression.insert(d->sequence, QLatin1String(iname));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
d->localsAndWatchers.insertMulti(objectId, iname);
|
||||||
d->lookup(QList<int>() << objectId);
|
d->lookup(QList<int>() << objectId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1702,6 +1721,12 @@ void QmlV8DebuggerClient::setCurrentFrameDetails(const QVariant &bodyVal, const
|
|||||||
data.type = objectData.type;
|
data.type = objectData.type;
|
||||||
data.value = objectData.value.toString();
|
data.value = objectData.value.toString();
|
||||||
data.setHasChildren(objectData.properties.count());
|
data.setHasChildren(objectData.properties.count());
|
||||||
|
//Incase of global object, we do not get children
|
||||||
|
//Set children nevertheless and query later
|
||||||
|
if (data.value == QLatin1String("global")) {
|
||||||
|
data.setHasChildren(true);
|
||||||
|
data.id = 0;
|
||||||
|
}
|
||||||
d->engine->watchHandler()->beginCycle();
|
d->engine->watchHandler()->beginCycle();
|
||||||
d->engine->watchHandler()->insertData(data);
|
d->engine->watchHandler()->insertData(data);
|
||||||
d->engine->watchHandler()->endCycle();
|
d->engine->watchHandler()->endCycle();
|
||||||
@@ -1774,7 +1799,7 @@ void QmlV8DebuggerClient::updateScope(const QVariant &bodyVal, const QVariant &r
|
|||||||
locals << data;
|
locals << data;
|
||||||
} else {
|
} else {
|
||||||
handlesToLookup << handle;
|
handlesToLookup << handle;
|
||||||
d->localsAndWatchers.insert(handle, data.exp);
|
d->localsAndWatchers.insertMulti(handle, data.exp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1799,18 +1824,42 @@ void QmlV8DebuggerClient::updateEvaluationResult(int sequence, bool success, con
|
|||||||
// "running" : <is the VM running after sending this response>
|
// "running" : <is the VM running after sending this response>
|
||||||
// "success" : true
|
// "success" : true
|
||||||
// }
|
// }
|
||||||
if (!d->evaluatingExpression.contains(sequence)) {
|
if (d->updateLocalsAndWatchers.contains(sequence)) {
|
||||||
|
d->updateLocalsAndWatchers.removeOne(sequence);
|
||||||
|
//Update the locals
|
||||||
|
foreach (int index, d->currentFrameScopes)
|
||||||
|
d->scope(index);
|
||||||
|
//Also update "this"
|
||||||
|
QByteArray iname("local.this");
|
||||||
|
const WatchData *parent = d->engine->watchHandler()->findItem(iname);
|
||||||
|
d->localsAndWatchers.insertMulti(parent->id, iname);
|
||||||
|
d->lookup(QList<int>() << parent->id);
|
||||||
|
|
||||||
|
} else if (d->debuggerCommands.contains(sequence)) {
|
||||||
|
d->updateLocalsAndWatchers.removeOne(sequence);
|
||||||
|
QmlV8ObjectData body = d->extractData(bodyVal, refsVal);
|
||||||
|
QtMessageLogItem *item = d->constructLogItemTree(d->engine->qtMessageLogHandler()->root(),
|
||||||
|
body, refsVal);
|
||||||
|
if (item)
|
||||||
|
d->engine->qtMessageLogHandler()->appendItem(item);
|
||||||
//Update the locals
|
//Update the locals
|
||||||
foreach (int index, d->currentFrameScopes)
|
foreach (int index, d->currentFrameScopes)
|
||||||
d->scope(index);
|
d->scope(index);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
QmlV8ObjectData body = d->extractData(bodyVal, refsVal);
|
QmlV8ObjectData body = d->extractData(bodyVal, refsVal);
|
||||||
|
if (d->evaluatingExpression.contains(sequence)) {
|
||||||
QString exp = d->evaluatingExpression.take(sequence);
|
QString exp = d->evaluatingExpression.take(sequence);
|
||||||
if (d->watchedExpressions.contains(exp)) {
|
QList<WatchData> watchDataList;
|
||||||
|
WatchData data;
|
||||||
|
//Do we have request to evaluate a local?
|
||||||
|
if (exp.startsWith("local.")) {
|
||||||
|
const WatchData *watch = d->engine->watchHandler()->findItem(exp.toLatin1());
|
||||||
|
watchDataList << createWatchDataList(watch, body.properties, refsVal);
|
||||||
|
} else {
|
||||||
QByteArray iname = d->engine->watchHandler()->watcherName(exp.toLatin1());
|
QByteArray iname = d->engine->watchHandler()->watcherName(exp.toLatin1());
|
||||||
SDEBUG(QString(iname));
|
SDEBUG(QString(iname));
|
||||||
WatchData data;
|
|
||||||
data.exp = exp.toLatin1();
|
data.exp = exp.toLatin1();
|
||||||
data.name = exp;
|
data.name = exp;
|
||||||
data.iname = iname;
|
data.iname = iname;
|
||||||
@@ -1823,19 +1872,12 @@ void QmlV8DebuggerClient::updateEvaluationResult(int sequence, bool success, con
|
|||||||
//Do not set type since it is unknown
|
//Do not set type since it is unknown
|
||||||
data.setError(body.value.toString());
|
data.setError(body.value.toString());
|
||||||
}
|
}
|
||||||
|
watchDataList << data << createWatchDataList(&data, body.properties, refsVal);
|
||||||
|
}
|
||||||
//Insert the newly evaluated expression to the Watchers Window
|
//Insert the newly evaluated expression to the Watchers Window
|
||||||
d->engine->watchHandler()->beginCycle(false);
|
d->engine->watchHandler()->beginCycle(false);
|
||||||
d->engine->watchHandler()->insertData(data);
|
d->engine->watchHandler()->insertBulkData(watchDataList);
|
||||||
d->engine->watchHandler()->endCycle();
|
d->engine->watchHandler()->endCycle();
|
||||||
|
|
||||||
} else {
|
|
||||||
QtMessageLogItem *item = d->constructLogItemTree(body, refsVal);
|
|
||||||
if (item)
|
|
||||||
d->engine->qtMessageLogHandler()->appendItem(item);
|
|
||||||
//Update the locals
|
|
||||||
foreach (int index, d->currentFrameScopes)
|
|
||||||
d->scope(index);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1911,35 +1953,9 @@ void QmlV8DebuggerClient::expandLocalsAndWatchers(const QVariant &bodyVal, const
|
|||||||
|
|
||||||
if (prepend.startsWith("local.") || prepend.startsWith("watch.")) {
|
if (prepend.startsWith("local.") || prepend.startsWith("watch.")) {
|
||||||
//Data for expanded local/watch
|
//Data for expanded local/watch
|
||||||
if (bodyObjectData.properties.count()) {
|
|
||||||
//Could be an object or function
|
//Could be an object or function
|
||||||
const WatchData *parent = d->engine->watchHandler()->findItem(prepend);
|
const WatchData *parent = d->engine->watchHandler()->findItem(prepend);
|
||||||
foreach (const QVariant &property, bodyObjectData.properties) {
|
watchDataList << createWatchDataList(parent, bodyObjectData.properties, refsVal);
|
||||||
QmlV8ObjectData propertyData = d->extractData(property, refsVal);
|
|
||||||
WatchData data;
|
|
||||||
data.name = propertyData.name;
|
|
||||||
|
|
||||||
//Check for v8 specific local data
|
|
||||||
if (data.name.startsWith(QLatin1Char('.')) || data.name.isEmpty())
|
|
||||||
continue;
|
|
||||||
if (parent && parent->type == "object") {
|
|
||||||
if (parent->value == _("Array"))
|
|
||||||
data.exp = parent->exp + QByteArray("[") +
|
|
||||||
data.name.toLatin1() + QByteArray("]");
|
|
||||||
else if (parent->value == _("Object"))
|
|
||||||
data.exp = parent->exp + QByteArray(".") + data.name.toLatin1();
|
|
||||||
} else {
|
|
||||||
data.exp = data.name.toLatin1();
|
|
||||||
}
|
|
||||||
|
|
||||||
data.iname = prepend + '.' + data.name.toLatin1();
|
|
||||||
data.id = propertyData.handle;
|
|
||||||
data.type = propertyData.type;
|
|
||||||
data.value = propertyData.value.toString();
|
|
||||||
data.setHasChildren(propertyData.properties.count());
|
|
||||||
watchDataList << data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
//rest
|
//rest
|
||||||
WatchData data;
|
WatchData data;
|
||||||
@@ -1962,6 +1978,41 @@ void QmlV8DebuggerClient::expandLocalsAndWatchers(const QVariant &bodyVal, const
|
|||||||
d->engine->watchHandler()->endCycle();
|
d->engine->watchHandler()->endCycle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QList<WatchData> QmlV8DebuggerClient::createWatchDataList(const WatchData *parent,
|
||||||
|
const QVariantList &properties,
|
||||||
|
const QVariant &refsVal)
|
||||||
|
{
|
||||||
|
QList<WatchData> watchDataList;
|
||||||
|
if (properties.count()) {
|
||||||
|
QTC_ASSERT(parent, return watchDataList);
|
||||||
|
foreach (const QVariant &property, properties) {
|
||||||
|
QmlV8ObjectData propertyData = d->extractData(property, refsVal);
|
||||||
|
WatchData data;
|
||||||
|
data.name = propertyData.name;
|
||||||
|
|
||||||
|
//Check for v8 specific local data
|
||||||
|
if (data.name.startsWith(QLatin1Char('.')) || data.name.isEmpty())
|
||||||
|
continue;
|
||||||
|
if (parent->type == "object") {
|
||||||
|
if (parent->value == _("Array"))
|
||||||
|
data.exp = parent->exp + '[' + data.name.toLatin1() + ']';
|
||||||
|
else if (parent->value == _("Object"))
|
||||||
|
data.exp = parent->exp + '.' + data.name.toLatin1();
|
||||||
|
} else {
|
||||||
|
data.exp = data.name.toLatin1();
|
||||||
|
}
|
||||||
|
|
||||||
|
data.iname = parent->iname + '.' + data.name.toLatin1();
|
||||||
|
data.id = propertyData.handle;
|
||||||
|
data.type = propertyData.type;
|
||||||
|
data.value = propertyData.value.toString();
|
||||||
|
data.setHasChildren(propertyData.properties.count());
|
||||||
|
watchDataList << data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return watchDataList;
|
||||||
|
}
|
||||||
|
|
||||||
void QmlV8DebuggerClient::highlightExceptionCode(int lineNumber,
|
void QmlV8DebuggerClient::highlightExceptionCode(int lineNumber,
|
||||||
const QString &filePath,
|
const QString &filePath,
|
||||||
const QString &errorMessage)
|
const QString &errorMessage)
|
||||||
|
@@ -116,6 +116,9 @@ private:
|
|||||||
void updateBreakpoints(const QVariant &bodyVal);
|
void updateBreakpoints(const QVariant &bodyVal);
|
||||||
|
|
||||||
void expandLocalsAndWatchers(const QVariant &bodyVal, const QVariant &refsVal);
|
void expandLocalsAndWatchers(const QVariant &bodyVal, const QVariant &refsVal);
|
||||||
|
QList<WatchData> createWatchDataList(const WatchData *parent,
|
||||||
|
const QVariantList &properties,
|
||||||
|
const QVariant &refsVal);
|
||||||
|
|
||||||
void highlightExceptionCode(int lineNumber, const QString &filePath,
|
void highlightExceptionCode(int lineNumber, const QString &filePath,
|
||||||
const QString &errorMessage);
|
const QString &errorMessage);
|
||||||
|
@@ -31,6 +31,8 @@
|
|||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
#include "qtmessageloghandler.h"
|
#include "qtmessageloghandler.h"
|
||||||
|
#include "debuggercore.h"
|
||||||
|
#include "debuggeractions.h"
|
||||||
|
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
@@ -45,8 +47,8 @@ namespace Internal {
|
|||||||
//
|
//
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
QtMessageLogItem::QtMessageLogItem(QtMessageLogHandler::ItemType itemType,
|
QtMessageLogItem::QtMessageLogItem(QtMessageLogItem *parent,
|
||||||
const QString &text, QtMessageLogItem *parent)
|
QtMessageLogHandler::ItemType itemType, const QString &text)
|
||||||
: m_parentItem(parent),
|
: m_parentItem(parent),
|
||||||
text(text),
|
text(text),
|
||||||
itemType(itemType),
|
itemType(itemType),
|
||||||
@@ -86,23 +88,35 @@ bool QtMessageLogItem::insertChildren(int position, int count)
|
|||||||
|
|
||||||
for (int row = 0; row < count; ++row) {
|
for (int row = 0; row < count; ++row) {
|
||||||
QtMessageLogItem *item = new
|
QtMessageLogItem *item = new
|
||||||
QtMessageLogItem(QtMessageLogHandler::UndefinedType, QString(),
|
QtMessageLogItem(this , QtMessageLogHandler::UndefinedType,
|
||||||
this);
|
QString());
|
||||||
m_childItems.insert(position, item);
|
m_childItems.insert(position, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QtMessageLogItem::insertChild(QtMessageLogItem *item)
|
||||||
|
{
|
||||||
|
if (!debuggerCore()->boolSetting(SortStructMembers)) {
|
||||||
|
m_childItems.insert(m_childItems.count(), item);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
for (; i < m_childItems.count(); i++) {
|
||||||
|
if (item->text < m_childItems[i]->text) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_childItems.insert(i, item);
|
||||||
|
}
|
||||||
|
|
||||||
bool QtMessageLogItem::insertChild(int position, QtMessageLogItem *item)
|
bool QtMessageLogItem::insertChild(int position, QtMessageLogItem *item)
|
||||||
{
|
{
|
||||||
if (position < 0 || position > m_childItems.size())
|
if (position < 0 || position > m_childItems.size())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (item->parent())
|
|
||||||
item->parent()->detachChild(item->childNumber());
|
|
||||||
|
|
||||||
item->m_parentItem = this;
|
|
||||||
m_childItems.insert(position, item);
|
m_childItems.insert(position, item);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -143,7 +157,7 @@ bool QtMessageLogItem::detachChild(int position)
|
|||||||
QtMessageLogHandler::QtMessageLogHandler(QObject *parent) :
|
QtMessageLogHandler::QtMessageLogHandler(QObject *parent) :
|
||||||
QAbstractItemModel(parent),
|
QAbstractItemModel(parent),
|
||||||
m_hasEditableRow(false),
|
m_hasEditableRow(false),
|
||||||
m_rootItem(new QtMessageLogItem()),
|
m_rootItem(new QtMessageLogItem(0)),
|
||||||
m_maxSizeOfFileName(0)
|
m_maxSizeOfFileName(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -157,8 +171,8 @@ void QtMessageLogHandler::clear()
|
|||||||
{
|
{
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
reset();
|
reset();
|
||||||
delete m_rootItem;
|
qDeleteAll(m_rootItem->m_childItems);
|
||||||
m_rootItem = new QtMessageLogItem();
|
m_rootItem->m_childItems.clear();
|
||||||
endResetModel();
|
endResetModel();
|
||||||
|
|
||||||
if (m_hasEditableRow)
|
if (m_hasEditableRow)
|
||||||
@@ -180,7 +194,7 @@ bool QtMessageLogHandler::appendItem(QtMessageLogItem *item, int position)
|
|||||||
bool QtMessageLogHandler::appendMessage(QtMessageLogHandler::ItemType itemType,
|
bool QtMessageLogHandler::appendMessage(QtMessageLogHandler::ItemType itemType,
|
||||||
const QString &message, int position)
|
const QString &message, int position)
|
||||||
{
|
{
|
||||||
return appendItem(new QtMessageLogItem(itemType, message), position);
|
return appendItem(new QtMessageLogItem(m_rootItem, itemType, message), position);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QtMessageLogHandler::setHasEditableRow(bool hasEditableRow)
|
void QtMessageLogHandler::setHasEditableRow(bool hasEditableRow)
|
||||||
@@ -202,7 +216,7 @@ bool QtMessageLogHandler::hasEditableRow() const
|
|||||||
void QtMessageLogHandler::appendEditableRow()
|
void QtMessageLogHandler::appendEditableRow()
|
||||||
{
|
{
|
||||||
int position = m_rootItem->childCount();
|
int position = m_rootItem->childCount();
|
||||||
if (appendItem(new QtMessageLogItem(QtMessageLogHandler::InputType), position))
|
if (appendItem(new QtMessageLogItem(m_rootItem, QtMessageLogHandler::InputType), position))
|
||||||
emit selectEditableRow(index(position, 0),
|
emit selectEditableRow(index(position, 0),
|
||||||
QItemSelectionModel::ClearAndSelect);
|
QItemSelectionModel::ClearAndSelect);
|
||||||
}
|
}
|
||||||
@@ -289,7 +303,8 @@ QModelIndex QtMessageLogHandler::parent(const QModelIndex &index) const
|
|||||||
return QModelIndex();
|
return QModelIndex();
|
||||||
|
|
||||||
//can parentItem be 0?
|
//can parentItem be 0?
|
||||||
QTC_ASSERT(parentItem, qDebug("Parent is Null!!"));
|
if (!parentItem)
|
||||||
|
return QModelIndex();
|
||||||
return createIndex(parentItem->childNumber(), 0, parentItem);
|
return createIndex(parentItem->childNumber(), 0, parentItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -78,6 +78,8 @@ public:
|
|||||||
int sizeOfFile(const QFont &font);
|
int sizeOfFile(const QFont &font);
|
||||||
int sizeOfLineNumber(const QFont &font);
|
int sizeOfLineNumber(const QFont &font);
|
||||||
|
|
||||||
|
QtMessageLogItem *root() const { return m_rootItem; }
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
@@ -116,14 +118,15 @@ private:
|
|||||||
class QtMessageLogItem
|
class QtMessageLogItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
QtMessageLogItem(QtMessageLogHandler::ItemType type = QtMessageLogHandler::UndefinedType,
|
QtMessageLogItem(QtMessageLogItem *parent,
|
||||||
const QString &data = QString(),
|
QtMessageLogHandler::ItemType type = QtMessageLogHandler::UndefinedType,
|
||||||
QtMessageLogItem *parent = 0);
|
const QString &data = QString());
|
||||||
~QtMessageLogItem();
|
~QtMessageLogItem();
|
||||||
|
|
||||||
QtMessageLogItem *child(int number);
|
QtMessageLogItem *child(int number);
|
||||||
int childCount() const;
|
int childCount() const;
|
||||||
bool insertChildren(int position, int count);
|
bool insertChildren(int position, int count);
|
||||||
|
void insertChild(QtMessageLogItem *item);
|
||||||
bool insertChild(int position, QtMessageLogItem *item);
|
bool insertChild(int position, QtMessageLogItem *item);
|
||||||
QtMessageLogItem *parent();
|
QtMessageLogItem *parent();
|
||||||
bool removeChildren(int position, int count);
|
bool removeChildren(int position, int count);
|
||||||
@@ -139,6 +142,9 @@ public:
|
|||||||
QtMessageLogHandler::ItemType itemType;
|
QtMessageLogHandler::ItemType itemType;
|
||||||
QString file;
|
QString file;
|
||||||
int line;
|
int line;
|
||||||
|
|
||||||
|
private:
|
||||||
|
friend class QtMessageLogHandler;
|
||||||
};
|
};
|
||||||
|
|
||||||
} //Internal
|
} //Internal
|
||||||
|
@@ -2013,7 +2013,7 @@ namespace final {
|
|||||||
BREAK_HERE;
|
BREAK_HERE;
|
||||||
// Expand settings.
|
// Expand settings.
|
||||||
// Check settings "" QSettings.
|
// Check settings "" QSettings.
|
||||||
// Check settings.[QObject] "" QSettings.
|
// Check settings.@1 "" QObject.
|
||||||
// Check value "" QVariant (QString).
|
// Check value "" QVariant (QString).
|
||||||
// Continue.
|
// Continue.
|
||||||
dummyStatement(&settings, &value);
|
dummyStatement(&settings, &value);
|
||||||
@@ -3577,7 +3577,7 @@ namespace qthread {
|
|||||||
// Expand this.
|
// Expand this.
|
||||||
// Check j 3 int.
|
// Check j 3 int.
|
||||||
// CheckType this qthread::Thread.
|
// CheckType this qthread::Thread.
|
||||||
// Check this.[QThread] "This is thread #3" qthread::Thread.
|
// Check this.@1 "This is thread #3" QThread.
|
||||||
// Continue.
|
// Continue.
|
||||||
dummyStatement(this);
|
dummyStatement(this);
|
||||||
}
|
}
|
||||||
@@ -3767,7 +3767,8 @@ namespace qvariant {
|
|||||||
// Check ha1.isParsed false bool.
|
// Check ha1.isParsed false bool.
|
||||||
// Check ha1.protocol QAbstractSocket::UnknownNetworkLayerProtocol (-1) QAbstractSocket::NetworkLayerProtocol.
|
// Check ha1.protocol QAbstractSocket::UnknownNetworkLayerProtocol (-1) QAbstractSocket::NetworkLayerProtocol.
|
||||||
// Check ha1.scopeId "" QString.
|
// Check ha1.scopeId "" QString.
|
||||||
// Check var "127.0.0.1" QVariant (QHostAddress).
|
// CheckType var QVariant (QHostAddress).
|
||||||
|
// Check var.data "127.0.0.1" QHostAddress.
|
||||||
// Continue.
|
// Continue.
|
||||||
dummyStatement(&ha1);
|
dummyStatement(&ha1);
|
||||||
}
|
}
|
||||||
@@ -3785,7 +3786,7 @@ namespace qvariant {
|
|||||||
//QString type = var.typeName();
|
//QString type = var.typeName();
|
||||||
var.setValue(my);
|
var.setValue(my);
|
||||||
BREAK_HERE;
|
BREAK_HERE;
|
||||||
// Expand my my.0 my.0.value my.1 my.1.value var var.0 var.0.value var.1 var.1.value.
|
// Expand my my.0 my.0.value my.1 my.1.value var var.data var.data.0 var.data.0.value var.data.1 var.data.1.value.
|
||||||
// Check my <2 items> qvariant::MyType.
|
// Check my <2 items> qvariant::MyType.
|
||||||
// Check my.0 QMapNode<unsigned int, QStringList>.
|
// Check my.0 QMapNode<unsigned int, QStringList>.
|
||||||
// Check my.0.key 1 unsigned int.
|
// Check my.0.key 1 unsigned int.
|
||||||
@@ -3795,15 +3796,16 @@ namespace qvariant {
|
|||||||
// Check my.1.key 3 unsigned int.
|
// Check my.1.key 3 unsigned int.
|
||||||
// Check my.1.value <1 items> QStringList.
|
// Check my.1.value <1 items> QStringList.
|
||||||
// Check my.1.value.0 "World" QString.
|
// Check my.1.value.0 "World" QString.
|
||||||
// Check var <2 items> QVariant (MyType).
|
// CheckType var QVariant (QMap<unsigned int , QStringList>).
|
||||||
// Check var.0 QMapNode<unsigned int, QStringList>.
|
// Check var.data <2 items> QMap<unsigned int, QStringList>.
|
||||||
// Check var.0.key 1 unsigned int.
|
// Check var.data.0 QMapNode<unsigned int, QStringList>.
|
||||||
// Check var.0.value <1 items> QStringList.
|
// Check var.data.0.key 1 unsigned int.
|
||||||
|
// Check var.data.0.value <1 items> QStringList.
|
||||||
// Check var.0.value.0 "Hello" QString.
|
// Check var.0.value.0 "Hello" QString.
|
||||||
// Check var.1 QMapNode<unsigned int, QStringList>.
|
// Check var.data.1 QMapNode<unsigned int, QStringList>.
|
||||||
// Check var.1.key 3 unsigned int.
|
// Check var.data.1.key 3 unsigned int.
|
||||||
// Check var.1.value <1 items> QStringList.
|
// Check var.data.1.value <1 items> QStringList.
|
||||||
// Check var.1.value.0 "World" QString.
|
// Check var.data.1.value.0 "World" QString.
|
||||||
// Continue.
|
// Continue.
|
||||||
var.setValue(my);
|
var.setValue(my);
|
||||||
var.setValue(my);
|
var.setValue(my);
|
||||||
@@ -3817,15 +3819,16 @@ namespace qvariant {
|
|||||||
list << 1 << 2 << 3;
|
list << 1 << 2 << 3;
|
||||||
QVariant variant = qVariantFromValue(list);
|
QVariant variant = qVariantFromValue(list);
|
||||||
BREAK_HERE;
|
BREAK_HERE;
|
||||||
// Expand list variant.
|
// Expand list variant variant.data.
|
||||||
// Check list <3 items> QList<int>.
|
// Check list <3 items> QList<int>.
|
||||||
// Check list.0 1 int.
|
// Check list.0 1 int.
|
||||||
// Check list.1 2 int.
|
// Check list.1 2 int.
|
||||||
// Check list.2 3 int.
|
// Check list.2 3 int.
|
||||||
// Check variant <3 items> QVariant (QList<int>).
|
// CheckType variant QVariant (QList<int>).
|
||||||
// Check variant.0 1 int.
|
// Check variant.data <3 items> QList<int>.
|
||||||
// Check variant.1 2 int.
|
// Check variant.data.0 1 int.
|
||||||
// Check variant.2 3 int.
|
// Check variant.data.1 2 int.
|
||||||
|
// Check variant.data.2 3 int.
|
||||||
// Continue.
|
// Continue.
|
||||||
list.clear();
|
list.clear();
|
||||||
list = qVariantValue<QList<int> >(variant);
|
list = qVariantValue<QList<int> >(variant);
|
||||||
@@ -5095,7 +5098,6 @@ namespace qscript {
|
|||||||
s.setProperty("a", QScriptValue());
|
s.setProperty("a", QScriptValue());
|
||||||
QScriptValue d = s.data();
|
QScriptValue d = s.data();
|
||||||
BREAK_HERE;
|
BREAK_HERE;
|
||||||
// Check s <native> QScriptValue (JSCoreValue).
|
|
||||||
// Check d (invalid) QScriptValue.
|
// Check d (invalid) QScriptValue.
|
||||||
// Check v 43 QVariant (int).
|
// Check v 43 QVariant (int).
|
||||||
// Check x 33 int.
|
// Check x 33 int.
|
||||||
@@ -5693,17 +5695,17 @@ namespace bug5799 {
|
|||||||
typedef S1 Array[10];
|
typedef S1 Array[10];
|
||||||
Array a2;
|
Array a2;
|
||||||
BREAK_HERE;
|
BREAK_HERE;
|
||||||
// Expand s2 s2.bug5700::S1 s4 s4.bug5799::S3
|
// Expand s2 s2.@1 s4 s4.@1
|
||||||
// CheckType a1 bug5799::S1 [10].
|
// CheckType a1 bug5799::S1 [10].
|
||||||
// CheckType a2 bug5799::Array.
|
// CheckType a2 bug5799::Array.
|
||||||
// CheckType s2 bug5799::S2.
|
// CheckType s2 bug5799::S2.
|
||||||
// CheckType s2.[bug5799::S1] bug5799::S1.
|
// CheckType s2.@1 bug5799::S1.
|
||||||
// Check s2.[bug5799::S1].m1 5 int.
|
// Check s2.@1.m1 5 int.
|
||||||
// Check s2.[bug5799::S1].m2 32767 int.
|
// CheckType s2.@1.m2 int.
|
||||||
// CheckType s4 bug5799::S4.
|
// CheckType s4 bug5799::S4.
|
||||||
// CheckType s4.[bug5799::S3] bug5799::S3.
|
// CheckType s4.@1 bug5799::S3.
|
||||||
// Check s4.[bug5799::S3].m1 5 int.
|
// Check s4.@1.m1 5 int.
|
||||||
// Check s4.[bug5799::S3].m2 0 int.
|
// CheckType s4.@1.m2 int.
|
||||||
// Continue.
|
// Continue.
|
||||||
dummyStatement(&s2, &s4, &a1, &a2);
|
dummyStatement(&s2, &s4, &a1, &a2);
|
||||||
}
|
}
|
||||||
@@ -5822,8 +5824,8 @@ namespace bug6857 {
|
|||||||
file.setObjectName("A file");
|
file.setObjectName("A file");
|
||||||
BREAK_HERE;
|
BREAK_HERE;
|
||||||
// Expand file.
|
// Expand file.
|
||||||
// Check file "A file" MyFile.
|
// Check file "A file" bug6857::MyFile.
|
||||||
// Check file.[QFile] "/tmp/tt" QFile.
|
// Check file.@1 "/tmp/tt" QFile.
|
||||||
// Continue.
|
// Continue.
|
||||||
dummyStatement(&file);
|
dummyStatement(&file);
|
||||||
}
|
}
|
||||||
@@ -5846,7 +5848,7 @@ namespace bug6858 {
|
|||||||
QFile *pfile = &file;
|
QFile *pfile = &file;
|
||||||
BREAK_HERE;
|
BREAK_HERE;
|
||||||
// Check pfile "Another file" bug6858::MyFile.
|
// Check pfile "Another file" bug6858::MyFile.
|
||||||
// Check pfile.[QFile] "/tmp/tt" QFile.
|
// Check pfile.@1 "/tmp/tt" QFile.
|
||||||
// Continue.
|
// Continue.
|
||||||
dummyStatement(&file, pfile);
|
dummyStatement(&file, pfile);
|
||||||
}
|
}
|
||||||
@@ -5969,15 +5971,15 @@ namespace gdb13393 {
|
|||||||
int sharedPtr = 1;
|
int sharedPtr = 1;
|
||||||
#endif
|
#endif
|
||||||
BREAK_HERE;
|
BREAK_HERE;
|
||||||
// Expand d ptr ptrConst ptrToPtr ref refConst s.
|
// Expand d ptr ptr.@1 ptrConst ptrToPtr ref refConst s.
|
||||||
// CheckType d gdb13393::Derived.
|
// CheckType d gdb13393::Derived.
|
||||||
// CheckType d.[gdb13393::Base] gdb13393::Derived.
|
// CheckType d.@1 gdb13393::Base.
|
||||||
// Check d.b 2 int.
|
// Check d.b 2 int.
|
||||||
// CheckType ptr gdb13393::Derived.
|
// CheckType ptr gdb13393::Derived.
|
||||||
// CheckType ptr.[gdb12293::Base] gdb13393::Base.
|
// CheckType ptr.@1 gdb13393::Base.
|
||||||
// Check ptr.[a] 1 int.
|
// Check ptr.@1.a 1 int.
|
||||||
// CheckType ptrConst gdb13393::Derived.
|
// CheckType ptrConst gdb13393::Derived.
|
||||||
// CheckType ptrConst.[gdb13393::Base] gdb13393::Base.
|
// CheckType ptrConst.@1 gdb13393::Base.
|
||||||
// Check ptrConst.b 2 int.
|
// Check ptrConst.b 2 int.
|
||||||
// CheckType ptrToPtr gdb13393::Derived.
|
// CheckType ptrToPtr gdb13393::Derived.
|
||||||
// CheckType ptrToPtr.[vptr] .
|
// CheckType ptrToPtr.[vptr] .
|
||||||
@@ -6032,7 +6034,10 @@ namespace gdb10586 {
|
|||||||
// CheckType v {...}.
|
// CheckType v {...}.
|
||||||
// CheckType n gdb10586::s.
|
// CheckType n gdb10586::s.
|
||||||
// Check v.a 2 int.
|
// Check v.a 2 int.
|
||||||
// Check s.x 1 int.
|
// Check v.b 3 int.
|
||||||
|
// Check v.x 1 int.
|
||||||
|
// Check n.x 10 int.
|
||||||
|
// Check n.y 20 int.
|
||||||
// Continue.
|
// Continue.
|
||||||
dummyStatement(&v, &n);
|
dummyStatement(&v, &n);
|
||||||
}
|
}
|
||||||
|