diff --git a/doc/doc.pri b/doc/doc.pri index 5c93f3d3a5500b82eaa42ff806c61a73415379ea..c9b423713e853d54b0254bf47290146699090491 100644 --- a/doc/doc.pri +++ b/doc/doc.pri @@ -27,9 +27,8 @@ qch_docs.depends += html_docs qch_docs.files = $$QCH_FILE unix:!macx { - system("mkdir -p `dirname $$QCH_FILE` && touch $$QCH_FILE") - qch_docs.path = /share/doc/qtcreator + qch_docs.CONFIG += no_check_exist INSTALLS += qch_docs } diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp index bbc6862202fb4908dacd462b89ccb7b7e67a375e..2d14e7df0679a7fee757f128f073661ddcbc4e5b 100644 --- a/share/qtcreator/gdbmacros/gdbmacros.cpp +++ b/share/qtcreator/gdbmacros/gdbmacros.cpp @@ -1639,7 +1639,7 @@ static void qDumpQList(QDumper &d) } qCheckAccess(pdata); - d.putItemCount("value", n); + d.putItemCount("value", nn); d.putItem("valueeditable", "false"); d.putItem("numchild", n); if (d.dumpChildren) { diff --git a/src/libs/cplusplus/CppBindings.cpp b/src/libs/cplusplus/CppBindings.cpp index acbeb6f6fd114a5a2a965d4cbc4c9d4945fe3ca6..c916ab4b8b15640397e77d47516f76a6ee4817af 100644 --- a/src/libs/cplusplus/CppBindings.cpp +++ b/src/libs/cplusplus/CppBindings.cpp @@ -152,6 +152,25 @@ ClassBinding *NamespaceBinding::findClassBinding(Name *name, QSet<Binding *> *pr if (processed->contains(this)) return 0; + if (const QualifiedNameId *q = name->asQualifiedNameId()) { + Binding *current = this; + + for (unsigned i = 0; i < q->nameCount(); ++i) { + Identifier *nameId = q->nameAt(i)->identifier(); + if (! nameId) + return 0; + + QSet<Binding *> visited; + Binding *binding = current->findClassOrNamespaceBinding(nameId, &visited); // ### TODO: check recursion. + if (! binding) + return 0; + + current = binding; + } + + return current->asClassBinding(); + } + processed->insert(this); Identifier *id = name->identifier(); diff --git a/src/libs/cplusplus/FindUsages.cpp b/src/libs/cplusplus/FindUsages.cpp index 5b3e77ee8d1ff466079b5239f4501a1788922c20..d6ecca8cbf90f4c66e2cddec9a89b4172a7d9609 100644 --- a/src/libs/cplusplus/FindUsages.cpp +++ b/src/libs/cplusplus/FindUsages.cpp @@ -59,6 +59,7 @@ void FindUsages::setGlobalNamespaceBinding(NamespaceBindingPtr globalNamespaceBi QList<int> FindUsages::operator()(Symbol *symbol, Identifier *id, AST *ast) { + _processed.clear(); _references.clear(); _declSymbol = symbol; _id = id; @@ -92,6 +93,9 @@ QString FindUsages::matchingLine(const Token &tk) const void FindUsages::reportResult(unsigned tokenIndex, const QList<Symbol *> &candidates) { + if (_processed.contains(tokenIndex)) + return; + const bool isStrongResult = checkCandidates(candidates); if (isStrongResult) @@ -100,6 +104,11 @@ void FindUsages::reportResult(unsigned tokenIndex, const QList<Symbol *> &candid void FindUsages::reportResult(unsigned tokenIndex) { + if (_processed.contains(tokenIndex)) + return; + + _processed.insert(tokenIndex); + const Token &tk = tokenAt(tokenIndex); const QString lineText = matchingLine(tk); diff --git a/src/libs/cplusplus/FindUsages.h b/src/libs/cplusplus/FindUsages.h index 9f82949380677777434fb57ec4a8b9e52b7ee5d2..667ad18485a310421a2372d08395b1781f3cbc75 100644 --- a/src/libs/cplusplus/FindUsages.h +++ b/src/libs/cplusplus/FindUsages.h @@ -114,6 +114,7 @@ private: QList<int> _references; LookupContext _previousContext; int _inSimpleDeclaration; + QSet<unsigned> _processed; }; } // end of namespace CPlusPlus diff --git a/src/plugins/coreplugin/progressmanager/progressmanager.cpp b/src/plugins/coreplugin/progressmanager/progressmanager.cpp index a4385b007bd348cbd044b81b138940978391fb8e..a26ab5dda53da0839330a0da8bab092eb64535bf 100644 --- a/src/plugins/coreplugin/progressmanager/progressmanager.cpp +++ b/src/plugins/coreplugin/progressmanager/progressmanager.cpp @@ -57,17 +57,22 @@ void ProgressManagerPrivate::init() void ProgressManagerPrivate::cancelTasks(const QString &type) { + bool found = false; QMap<QFutureWatcher<void> *, QString>::iterator task = m_runningTasks.begin(); while (task != m_runningTasks.end()) { if (task.value() != type) { ++task; continue; } + found = true; disconnect(task.key(), SIGNAL(finished()), this, SLOT(taskFinished())); task.key()->cancel(); delete task.key(); task = m_runningTasks.erase(task); } + if (found) { + emit allTasksFinished(type); + } } void ProgressManagerPrivate::cancelAllRunningTasks() @@ -88,6 +93,7 @@ FutureProgress *ProgressManagerPrivate::addTask(const QFuture<void> &future, con m_runningTasks.insert(watcher, type); connect(watcher, SIGNAL(finished()), this, SLOT(taskFinished())); watcher->setFuture(future); + emit taskStarted(type); return m_progressView->addTask(future, title, type, persistency); } @@ -101,6 +107,11 @@ void ProgressManagerPrivate::taskFinished() QObject *taskObject = sender(); QTC_ASSERT(taskObject, return); QFutureWatcher<void> *task = static_cast<QFutureWatcher<void> *>(taskObject); + QString type = m_runningTasks.value(task); m_runningTasks.remove(task); delete task; + + if (!m_runningTasks.values().contains(type)) { + emit allTasksFinished(type); + } } diff --git a/src/plugins/coreplugin/progressmanager/progressmanager.h b/src/plugins/coreplugin/progressmanager/progressmanager.h index 944b32938500a9a932a8b9150be15e3e7db4f6c4..ec65969d1e475be9384f74da075277c202af5a5d 100644 --- a/src/plugins/coreplugin/progressmanager/progressmanager.h +++ b/src/plugins/coreplugin/progressmanager/progressmanager.h @@ -51,6 +51,10 @@ public: public slots: virtual void cancelTasks(const QString &type) = 0; + +signals: + void taskStarted(const QString &type); + void allTasksFinished(const QString &type); }; } // namespace Core diff --git a/src/plugins/cpaster/cpasterplugin.cpp b/src/plugins/cpaster/cpasterplugin.cpp index 559743742342a8cc62ced7ce4d089e0900c44dda..f9017c37524b9109285ce5a64cbe4a91534f99f9 100644 --- a/src/plugins/cpaster/cpasterplugin.cpp +++ b/src/plugins/cpaster/cpasterplugin.cpp @@ -68,6 +68,7 @@ CodepasterPlugin::CodepasterPlugin() CodepasterPlugin::~CodepasterPlugin() { + qDeleteAll(m_protocols); } bool CodepasterPlugin::initialize(const QStringList &arguments, QString *error_message) diff --git a/src/plugins/cppeditor/cppplugin.cpp b/src/plugins/cppeditor/cppplugin.cpp index f27e82bdb9634786af68fd9d225fb4be2edc3f3d..f98fb6808738bf8fee1833be785b4fc28d66af86 100644 --- a/src/plugins/cppeditor/cppplugin.cpp +++ b/src/plugins/cppeditor/cppplugin.cpp @@ -43,6 +43,7 @@ #include <coreplugin/actionmanager/actionmanager.h> #include <coreplugin/actionmanager/command.h> #include <coreplugin/editormanager/editormanager.h> +#include <coreplugin/progressmanager/progressmanager.h> #include <texteditor/completionsupport.h> #include <texteditor/fontsettings.h> #include <texteditor/storagesettings.h> @@ -55,7 +56,6 @@ #include <QtCore/QFileInfo> #include <QtCore/QSettings> #include <QtGui/QMenu> -#include <QtGui/QAction> using namespace CppEditor::Internal; @@ -211,18 +211,18 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess contextMenu->addAction(cmd); am->actionContainer(CppTools::Constants::M_TOOLS_CPP)->addAction(cmd); - QAction *findUsagesAction = new QAction(tr("Find Usages"), this); - cmd = am->registerAction(findUsagesAction, Constants::FIND_USAGES, context); + m_findUsagesAction = new QAction(tr("Find Usages"), this); + cmd = am->registerAction(m_findUsagesAction, Constants::FIND_USAGES, context); cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+U"))); - connect(findUsagesAction, SIGNAL(triggered()), this, SLOT(findUsages())); + connect(m_findUsagesAction, SIGNAL(triggered()), this, SLOT(findUsages())); contextMenu->addAction(cmd); am->actionContainer(CppTools::Constants::M_TOOLS_CPP)->addAction(cmd); - QAction *renameSymbolUnderCursorAction = new QAction(tr("Rename Symbol under Cursor"), this); - cmd = am->registerAction(renameSymbolUnderCursorAction, + m_renameSymbolUnderCursorAction = new QAction(tr("Rename Symbol under Cursor"), this); + cmd = am->registerAction(m_renameSymbolUnderCursorAction, Constants::RENAME_SYMBOL_UNDER_CURSOR, context); cmd->setDefaultKeySequence(QKeySequence("CTRL+SHIFT+R")); - connect(renameSymbolUnderCursorAction, SIGNAL(triggered()), this, SLOT(renameSymbolUnderCursor())); + connect(m_renameSymbolUnderCursorAction, SIGNAL(triggered()), this, SLOT(renameSymbolUnderCursor())); contextMenu->addAction(cmd); am->actionContainer(CppTools::Constants::M_TOOLS_CPP)->addAction(cmd); @@ -244,7 +244,10 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess cmd = am->command(TextEditor::Constants::UN_COMMENT_SELECTION); contextMenu->addAction(cmd); - + connect(core->progressManager(), SIGNAL(taskStarted(QString)), + this, SLOT(onTaskStarted(QString))); + connect(core->progressManager(), SIGNAL(allTasksFinished(QString)), + this, SLOT(onAllTasksFinished(QString))); readSettings(); return true; } @@ -300,4 +303,20 @@ void CppPlugin::findUsages() editor->findUsages(); } +void CppPlugin::onTaskStarted(const QString &type) +{ + if (type == CppTools::Constants::TASK_INDEX) { + m_renameSymbolUnderCursorAction->setEnabled(false); + m_findUsagesAction->setEnabled(false); + } +} + +void CppPlugin::onAllTasksFinished(const QString &type) +{ + if (type == CppTools::Constants::TASK_INDEX) { + m_renameSymbolUnderCursorAction->setEnabled(true); + m_findUsagesAction->setEnabled(true); + } +} + Q_EXPORT_PLUGIN(CppPlugin) diff --git a/src/plugins/cppeditor/cppplugin.h b/src/plugins/cppeditor/cppplugin.h index 6437f6e2410e9007f36409006c258ada55820c31..3456bd9baf2eb4198aacb1a2cef301037508b95b 100644 --- a/src/plugins/cppeditor/cppplugin.h +++ b/src/plugins/cppeditor/cppplugin.h @@ -30,12 +30,13 @@ #ifndef CPPPLUGIN_H #define CPPPLUGIN_H -#include <QtCore/QtPlugin> -#include <QtCore/QStringList> - #include <extensionsystem/iplugin.h> #include <coreplugin/editormanager/ieditorfactory.h> +#include <QtCore/QtPlugin> +#include <QtCore/QStringList> +#include <QtGui/QAction> + namespace TextEditor { class TextEditorActionHandler; } // namespace TextEditor @@ -74,6 +75,8 @@ private slots: void switchDeclarationDefinition(); void jumpToDefinition(); void renameSymbolUnderCursor(); + void onTaskStarted(const QString &type); + void onAllTasksFinished(const QString &type); void findUsages(); private: @@ -85,6 +88,8 @@ private: TextEditor::TextEditorActionHandler *m_actionHandler; bool m_sortedMethodOverview; + QAction *m_renameSymbolUnderCursorAction; + QAction *m_findUsagesAction; }; class CppEditorFactory : public Core::IEditorFactory diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 3e8e1df882bbc7e3e8cb67a8d268a186a68a69e3..9a895bb97d7c946ba2c8a0f3b6f4640a173fa573 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -1124,14 +1124,6 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &ba m_completionOperator, &replacedDotOperator); - if (replacedDotOperator) { - // Replace . with -> - int length = m_editor->position() - m_startPosition + 1; - m_editor->setCurPos(m_startPosition - 1); - m_editor->replace(length, QLatin1String("->")); - ++m_startPosition; - } - QList<Symbol *> classObjectCandidates; foreach (const TypeOfExpression::Result &r, classObjectResults) { FullySpecifiedType ty = r.first.simplified(); @@ -1150,6 +1142,14 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &ba } } + if (replacedDotOperator && ! classObjectCandidates.isEmpty()) { + // Replace . with -> + int length = m_editor->position() - m_startPosition + 1; + m_editor->setCurPos(m_startPosition - 1); + m_editor->replace(length, QLatin1String("->")); + ++m_startPosition; + } + completeClass(classObjectCandidates, context, /*static lookup = */ false); if (! m_completions.isEmpty()) return true; diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp index 01f7668d7d50954077716225ff66662f91d8933e..72677abf6e296ff1e9f18e93e26707fd7bbfa89d 100644 --- a/src/plugins/cpptools/cppfindreferences.cpp +++ b/src/plugins/cpptools/cppfindreferences.cpp @@ -62,7 +62,8 @@ using namespace CppTools::Internal; using namespace CPlusPlus; CppFindReferences::CppFindReferences(CppTools::CppModelManagerInterface *modelManager) - : _modelManager(modelManager), + : QObject(modelManager), + _modelManager(modelManager), _resultWindow(ExtensionSystem::PluginManager::instance()->getObject<Find::SearchResultWindow>()) { m_watcher.setPendingResultsLimit(1); @@ -249,7 +250,21 @@ static void applyChanges(QTextDocument *doc, const QString &text, const QList<Fi foreach (const Find::SearchResultItem &item, items) { const int blockNumber = item.lineNumber - 1; QTextCursor tc(doc->findBlockByNumber(blockNumber)); - tc.setPosition(tc.position() + item.searchTermStart); + + const int cursorPosition = tc.position() + item.searchTermStart; + + int cursorIndex = 0; + for (; cursorIndex < cursors.size(); ++cursorIndex) { + const QTextCursor &tc = cursors.at(cursorIndex); + + if (tc.position() == cursorPosition) + break; + } + + if (cursorIndex != cursors.size()) + continue; // skip this change. + + tc.setPosition(cursorPosition); tc.setPosition(tc.position() + item.searchTermLength, QTextCursor::KeepAnchor); cursors.append(tc); @@ -335,6 +350,7 @@ void CppFindReferences::displayResult(int index) void CppFindReferences::searchFinished() { + _resultWindow->finishSearch(); emit changed(); } diff --git a/src/plugins/debugger/debuggeragents.cpp b/src/plugins/debugger/debuggeragents.cpp index 6f108cc9b9420c018c84ec885a49821a5aca4686..558617d1ae1880ba4897891cc86ec205c1ad7a54 100644 --- a/src/plugins/debugger/debuggeragents.cpp +++ b/src/plugins/debugger/debuggeragents.cpp @@ -195,8 +195,12 @@ DisassemblerViewAgent::~DisassemblerViewAgent() if (d->editor) d->editor->deleteLater(); d->editor = 0; + delete d->locationMark; + d->locationMark = 0; delete d; d = 0; + delete d->locationMark; + d->locationMark = 0; } void DisassemblerViewAgent::cleanup() diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 430e1a24d11ae27d4edf0179d54ff0fc35042d27..6b3076ea2d7bcaf34e9f120b433b65b6a8659b6b 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -193,6 +193,11 @@ GdbEngine::GdbEngine(DebuggerManager *manager) : m_trkOptions->fromSettings(Core::ICore::instance()->settings()); m_gdbAdapter = 0; + m_commandTimer = new QTimer(this); + m_commandTimer->setSingleShot(true); + m_commandTimer->setInterval(COMMAND_TIMEOUT); + connect(m_commandTimer, SIGNAL(timeout()), SLOT(commandTimeout())); + // Needs no resetting in initializeVariables() m_busy = false; @@ -606,6 +611,9 @@ void GdbEngine::readGdbStandardError() void GdbEngine::readGdbStandardOutput() { + if (m_commandTimer->isActive()) + m_commandTimer->start(); // Retrigger + int newstart = 0; int scan = m_inbuffer.size(); @@ -734,7 +742,7 @@ void GdbEngine::postCommandHelper(const GdbCommand &cmd) } if ((cmd.flags & NeedsStop) || !m_commandsToRunOnTemporaryBreak.isEmpty()) { - if (state() == InferiorStopped + if (state() == InferiorStopped || state() == InferiorUnrunnable || state() == InferiorStarting || state() == AdapterStarted) { // Can be safely sent now. flushCommand(cmd); @@ -796,10 +804,27 @@ void GdbEngine::flushCommand(const GdbCommand &cmd0) m_gdbAdapter->write(cmd.command.toLatin1() + "\r\n"); + m_commandTimer->start(); + if (cmd.flags & LosesChild) setState(InferiorShuttingDown); } +void GdbEngine::commandTimeout() +{ + // FIXME this needs a proper message box + debugMessage(_("TIMED OUT WAITING FOR GDB REPLY. COMMANDS STILL IN PROGRESS:")); + QList<int> keys = m_cookieForToken.keys(); + qSort(keys); + foreach (int key, keys) { + const GdbCommand &cmd = m_cookieForToken[key]; + debugMessage(_(" %1: %2 => %3").arg(key).arg(cmd.command).arg(_(cmd.callbackName))); + } + // This is an entirely undefined state, so we just pull the emergency brake. + setState(EngineShuttingDown, true); + m_gdbProc.kill(); +} + void GdbEngine::handleResultRecord(GdbResponse *response) { //qDebug() << "TOKEN:" << response.token @@ -927,6 +952,9 @@ void GdbEngine::handleResultRecord(GdbResponse *response) } else { PENDING_DEBUG("MISSING TOKENS: " << m_cookieForToken.keys()); } + + if (m_cookieForToken.isEmpty()) + m_commandTimer->stop(); } void GdbEngine::executeDebuggerCommand(const QString &command) @@ -1426,7 +1454,6 @@ void GdbEngine::shutdown() m_gdbAdapter->shutdown(); // fall-through case AdapterStartFailed: // Adapter "did something", but it did not help - // FIXME set some timeout? if (m_gdbProc.state() == QProcess::Running) { postCommand(_("-gdb-exit"), GdbEngine::ExitRequest, CB(handleGdbExit)); } else { @@ -1437,7 +1464,6 @@ void GdbEngine::shutdown() case InferiorRunning: case InferiorStopping: case InferiorStopped: - // FIXME set some timeout? postCommand(_(m_gdbAdapter->inferiorShutdownCommand()), NeedsStop | LosesChild, CB(handleInferiorShutdown)); break; @@ -1446,7 +1472,6 @@ void GdbEngine::shutdown() case InferiorShutDown: case InferiorShutdownFailed: // Whatever case InferiorUnrunnable: - // FIXME set some timeout? postCommand(_("-gdb-exit"), GdbEngine::ExitRequest, CB(handleGdbExit)); setState(EngineShuttingDown); // Do it after posting the command! break; @@ -3246,23 +3271,13 @@ void GdbEngine::handleVarCreate(const GdbResponse &response) if (response.resultClass == GdbResultDone) { data.variable = data.iname; setWatchDataType(data, response.data.findChild("type")); - if (hasDebuggingHelperForType(data.type)) { - // we do not trust gdb if we have a custom dumper - if (response.data.findChild("children").isValid()) - data.setChildrenUnneeded(); - else if (manager()->watchHandler()->isExpandedIName(data.iname)) - data.setChildrenNeeded(); - insertData(data); - } else { - if (response.data.findChild("children").isValid()) - data.setChildrenUnneeded(); - else if (manager()->watchHandler()->isExpandedIName(data.iname)) - data.setChildrenNeeded(); - setWatchDataChildCount(data, response.data.findChild("numchild")); - //if (data.isValueNeeded() && data.childCount > 0) - // data.setValue(QString()); - insertData(data); - } + if (manager()->watchHandler()->isExpandedIName(data.iname) + && !response.data.findChild("children").isValid()) + data.setChildrenNeeded(); + else + data.setChildrenUnneeded(); + setWatchDataChildCount(data, response.data.findChild("numchild")); + insertData(data); } else { data.setError(QString::fromLocal8Bit(response.data.findChild("msg").data())); if (data.isWatcher()) { @@ -3707,7 +3722,8 @@ void GdbEngine::insertData(const WatchData &data0) void GdbEngine::handleVarListChildrenHelper(const GdbMi &item, const WatchData &parent) { - //qDebug() << "VAR_LIST_CHILDREN: APPENDEE" << data.toString(); + //qDebug() << "VAR_LIST_CHILDREN: PARENT" << parent.toString(); + //qDebug() << "VAR_LIST_CHILDREN: ITEM" << item.toString(); QByteArray exp = item.findChild("exp").data(); QByteArray name = item.findChild("name").data(); if (isAccessSpecifier(_(exp))) { @@ -4243,6 +4259,9 @@ bool GdbEngine::startGdb(const QStringList &args, const QString &gdb, const QStr m_gdbProc.disconnect(); // From any previous runs QString location = gdb; + const QByteArray env = qgetenv("QTC_DEBUGGER_PATH"); + if (!env.isEmpty()) + location = QString::fromLatin1(env); if (location.isEmpty()) location = theDebuggerStringSetting(GdbLocation); QStringList gdbArgs; diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index 6c95977dd621519e7dc9a2549413c81c2e58f22b..aafe05b96e08e22b62dcf101bc86ab9e61f386f9 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -49,6 +49,7 @@ QT_BEGIN_NAMESPACE class QAction; class QAbstractItemModel; +class QTimer; class QWidget; class QMainWindow; QT_END_NAMESPACE @@ -228,9 +229,12 @@ private: ////////// Gdb Command Management ////////// const QVariant &cookie = QVariant()); void postCommandHelper(const GdbCommand &cmd); void flushQueuedCommands(); + Q_SLOT void commandTimeout(); void setTokenBarrier(); QHash<int, GdbCommand> m_cookieForToken; + QTimer *m_commandTimer; + enum { COMMAND_TIMEOUT = 20000 }; QByteArray m_pendingConsoleStreamOutput; QByteArray m_pendingLogStreamOutput; diff --git a/src/plugins/debugger/stackwindow.cpp b/src/plugins/debugger/stackwindow.cpp index 910f69ea35c23a7932f010b66ec72fa860a47134..f92a6993fd32f7b9705b4d68ae6124ab2d9f15c9 100644 --- a/src/plugins/debugger/stackwindow.cpp +++ b/src/plugins/debugger/stackwindow.cpp @@ -73,6 +73,12 @@ StackWindow::StackWindow(DebuggerManager *manager, QWidget *parent) this, SLOT(showAddressColumn(bool))); } +StackWindow::~StackWindow() +{ + // FIXME: leak + //delete m_disassemblerAgent; +} + void StackWindow::showAddressColumn(bool on) { setColumnHidden(4, !on); diff --git a/src/plugins/debugger/stackwindow.h b/src/plugins/debugger/stackwindow.h index 0256fbeee05d63c6480f95bd5815bd09391c86c0..7ea221d6fedb01bf55404ecb6b58cc30a553c1e9 100644 --- a/src/plugins/debugger/stackwindow.h +++ b/src/plugins/debugger/stackwindow.h @@ -50,6 +50,7 @@ class StackWindow : public QTreeView public: StackWindow(DebuggerManager *manager, QWidget *parent = 0); + ~StackWindow(); signals: void frameActivated(int); diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index 4819753fd37a1f9b549543ac660eb05637c19c13..679fec5005c4b04a6e176081c0751cada2314427 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -41,6 +41,7 @@ #include <QtCore/QDebug> #include <QtCore/QEvent> + #include <QtCore/QtAlgorithms> #include <QtCore/QTextStream> #include <QtCore/QTimer> @@ -361,6 +362,11 @@ WatchModel::WatchModel(WatchHandler *handler, WatchType type) } } +WatchModel::~WatchModel() +{ + delete m_root; +} + WatchItem *WatchModel::rootItem() const { return m_root; @@ -420,7 +426,7 @@ void WatchModel::removeOutdated() void WatchModel::removeOutdatedHelper(WatchItem *item) { if (item->generation < generationCounter) { - removeItem(item); + destroyItem(item); } else { foreach (WatchItem *child, item->children) removeOutdatedHelper(child); @@ -428,7 +434,7 @@ void WatchModel::removeOutdatedHelper(WatchItem *item) } } -void WatchModel::removeItem(WatchItem *item) +void WatchModel::destroyItem(WatchItem *item) { WatchItem *parent = item->parent; QModelIndex index = watchIndex(parent); @@ -437,6 +443,7 @@ void WatchModel::removeItem(WatchItem *item) beginRemoveRows(index, n, n); parent->children.removeAt(n); endRemoveRows(); + delete item; } static QString parentName(const QString &iname) @@ -1187,7 +1194,7 @@ void WatchHandler::removeData(const QString &iname) return; WatchItem *item = model->findItem(iname, model->m_root); if (item) - model->removeItem(item); + model->destroyItem(item); } void WatchHandler::watchExpression() @@ -1302,7 +1309,7 @@ void WatchHandler::removeWatchExpression(const QString &exp) m_watcherNames.remove(exp); foreach (WatchItem *item, m_watchers->rootItem()->children) { if (item->exp == exp) { - m_watchers->removeItem(item); + m_watchers->destroyItem(item); saveWatchers(); break; } diff --git a/src/plugins/debugger/watchhandler.h b/src/plugins/debugger/watchhandler.h index 155d1de4116acca6962451e243c32e12775ef335..dfd36da559700d8349ec57bec9f24e6a9ba94e08 100644 --- a/src/plugins/debugger/watchhandler.h +++ b/src/plugins/debugger/watchhandler.h @@ -180,6 +180,7 @@ class WatchModel : public QAbstractItemModel private: explicit WatchModel(WatchHandler *handler, WatchType type); + virtual ~WatchModel(); QVariant data(const QModelIndex &index, int role) const; bool setData(const QModelIndex &index, const QVariant &value, int role); @@ -209,7 +210,7 @@ private: void removeOutdated(); void removeOutdatedHelper(WatchItem *item); WatchItem *rootItem() const; - void removeItem(WatchItem *item); + void destroyItem(WatchItem *item); void emitDataChanged(int column, const QModelIndex &parentIndex = QModelIndex()); diff --git a/src/plugins/find/searchresultwindow.cpp b/src/plugins/find/searchresultwindow.cpp index c60e2d6c9ee1e283c20d8603cb24413a6cab5e5b..5bbf06af5125f9475c1b224074e8f975afbc7170 100644 --- a/src/plugins/find/searchresultwindow.cpp +++ b/src/plugins/find/searchresultwindow.cpp @@ -53,7 +53,8 @@ static const QString SETTINGSKEYEXPANDRESULTS("ExpandResults"); SearchResultWindow::SearchResultWindow() : m_currentSearch(0), - m_isShowingReplaceUI(false) + m_isShowingReplaceUI(false), + m_focusReplaceEdit(false) { m_widget = new QStackedWidget; m_widget->setWindowTitle(name()); @@ -124,15 +125,13 @@ void SearchResultWindow::setShowReplaceUI(bool show) m_isShowingReplaceUI = show; } -bool SearchResultWindow::isShowingReplaceUI() const -{ - return m_isShowingReplaceUI; -} - void SearchResultWindow::handleReplaceButton() { QTC_ASSERT(m_currentSearch, return); - m_currentSearch->replaceButtonClicked(m_replaceTextEdit->text(), checkedItems()); + // check if button is actually enabled, because this is also triggered + // by pressing return in replace line edit + if (m_replaceButton->isEnabled()) + m_currentSearch->replaceButtonClicked(m_replaceTextEdit->text(), checkedItems()); } QList<SearchResultItem> SearchResultWindow::checkedItems() const @@ -177,9 +176,19 @@ SearchResult *SearchResultWindow::startNewSearch(SearchMode searchOrSearchAndRep return m_currentSearch; } +void SearchResultWindow::finishSearch() +{ + if (m_items.count()) { + m_replaceButton->setEnabled(true); + } else { + showNoMatchesFound(); + } +} + void SearchResultWindow::clearContents() { - setReplaceUIEnabled(false); + m_replaceTextEdit->setEnabled(false); + m_replaceButton->setEnabled(false); m_replaceTextEdit->clear(); m_searchResultTreeView->clear(); m_items.clear(); @@ -189,7 +198,8 @@ void SearchResultWindow::clearContents() void SearchResultWindow::showNoMatchesFound() { - setReplaceUIEnabled(false); + m_replaceTextEdit->setEnabled(false); + m_replaceButton->setEnabled(false); m_widget->setCurrentWidget(m_noMatchesFoundDisplay); } @@ -220,7 +230,8 @@ void SearchResultWindow::setFocus() m_searchResultTreeView->setFocus(); } else { if (!m_widget->focusWidget() - || m_widget->focusWidget() == m_replaceTextEdit) { + || m_widget->focusWidget() == m_replaceTextEdit + || m_focusReplaceEdit) { m_replaceTextEdit->setFocus(); } else { m_searchResultTreeView->setFocus(); @@ -257,20 +268,16 @@ void SearchResultWindow::addResult(const QString &fileName, int lineNumber, cons m_items.append(item); m_searchResultTreeView->appendResultLine(index, fileName, lineNumber, rowText, searchTermStart, searchTermLength); if (index == 0) { - setReplaceUIEnabled(true); - // We didn't have an item before, set the focus to the m_searchResultTreeView + m_replaceTextEdit->setEnabled(true); + // We didn't have an item before, set the focus to the search widget + m_focusReplaceEdit = true; setFocus(); + m_focusReplaceEdit = false; m_searchResultTreeView->selectionModel()->select(m_searchResultTreeView->model()->index(0, 0, QModelIndex()), QItemSelectionModel::Select); emit navigateStateChanged(); } } -void SearchResultWindow::setReplaceUIEnabled(bool enabled) -{ - m_replaceTextEdit->setEnabled(enabled); - m_replaceButton->setEnabled(enabled); -} - void SearchResultWindow::handleExpandCollapseToolButton(bool checked) { m_searchResultTreeView->setAutoExpandResults(checked); diff --git a/src/plugins/find/searchresultwindow.h b/src/plugins/find/searchresultwindow.h index c41ca3424f7b1b32a19302f4fd1f844ef135b25b..e8996f8c02963c0bd87a440ee98fb41a87f0e1f9 100644 --- a/src/plugins/find/searchresultwindow.h +++ b/src/plugins/find/searchresultwindow.h @@ -103,9 +103,6 @@ public: void setTextEditorFont(const QFont &font); - void setShowReplaceUI(bool show); - bool isShowingReplaceUI() const; - void setTextToReplace(const QString &textToReplace); QString textToReplace() const; @@ -114,17 +111,18 @@ public: public slots: void clearContents(); - void showNoMatchesFound(); void addResult(const QString &fileName, int lineNumber, const QString &lineText, int searchTermStart, int searchTermLength, const QVariant &userData = QVariant()); + void finishSearch(); private slots: void handleExpandCollapseToolButton(bool checked); void handleJumpToSearchResult(int index, bool checked); void handleReplaceButton(); - void setReplaceUIEnabled(bool enabled); + void showNoMatchesFound(); private: + void setShowReplaceUI(bool show); void readSettings(); void writeSettings(); QList<SearchResultItem> checkedItems() const; @@ -140,6 +138,7 @@ private: SearchResult *m_currentSearch; QList<SearchResultItem> m_items; bool m_isShowingReplaceUI; + bool m_focusReplaceEdit; }; } // namespace Find diff --git a/src/plugins/help/centralwidget.cpp b/src/plugins/help/centralwidget.cpp index 102a84a6d8656246a4f4a2e262b500266360bedf..0080f062b85faf752ebe8c21e37be6c060e1868c 100644 --- a/src/plugins/help/centralwidget.cpp +++ b/src/plugins/help/centralwidget.cpp @@ -220,7 +220,7 @@ void CentralWidget::setSource(const QUrl &url) qobject_cast<HelpViewer*>(tabWidget->widget(lastTabPage)); if (!viewer && !lastViewer) { - viewer = new HelpViewer(helpEngine, this); + viewer = new HelpViewer(helpEngine, this, this); viewer->installEventFilter(this); lastTabPage = tabWidget->addTab(viewer, QString()); tabWidget->setCurrentIndex(lastTabPage); @@ -428,7 +428,7 @@ void CentralWidget::setGlobalActions(const QList<QAction*> &actions) void CentralWidget::setSourceInNewTab(const QUrl &url, int zoom) { - HelpViewer* viewer = new HelpViewer(helpEngine, this); + HelpViewer* viewer = new HelpViewer(helpEngine, this, this); viewer->installEventFilter(this); viewer->setZoom(zoom); viewer->setSource(url); @@ -448,7 +448,7 @@ void CentralWidget::setSourceInNewTab(const QUrl &url, int zoom) HelpViewer *CentralWidget::newEmptyTab() { - HelpViewer* viewer = new HelpViewer(helpEngine, this); + HelpViewer* viewer = new HelpViewer(helpEngine, this, this); viewer->installEventFilter(this); viewer->setFocus(Qt::OtherFocusReason); #if defined(QT_NO_WEBKIT) diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp index 6a57c583e079b8242064103a6e7726f511fa91dc..da93cd6795524a58bf4f804074659560c9eba538 100644 --- a/src/plugins/help/helpplugin.cpp +++ b/src/plugins/help/helpplugin.cpp @@ -491,7 +491,7 @@ void HelpPlugin::createRightPaneSideBar() addAutoReleasedObject(new Core::BaseRightPaneWidget(m_rightPaneSideBar)); rightPaneLayout->addWidget(w); - m_helpViewerForSideBar = new HelpViewer(m_helpEngine, 0); + m_helpViewerForSideBar = new HelpViewer(m_helpEngine, 0, m_rightPaneSideBar); Aggregation::Aggregate *agg = new Aggregation::Aggregate(); agg->add(m_helpViewerForSideBar); agg->add(new HelpViewerFindSupport(m_helpViewerForSideBar)); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index bf4063ecb736a711e81df74b08b9110d75b0a858..9821118e87b19002b948f4f6bfba2fec844a8760 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -207,6 +207,7 @@ ProjectExplorerPlugin::ProjectExplorerPlugin() ProjectExplorerPlugin::~ProjectExplorerPlugin() { removeObject(d->m_welcomePlugin); + delete d->m_welcomePlugin; removeObject(this); delete d; } @@ -1869,16 +1870,14 @@ void ProjectExplorerPlugin::showInGraphicalShell() { QTC_ASSERT(d->m_currentNode, return) #if defined(Q_OS_WIN) - QString explorer = Environment::systemEnvironment().searchInPath("explorer.exe"); + const QString explorer = Environment::systemEnvironment().searchInPath("explorer.exe"); if (explorer.isEmpty()) { QMessageBox::warning(Core::ICore::instance()->mainWindow(), tr("Launching Windows Explorer failed"), tr("Could not find explorer.exe in path to launch Windows Explorer.")); return; } - QProcess::execute(explorer, - QStringList() << QString("/select,%1") - .arg(QDir::toNativeSeparators(d->m_currentNode->path()))); + QProcess::startDetached(explorer, QStringList(QLatin1String("/select,") + QDir::toNativeSeparators(d->m_currentNode->path()))); #elif defined(Q_OS_MAC) QProcess::execute("/usr/bin/osascript", QStringList() << "-e" @@ -1889,15 +1888,15 @@ void ProjectExplorerPlugin::showInGraphicalShell() << "tell application \"Finder\" to activate"); #else // we cannot select a file here, because no file browser really supports it... - QFileInfo fileInfo(d->m_currentNode->path()); - QString xdgopen = Environment::systemEnvironment().searchInPath("xdg-open"); + const QFileInfo fileInfo(d->m_currentNode->path()); + const QString xdgopen = Environment::systemEnvironment().searchInPath("xdg-open"); if (xdgopen.isEmpty()) { QMessageBox::warning(Core::ICore::instance()->mainWindow(), tr("Launching a file explorer failed"), tr("Could not find xdg-open to launch the native file explorer.")); return; } - QProcess::execute(xdgopen, QStringList() << fileInfo.path()); + QProcess::startDetached(xdgopen, QStringList(fileInfo.path())); #endif } diff --git a/src/plugins/projectexplorer/projectexplorersettings.h b/src/plugins/projectexplorer/projectexplorersettings.h index 995b4dface32a187bd5ff4baa3da56c32aa6ecdd..764340c1f87a04f9e05804b34b01684e4b68c071 100644 --- a/src/plugins/projectexplorer/projectexplorersettings.h +++ b/src/plugins/projectexplorer/projectexplorersettings.h @@ -35,18 +35,24 @@ namespace Internal { struct ProjectExplorerSettings { + ProjectExplorerSettings() : buildBeforeRun(true), saveBeforeBuild(false), + showCompilerOutput(false), useJom(true) {} + bool buildBeforeRun; bool saveBeforeBuild; bool showCompilerOutput; bool useJom; - bool operator==(const ProjectExplorerSettings &other) const { - return this->buildBeforeRun == other.buildBeforeRun - && this->saveBeforeBuild == other.saveBeforeBuild - && this->showCompilerOutput == other.showCompilerOutput - && this->useJom == other.useJom; - } }; +inline bool operator==(const ProjectExplorerSettings &p1, const ProjectExplorerSettings &p2) +{ + return p1.buildBeforeRun == p2.buildBeforeRun + && p1.saveBeforeBuild == p2.saveBeforeBuild + && p1.showCompilerOutput == p2.showCompilerOutput + && p1.useJom == p2.useJom; +} + + } // namespace ProjectExplorer } // namespace Internal diff --git a/src/plugins/projectexplorer/projectwelcomepage.cpp b/src/plugins/projectexplorer/projectwelcomepage.cpp index 1db7881d548dc99014fa61deb78510c4f67dc75f..9db59823bd8a51f9f3fced557af782831a107bb6 100644 --- a/src/plugins/projectexplorer/projectwelcomepage.cpp +++ b/src/plugins/projectexplorer/projectwelcomepage.cpp @@ -39,6 +39,11 @@ ProjectWelcomePage::ProjectWelcomePage() } +ProjectWelcomePage::~ProjectWelcomePage() +{ + +} + QWidget* ProjectWelcomePage::page() { return m_page; diff --git a/src/plugins/projectexplorer/projectwelcomepage.h b/src/plugins/projectexplorer/projectwelcomepage.h index a3dc97942b34e4abc882e0fbdbe961edde47c4be..4fb72cdc9d13c5c07b5fb9af099f752e3e6a81f3 100644 --- a/src/plugins/projectexplorer/projectwelcomepage.h +++ b/src/plugins/projectexplorer/projectwelcomepage.h @@ -42,6 +42,7 @@ class ProjectWelcomePage : public Utils::IWelcomePage Q_OBJECT public: ProjectWelcomePage(); + ~ProjectWelcomePage(); QWidget *page(); QString title() const { return tr("Develop"); } diff --git a/src/plugins/projectexplorer/winguiprocess.cpp b/src/plugins/projectexplorer/winguiprocess.cpp index 961a352dbe6eb066ffdcdfa7a9f71fb0a9abb020..71ea57a749f8ef3cb3873034260f7e224492fe9b 100644 --- a/src/plugins/projectexplorer/winguiprocess.cpp +++ b/src/plugins/projectexplorer/winguiprocess.cpp @@ -101,72 +101,81 @@ void WinGuiProcess::run() ZeroMemory(m_pid, sizeof(PROCESS_INFORMATION)); m_exitCode = 0; + bool started = false; HANDLE bufferReadyEvent = NULL; HANDLE dataReadyEvent = NULL; HANDLE sharedFile = NULL; - LPVOID sharedMem = NULL; - - bool dbgInterface = setupDebugInterface(bufferReadyEvent, dataReadyEvent, sharedFile, sharedMem); - - QString cmdLine = createWinCommandline(m_program, m_args); - bool success = CreateProcessW(0, (WCHAR*)cmdLine.utf16(), - 0, 0, TRUE, CREATE_UNICODE_ENVIRONMENT, - environment().isEmpty() ? 0 - : createWinEnvironment(fixWinEnvironment(environment())).data(), - workingDirectory().isEmpty() ? 0 - : (WCHAR*)QDir::convertSeparators(workingDirectory()).utf16(), - &si, m_pid); - - if (!success) { - emit processError(tr("The process could not be started!")); - delete m_pid; - m_pid = 0; - return; - } + LPVOID sharedMem = 0; - if (!dbgInterface) { - emit receivedDebugOutput(tr("Cannot retrieve debugging output!")); - WaitForSingleObject(m_pid->hProcess, INFINITE); - } else { - LPSTR message; - LPDWORD processId; - HANDLE toWaitFor[2]; - - message = reinterpret_cast<LPSTR>(sharedMem) + sizeof(DWORD); - processId = reinterpret_cast<LPDWORD>(sharedMem); - - SetEvent(bufferReadyEvent); - - toWaitFor[0] = dataReadyEvent; - toWaitFor[1] = m_pid->hProcess; - - for (bool stop = false; !stop;) { - DWORD ret = WaitForMultipleObjects(2, toWaitFor, FALSE, INFINITE); - - switch (ret) { - case WAIT_OBJECT_0 + 0: - if (*processId == m_pid->dwProcessId) - emit receivedDebugOutput(QString::fromLocal8Bit(message)); - SetEvent(bufferReadyEvent); - break; - case WAIT_OBJECT_0 + 1: - stop = true; - break; - } + do { + + const bool dbgInterface = setupDebugInterface(bufferReadyEvent, dataReadyEvent, sharedFile, sharedMem); + + const QString cmdLine = createWinCommandline(m_program, m_args); + started = CreateProcessW(0, (WCHAR*)cmdLine.utf16(), + 0, 0, TRUE, CREATE_UNICODE_ENVIRONMENT, + environment().isEmpty() ? 0 + : createWinEnvironment(fixWinEnvironment(environment())).data(), + workingDirectory().isEmpty() ? 0 + : (WCHAR*)QDir::convertSeparators(workingDirectory()).utf16(), + &si, m_pid); + + if (!started) { + emit processError(tr("The process could not be started!")); + break; } - } - GetExitCodeProcess(m_pid->hProcess, &m_exitCode); - emit processFinished(static_cast<int>(m_exitCode)); + if (!dbgInterface) { + emit receivedDebugOutput(tr("Cannot retrieve debugging output!")); + WaitForSingleObject(m_pid->hProcess, INFINITE); + } else { + LPSTR message; + LPDWORD processId; + HANDLE toWaitFor[2]; + + message = reinterpret_cast<LPSTR>(sharedMem) + sizeof(DWORD); + processId = reinterpret_cast<LPDWORD>(sharedMem); + + SetEvent(bufferReadyEvent); + + toWaitFor[0] = dataReadyEvent; + toWaitFor[1] = m_pid->hProcess; + + for (bool stop = false; !stop;) { + DWORD ret = WaitForMultipleObjects(2, toWaitFor, FALSE, INFINITE); + + switch (ret) { + case WAIT_OBJECT_0 + 0: + if (*processId == m_pid->dwProcessId) + emit receivedDebugOutput(QString::fromLocal8Bit(message)); + SetEvent(bufferReadyEvent); + break; + case WAIT_OBJECT_0 + 1: + stop = true; + break; + } + } + } + } while (false); - UnmapViewOfFile(sharedMem); - CloseHandle(sharedFile); - CloseHandle(bufferReadyEvent); - CloseHandle(dataReadyEvent); - CloseHandle(m_pid->hProcess); - CloseHandle(m_pid->hThread); + if (started) { + GetExitCodeProcess(m_pid->hProcess, &m_exitCode); + emit processFinished(static_cast<int>(m_exitCode)); + } + if (sharedMem) + UnmapViewOfFile(sharedMem); + if (sharedFile != NULL) + CloseHandle(sharedFile); + if (bufferReadyEvent != NULL) + CloseHandle(bufferReadyEvent); + if (dataReadyEvent != NULL) + CloseHandle(dataReadyEvent); + if (m_pid->hProcess != NULL) + CloseHandle(m_pid->hProcess); + if (m_pid->hThread != NULL) + CloseHandle(m_pid->hThread); delete m_pid; m_pid = 0; } diff --git a/src/plugins/projectexplorer/winguiprocess.h b/src/plugins/projectexplorer/winguiprocess.h index 460651ff12caecd77a63df25eee23765ec1e44a5..c3ffee1e7724132a447b08363fb2d5291409ba08 100644 --- a/src/plugins/projectexplorer/winguiprocess.h +++ b/src/plugins/projectexplorer/winguiprocess.h @@ -42,6 +42,9 @@ using namespace Utils; namespace ProjectExplorer { namespace Internal { +/* Captures the debug output of a Windows GUI application (which + * would otherwise not be visible) using the debug interface and + * emits via a signal. */ class WinGuiProcess : public QThread, public AbstractProcess { Q_OBJECT diff --git a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp index a45ebe44e27852f00e49f8bf62aab22773ad9c4c..74e9ceb0b61e8b96bdc68986ee4323bd254b8b75 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp @@ -132,8 +132,10 @@ S60Manager::S60Manager(QObject *parent) S60Manager::~S60Manager() { ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); - for (int i = m_pluginObjects.size() - 1; i >= 0; i--) + for (int i = m_pluginObjects.size() - 1; i >= 0; i--) { pm->removeObject(m_pluginObjects.at(i)); + delete m_pluginObjects.at(i); + } } void S60Manager::addAutoReleasedObject(QObject *o) diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 2a5970e582bb928db9f066f1a7648075a4dfa468..e75cb795ecf6047941d9e82de987de76dfd9ee5e 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -535,8 +535,6 @@ void Qt4Project::updateCodeModel() if (debug) qDebug()<<"Qt4Project::updateCodeModel()"; - // TODO figure out the correct ordering of #include directories - CppTools::CppModelManagerInterface *modelmanager = ExtensionSystem::PluginManager::instance() ->getObject<CppTools::CppModelManagerInterface>(); @@ -570,7 +568,7 @@ void Qt4Project::updateCodeModel() const QHash<QString, QString> versionInfo = qtVersion(activeBuildConfiguration())->versionInfo(); const QString newQtIncludePath = versionInfo.value(QLatin1String("QT_INSTALL_HEADERS")); - predefinedIncludePaths.prepend(newQtIncludePath); + predefinedIncludePaths.append(newQtIncludePath); QDir dir(newQtIncludePath); foreach (QFileInfo info, dir.entryInfoList(QDir::Dirs)) { const QString path = info.fileName(); @@ -578,7 +576,7 @@ void Qt4Project::updateCodeModel() if (path == QLatin1String("Qt")) continue; // skip $QT_INSTALL_HEADERS/Qt. There's no need to include it. else if (path.startsWith(QLatin1String("Qt")) || path == QLatin1String("phonon")) - predefinedIncludePaths.prepend(info.absoluteFilePath()); + predefinedIncludePaths.append(info.absoluteFilePath()); } FindQt4ProFiles findQt4ProFiles; @@ -589,13 +587,13 @@ void Qt4Project::updateCodeModel() #ifdef Q_OS_MAC const QString newQtLibsPath = versionInfo.value(QLatin1String("QT_INSTALL_LIBS")); - allFrameworkPaths.prepend(newQtLibsPath); + allFrameworkPaths.append(newQtLibsPath); // put QtXXX.framework/Headers directories in include path since that qmake's behavior QDir frameworkDir(newQtLibsPath); foreach (QFileInfo info, frameworkDir.entryInfoList(QDir::Dirs)) { if (! info.fileName().startsWith(QLatin1String("Qt"))) continue; - allIncludePaths.prepend(info.absoluteFilePath()+"/Headers"); + allIncludePaths.append(info.absoluteFilePath()+"/Headers"); } #endif @@ -632,9 +630,9 @@ void Qt4Project::updateCodeModel() const QStringList proIncludePaths = pro->variableValue(IncludePathVar); foreach (const QString &includePath, proIncludePaths) { if (!allIncludePaths.contains(includePath)) - allIncludePaths.prepend(includePath); + allIncludePaths.append(includePath); if (!info.includes.contains(includePath)) - info.includes.prepend(includePath); + info.includes.append(includePath); } { // Pkg Config support @@ -646,13 +644,13 @@ void Qt4Project::updateCodeModel() process.waitForFinished(); QString result = process.readAllStandardOutput(); foreach(const QString &part, result.trimmed().split(' ', QString::SkipEmptyParts)) { - info.includes.prepend(part.mid(2)); // Chop off "-I" + info.includes.append(part.mid(2)); // Chop off "-I" } } } // Add mkspec directory - info.includes.prepend(qtVersion(activeBuildConfiguration())->mkspecPath()); + info.includes.append(qtVersion(activeBuildConfiguration())->mkspecPath()); info.frameworkPaths = allFrameworkPaths; @@ -666,7 +664,7 @@ void Qt4Project::updateCodeModel() } // Add mkspec directory - allIncludePaths.prepend(qtVersion(activeBuildConfiguration())->mkspecPath()); + allIncludePaths.append(qtVersion(activeBuildConfiguration())->mkspecPath()); // Dump things out // This is debugging output... diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp index ab028a43ebaa18ea1095c3a5bf3a2aba3b901d6a..032dc8734e7db560b481b0b32293bbedaa56b0f6 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.cpp +++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp @@ -395,8 +395,7 @@ void QtVersionManager::setNewQtVersions(QList<QtVersion *> newVersions, int newD } qDeleteAll(m_versions); m_versions.clear(); - foreach(QtVersion *version, newVersions) - m_versions.append(new QtVersion(*version)); + m_versions = newVersions; if (versionPathsChanged) updateDocumentation(); updateUniqueIdToIndexMap(); @@ -416,8 +415,6 @@ void QtVersionManager::setNewQtVersions(QList<QtVersion *> newVersions, int newD writeVersionsIntoSettings(); } - - /// /// QtVersion /// diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp index 5126d2e96ab064fdff2b8dbccd600a032d2848e8..97479b37c2bfbdbb41490192bb2713266679dbda 100644 --- a/src/plugins/texteditor/basefilefind.cpp +++ b/src/plugins/texteditor/basefilefind.cpp @@ -121,6 +121,7 @@ void BaseFileFind::displayResult(int index) { void BaseFileFind::searchFinished() { + m_resultWindow->finishSearch(); m_isSearching = false; m_resultLabel = 0; emit changed(); diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 8176f838026182241995be4a3e8893fb226b0ac3..cd406907e038af12d4c1156206f87ba44192abaa 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -1990,8 +1990,9 @@ void BaseTextEditor::paintEvent(QPaintEvent *e) if (d->m_visibleWrapColumn > 0) { lineX = fontMetrics().averageCharWidth() * d->m_visibleWrapColumn + offset.x() + 4; - painter.fillRect(QRectF(lineX, 0, viewportRect.width() - lineX, viewportRect.height()), - d->m_ifdefedOutFormat.background()); + if (lineX < viewportRect.width()) + painter.fillRect(QRectF(lineX, 0, viewportRect.width() - lineX, viewportRect.height()), + d->m_ifdefedOutFormat.background()); } // // keep right margin clean from full-width selection diff --git a/src/shared/cplusplus/Lexer.cpp b/src/shared/cplusplus/Lexer.cpp index a0cc9495d831e247e9f3c7d65d2e7d442bebeaa1..f8f1b6f1339ba993f20e7c31bc4385fe1d1bf3bc 100644 --- a/src/shared/cplusplus/Lexer.cpp +++ b/src/shared/cplusplus/Lexer.cpp @@ -603,7 +603,7 @@ void Lexer::scan_helper(Token *tok) do { yyinp(); - if (! (isalnum(_yychar) || _yychar == '_')) + if (! (isalnum(_yychar) || _yychar == '_' || _yychar == '$')) break; } while (_yychar); @@ -674,9 +674,9 @@ void Lexer::scan_helper(Token *tok) if (control()) tok->string = control()->findOrInsertStringLiteral(yytext, yylen); - } else if (std::isalpha(ch) || ch == '_') { + } else if (std::isalpha(ch) || ch == '_' || ch == '$') { const char *yytext = _currentChar - 1; - while (std::isalnum(_yychar) || _yychar == '_') + while (std::isalnum(_yychar) || _yychar == '_' || _yychar == '$') yyinp(); int yylen = _currentChar - yytext; if (f._scanKeywords) diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index 835b2c11c8940423d5006ed9aa25e3cdc2542df4..ca26cb629e343d0690304f4fade6f0bacc20645f 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -1200,6 +1200,14 @@ bool Parser::parseDeclarator(DeclaratorAST *&node, bool stopAtCppInitializer) break; } + if (LA() == T___ASM__ && LA(2) == T_LPAREN) { // ### store the asm specifier in the AST + consumeToken(); // skip __asm__ + consumeToken(); // skip T_LPAREN + + if (skipUntil(T_RPAREN)) + consumeToken(); // skip T_RPAREN + } + SpecifierAST **spec_ptr = &node->post_attributes; while (LA() == T___ATTRIBUTE__) { parseAttributeSpecifier(*spec_ptr); diff --git a/src/shared/help/helpviewer.cpp b/src/shared/help/helpviewer.cpp index 83fd5731db3887d604e24797e0d17a36155cf2c4..4d6ecc7466202c7b6751682f51fe1fe484a96513 100644 --- a/src/shared/help/helpviewer.cpp +++ b/src/shared/help/helpviewer.cpp @@ -230,14 +230,14 @@ bool HelpPage::acceptNavigationRequest(QWebFrame *, return false; } -HelpViewer::HelpViewer(QHelpEngine *engine, Help::Internal::CentralWidget *parent) +HelpViewer::HelpViewer(QHelpEngine *engine, Help::Internal::CentralWidget *central, QWidget *parent) : QWebView(parent) , helpEngine(engine) - , parentWidget(parent) + , parentWidget(central) , multiTabsAllowed(true) , loadFinished(false) { - setPage(new HelpPage(parent, helpEngine, this)); + setPage(new HelpPage(central, helpEngine, this)); settings()->setAttribute(QWebSettings::PluginsEnabled, false); settings()->setAttribute(QWebSettings::JavaEnabled, false); @@ -245,7 +245,7 @@ HelpViewer::HelpViewer(QHelpEngine *engine, Help::Internal::CentralWidget *paren QAction* action = pageAction(QWebPage::OpenLinkInNewWindow); action->setText(tr("Open Link in New Tab")); - if (!parent) { + if (!central) { multiTabsAllowed = false; action->setVisible(false); } @@ -378,13 +378,13 @@ void HelpViewer::setLoadFinished(bool ok) #else // !defined(QT_NO_WEBKIT) -HelpViewer::HelpViewer(QHelpEngine *engine, Help::Internal::CentralWidget *parent) +HelpViewer::HelpViewer(QHelpEngine *engine, Help::Internal::CentralWidget *central, QWidget *parent) : QTextBrowser(parent) , zoomCount(0) , controlPressed(false) , lastAnchor(QString()) , helpEngine(engine) - , parentWidget(parent) + , parentWidget(central) { document()->setDocumentMargin(8); } diff --git a/src/shared/help/helpviewer.h b/src/shared/help/helpviewer.h index 6f473eccb6813161de8d447271cc823ae3906478..8b6ea20f2f5b5511f91932069a06601e46e88db0 100644 --- a/src/shared/help/helpviewer.h +++ b/src/shared/help/helpviewer.h @@ -64,7 +64,7 @@ class HelpViewer : public QWebView Q_OBJECT public: - HelpViewer(QHelpEngine *helpEngine, Help::Internal::CentralWidget *parent); + HelpViewer(QHelpEngine *helpEngine, Help::Internal::CentralWidget *central, QWidget *parent); void setSource(const QUrl &url); inline QUrl source() const @@ -130,7 +130,7 @@ class HelpViewer : public QTextBrowser Q_OBJECT public: - HelpViewer(QHelpEngine *helpEngine, Help::Internal::CentralWidget *parent); + HelpViewer(QHelpEngine *helpEngine, Help::Internal::CentralWidget *central, QWidget *parent); void setSource(const QUrl &url); void zoomIn(int range = 1); diff --git a/tests/auto/debugger/tst_gdb.cpp b/tests/auto/debugger/tst_gdb.cpp index 9242773bf3e6cef29db919e9da3769db71fd9f0b..b6a4e2ab74874e60d1d141a93328137aaeb5d87e 100644 --- a/tests/auto/debugger/tst_gdb.cpp +++ b/tests/auto/debugger/tst_gdb.cpp @@ -170,6 +170,8 @@ private slots: void dump_misc(); void dump_std_list(); void dump_std_vector(); + void dump_std_string(); + void dump_std_wstring(); void dump_Foo(); void dump_QByteArray(); void dump_QChar(); @@ -182,6 +184,7 @@ private slots: void dump_QList_QString(); void dump_QList_QString3(); void dump_QList_Int3(); + void dump_QMap_QString_QString(); void dump_QPoint(); void dump_QRect(); void dump_QSharedPointer(); @@ -748,9 +751,9 @@ void tst_Gdb::dump_Foo() { prepare("dump_Foo"); next(); - run("B","{iname='local.f',addr='-',name='f',type='Foo'," + run("B","{iname='local.f',name='f',type='Foo'," "value='-',numchild='5'}", "", 0); - run("B","{iname='local.f',addr='-',name='f',type='Foo'," + run("B","{iname='local.f',name='f',type='Foo'," "value='-',numchild='5',children=[" "{iname='local.f.a',name='a',type='int',value='0',numchild='0'}," "{iname='local.f.b',name='b',type='int',value='2',numchild='0'}," @@ -782,9 +785,9 @@ void tst_Gdb::dump_array() prepare("dump_array_char"); next(); // FIXME: numchild should be '4', not '1' - run("B","{iname='local.s',addr='-',name='s',type='char [4]'," + run("B","{iname='local.s',name='s',type='char [4]'," "value='-',numchild='1'}", ""); - run("B","{iname='local.s',addr='-',name='s',type='char [4]'," + run("B","{iname='local.s',name='s',type='char [4]'," "value='-',numchild='1',childtype='char',childnumchild='0'," "children=[{value='88 'X''},{value='89 'Y''},{value='90 'Z''}," "{value='0 '\\\\000''}]}", @@ -793,9 +796,9 @@ void tst_Gdb::dump_array() prepare("dump_array_int"); next(); // FIXME: numchild should be '3', not '1' - run("B","{iname='local.s',addr='-',name='s',type='int [3]'," + run("B","{iname='local.s',name='s',type='int [3]'," "value='-',numchild='1'}", ""); - run("B","{iname='local.s',addr='-',name='s',type='int [3]'," + run("B","{iname='local.s',name='s',type='int [3]'," "value='-',numchild='1',childtype='int',childnumchild='0'," "children=[{value='1'},{value='2'},{value='3'}]}", "local.s"); @@ -815,9 +818,9 @@ void tst_Gdb::dump_misc() { prepare("dump_misc"); next(); - run("B","{iname='local.s',addr='-',name='s',type='int *'," + run("B","{iname='local.s',name='s',type='int *'," "value='-',numchild='1'}", "", 0); - run("B","{iname='local.s',addr='-',name='s',type='int *'," + run("B","{iname='local.s',name='s',type='int *'," "value='-',numchild='1',children=[{iname='local.s.*'," "name='*s',type='int',value='1',numchild='0'}]}", "local.s", 0); } @@ -1010,9 +1013,9 @@ void tst_Gdb::dump_QAbstractItemAndModelIndex() void tst_Gdb::dump_QAbstractItemModelHelper(QAbstractItemModel &m) { QByteArray address = ptrToBa(&m); - QByteArray expected = QByteArray("tiname='iname',addr='%'," + QByteArray expected = QByteArray("tiname='iname'," "type='"NS"QAbstractItemModel',value='(%,%)',numchild='1',children=[" - "{numchild='1',name='"NS"QObject',addr='%',value='%'," + "{numchild='1',name='"NS"QObject',value='%'," "valueencoded='2',type='"NS"QObject',displayedtype='%'}") << address << N(m.rowCount()) @@ -1025,7 +1028,7 @@ void tst_Gdb::dump_QAbstractItemModelHelper(QAbstractItemModel &m) for (int column = 0; column < m.columnCount(); ++column) { QModelIndex mi = m.index(row, column); expected.append(QByteArray(",{name='[%,%]',value='%'," - "valueencoded='2',numchild='1',addr='$%,%,%,%'," + "valueencoded='2',numchild='1',%,%,%'," "type='"NS"QAbstractItem'}") << N(row) << N(column) @@ -1089,27 +1092,27 @@ void tst_Gdb::dump_QByteArray() { prepare("dump_QByteArray"); if (checkUninitialized) - run("A","{iname='local.ba',addr='-',name='ba',type='"NS"QByteArray'," + run("A","{iname='local.ba',name='ba',type='"NS"QByteArray'," "value='<not in scope>',numchild='0'}"); next(); - run("B","{iname='local.ba',addr='-',name='ba',type='"NS"QByteArray'," + run("B","{iname='local.ba',name='ba',type='"NS"QByteArray'," "valueencoded='6',value='',numchild='0'}"); next(); - run("C","{iname='local.ba',addr='-',name='ba',type='"NS"QByteArray'," + run("C","{iname='local.ba',name='ba',type='"NS"QByteArray'," "valueencoded='6',value='61',numchild='1'}"); next(); - run("D","{iname='local.ba',addr='-',name='ba',type='"NS"QByteArray'," + run("D","{iname='local.ba',name='ba',type='"NS"QByteArray'," "valueencoded='6',value='6162',numchild='2'}"); next(); - run("E","{iname='local.ba',addr='-',name='ba',type='"NS"QByteArray'," + run("E","{iname='local.ba',name='ba',type='"NS"QByteArray'," "valueencoded='6',value='616161616161616161616161616161616161" "616161616161616161616161616161616161616161616161616161616161" "616161616161616161616161616161616161616161616161616161616161" "6161616161616161616161616161616161616161616161',numchild='101'}"); next(); - run("F","{iname='local.ba',addr='-',name='ba',type='"NS"QByteArray'," + run("F","{iname='local.ba',name='ba',type='"NS"QByteArray'," "valueencoded='6',value='616263070a0d1b27223f',numchild='10'}"); - run("F","{iname='local.ba',addr='-',name='ba',type='"NS"QByteArray'," + run("F","{iname='local.ba',name='ba',type='"NS"QByteArray'," "valueencoded='6',value='616263070a0d1b27223f',numchild='10'," "childtype='char',childnumchild='0'," "children=[{value='97 'a''},{value='98 'b''}," @@ -1135,27 +1138,27 @@ void tst_Gdb::dump_QChar() next(); // Case 1: Printable ASCII character. - run("B","{iname='local.c',addr='-',name='c',type='"NS"QChar'," + run("B","{iname='local.c',name='c',type='"NS"QChar'," "value=''X', ucs=88',numchild='0'}"); next(); // Case 2: Printable non-ASCII character. - run("C","{iname='local.c',addr='-',name='c',type='"NS"QChar'," + run("C","{iname='local.c',name='c',type='"NS"QChar'," "value=''?', ucs=1536',numchild='0'}"); next(); // Case 3: Non-printable ASCII character. - run("D","{iname='local.c',addr='-',name='c',type='"NS"QChar'," + run("D","{iname='local.c',name='c',type='"NS"QChar'," "value=''?', ucs=7',numchild='0'}"); next(); // Case 4: Non-printable non-ASCII character. - run("E","{iname='local.c',addr='-',name='c',type='"NS"QChar'," + run("E","{iname='local.c',name='c',type='"NS"QChar'," "value=''?', ucs=159',numchild='0'}"); next(); // Case 5: Printable ASCII Character that looks like the replacement character. - run("F","{iname='local.c',addr='-',name='c',type='"NS"QChar'," + run("F","{iname='local.c',name='c',type='"NS"QChar'," "value=''?', ucs=63',numchild='0'}"); } @@ -2242,28 +2245,28 @@ void tst_Gdb::dump_std_list() { prepare("dump_std_list"); if (checkUninitialized) - run("A","{iname='local.list',addr='-',name='list'," + run("A","{iname='local.list',name='list'," "numchild='0'}"); next(); - run("B", "{iname='local.list',addr='-',name='list'," + run("B", "{iname='local.list',name='list'," "type='std::list<int, std::allocator<int> >'," "value='<0 items>',numchild='0',children=[]}", "local.list"); next(); - run("C", "{iname='local.list',addr='-',name='list'," + run("C", "{iname='local.list',name='list'," "type='std::list<int, std::allocator<int> >'," "value='<1 items>',numchild='1'," "childtype='int',childnumchild='0',children=[{value='45'}]}", "local.list"); next(); - run("D", "{iname='local.list',addr='-',name='list'," + run("D", "{iname='local.list',name='list'," "type='std::list<int, std::allocator<int> >'," "value='<2 items>',numchild='2'," "childtype='int',childnumchild='0',children=[" "{value='45'},{value='46'}]}", "local.list"); next(); - run("E", "{iname='local.list',addr='-',name='list'," + run("E", "{iname='local.list',name='list'," "type='std::list<int, std::allocator<int> >'," "value='<3 items>',numchild='3'," "childtype='int',childnumchild='0',children=[" @@ -2272,6 +2275,58 @@ void tst_Gdb::dump_std_list() } +///////////////////////////// std::string ////////////////////////////////// + +void dump_std_string() +{ + /* A */ std::string str; + /* B */ str = "Hallo"; + /* C */ (void) 0; +} + +void tst_Gdb::dump_std_string() +{ + prepare("dump_std_string"); + if (checkUninitialized) + run("A","{iname='local.str',name='str'," + "numchild='0'}"); + next(); + run("B","{iname='local.str',name='str',type='std::string'," + "valueencoded='6',value='',numchild='0'}"); + next(); + run("C","{iname='local.str',name='str',type='std::string'," + "valueencoded='6',value='48616c6c6f',numchild='0'}"); +} + + +///////////////////////////// std::wstring ////////////////////////////////// + +void dump_std_wstring() +{ + /* A */ std::wstring str; + /* B */ str = L"Hallo"; + /* C */ (void) 0; +} + +void tst_Gdb::dump_std_wstring() +{ + prepare("dump_std_wstring"); + if (checkUninitialized) + run("A","{iname='local.str',name='str'," + "numchild='0'}"); + next(); + run("B","{iname='local.str',name='str',type='std::string',valueencoded='6'," + "value='',numchild='0'}"); + next(); + if (sizeof(wchar_t) == 2) + run("C","{iname='local.str',name='str',type='std::string',valueencoded='6'," + "value='00480061006c006c006f',numchild='0'}"); + else + run("C","{iname='local.str',name='str',type='std::string',valueencoded='6'," + "value='00000048000000610000006c0000006c0000006f',numchild='0'}"); +} + + ///////////////////////////// std::vector<int> ////////////////////////////// void dump_std_vector() @@ -2291,19 +2346,19 @@ void tst_Gdb::dump_std_vector() prepare("dump_std_vector"); if (checkUninitialized) - run("A","{iname='local.vector',addr='-',name='vector'," + run("A","{iname='local.vector',name='vector'," "numchild='0'}"); next(2); - run("B","{iname='local.vector',addr='-',name='vector',type='"VECTOR"'," + run("B","{iname='local.vector',name='vector',type='"VECTOR"'," "value='<0 items>',numchild='0'}," - "{iname='local.list',addr='-',name='list',type='"LIST"'," + "{iname='local.list',name='list',type='"LIST"'," "value='<0 items>',numchild='0'}"); next(3); - run("E","{iname='local.vector',addr='-',name='vector',type='"VECTOR"'," + run("E","{iname='local.vector',name='vector',type='"VECTOR"'," "value='<2 items>',numchild='2',childtype='"LIST" *'," "childnumchild='1',children=[{type='"LIST"',value='<2 items>'," "numchild='2'},{value='<null>',numchild='0'}]}," - "{iname='local.list',addr='-',name='list',type='"LIST"'," + "{iname='local.list',name='list',type='"LIST"'," "value='<0 items>',numchild='0'}", "local.vector,local.vector.0"); } @@ -2354,13 +2409,13 @@ void tst_Gdb::dump_QHash_int_int() prepare("dump_QHash_int_int"); if (checkUninitialized) - run("A","{iname='local.h',addr='-',name='h'," + run("A","{iname='local.h',name='h'," "type='"NS"QHash<int, int>',value='<not in scope>'," "numchild='0'}"); next(); next(); next(); - run("D","{iname='local.h',addr='-',name='h'," + run("D","{iname='local.h',name='h'," "type='"NS"QHash<int, int>',value='<2 items>',numchild='2'," "childtype='int',childnumchild='0',children=[" "{name='43',value='44'}," @@ -2382,30 +2437,30 @@ void tst_Gdb::dump_QHash_QString_QString() { prepare("dump_QHash_QString_QString"); if (checkUninitialized) - run("A","{iname='local.h',addr='-',name='h'," + run("A","{iname='local.h',name='h'," "type='"NS"QHash<"NS"QString, "NS"QString>',value='<not in scope>'," "numchild='0'}"); next(); - //run("B","{iname='local.h',addr='-',name='h'," - // "type='"NS"QHash<"NS"QString, "NS"QString>',value='<0 items>'," - // "numchild='0'}"); + run("B","{iname='local.h',name='h'," + "type='"NS"QHash<"NS"QString, "NS"QString>',value='<0 items>'," + "numchild='0'}"); next(); next(); - //run("D","{iname='local.h',addr='-',name='h'," - // "type='"NS"QHash<"NS"QString, "NS"QString>',value='<2 items>'," - // "numchild='2'}"); - run("D","{iname='local.h',addr='-',name='h'," + run("D","{iname='local.h',name='h'," + "type='"NS"QHash<"NS"QString, "NS"QString>',value='<2 items>'," + "numchild='2'}"); + run("D","{iname='local.h',name='h'," "type='"NS"QHash<"NS"QString, "NS"QString>',value='<2 items>'," "numchild='2',childtype='"NS"QHashNode<"NS"QString, "NS"QString>'," "children=[" - "{value=' ',numchild='2',children=[{name='key',valueencoded='7'," - "value='66006f006f00',numchild='0'}," - "{name='value',valueencoded='7'," - "value='620061007200',numchild='0'}]}," - "{value=' ',numchild='2',children=[{name='key',valueencoded='7'," - "value='680065006c006c006f00',numchild='0'}," - "{name='value',valueencoded='7'," - "value='77006f0072006c006400',numchild='0'}]}" + "{value=' ',numchild='2',children=[{name='key',type='"NS"QString'," + "valueencoded='7',value='66006f006f00',numchild='0'}," + "{name='value',type='"NS"QString'," + "valueencoded='7',value='620061007200',numchild='0'}]}," + "{value=' ',numchild='2',children=[{name='key',type='"NS"QString'," + "valueencoded='7',value='680065006c006c006f00',numchild='0'}," + "{name='value',type='"NS"QString',valueencoded='7'," + "value='77006f0072006c006400',numchild='0'}]}" "]}", "local.h,local.h.0,local.h.1"); } @@ -2425,22 +2480,22 @@ void tst_Gdb::dump_QList_int() { prepare("dump_QList_int"); if (checkUninitialized) - run("A","{iname='local.list',addr='-',name='list'," + run("A","{iname='local.list',name='list'," "type='"NS"QList<int>',value='<not in scope>',numchild='0'}"); next(); - run("B","{iname='local.list',addr='-',name='list'," + run("B","{iname='local.list',name='list'," "type='"NS"QList<int>',value='<0 items>',numchild='0'}"); next(); - run("C","{iname='local.list',addr='-',name='list'," + run("C","{iname='local.list',name='list'," "type='"NS"QList<int>',value='<1 items>',numchild='1'}"); - run("C","{iname='local.list',addr='-',name='list'," + run("C","{iname='local.list',name='list'," "type='"NS"QList<int>',value='<1 items>',numchild='1'," "childtype='int',childnumchild='0',children=[" "{value='1'}]}", "local.list"); next(); - run("D","{iname='local.list',addr='-',name='list'," + run("D","{iname='local.list',name='list'," "type='"NS"QList<int>',value='<2 items>',numchild='2'}"); - run("D","{iname='local.list',addr='-',name='list'," + run("D","{iname='local.list',name='list'," "type='"NS"QList<int>',value='<2 items>',numchild='2'," "childtype='int',childnumchild='0',children=[" "{value='1'},{value='2'}]}", "local.list"); @@ -2462,13 +2517,13 @@ void tst_Gdb::dump_QList_int_star() { prepare("dump_QList_int_star"); if (checkUninitialized) - run("A","{iname='local.list',addr='-',name='list'," + run("A","{iname='local.list',name='list'," "type='"NS"QList<int*>',value='<not in scope>',numchild='0'}"); next(); next(); next(); next(); - run("E","{iname='local.list',addr='-',name='list'," + run("E","{iname='local.list',name='list'," "type='"NS"QList<int*>',value='<3 items>',numchild='3'," "childtype='int',childnumchild='0',children=[" "{value='1'},{value='<null>',type='int *'},{value='2'}]}", "local.list"); @@ -2488,15 +2543,15 @@ void tst_Gdb::dump_QList_char() { prepare("dump_QList_char"); if (checkUninitialized) - run("A","{iname='local.list',addr='-',name='list'," + run("A","{iname='local.list',name='list'," "type='"NS"QList<char>',value='<not in scope>',numchild='0'}"); next(); - run("B","{iname='local.list',addr='-',name='list'," + run("B","{iname='local.list',name='list'," "type='"NS"QList<char>',value='<0 items>',numchild='0'}"); next(); - run("C","{iname='local.list',addr='-',name='list'," + run("C","{iname='local.list',name='list'," "type='"NS"QList<char>',value='<1 items>',numchild='1'}"); - run("C","{iname='local.list',addr='-',name='list'," + run("C","{iname='local.list',name='list'," "type='"NS"QList<char>',value='<1 items>',numchild='1'," "childtype='char',childnumchild='0',children=[" "{value='97 'a''}]}", "local.list"); @@ -2518,21 +2573,21 @@ void tst_Gdb::dump_QList_char_star() { prepare("dump_QList_char_star"); if (checkUninitialized) - run("A","{iname='local.list',addr='-',name='list'," + run("A","{iname='local.list',name='list'," "type='"NS"QList<char const*>',value='<not in scope>',numchild='0'}"); next(); - run("B","{iname='local.list',addr='-',name='list'," + run("B","{iname='local.list',name='list'," "type='"NS"QList<char const*>',value='<0 items>',numchild='0'}"); next(); - run("C","{iname='local.list',addr='-',name='list'," + run("C","{iname='local.list',name='list'," "type='"NS"QList<char const*>',value='<1 items>',numchild='1'}"); - run("C","{iname='local.list',addr='-',name='list'," + run("C","{iname='local.list',name='list'," "type='"NS"QList<char const*>',value='<1 items>',numchild='1'," "childtype='const char *',childnumchild='1',children=[" "{valueencoded='6',value='61',numchild='0'}]}", "local.list"); next(); next(); - run("E","{iname='local.list',addr='-',name='list'," + run("E","{iname='local.list',name='list'," "type='"NS"QList<char const*>',value='<3 items>',numchild='3'," "childtype='const char *',childnumchild='1',children=[" "{valueencoded='6',value='61',numchild='0'}," @@ -2554,15 +2609,15 @@ void tst_Gdb::dump_QList_QString() { prepare("dump_QList_QString"); if (0 && checkUninitialized) - run("A","{iname='local.list',addr='-',name='list'," + run("A","{iname='local.list',name='list'," "type='"NS"QList<"NS"QString>',value='<not in scope>',numchild='0'}"); next(); - run("B","{iname='local.list',addr='-',name='list'," + run("B","{iname='local.list',name='list'," "type='"NS"QList<"NS"QString>',value='<0 items>',numchild='0'}"); next(); - run("C","{iname='local.list',addr='-',name='list'," + run("C","{iname='local.list',name='list'," "type='"NS"QList<"NS"QString>',value='<1 items>',numchild='1'}"); - run("C","{iname='local.list',addr='-',name='list'," + run("C","{iname='local.list',name='list'," "type='"NS"QList<"NS"QString>',value='<1 items>',numchild='1'," "childtype='"NS"QString',childnumchild='0',children=[" "{valueencoded='7',value='480061006c006c006f00'}]}", "local.list"); @@ -2582,19 +2637,19 @@ void tst_Gdb::dump_QList_QString3() { prepare("dump_QList_QString3"); if (checkUninitialized) - run("A","{iname='local.list',addr='-',name='list'," + run("A","{iname='local.list',name='list'," "type='"NS"QList<QString3>',value='<not in scope>',numchild='0'}"); next(); - run("B","{iname='local.list',addr='-',name='list'," + run("B","{iname='local.list',name='list'," "type='"NS"QList<QString3>',value='<0 items>',numchild='0'}"); next(); - run("C","{iname='local.list',addr='-',name='list'," + run("C","{iname='local.list',name='list'," "type='"NS"QList<QString3>',value='<1 items>',numchild='1'}"); - run("C","{iname='local.list',addr='-',name='list'," + run("C","{iname='local.list',name='list'," "type='"NS"QList<QString3>',value='<1 items>',numchild='1'," "childtype='QString3',children=[" "{value='{...}',numchild='3'}]}", "local.list"); - run("C","{iname='local.list',addr='-',name='list'," + run("C","{iname='local.list',name='list'," "type='"NS"QList<QString3>',value='<1 items>',numchild='1'," "childtype='QString3',children=[{value='{...}',numchild='3',children=[" "{iname='local.list.0.s1',name='s1',type='"NS"QString'," @@ -2620,19 +2675,19 @@ void tst_Gdb::dump_QList_Int3() { prepare("dump_QList_Int3"); if (checkUninitialized) - run("A","{iname='local.list',addr='-',name='list'," + run("A","{iname='local.list',name='list'," "type='"NS"QList<Int3>',value='<not in scope>',numchild='0'}"); next(); - run("B","{iname='local.list',addr='-',name='list'," + run("B","{iname='local.list',name='list'," "type='"NS"QList<Int3>',value='<0 items>',numchild='0'}"); next(); - run("C","{iname='local.list',addr='-',name='list'," + run("C","{iname='local.list',name='list'," "type='"NS"QList<Int3>',value='<1 items>',numchild='1'}"); - run("C","{iname='local.list',addr='-',name='list'," + run("C","{iname='local.list',name='list'," "type='"NS"QList<Int3>',value='<1 items>',numchild='1'," "childtype='Int3',children=[{value='{...}',numchild='3'}]}", "local.list"); - run("C","{iname='local.list',addr='-',name='list'," + run("C","{iname='local.list',name='list'," "type='"NS"QList<Int3>',value='<1 items>',numchild='1'," "childtype='Int3',children=[{value='{...}',numchild='3',children=[" "{iname='local.list.0.i1',name='i1',type='int',value='42',numchild='0'}," @@ -2642,6 +2697,49 @@ void tst_Gdb::dump_QList_Int3() } +///////////////////////////// QMap<QString, QString> ////////////////////////////// + +void dump_QMap_QString_QString() +{ + /* A */ QMap<QString, QString> h; + /* B */ h["hello"] = "world"; + /* C */ h["foo"] = "bar"; + /* D */ (void) 0; +} + +void tst_Gdb::dump_QMap_QString_QString() +{ + prepare("dump_QMap_QString_QString"); + if (checkUninitialized) + run("A","{iname='local.h',name='h'," + "type='"NS"QMap<"NS"QString, "NS"QString>',value='<not in scope>'," + "numchild='0'}"); + next(); + run("B","{iname='local.h',name='h'," + "type='"NS"QMap<"NS"QString, "NS"QString>',value='<0 items>'," + "numchild='0'}"); + next(); + next(); + run("D","{iname='local.h',name='h'," + "type='"NS"QMap<"NS"QString, "NS"QString>',value='<2 items>'," + "numchild='2'}"); + run("D","{iname='local.h',name='h'," + "type='"NS"QMap<"NS"QString, "NS"QString>',value='<2 items>'," + "numchild='2',childtype='"NS"QMapNode<"NS"QString, "NS"QString>'," + "children=[" + "{value=' ',numchild='2',children=[{name='key',type='"NS"QString'," + "valueencoded='7',value='66006f006f00',numchild='0'}," + "{name='value',type='"NS"QString'," + "valueencoded='7',value='620061007200',numchild='0'}]}," + "{value=' ',numchild='2',children=[{name='key',type='"NS"QString'," + "valueencoded='7',value='680065006c006c006f00',numchild='0'}," + "{name='value',type='"NS"QString',valueencoded='7'," + "value='77006f0072006c006400',numchild='0'}]}" + "]}", + "local.h,local.h.0,local.h.1"); +} + + ///////////////////////////// QPoint ///////////////////////////////// void dump_QPoint() @@ -2655,10 +2753,10 @@ void tst_Gdb::dump_QPoint() prepare("dump_QPoint"); next(); next(); - run("C","{iname='local.p',addr='-',name='p',type='"NS"QPoint'," + run("C","{iname='local.p',name='p',type='"NS"QPoint'," "value='(43, 44)',numchild='2',childtype='int',childnumchild='0'," "children=[{name='x',value='43'},{name='y',value='44'}]}," - "{iname='local.f',addr='-',name='f',type='"NS"QPointF'," + "{iname='local.f',name='f',type='"NS"QPointF'," "value='(45, 46)',numchild='2',childtype='double',childnumchild='0'," "children=[{name='x',value='45'},{name='y',value='46'}]}", "local.p,local.f"); @@ -2679,11 +2777,11 @@ void tst_Gdb::dump_QRect() next(); next(); - run("C","{iname='local.p',addr='-',name='p',type='"NS"QRect'," + run("C","{iname='local.p',name='p',type='"NS"QRect'," "value='100x200+43+44',numchild='4',childtype='int',childnumchild='0'," "children=[{name='x1',value='43'},{name='y1',value='44'}," "{name='x2',value='142'},{name='y2',value='243'}]}," - "{iname='local.f',addr='-',name='f',type='"NS"QRectF'," + "{iname='local.f',name='f',type='"NS"QRectF'," "value='100x200+45+46',numchild='4',childtype='double',childnumchild='0'," "children=[{name='x',value='45'},{name='y',value='46'}," "{name='w',value='100'},{name='h',value='200'}]}", @@ -2724,65 +2822,65 @@ void tst_Gdb::dump_QSharedPointer() #if QT_VERSION >= 0x040500 prepare("dump_QSharedPointer"); if (checkUninitialized) - run("A","{iname='local.simplePtr',addr='-',name='simplePtr'," + run("A","{iname='local.simplePtr',name='simplePtr'," "'type='"NS"QSharedPointer<int>',value='<not in scope>',numchild='0'}," - "{iname='local.simplePtr2',addr='-',name='simplePtr2'," + "{iname='local.simplePtr2',name='simplePtr2'," "'type='"NS"QSharedPointer<int>',value='<not in scope>',numchild='0'}," - "{iname='local.simplePtr3',addr='-',name='simplePtr3'," + "{iname='local.simplePtr3',name='simplePtr3'," "'type='"NS"QSharedPointer<int>',value='<not in scope>',numchild='0'}," - "{iname='local.simplePtr4',addr='-',name='simplePtr3'," + "{iname='local.simplePtr4',name='simplePtr3'," "'type='"NS"QWeakPointer<int>',value='<not in scope>',numchild='0'}," - "{iname='local.compositePtr',addr='-',name='compositePtr'," + "{iname='local.compositePtr',name='compositePtr'," "'type='"NS"QSharedPointer<int>',value='<not in scope>',numchild='0'}," - "{iname='local.compositePtr2',addr='-',name='compositePtr2'," + "{iname='local.compositePtr2',name='compositePtr2'," "'type='"NS"QSharedPointer<int>'value='<not in scope>',numchild='0'}," - "{iname='local.compositePtr3',addr='-',name='compositePtr3'," + "{iname='local.compositePtr3',name='compositePtr3'," "'type='"NS"QSharedPointer<int>',value='<not in scope>',numchild='0'}," - "{iname='local.compositePtr4',addr='-',name='compositePtr4'," + "{iname='local.compositePtr4',name='compositePtr4'," "'type='"NS"QWeakPointer<int>',value='<not in scope>',numchild='0'}"); next(8); - run("C","{iname='local.simplePtr',addr='-',name='simplePtr'," + run("C","{iname='local.simplePtr',name='simplePtr'," "type='"NS"QSharedPointer<int>',value='<null>',numchild='0'}," - "{iname='local.simplePtr2',addr='-',name='simplePtr2'," + "{iname='local.simplePtr2',name='simplePtr2'," "type='"NS"QSharedPointer<int>',value='',numchild='3'}," - "{iname='local.simplePtr3',addr='-',name='simplePtr3'," + "{iname='local.simplePtr3',name='simplePtr3'," "type='"NS"QSharedPointer<int>',value='',numchild='3'}," - "{iname='local.simplePtr4',addr='-',name='simplePtr4'," + "{iname='local.simplePtr4',name='simplePtr4'," "type='"NS"QWeakPointer<int>',value='',numchild='3'}," - "{iname='local.compositePtr',addr='-',name='compositePtr'," + "{iname='local.compositePtr',name='compositePtr'," "type='"NS"QSharedPointer<"NS"QString>',value='<null>',numchild='0'}," - "{iname='local.compositePtr2',addr='-',name='compositePtr2'," + "{iname='local.compositePtr2',name='compositePtr2'," "type='"NS"QSharedPointer<"NS"QString>',value='',numchild='3'}," - "{iname='local.compositePtr3',addr='-',name='compositePtr3'," + "{iname='local.compositePtr3',name='compositePtr3'," "type='"NS"QSharedPointer<"NS"QString>',value='',numchild='3'}," - "{iname='local.compositePtr4',addr='-',name='compositePtr4'," + "{iname='local.compositePtr4',name='compositePtr4'," "type='"NS"QWeakPointer<"NS"QString>',value='',numchild='3'}"); - run("C","{iname='local.simplePtr',addr='-',name='simplePtr'," + run("C","{iname='local.simplePtr',name='simplePtr'," "type='"NS"QSharedPointer<int>',value='<null>',numchild='0'}," - "{iname='local.simplePtr2',addr='-',name='simplePtr2'," + "{iname='local.simplePtr2',name='simplePtr2'," "type='"NS"QSharedPointer<int>',value='',numchild='3',children=[" "{name='data',type='int',value='99',numchild='0'}," "{name='weakref',value='3',type='int',numchild='0'}," "{name='strongref',value='2',type='int',numchild='0'}]}," - "{iname='local.simplePtr3',addr='-',name='simplePtr3'," + "{iname='local.simplePtr3',name='simplePtr3'," "type='"NS"QSharedPointer<int>',value='',numchild='3',children=[" "{name='data',type='int',value='99',numchild='0'}," "{name='weakref',value='3',type='int',numchild='0'}," "{name='strongref',value='2',type='int',numchild='0'}]}," - "{iname='local.simplePtr4',addr='-',name='simplePtr4'," + "{iname='local.simplePtr4',name='simplePtr4'," "type='"NS"QWeakPointer<int>',value='',numchild='3',children=[" "{name='data',type='int',value='99',numchild='0'}," "{name='weakref',value='3',type='int',numchild='0'}," "{name='strongref',value='2',type='int',numchild='0'}]}," - "{iname='local.compositePtr',addr='-',name='compositePtr'," + "{iname='local.compositePtr',name='compositePtr'," "type='"NS"QSharedPointer<"NS"QString>',value='<null>',numchild='0'}," - "{iname='local.compositePtr2',addr='-',name='compositePtr2'," + "{iname='local.compositePtr2',name='compositePtr2'," "type='"NS"QSharedPointer<"NS"QString>',value='',numchild='3'}," - "{iname='local.compositePtr3',addr='-',name='compositePtr3'," + "{iname='local.compositePtr3',name='compositePtr3'," "type='"NS"QSharedPointer<"NS"QString>',value='',numchild='3'}," - "{iname='local.compositePtr4',addr='-',name='compositePtr4'," + "{iname='local.compositePtr4',name='compositePtr4'," "type='"NS"QWeakPointer<"NS"QString>',value='',numchild='3'}", "local.simplePtr,local.simplePtr2,local.simplePtr3,local.simplePtr4," "local.compositePtr,local.compositePtr,local.compositePtr," @@ -2804,10 +2902,10 @@ void tst_Gdb::dump_QSize() { prepare("dump_QSize"); next(2); - run("C","{iname='local.p',addr='-',name='p',type='"NS"QSize'," + run("C","{iname='local.p',name='p',type='"NS"QSize'," "value='(43, 44)',numchild='2',childtype='int',childnumchild='0'," "children=[{name='w',value='43'},{name='h',value='44'}]}," - "{iname='local.f',addr='-',name='f',type='"NS"QSizeF'," + "{iname='local.f',name='f',type='"NS"QSizeF'," "value='(45, 46)',numchild='2',childtype='double',childnumchild='0'," "children=[{name='w',value='45'},{name='h',value='46'}]}", "local.p,local.f"); @@ -2828,24 +2926,24 @@ void tst_Gdb::dump_QStack() { prepare("dump_QStack"); if (checkUninitialized) - run("A","{iname='local.v',addr='-',name='v',type='"NS"QStack<int>'," + run("A","{iname='local.v',name='v',type='"NS"QStack<int>'," "value='<not in scope>',numchild='0'}"); next(); - run("B","{iname='local.v',addr='-',name='v',type='"NS"QStack<int>'," + run("B","{iname='local.v',name='v',type='"NS"QStack<int>'," "value='<0 items>',numchild='0'}"); - run("B","{iname='local.v',addr='-',name='v',type='"NS"QStack<int>'," + run("B","{iname='local.v',name='v',type='"NS"QStack<int>'," "value='<0 items>',numchild='0',children=[]}", "local.v"); next(); - run("C","{iname='local.v',addr='-',name='v',type='"NS"QStack<int>'," + run("C","{iname='local.v',name='v',type='"NS"QStack<int>'," "value='<1 items>',numchild='1'}"); - run("C","{iname='local.v',addr='-',name='v',type='"NS"QStack<int>'," + run("C","{iname='local.v',name='v',type='"NS"QStack<int>'," "value='<1 items>',numchild='1',childtype='int'," "childnumchild='0',children=[{value='3'}]}", // rounding... "local.v"); next(); - run("D","{iname='local.v',addr='-',name='v',type='"NS"QStack<int>'," + run("D","{iname='local.v',name='v',type='"NS"QStack<int>'," "value='<2 items>',numchild='2'}"); - run("D","{iname='local.v',addr='-',name='v',type='"NS"QStack<int>'," + run("D","{iname='local.v',name='v',type='"NS"QStack<int>'," "value='<2 items>',numchild='2',childtype='int'," "childnumchild='0',children=[{value='3'},{value='2'}]}", "local.v"); @@ -2866,19 +2964,19 @@ void tst_Gdb::dump_QString() { prepare("dump_QString"); if (checkUninitialized) - run("A","{iname='local.s',addr='-',name='s',type='"NS"QString'," + run("A","{iname='local.s',name='s',type='"NS"QString'," "value='<not in scope>',numchild='0'}"); next(); - run("B","{iname='local.s',addr='-',name='s',type='"NS"QString'," + run("B","{iname='local.s',name='s',type='"NS"QString'," "valueencoded='7',value='',numchild='0'}", "local.s"); // Plain C style dumping: - run("B","{iname='local.s',addr='-',name='s',type='"NS"QString'," + run("B","{iname='local.s',name='s',type='"NS"QString'," "value='{...}',numchild='5'}", "", 0); - run("B","{iname='local.s',addr='-',name='s',type='"NS"QString'," + run("B","{iname='local.s',name='s',type='"NS"QString'," "value='{...}',numchild='5',children=[" "{iname='local.s.d',name='d',type='"NS"QString::Data *'," "value='-',numchild='1'}]}", "local.s", 0); - run("B","{iname='local.s',addr='-',name='s',type='"NS"QString'," + run("B","{iname='local.s',name='s',type='"NS"QString'," "value='{...}',numchild='5'," "children=[{iname='local.s.d',name='d'," "type='"NS"QString::Data *',value='-',numchild='1'," @@ -2886,10 +2984,10 @@ void tst_Gdb::dump_QString() "type='"NS"QString::Data',value='{...}',numchild='11'}]}]}", "local.s,local.s.d", 0); next(); - run("C","{iname='local.s',addr='-',name='s',type='"NS"QString'," + run("C","{iname='local.s',name='s',type='"NS"QString'," "valueencoded='7',value='680061006c006c006f00',numchild='0'}"); next(); - run("D","{iname='local.s',addr='-',name='s',type='"NS"QString'," + run("D","{iname='local.s',name='s',type='"NS"QString'," "valueencoded='7',value='680061006c006c006f007800',numchild='0'}"); } @@ -2908,25 +3006,25 @@ void tst_Gdb::dump_QStringList() { prepare("dump_QStringList"); if (checkUninitialized) - run("A","{iname='local.s',addr='-',name='s',type='"NS"QStringList'," + run("A","{iname='local.s',name='s',type='"NS"QStringList'," "value='<not in scope>',numchild='0'}"); next(); - run("B","{iname='local.s',addr='-',name='s',type='"NS"QStringList'," + run("B","{iname='local.s',name='s',type='"NS"QStringList'," "value='<0 items>',numchild='0'}"); - run("B","{iname='local.s',addr='-',name='s',type='"NS"QStringList'," + run("B","{iname='local.s',name='s',type='"NS"QStringList'," "value='<0 items>',numchild='0',children=[]}", "local.s"); next(); - run("C","{iname='local.s',addr='-',name='s',type='"NS"QStringList'," + run("C","{iname='local.s',name='s',type='"NS"QStringList'," "value='<1 items>',numchild='1'}"); - run("C","{iname='local.s',addr='-',name='s',type='"NS"QStringList'," + run("C","{iname='local.s',name='s',type='"NS"QStringList'," "value='<1 items>',numchild='1',childtype='"NS"QString'," "childnumchild='0',children=[{valueencoded='7'," "value='680065006c006c006f00'}]}", "local.s"); next(); - run("D","{iname='local.s',addr='-',name='s',type='"NS"QStringList'," + run("D","{iname='local.s',name='s',type='"NS"QStringList'," "value='<2 items>',numchild='2'}"); - run("D","{iname='local.s',addr='-',name='s',type='"NS"QStringList'," + run("D","{iname='local.s',name='s',type='"NS"QStringList'," "value='<2 items>',numchild='2',childtype='"NS"QString'," "childnumchild='0',children=[" "{valueencoded='7',value='680065006c006c006f00'}," @@ -2949,24 +3047,24 @@ void tst_Gdb::dump_QVector() { prepare("dump_QVector"); if (checkUninitialized) - run("A","{iname='local.v',addr='-',name='v',type='"NS"QVector<double>'," + run("A","{iname='local.v',name='v',type='"NS"QVector<double>'," "value='<not in scope>',numchild='0'}"); next(); - run("B","{iname='local.v',addr='-',name='v',type='"NS"QVector<double>'," + run("B","{iname='local.v',name='v',type='"NS"QVector<double>'," "value='<0 items>',numchild='0'}"); - run("B","{iname='local.v',addr='-',name='v',type='"NS"QVector<double>'," + run("B","{iname='local.v',name='v',type='"NS"QVector<double>'," "value='<0 items>',numchild='0',children=[]}", "local.v"); next(); - run("C","{iname='local.v',addr='-',name='v',type='"NS"QVector<double>'," + run("C","{iname='local.v',name='v',type='"NS"QVector<double>'," "value='<1 items>',numchild='1'}"); - run("C","{iname='local.v',addr='-',name='v',type='"NS"QVector<double>'," + run("C","{iname='local.v',name='v',type='"NS"QVector<double>'," "value='<1 items>',numchild='1',childtype='double'," "childnumchild='0',children=[{value='-'}]}", // rounding... "local.v"); next(); - run("D","{iname='local.v',addr='-',name='v',type='"NS"QVector<double>'," + run("D","{iname='local.v',name='v',type='"NS"QVector<double>'," "value='<2 items>',numchild='2'}"); - run("D","{iname='local.v',addr='-',name='v',type='"NS"QVector<double>'," + run("D","{iname='local.v',name='v',type='"NS"QVector<double>'," "value='<2 items>',numchild='2',childtype='double'," "childnumchild='0',children=[{value='-'},{value='-'}]}", "local.v"); @@ -3034,7 +3132,7 @@ void dump_QVariant() void tst_Gdb::dump_QVariant() { - #define PRE "iname='local.v',addr='-',name='v',type='"NS"QVariant'," + #define PRE "iname='local.v',name='v',type='"NS"QVariant'," prepare("dump_QVariant"); if (checkUninitialized) /*<not in scope>*/ run("A","{"PRE"'value=<not in scope>',numchild='0'}"); @@ -3220,13 +3318,13 @@ void tst_Gdb::dump_QWeakPointer_11() // Case 1.1: Null pointer. prepare("dump_QWeakPointer_11"); if (checkUninitialized) - run("A","{iname='local.sp',addr='-',name='sp'," + run("A","{iname='local.sp',name='sp'," "type='"NS"QSharedPointer<int>',value='<not in scope>',numchild='0'}"); next(); next(); - run("B","{iname='local.sp',addr='-',name='sp'," + run("B","{iname='local.sp',name='sp'," "type='"NS"QSharedPointer<int>',value='<null>',numchild='0'}," - "{iname='local.wp',addr='-',name='wp'," + "{iname='local.wp',name='wp'," "type='"NS"QWeakPointer<int>',value='<null>',numchild='0'}"); } @@ -3244,20 +3342,20 @@ void tst_Gdb::dump_QWeakPointer_12() // Case 1.2: Weak pointer is unique. prepare("dump_QWeakPointer_12"); if (checkUninitialized) - run("A","{iname='local.sp',addr='-',name='sp'," + run("A","{iname='local.sp',name='sp'," "type='"NS"QSharedPointer<int>',value='<not in scope>',numchild='0'}"); next(); next(); - run("B","{iname='local.sp',addr='-',name='sp'," + run("B","{iname='local.sp',name='sp'," "type='"NS"QSharedPointer<int>',value='',numchild='3'}," - "{iname='local.wp',addr='-',name='wp'," + "{iname='local.wp',name='wp'," "type='"NS"QWeakPointer<int>',value='',numchild='3'}"); - run("B","{iname='local.sp',addr='-',name='sp'," + run("B","{iname='local.sp',name='sp'," "type='"NS"QSharedPointer<int>',value='',numchild='3',children=[" "{name='data',type='int',value='99',numchild='0'}," "{name='weakref',value='2',type='int',numchild='0'}," "{name='strongref',value='2',type='int',numchild='0'}]}," - "{iname='local.wp',addr='-',name='wp'," + "{iname='local.wp',name='wp'," "type='"NS"QWeakPointer<int>',value='',numchild='3',children=[" "{name='data',type='int',value='99',numchild='0'}," "{name='weakref',value='2',type='int',numchild='0'}," @@ -3280,28 +3378,28 @@ void tst_Gdb::dump_QWeakPointer_13() // Case 1.3: There are other weak pointers. prepare("dump_QWeakPointer_13"); if (checkUninitialized) - run("A","{iname='local.sp',addr='-',name='sp'," + run("A","{iname='local.sp',name='sp'," "type='"NS"QSharedPointer<int>',value='<not in scope>',numchild='0'}"); next(); next(); next(); - run("B","{iname='local.sp',addr='-',name='sp'," + run("B","{iname='local.sp',name='sp'," "type='"NS"QSharedPointer<int>',value='',numchild='3'}," - "{iname='local.wp',addr='-',name='wp'," + "{iname='local.wp',name='wp'," "type='"NS"QWeakPointer<int>',value='',numchild='3'}," - "{iname='local.wp2',addr='-',name='wp2'," + "{iname='local.wp2',name='wp2'," "type='"NS"QWeakPointer<int>',value='',numchild='3'}"); - run("B","{iname='local.sp',addr='-',name='sp'," + run("B","{iname='local.sp',name='sp'," "type='"NS"QSharedPointer<int>',value='',numchild='3',children=[" "{name='data',type='int',value='99',numchild='0'}," "{name='weakref',value='3',type='int',numchild='0'}," "{name='strongref',value='3',type='int',numchild='0'}]}," - "{iname='local.wp',addr='-',name='wp'," + "{iname='local.wp',name='wp'," "type='"NS"QWeakPointer<int>',value='',numchild='3',children=[" "{name='data',type='int',value='99',numchild='0'}," "{name='weakref',value='3',type='int',numchild='0'}," "{name='strongref',value='3',type='int',numchild='0'}]}," - "{iname='local.wp2',addr='-',name='wp2'," + "{iname='local.wp2',name='wp2'," "type='"NS"QWeakPointer<int>',value='',numchild='3'}", "local.sp,local.wp"); } @@ -3320,17 +3418,17 @@ void tst_Gdb::dump_QWeakPointer_2() // Case 2: Composite type. prepare("dump_QWeakPointer_2"); if (checkUninitialized) - run("A","{iname='local.sp',addr='-',name='sp'," + run("A","{iname='local.sp',name='sp'," "type='"NS"QSharedPointer<"NS"QString>',value='<not in scope>',numchild='0'}"); next(); next(); - run("B","{iname='local.sp',addr='-',name='sp'," + run("B","{iname='local.sp',name='sp'," "type='"NS"QSharedPointer<"NS"QString>',value='',numchild='3',children=[" "{name='data',type='"NS"QString'," "valueencoded='7',value='5400650073007400',numchild='0'}," "{name='weakref',value='2',type='int',numchild='0'}," "{name='strongref',value='2',type='int',numchild='0'}]}," - "{iname='local.wp',addr='-',name='wp'," + "{iname='local.wp',name='wp'," "type='"NS"QWeakPointer<"NS"QString>',value='',numchild='3',children=[" "{name='data',type='"NS"QString'," "valueencoded='7',value='5400650073007400',numchild='0'}," @@ -3368,11 +3466,14 @@ int main(int argc, char *argv[]) dump_array_int(); dump_std_list(); dump_std_vector(); + dump_std_string(); + dump_std_wstring(); dump_Foo(); dump_misc(); dump_QByteArray(); dump_QChar(); dump_QHash_int_int(); + dump_QHash_QString_QString(); dump_QList_char(); dump_QList_char_star(); dump_QList_int(); @@ -3380,6 +3481,7 @@ int main(int argc, char *argv[]) dump_QList_Int3(); dump_QList_QString(); dump_QList_QString3(); + dump_QMap_QString_QString(); dump_QPoint(); dump_QRect(); dump_QSharedPointer(); diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp index a60566876bc8c23d9834ae986b9acbc1f3a41200..a8a4feb4547a965c700171d840ebba046eb075bb 100644 --- a/tests/manual/gdbdebugger/simple/app.cpp +++ b/tests/manual/gdbdebugger/simple/app.cpp @@ -157,6 +157,12 @@ public: void testArray() { X xxx; + (void *) 0; + double d[3][3]; + for (int i = 0; i != 3; ++i) + for (int j = 0; j != 3; ++j) + d[i][j] = i + j; + char c[20]; c[0] = 'a'; c[1] = 'b';