diff options
114 files changed, 846 insertions, 775 deletions
diff --git a/.qmake.conf b/.qmake.conf index 556f554e5e..f03d05c7ac 100644 --- a/.qmake.conf +++ b/.qmake.conf @@ -1,4 +1,4 @@ load(qt_build_config) CONFIG += warning_clean -MODULE_VERSION = 5.8.0 +MODULE_VERSION = 5.9.0 diff --git a/examples/quick/demos/photosurface/main.cpp b/examples/quick/demos/photosurface/main.cpp index 9456694032..b9d093df40 100644 --- a/examples/quick/demos/photosurface/main.cpp +++ b/examples/quick/demos/photosurface/main.cpp @@ -59,9 +59,11 @@ static QStringList imageNameFilters() { QStringList result; QMimeDatabase mimeDatabase; - foreach (const QByteArray &m, QImageReader::supportedMimeTypes()) { - foreach (const QString &suffix, mimeDatabase.mimeTypeForName(m).suffixes()) - result.append(QStringLiteral("*.") + suffix); + const auto supportedMimeTypes = QImageReader::supportedMimeTypes(); + for (const QByteArray &m : supportedMimeTypes) { + const auto suffixes = mimeDatabase.mimeTypeForName(m).suffixes(); + for (const QString &suffix : suffixes) + result.append(QLatin1String("*.") + suffix); } return result; } diff --git a/examples/quick/embeddedinwidgets/main.cpp b/examples/quick/embeddedinwidgets/main.cpp index 96b0df7e13..91147772ba 100644 --- a/examples/quick/embeddedinwidgets/main.cpp +++ b/examples/quick/embeddedinwidgets/main.cpp @@ -103,7 +103,8 @@ void MainWindow::quickViewStatusChanged(QQuickView::Status status) { if (status == QQuickView::Error) { QStringList errors; - foreach (const QQmlError &error, m_quickView->errors()) + const auto viewErrors = m_quickView->errors(); + for (const QQmlError &error : viewErrors) errors.append(error.toString()); statusBar()->showMessage(errors.join(QStringLiteral(", "))); } diff --git a/examples/quick/quickwidgets/quickwidget/main.cpp b/examples/quick/quickwidgets/quickwidget/main.cpp index 2f73447a5d..590f29ed29 100644 --- a/examples/quick/quickwidgets/quickwidget/main.cpp +++ b/examples/quick/quickwidgets/quickwidget/main.cpp @@ -130,7 +130,8 @@ void MainWindow::quickWidgetStatusChanged(QQuickWidget::Status status) { if (status == QQuickWidget::Error) { QStringList errors; - foreach (const QQmlError &error, m_quickWidget->errors()) + const auto widgetErrors = m_quickWidget->errors(); + for (const QQmlError &error : widgetErrors) errors.append(error.toString()); statusBar()->showMessage(errors.join(QStringLiteral(", "))); } diff --git a/examples/quick/rendercontrol/window_multithreaded.cpp b/examples/quick/rendercontrol/window_multithreaded.cpp index 4df3488ab3..013ee7c208 100644 --- a/examples/quick/rendercontrol/window_multithreaded.cpp +++ b/examples/quick/rendercontrol/window_multithreaded.cpp @@ -356,16 +356,16 @@ void WindowMultiThreaded::run() disconnect(m_qmlComponent, &QQmlComponent::statusChanged, this, &WindowMultiThreaded::run); if (m_qmlComponent->isError()) { - QList<QQmlError> errorList = m_qmlComponent->errors(); - foreach (const QQmlError &error, errorList) + const QList<QQmlError> errorList = m_qmlComponent->errors(); + for (const QQmlError &error : errorList) qWarning() << error.url() << error.line() << error; return; } QObject *rootObject = m_qmlComponent->create(); if (m_qmlComponent->isError()) { - QList<QQmlError> errorList = m_qmlComponent->errors(); - foreach (const QQmlError &error, errorList) + const QList<QQmlError> errorList = m_qmlComponent->errors(); + for (const QQmlError &error : errorList) qWarning() << error.url() << error.line() << error; return; } diff --git a/examples/quick/rendercontrol/window_singlethreaded.cpp b/examples/quick/rendercontrol/window_singlethreaded.cpp index 45f2635ca4..ef8f2fed43 100644 --- a/examples/quick/rendercontrol/window_singlethreaded.cpp +++ b/examples/quick/rendercontrol/window_singlethreaded.cpp @@ -209,16 +209,16 @@ void WindowSingleThreaded::run() disconnect(m_qmlComponent, &QQmlComponent::statusChanged, this, &WindowSingleThreaded::run); if (m_qmlComponent->isError()) { - QList<QQmlError> errorList = m_qmlComponent->errors(); - foreach (const QQmlError &error, errorList) + const QList<QQmlError> errorList = m_qmlComponent->errors(); + for (const QQmlError &error : errorList) qWarning() << error.url() << error.line() << error; return; } QObject *rootObject = m_qmlComponent->create(); if (m_qmlComponent->isError()) { - QList<QQmlError> errorList = m_qmlComponent->errors(); - foreach (const QQmlError &error, errorList) + const QList<QQmlError> errorList = m_qmlComponent->errors(); + for (const QQmlError &error : errorList) qWarning() << error.url() << error.line() << error; return; } diff --git a/examples/quick/scenegraph/sgengine/window.cpp b/examples/quick/scenegraph/sgengine/window.cpp index 2e4a70d2af..759bbf1fcd 100644 --- a/examples/quick/scenegraph/sgengine/window.cpp +++ b/examples/quick/scenegraph/sgengine/window.cpp @@ -187,7 +187,7 @@ void Window::update() void Window::sync() { QList<QSharedPointer<Item> > validItems; - foreach (QSharedPointer<Item> item, m_items) { + for (QSharedPointer<Item> item : qAsConst(m_items)) { if (!item->isDone()) { validItems.append(item); item->sync(); diff --git a/examples/quick/scenegraph/textureinthread/main.cpp b/examples/quick/scenegraph/textureinthread/main.cpp index 22550cd22b..61d1c5e6dc 100644 --- a/examples/quick/scenegraph/textureinthread/main.cpp +++ b/examples/quick/scenegraph/textureinthread/main.cpp @@ -82,7 +82,7 @@ int main(int argc, char **argv) // As the render threads make use of our QGuiApplication object // to clean up gracefully, wait for them to finish before // QGuiApp is taken off the heap. - foreach (QThread *t, ThreadRenderer::threads) { + for (QThread *t : qAsConst(ThreadRenderer::threads)) { t->wait(); delete t; } diff --git a/examples/quick/window/main.cpp b/examples/quick/window/main.cpp index bacf52af15..ee8855cbc8 100644 --- a/examples/quick/window/main.cpp +++ b/examples/quick/window/main.cpp @@ -49,7 +49,8 @@ int main(int argc, char* argv[]) { QGuiApplication app(argc, argv); - foreach (QScreen * screen, QGuiApplication::screens()) + const auto screens = QGuiApplication::screens(); + for (QScreen *screen : screens) screen->setOrientationUpdateMask(Qt::LandscapeOrientation | Qt::PortraitOrientation | Qt::InvertedLandscapeOrientation | Qt::InvertedPortraitOrientation); QQmlEngine engine; diff --git a/src/particles/qquickimageparticle_p.h b/src/particles/qquickimageparticle_p.h index 492ec23c07..9740b1b9f8 100644 --- a/src/particles/qquickimageparticle_p.h +++ b/src/particles/qquickimageparticle_p.h @@ -440,7 +440,7 @@ private: } template<class MaterialData> - MaterialData* getState(QSGMaterial* m){ + static MaterialData* getState(QSGMaterial* m) { return static_cast<QSGSimpleMaterial<MaterialData> *>(m)->state(); } EntryEffect m_entryEffect; diff --git a/src/particles/qquicklineextruder_p.h b/src/particles/qquicklineextruder_p.h index 72d2300dce..b98317027f 100644 --- a/src/particles/qquicklineextruder_p.h +++ b/src/particles/qquicklineextruder_p.h @@ -56,7 +56,7 @@ class QQuickLineExtruder : public QQuickParticleExtruder { Q_OBJECT //Default is topleft to bottom right. Flipped makes it topright to bottom left - Q_PROPERTY(bool mirrored READ mirrored WRITE setmirrored NOTIFY mirroredChanged) + Q_PROPERTY(bool mirrored READ mirrored WRITE setMirrored NOTIFY mirroredChanged) public: explicit QQuickLineExtruder(QObject *parent = 0); @@ -72,7 +72,7 @@ Q_SIGNALS: public Q_SLOTS: - void setmirrored(bool arg) + void setMirrored(bool arg) { if (m_mirrored != arg) { m_mirrored = arg; diff --git a/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp b/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp index f72b8a51f9..fe88d686fc 100644 --- a/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp +++ b/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp @@ -289,10 +289,12 @@ void QQmlEngineDebugServiceImpl::buildObjectDump(QDataStream &message, prop.value = expr->expression(); QObject *scope = expr->scopeObject(); if (scope) { - QString methodName = QString::fromLatin1(QMetaObjectPrivate::signal(scope->metaObject(), signalHandler->signalIndex()).name()); - if (!methodName.isEmpty()) { - prop.name = QLatin1String("on") + methodName[0].toUpper() - + methodName.mid(1); + const QByteArray methodName = QMetaObjectPrivate::signal(scope->metaObject(), + signalHandler->signalIndex()).name(); + const QLatin1String methodNameStr(methodName); + if (methodNameStr.size() != 0) { + prop.name = QLatin1String("on") + QChar(methodNameStr.at(0)).toUpper() + + methodNameStr.mid(1); } } } @@ -520,12 +522,12 @@ void QQmlEngineDebugServiceImpl::processMessage(const QByteArray &message) ds >> file >> lineNumber >> columnNumber >> recurse >> dumpProperties; - QList<QObject*> objects = objectForLocationInfo(file, lineNumber, columnNumber); + const QList<QObject*> objects = objectForLocationInfo(file, lineNumber, columnNumber); rs << QByteArray("FETCH_OBJECTS_FOR_LOCATION_R") << queryId << objects.count(); - foreach (QObject *object, objects) { + for (QObject *object : objects) { if (recurse) prepareDeferredObjects(object); buildObjectDump(rs, object, recurse, dumpProperties); diff --git a/src/plugins/qmltooling/qmldbg_debugger/qqmlnativedebugservice.cpp b/src/plugins/qmltooling/qmldbg_debugger/qqmlnativedebugservice.cpp index 5b96163b48..9c198a8afc 100644 --- a/src/plugins/qmltooling/qmldbg_debugger/qqmlnativedebugservice.cpp +++ b/src/plugins/qmltooling/qmldbg_debugger/qqmlnativedebugservice.cpp @@ -287,7 +287,7 @@ void NativeDebugger::signalEmitted(const QString &signal) //Normalize to Lower case. QString signalName = signal.left(signal.indexOf(QLatin1Char('('))).toLower(); - foreach (const QString &signal, breakOnSignals) { + for (const QString &signal : qAsConst(breakOnSignals)) { if (signal == signalName) { // TODO: pause debugger break; @@ -340,16 +340,16 @@ void NativeDebugger::handleBacktrace(QJsonObject *response, const QJsonObject &a if (heapFunctionObject) { QJsonObject frame; - frame[QStringLiteral("language")] = QStringLiteral("js"); - frame[QStringLiteral("context")] = encodeContext(executionContext); + frame.insert(QStringLiteral("language"), QStringLiteral("js")); + frame.insert(QStringLiteral("context"), encodeContext(executionContext)); if (QV4::Function *function = heapFunctionObject->function) { if (QV4::Heap::String *functionName = function->name()) - frame[QStringLiteral("function")] = functionName->toQString(); - frame[QStringLiteral("file")] = function->sourceFile(); + frame.insert(QStringLiteral("function"), functionName->toQString()); + frame.insert(QStringLiteral("file"), function->sourceFile()); } int line = executionContext->d()->lineNumber; - frame[QStringLiteral("line")] = (line < 0 ? -line : line); + frame.insert(QStringLiteral("line"), (line < 0 ? -line : line)); frameArray.push_back(frame); } @@ -475,8 +475,8 @@ void NativeDebugger::handleVariables(QJsonObject *response, const QJsonObject &a TRACE_PROTOCOL("Engine: " << engine); Collector collector(engine); - QJsonArray expanded = arguments.value(QLatin1String("expanded")).toArray(); - foreach (const QJsonValue &ex, expanded) + const QJsonArray expanded = arguments.value(QLatin1String("expanded")).toArray(); + for (const QJsonValue &ex : expanded) collector.m_expanded.append(ex.toString()); TRACE_PROTOCOL("Expanded: " << collector.m_expanded); @@ -527,16 +527,16 @@ void NativeDebugger::handleExpressions(QJsonObject *response, const QJsonObject TRACE_PROTOCOL("Engines: " << engine << m_engine); Collector collector(engine); - QJsonArray expanded = arguments.value(QLatin1String("expanded")).toArray(); - foreach (const QJsonValue &ex, expanded) + const QJsonArray expanded = arguments.value(QLatin1String("expanded")).toArray(); + for (const QJsonValue &ex : expanded) collector.m_expanded.append(ex.toString()); TRACE_PROTOCOL("Expanded: " << collector.m_expanded); QJsonArray output; QV4::Scope scope(engine); - QJsonArray expressions = arguments.value(QLatin1String("expressions")).toArray(); - foreach (const QJsonValue &expr, expressions) { + const QJsonArray expressions = arguments.value(QLatin1String("expressions")).toArray(); + for (const QJsonValue &expr : expressions) { QString expression = expr.toObject().value(QLatin1String("expression")).toString(); QString name = expr.toObject().value(QLatin1String("name")).toString(); TRACE_PROTOCOL("Evaluate expression: " << expression); @@ -548,15 +548,15 @@ void NativeDebugger::handleExpressions(QJsonObject *response, const QJsonObject m_runningJob = false; if (result->isUndefined()) { QJsonObject dict; - dict[QStringLiteral("name")] = name; - dict[QStringLiteral("valueencoded")] = QStringLiteral("undefined"); + dict.insert(QStringLiteral("name"), name); + dict.insert(QStringLiteral("valueencoded"), QStringLiteral("undefined")); output.append(dict); } else if (result.ptr && result.ptr->rawValue()) { collector.collect(&output, QString(), name, *result); } else { QJsonObject dict; - dict[QStringLiteral("name")] = name; - dict[QStringLiteral("valueencoded")] = QStringLiteral("notaccessible"); + dict.insert(QStringLiteral("name"), name); + dict.insert(QStringLiteral("valueencoded"), QStringLiteral("notaccessible")); output.append(dict); } TRACE_PROTOCOL("EXCEPTION: " << engine->hasException); @@ -748,7 +748,8 @@ void QQmlNativeDebugServiceImpl::engineAboutToBeRemoved(QJSEngine *engine) TRACE_PROTOCOL("Removing engine" << engine); if (engine) { QV4::ExecutionEngine *executionEngine = QV8Engine::getV4(engine->handle()); - foreach (NativeDebugger *debugger, m_debuggers) { + const auto debuggersCopy = m_debuggers; + for (NativeDebugger *debugger : debuggersCopy) { if (debugger->engine() == executionEngine) m_debuggers.removeAll(debugger); } @@ -759,7 +760,7 @@ void QQmlNativeDebugServiceImpl::engineAboutToBeRemoved(QJSEngine *engine) void QQmlNativeDebugServiceImpl::stateAboutToBeChanged(QQmlDebugService::State state) { if (state == Enabled) { - foreach (NativeDebugger *debugger, m_debuggers) { + for (NativeDebugger *debugger : qAsConst(m_debuggers)) { QV4::ExecutionEngine *engine = debugger->engine(); if (!engine->debugger()) engine->setDebugger(debugger); @@ -783,7 +784,7 @@ void QQmlNativeDebugServiceImpl::messageReceived(const QByteArray &message) } else if (cmd == QLatin1String("echo")) { response.insert(QStringLiteral("result"), arguments); } else { - foreach (NativeDebugger *debugger, m_debuggers) + for (NativeDebugger *debugger : qAsConst(m_debuggers)) if (debugger) debugger->handleCommand(&response, cmd, arguments); } diff --git a/src/plugins/qmltooling/qmldbg_debugger/qv4debuggeragent.cpp b/src/plugins/qmltooling/qmldbg_debugger/qv4debuggeragent.cpp index 756b6b28be..773bc937f5 100644 --- a/src/plugins/qmltooling/qmldbg_debugger/qv4debuggeragent.cpp +++ b/src/plugins/qmltooling/qmldbg_debugger/qv4debuggeragent.cpp @@ -52,7 +52,7 @@ QV4DebuggerAgent::QV4DebuggerAgent(QV4DebugServiceImpl *debugService) QV4Debugger *QV4DebuggerAgent::pausedDebugger() const { - foreach (QV4Debugger *debugger, m_debuggers) { + for (QV4Debugger *debugger : m_debuggers) { if (debugger->state() == QV4Debugger::Paused) return debugger; } @@ -147,13 +147,13 @@ void QV4DebuggerAgent::pause(QV4Debugger *debugger) const void QV4DebuggerAgent::pauseAll() const { - foreach (QV4Debugger *debugger, m_debuggers) + for (QV4Debugger *debugger : m_debuggers) pause(debugger); } void QV4DebuggerAgent::resumeAll() const { - foreach (QV4Debugger *debugger, m_debuggers) + for (QV4Debugger *debugger : m_debuggers) if (debugger->state() == QV4Debugger::Paused) debugger->resume(QV4Debugger::FullThrottle); } @@ -161,7 +161,7 @@ void QV4DebuggerAgent::resumeAll() const int QV4DebuggerAgent::addBreakPoint(const QString &fileName, int lineNumber, bool enabled, const QString &condition) { if (enabled) - foreach (QV4Debugger *debugger, m_debuggers) + for (QV4Debugger *debugger : qAsConst(m_debuggers)) debugger->addBreakPoint(fileName, lineNumber, condition); int id = m_breakPoints.size(); @@ -178,7 +178,7 @@ void QV4DebuggerAgent::removeBreakPoint(int id) m_breakPoints.remove(id); if (breakPoint.enabled) - foreach (QV4Debugger *debugger, m_debuggers) + for (QV4Debugger *debugger : qAsConst(m_debuggers)) debugger->removeBreakPoint(breakPoint.fileName, breakPoint.lineNr); } @@ -195,7 +195,7 @@ void QV4DebuggerAgent::enableBreakPoint(int id, bool onoff) return; breakPoint.enabled = onoff; - foreach (QV4Debugger *debugger, m_debuggers) { + for (QV4Debugger *debugger : qAsConst(m_debuggers)) { if (onoff) debugger->addBreakPoint(breakPoint.fileName, breakPoint.lineNr, breakPoint.condition); else @@ -218,14 +218,14 @@ void QV4DebuggerAgent::setBreakOnThrow(bool onoff) { if (onoff != m_breakOnThrow) { m_breakOnThrow = onoff; - foreach (QV4Debugger *debugger, m_debuggers) + for (QV4Debugger *debugger : qAsConst(m_debuggers)) debugger->setBreakOnThrow(onoff); } } void QV4DebuggerAgent::clearAllPauseRequests() { - foreach (QV4Debugger *debugger, m_debuggers) + for (QV4Debugger *debugger : qAsConst(m_debuggers)) debugger->clearPauseRequest(); } diff --git a/src/plugins/qmltooling/qmldbg_debugger/qv4debugjob.cpp b/src/plugins/qmltooling/qmldbg_debugger/qv4debugjob.cpp index a2d2fff72b..4e4048f6ad 100644 --- a/src/plugins/qmltooling/qmldbg_debugger/qv4debugjob.cpp +++ b/src/plugins/qmltooling/qmldbg_debugger/qv4debugjob.cpp @@ -205,7 +205,7 @@ void ValueLookupJob::run() QQmlContextData::get(engine->qmlEngine()->rootContext()), scopeObject.data())); } - foreach (const QJsonValue &handle, handles) { + for (const QJsonValue &handle : handles) { QV4DataCollector::Ref ref = handle.toInt(); if (!collector->isValidRef(ref)) { exception = QString::fromLatin1("Invalid Ref: %1").arg(ref); @@ -258,7 +258,7 @@ GatherSourcesJob::GatherSourcesJob(QV4::ExecutionEngine *engine) void GatherSourcesJob::run() { - foreach (QV4::CompiledData::CompilationUnit *unit, engine->compilationUnits) { + for (QV4::CompiledData::CompilationUnit *unit : qAsConst(engine->compilationUnits)) { QString fileName = unit->fileName(); if (!fileName.isEmpty()) sources.append(fileName); diff --git a/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.cpp b/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.cpp index 00c5c1ad77..d53afbe7c4 100644 --- a/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.cpp +++ b/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.cpp @@ -558,7 +558,7 @@ public: debugger->runInEngine(&job); QJsonArray body; - foreach (const QString &source, job.result()) { + for (const QString &source : job.result()) { QJsonObject src; src[QLatin1String("name")] = source; src[QLatin1String("scriptType")] = 4; @@ -718,7 +718,8 @@ void QV4DebugServiceImpl::stateAboutToBeChanged(State state) { QMutexLocker lock(&m_configMutex); if (state == Enabled) { - foreach (QV4Debugger *debugger, debuggerAgent.debuggers()) { + const auto debuggers = debuggerAgent.debuggers(); + for (QV4Debugger *debugger : debuggers) { QV4::ExecutionEngine *ee = debugger->engine(); if (!ee->debugger()) ee->setDebugger(debugger); @@ -737,7 +738,7 @@ void QV4DebugServiceImpl::signalEmitted(const QString &signal) //Normalize to Lower case. QString signalName = signal.left(signal.indexOf(QLatin1Char('('))).toLower(); - foreach (const QString &signal, breakOnSignals) { + for (const QString &signal : qAsConst(breakOnSignals)) { if (signal == signalName) { // TODO: pause debugger break; diff --git a/src/plugins/qmltooling/qmldbg_inspector/globalinspector.cpp b/src/plugins/qmltooling/qmldbg_inspector/globalinspector.cpp index 107d54c626..eb254ca1e0 100644 --- a/src/plugins/qmltooling/qmldbg_inspector/globalinspector.cpp +++ b/src/plugins/qmltooling/qmldbg_inspector/globalinspector.cpp @@ -92,7 +92,7 @@ void GlobalInspector::setSelectedItems(const QList<QQuickItem *> &items) QList<QObject*> objectList; objectList.reserve(items.count()); - foreach (QQuickItem *item, items) + for (QQuickItem *item : items) objectList << item; sendCurrentObjects(objectList); @@ -113,7 +113,7 @@ void GlobalInspector::sendCurrentObjects(const QList<QObject*> &objects) QList<int> debugIds; debugIds.reserve(objects.count()); - foreach (QObject *object, objects) + for (QObject *object : objects) debugIds << QQmlDebugService::idForObject(object); ds << debugIds; @@ -194,7 +194,7 @@ bool GlobalInspector::createQmlObject(int requestId, const QString &qml, QObject return false; QString imports; - foreach (const QString &s, importList) + for (const QString &s : importList) imports += s + QLatin1Char('\n'); ObjectCreator *objectCreator = new ObjectCreator(requestId, parentContext->engine(), parent); @@ -223,7 +223,7 @@ void GlobalInspector::removeWindow(QQuickWindow *window) void GlobalInspector::setParentWindow(QQuickWindow *window, QWindow *parentWindow) { - foreach (QmlJSDebugger::QQuickWindowInspector *inspector, m_windowInspectors) { + for (QmlJSDebugger::QQuickWindowInspector *inspector : qAsConst(m_windowInspectors)) { if (inspector->quickWindow() == window) inspector->setParentWindow(parentWindow); } @@ -234,7 +234,8 @@ bool GlobalInspector::syncSelectedItems(const QList<QQuickItem *> &items) bool selectionChanged = false; // Disconnect and remove items that are no longer selected - foreach (const QPointer<QQuickItem> &item, m_selectedItems) { + const auto selectedItemsCopy = m_selectedItems; + for (const QPointer<QQuickItem> &item : selectedItemsCopy) { if (!item) // Don't see how this can happen due to handling of destroyed() continue; if (items.contains(item)) @@ -247,14 +248,14 @@ bool GlobalInspector::syncSelectedItems(const QList<QQuickItem *> &items) } // Connect and add newly selected items - foreach (QQuickItem *item, items) { + for (QQuickItem *item : items) { if (m_selectedItems.contains(item)) continue; selectionChanged = true; connect(item, &QObject::destroyed, this, &GlobalInspector::removeFromSelectedItems); m_selectedItems.append(item); - foreach (QQuickWindowInspector *inspector, m_windowInspectors) { + for (QQuickWindowInspector *inspector : qAsConst(m_windowInspectors)) { if (inspector->isEnabled() && inspector->quickWindow() == item->window()) { m_highlightItems.insert(item, new SelectionHighlight(titleForItem(item), item, inspector->overlay())); @@ -314,12 +315,12 @@ void GlobalInspector::processMessage(const QByteArray &message) ds >> requestId >> command; if (command == ENABLE) { - foreach (QQuickWindowInspector *inspector, m_windowInspectors) + for (QQuickWindowInspector *inspector : qAsConst(m_windowInspectors)) inspector->setEnabled(true); success = !m_windowInspectors.isEmpty(); } else if (command == DISABLE) { setSelectedItems(QList<QQuickItem*>()); - foreach (QQuickWindowInspector *inspector, m_windowInspectors) + for (QQuickWindowInspector *inspector : qAsConst(m_windowInspectors)) inspector->setEnabled(false); success = !m_windowInspectors.isEmpty(); } else if (command == SELECT) { @@ -327,7 +328,7 @@ void GlobalInspector::processMessage(const QByteArray &message) ds >> debugIds; QList<QQuickItem *> selectedObjects; - foreach (int debugId, debugIds) { + for (int debugId : qAsConst(debugIds)) { if (QQuickItem *obj = qobject_cast<QQuickItem *>(QQmlDebugService::objectForId(debugId))) selectedObjects << obj; @@ -341,7 +342,7 @@ void GlobalInspector::processMessage(const QByteArray &message) } else if (command == SHOW_APP_ON_TOP) { bool showOnTop; ds >> showOnTop; - foreach (QmlJSDebugger::QQuickWindowInspector *inspector, m_windowInspectors) + for (QmlJSDebugger::QQuickWindowInspector *inspector : qAsConst(m_windowInspectors)) inspector->setShowAppOnTop(showOnTop); success = !m_windowInspectors.isEmpty(); } else if (command == CREATE_OBJECT) { diff --git a/src/plugins/qmltooling/qmldbg_native/qqmlnativedebugconnector.cpp b/src/plugins/qmltooling/qmldbg_native/qqmlnativedebugconnector.cpp index 3145601612..9eeb285951 100644 --- a/src/plugins/qmltooling/qmldbg_native/qqmlnativedebugconnector.cpp +++ b/src/plugins/qmltooling/qmldbg_native/qqmlnativedebugconnector.cpp @@ -205,7 +205,7 @@ QQmlNativeDebugConnector::QQmlNativeDebugConnector() QQmlNativeDebugConnector::~QQmlNativeDebugConnector() { - foreach (QQmlDebugService *service, m_services) { + for (QQmlDebugService *service : qAsConst(m_services)) { service->stateAboutToBeChanged(QQmlDebugService::NotConnected); service->setState(QQmlDebugService::NotConnected); service->stateChanged(QQmlDebugService::NotConnected); @@ -232,12 +232,12 @@ void QQmlNativeDebugConnector::addEngine(QJSEngine *engine) Q_ASSERT(!m_engines.contains(engine)); TRACE_PROTOCOL("Add engine to connector:" << engine); - foreach (QQmlDebugService *service, m_services) + for (QQmlDebugService *service : qAsConst(m_services)) service->engineAboutToBeAdded(engine); announceObjectAvailability(QLatin1String("qmlengine"), engine, true); - foreach (QQmlDebugService *service, m_services) + for (QQmlDebugService *service : qAsConst(m_services)) service->engineAdded(engine); m_engines.append(engine); @@ -248,12 +248,12 @@ void QQmlNativeDebugConnector::removeEngine(QJSEngine *engine) Q_ASSERT(m_engines.contains(engine)); TRACE_PROTOCOL("Remove engine from connector:" << engine); - foreach (QQmlDebugService *service, m_services) + for (QQmlDebugService *service : qAsConst(m_services)) service->engineAboutToBeRemoved(engine); announceObjectAvailability(QLatin1String("qmlengine"), engine, false); - foreach (QQmlDebugService *service, m_services) + for (QQmlDebugService *service : qAsConst(m_services)) service->engineRemoved(engine); m_engines.removeOne(engine); diff --git a/src/plugins/qmltooling/qmldbg_profiler/qqmlenginecontrolservice.cpp b/src/plugins/qmltooling/qmldbg_profiler/qqmlenginecontrolservice.cpp index 6b653d5a54..0ed13d5105 100644 --- a/src/plugins/qmltooling/qmldbg_profiler/qqmlenginecontrolservice.cpp +++ b/src/plugins/qmltooling/qmldbg_profiler/qqmlenginecontrolservice.cpp @@ -122,10 +122,10 @@ void QQmlEngineControlServiceImpl::stateChanged(State) { // We flush everything for any kind of state change, to avoid complicated timing issues. QMutexLocker lock(&dataMutex); - foreach (QJSEngine *engine, startingEngines) + for (QJSEngine *engine : qAsConst(startingEngines)) emit attachedToEngine(engine); startingEngines.clear(); - foreach (QJSEngine *engine, stoppingEngines) + for (QJSEngine *engine : qAsConst(stoppingEngines)) emit detachedFromEngine(engine); stoppingEngines.clear(); } diff --git a/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp b/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp index dba2fd3cc3..4a82ae004f 100644 --- a/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp +++ b/src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp @@ -92,7 +92,7 @@ void QQmlProfilerServiceImpl::dataReady(QQmlAbstractProfilerAdapter *profiler) m_startTimes.insert(0, profiler); if (dataComplete) { QList<QJSEngine *> enginesToRelease; - foreach (QJSEngine *engine, m_stoppingEngines) { + for (QJSEngine *engine : qAsConst(m_stoppingEngines)) { foreach (QQmlAbstractProfilerAdapter *engineProfiler, m_engineProfilers.values(engine)) { if (m_startTimes.values().contains(engineProfiler)) { enginesToRelease.append(engine); @@ -101,7 +101,7 @@ void QQmlProfilerServiceImpl::dataReady(QQmlAbstractProfilerAdapter *profiler) } } sendMessages(); - foreach (QJSEngine *engine, enginesToRelease) { + for (QJSEngine *engine : qAsConst(enginesToRelease)) { m_stoppingEngines.removeOne(engine); emit detachedFromEngine(engine); } @@ -183,7 +183,7 @@ void QQmlProfilerServiceImpl::addGlobalProfiler(QQmlAbstractProfilerAdapter *pro // Global profilers are started whenever any engine profiler is started and stopped when // all engine profilers are stopped. quint64 features = 0; - foreach (QQmlAbstractProfilerAdapter *engineProfiler, m_engineProfilers) + for (QQmlAbstractProfilerAdapter *engineProfiler : qAsConst(m_engineProfilers)) features |= engineProfiler->features(); if (features != 0) @@ -249,12 +249,12 @@ void QQmlProfilerServiceImpl::startProfiling(QJSEngine *engine, quint64 features startedAny = true; } } - foreach (QJSEngine *profiledEngine, engines) + for (QJSEngine *profiledEngine : qAsConst(engines)) d << idForObject(profiledEngine); } if (startedAny) { - foreach (QQmlAbstractProfilerAdapter *profiler, m_globalProfilers) { + for (QQmlAbstractProfilerAdapter *profiler : qAsConst(m_globalProfilers)) { if (!profiler->isRunning()) profiler->startProfiling(features); } @@ -294,7 +294,7 @@ void QQmlProfilerServiceImpl::stopProfiling(QJSEngine *engine) if (stopping.isEmpty()) return; - foreach (QQmlAbstractProfilerAdapter *profiler, m_globalProfilers) { + for (QQmlAbstractProfilerAdapter *profiler : qAsConst(m_globalProfilers)) { if (!profiler->isRunning()) continue; m_startTimes.insert(-1, profiler); @@ -308,10 +308,10 @@ void QQmlProfilerServiceImpl::stopProfiling(QJSEngine *engine) emit stopFlushTimer(); m_waitingForStop = true; - foreach (QQmlAbstractProfilerAdapter *profiler, reporting) + for (QQmlAbstractProfilerAdapter *profiler : qAsConst(reporting)) profiler->reportData(m_useMessageTypes); - foreach (QQmlAbstractProfilerAdapter *profiler, stopping) + for (QQmlAbstractProfilerAdapter *profiler : qAsConst(stopping)) profiler->stopProfiling(); } @@ -327,7 +327,7 @@ void QQmlProfilerServiceImpl::sendMessages() traceEnd << m_timer.nsecsElapsed() << (int)Event << (int)EndTrace; QSet<QJSEngine *> seen; - foreach (QQmlAbstractProfilerAdapter *profiler, m_startTimes) { + for (QQmlAbstractProfilerAdapter *profiler : qAsConst(m_startTimes)) { for (QMultiHash<QJSEngine *, QQmlAbstractProfilerAdapter *>::iterator i(m_engineProfilers.begin()); i != m_engineProfilers.end(); ++i) { if (i.value() == profiler && !seen.contains(i.key())) { @@ -367,7 +367,7 @@ void QQmlProfilerServiceImpl::sendMessages() emit messagesToClient(name(), messages); // Restart flushing if any profilers are still running - foreach (const QQmlAbstractProfilerAdapter *profiler, m_engineProfilers) { + for (const QQmlAbstractProfilerAdapter *profiler : qAsConst(m_engineProfilers)) { if (profiler->isRunning()) { emit startFlushTimer(); break; @@ -438,21 +438,21 @@ void QQmlProfilerServiceImpl::flush() QMutexLocker lock(&m_configMutex); QList<QQmlAbstractProfilerAdapter *> reporting; - foreach (QQmlAbstractProfilerAdapter *profiler, m_engineProfilers) { + for (QQmlAbstractProfilerAdapter *profiler : qAsConst(m_engineProfilers)) { if (profiler->isRunning()) { m_startTimes.insert(-1, profiler); reporting.append(profiler); } } - foreach (QQmlAbstractProfilerAdapter *profiler, m_globalProfilers) { + for (QQmlAbstractProfilerAdapter *profiler : qAsConst(m_globalProfilers)) { if (profiler->isRunning()) { m_startTimes.insert(-1, profiler); reporting.append(profiler); } } - foreach (QQmlAbstractProfilerAdapter *profiler, reporting) + for (QQmlAbstractProfilerAdapter *profiler : qAsConst(reporting)) profiler->reportData(m_useMessageTypes); } diff --git a/src/plugins/qmltooling/qmldbg_server/qqmldebugserver.cpp b/src/plugins/qmltooling/qmldbg_server/qqmldebugserver.cpp index 96b3455790..f449989598 100644 --- a/src/plugins/qmltooling/qmldbg_server/qqmldebugserver.cpp +++ b/src/plugins/qmltooling/qmldbg_server/qqmldebugserver.cpp @@ -589,12 +589,12 @@ void QQmlDebugServerImpl::addEngine(QJSEngine *engine) QMutexLocker locker(&m_helloMutex); Q_ASSERT(!m_engineConditions.contains(engine)); - foreach (QQmlDebugService *service, m_plugins) + for (QQmlDebugService *service : qAsConst(m_plugins)) service->engineAboutToBeAdded(engine); m_engineConditions[engine].waitForServices(&m_helloMutex, m_plugins.count()); - foreach (QQmlDebugService *service, m_plugins) + for (QQmlDebugService *service : qAsConst(m_plugins)) service->engineAdded(engine); } @@ -606,12 +606,12 @@ void QQmlDebugServerImpl::removeEngine(QJSEngine *engine) QMutexLocker locker(&m_helloMutex); Q_ASSERT(m_engineConditions.contains(engine)); - foreach (QQmlDebugService *service, m_plugins) + for (QQmlDebugService *service : qAsConst(m_plugins)) service->engineAboutToBeRemoved(engine); m_engineConditions[engine].waitForServices(&m_helloMutex, m_plugins.count()); - foreach (QQmlDebugService *service, m_plugins) + for (QQmlDebugService *service : qAsConst(m_plugins)) service->engineRemoved(engine); m_engineConditions.remove(engine); @@ -703,11 +703,11 @@ void QQmlDebugServerImpl::sendMessages(const QString &name, const QList<QByteArr if (m_clientSupportsMultiPackets) { QQmlDebugPacket out; out << name; - foreach (const QByteArray &message, messages) + for (const QByteArray &message : messages) out << message; m_protocol->send(out.data()); } else { - foreach (const QByteArray &message, messages) + for (const QByteArray &message : messages) doSendMessage(name, message); } m_connection->flush(); diff --git a/src/qml/compiler/qqmlirbuilder.cpp b/src/qml/compiler/qqmlirbuilder.cpp index 31b964897f..89fa86c857 100644 --- a/src/qml/compiler/qqmlirbuilder.cpp +++ b/src/qml/compiler/qqmlirbuilder.cpp @@ -362,10 +362,11 @@ bool IRBuilder::generateFromQml(const QString &code, const QString &url, Documen QQmlJS::Parser parser(&output->jsParserEngine); - if (! parser.parse() || !parser.diagnosticMessages().isEmpty()) { - + const bool parseResult = parser.parse(); + const auto diagnosticMessages = parser.diagnosticMessages(); + if (!parseResult || !diagnosticMessages.isEmpty()) { // Extract errors from the parser - foreach (const QQmlJS::DiagnosticMessage &m, parser.diagnosticMessages()) { + for (const QQmlJS::DiagnosticMessage &m : diagnosticMessages) { if (m.isWarning()) { qWarning("%s:%d : %s", qPrintable(url), m.loc.startLine, qPrintable(m.message)); @@ -1018,7 +1019,8 @@ void IRBuilder::setBindingValue(QV4::CompiledData::Binding *binding, QQmlJS::AST CompiledFunctionOrExpression *expr = New<CompiledFunctionOrExpression>(); expr->node = statement; - expr->nameIndex = registerString(QStringLiteral("expression for ") + stringAt(binding->propertyNameIndex)); + expr->nameIndex = registerString(QLatin1String("expression for ") + + stringAt(binding->propertyNameIndex)); expr->disableAcceleratedLookups = false; const int index = bindingsTarget()->functionsAndExpressions->append(expr); binding->value.compiledScriptIndex = index; @@ -1246,7 +1248,7 @@ bool IRBuilder::resolveQualifiedId(QQmlJS::AST::UiQualifiedId **nameToResolve, O // If it's a namespace, prepend the qualifier and we'll resolve it later to the correct type. QString currentName = qualifiedIdElement->name.toString(); if (qualifiedIdElement->next) { - foreach (const QV4::CompiledData::Import* import, _imports) + for (const QV4::CompiledData::Import* import : qAsConst(_imports)) if (import->qualifierIndex != emptyStringIndex && stringAt(import->qualifierIndex) == currentName) { qualifiedIdElement = qualifiedIdElement->next; @@ -1371,7 +1373,7 @@ QV4::CompiledData::Unit *QmlUnitGenerator::generate(Document &output, QQmlEngine QHash<const Object*, quint32> objectOffsets; int objectsSize = 0; - foreach (Object *o, output.objects) { + for (Object *o : qAsConst(output.objects)) { objectOffsets.insert(o, unitSize + importSize + objectOffsetTableSize + objectsSize); objectsSize += QV4::CompiledData::Object::calculateSizeExcludingSignals(o->functionCount(), o->propertyCount(), o->aliasCount(), o->signalCount(), o->bindingCount(), o->namedObjectsInComponent.count); @@ -1417,7 +1419,7 @@ QV4::CompiledData::Unit *QmlUnitGenerator::generate(Document &output, QQmlEngine // write imports char *importPtr = data + qmlUnit->offsetToImports; - foreach (const QV4::CompiledData::Import *imp, output.imports) { + for (const QV4::CompiledData::Import *imp : qAsConst(output.imports)) { QV4::CompiledData::Import *importToWrite = reinterpret_cast<QV4::CompiledData::Import*>(importPtr); *importToWrite = *imp; importPtr += sizeof(QV4::CompiledData::Import); @@ -1522,7 +1524,7 @@ QV4::CompiledData::Unit *QmlUnitGenerator::generate(Document &output, QQmlEngine } // enable flag if we encountered pragma Singleton - foreach (Pragma *p, output.pragmas) { + for (Pragma *p : qAsConst(output.pragmas)) { if (p->type == Pragma::PragmaSingleton) { qmlUnit->flags |= QV4::CompiledData::Unit::IsSingleton; break; @@ -1586,7 +1588,7 @@ QVector<int> JSCodeGen::generateJSCodeForFunctionsAndBindings(const QList<Compil ScanFunctions scan(this, sourceCode, GlobalCode); scan.enterEnvironment(0, QmlBinding); scan.enterQmlScope(qmlRoot, QStringLiteral("context scope")); - foreach (const CompiledFunctionOrExpression &f, functions) { + for (const CompiledFunctionOrExpression &f : functions) { Q_ASSERT(f.node != qmlRoot); QQmlJS::AST::FunctionDeclaration *function = QQmlJS::AST::cast<QQmlJS::AST::FunctionDeclaration*>(f.node); @@ -1921,7 +1923,7 @@ QV4::IR::Expr *JSCodeGen::fallbackNameLookup(const QString &name, int line, int // with the correct QML context. // Look for IDs first. - foreach (const IdMapping &mapping, _idObjects) + for (const IdMapping &mapping : qAsConst(_idObjects)) if (name == mapping.name) { if (_function->isQmlBinding) _function->idObjectDependencies.insert(mapping.idIndex); diff --git a/src/qml/compiler/qqmlirbuilder_p.h b/src/qml/compiler/qqmlirbuilder_p.h index cc16dc2104..95756845c3 100644 --- a/src/qml/compiler/qqmlirbuilder_p.h +++ b/src/qml/compiler/qqmlirbuilder_p.h @@ -453,9 +453,9 @@ struct Q_QML_PRIVATE_EXPORT ScriptDirectivesCollector : public QQmlJS::Directive QList<const QV4::CompiledData::Import *> imports; bool hasPragmaLibrary; - virtual void pragmaLibrary(); - virtual void importFile(const QString &jsfile, const QString &module, int lineNumber, int column); - virtual void importModule(const QString &uri, const QString &version, const QString &module, int lineNumber, int column); + void pragmaLibrary() override; + void importFile(const QString &jsfile, const QString &module, int lineNumber, int column) override; + void importModule(const QString &uri, const QString &version, const QString &module, int lineNumber, int column) override; }; struct Q_QML_PRIVATE_EXPORT IRBuilder : public QQmlJS::AST::Visitor @@ -470,21 +470,21 @@ public: using QQmlJS::AST::Visitor::visit; using QQmlJS::AST::Visitor::endVisit; - virtual bool visit(QQmlJS::AST::UiArrayMemberList *ast); - virtual bool visit(QQmlJS::AST::UiImport *ast); - virtual bool visit(QQmlJS::AST::UiPragma *ast); - virtual bool visit(QQmlJS::AST::UiHeaderItemList *ast); - virtual bool visit(QQmlJS::AST::UiObjectInitializer *ast); - virtual bool visit(QQmlJS::AST::UiObjectMemberList *ast); - virtual bool visit(QQmlJS::AST::UiParameterList *ast); - virtual bool visit(QQmlJS::AST::UiProgram *); - virtual bool visit(QQmlJS::AST::UiQualifiedId *ast); - virtual bool visit(QQmlJS::AST::UiArrayBinding *ast); - virtual bool visit(QQmlJS::AST::UiObjectBinding *ast); - virtual bool visit(QQmlJS::AST::UiObjectDefinition *ast); - virtual bool visit(QQmlJS::AST::UiPublicMember *ast); - virtual bool visit(QQmlJS::AST::UiScriptBinding *ast); - virtual bool visit(QQmlJS::AST::UiSourceElement *ast); + bool visit(QQmlJS::AST::UiArrayMemberList *ast) override; + bool visit(QQmlJS::AST::UiImport *ast) override; + bool visit(QQmlJS::AST::UiPragma *ast) override; + bool visit(QQmlJS::AST::UiHeaderItemList *ast) override; + bool visit(QQmlJS::AST::UiObjectInitializer *ast) override; + bool visit(QQmlJS::AST::UiObjectMemberList *ast) override; + bool visit(QQmlJS::AST::UiParameterList *ast) override; + bool visit(QQmlJS::AST::UiProgram *) override; + bool visit(QQmlJS::AST::UiQualifiedId *ast) override; + bool visit(QQmlJS::AST::UiArrayBinding *ast) override; + bool visit(QQmlJS::AST::UiObjectBinding *ast) override; + bool visit(QQmlJS::AST::UiObjectDefinition *ast) override; + bool visit(QQmlJS::AST::UiPublicMember *ast) override; + bool visit(QQmlJS::AST::UiScriptBinding *ast) override; + bool visit(QQmlJS::AST::UiSourceElement *ast) override; void accept(QQmlJS::AST::Node *node); @@ -602,8 +602,8 @@ struct Q_QML_PRIVATE_EXPORT JSCodeGen : public QQmlJS::Codegen QVector<int> generateJSCodeForFunctionsAndBindings(const QList<CompiledFunctionOrExpression> &functions); protected: - virtual void beginFunctionBodyHook(); - virtual QV4::IR::Expr *fallbackNameLookup(const QString &name, int line, int col); + void beginFunctionBodyHook() override; + QV4::IR::Expr *fallbackNameLookup(const QString &name, int line, int col) override; private: QQmlPropertyData *lookupQmlCompliantProperty(QQmlPropertyCache *cache, const QString &name, bool *propertyExistsButForceNameLookup = 0); diff --git a/src/qml/compiler/qqmltypecompiler.cpp b/src/qml/compiler/qqmltypecompiler.cpp index 2308e66609..5e05485b93 100644 --- a/src/qml/compiler/qqmltypecompiler.cpp +++ b/src/qml/compiler/qqmltypecompiler.cpp @@ -471,7 +471,7 @@ bool SignalHandlerConverter::convertSignalHandlerExpressionsToFunctionDeclaratio QQmlJS::MemoryPool *pool = compiler->memoryPool(); QQmlJS::AST::FormalParameterList *paramList = 0; - foreach (const QString ¶m, parameters) { + for (const QString ¶m : qAsConst(parameters)) { QStringRef paramNameRef = compiler->newStringRef(param); if (paramList) @@ -1348,9 +1348,9 @@ bool QQmlJSCodeGenerator::compileJavaScriptCodeInObjectsRecursively(int objectIn functionsToCompile << *foe; } const QVector<int> runtimeFunctionIndices = v4CodeGen->generateJSCodeForFunctionsAndBindings(functionsToCompile); - QList<QQmlError> jsErrors = v4CodeGen->qmlErrors(); + const QList<QQmlError> jsErrors = v4CodeGen->qmlErrors(); if (!jsErrors.isEmpty()) { - foreach (const QQmlError &e, jsErrors) + for (const QQmlError &e : jsErrors) compiler->recordError(e); return false; } @@ -1733,7 +1733,7 @@ void QQmlIRFunctionCleanser::clean() module->functions = newFunctions; - foreach (QV4::IR::Function *function, module->functions) { + for (QV4::IR::Function *function : qAsConst(module->functions)) { for (QV4::IR::BasicBlock *block : function->basicBlocks()) { for (QV4::IR::Stmt *s : block->statements()) { visit(s); @@ -1741,7 +1741,7 @@ void QQmlIRFunctionCleanser::clean() } } - foreach (QmlIR::Object *obj, *compiler->qmlObjects()) { + for (QmlIR::Object *obj : qAsConst(*compiler->qmlObjects())) { for (int i = 0; i < obj->runtimeFunctionIndices.count; ++i) obj->runtimeFunctionIndices[i] = newFunctionIndices[obj->runtimeFunctionIndices.at(i)]; } diff --git a/src/qml/compiler/qv4codegen_p.h b/src/qml/compiler/qv4codegen_p.h index 59199183bd..742ee79648 100644 --- a/src/qml/compiler/qv4codegen_p.h +++ b/src/qml/compiler/qv4codegen_p.h @@ -331,103 +331,103 @@ protected: virtual void beginFunctionBodyHook() {} // nodes - virtual bool visit(AST::ArgumentList *ast); - virtual bool visit(AST::CaseBlock *ast); - virtual bool visit(AST::CaseClause *ast); - virtual bool visit(AST::CaseClauses *ast); - virtual bool visit(AST::Catch *ast); - virtual bool visit(AST::DefaultClause *ast); - virtual bool visit(AST::ElementList *ast); - virtual bool visit(AST::Elision *ast); - virtual bool visit(AST::Finally *ast); - virtual bool visit(AST::FormalParameterList *ast); - virtual bool visit(AST::FunctionBody *ast); - virtual bool visit(AST::Program *ast); - virtual bool visit(AST::PropertyNameAndValue *ast); - virtual bool visit(AST::PropertyAssignmentList *ast); - virtual bool visit(AST::PropertyGetterSetter *ast); - virtual bool visit(AST::SourceElements *ast); - virtual bool visit(AST::StatementList *ast); - virtual bool visit(AST::UiArrayMemberList *ast); - virtual bool visit(AST::UiImport *ast); - virtual bool visit(AST::UiHeaderItemList *ast); - virtual bool visit(AST::UiPragma *ast); - virtual bool visit(AST::UiObjectInitializer *ast); - virtual bool visit(AST::UiObjectMemberList *ast); - virtual bool visit(AST::UiParameterList *ast); - virtual bool visit(AST::UiProgram *ast); - virtual bool visit(AST::UiQualifiedId *ast); - virtual bool visit(AST::UiQualifiedPragmaId *ast); - virtual bool visit(AST::VariableDeclaration *ast); - virtual bool visit(AST::VariableDeclarationList *ast); + bool visit(AST::ArgumentList *ast) override; + bool visit(AST::CaseBlock *ast) override; + bool visit(AST::CaseClause *ast) override; + bool visit(AST::CaseClauses *ast) override; + bool visit(AST::Catch *ast) override; + bool visit(AST::DefaultClause *ast) override; + bool visit(AST::ElementList *ast) override; + bool visit(AST::Elision *ast) override; + bool visit(AST::Finally *ast) override; + bool visit(AST::FormalParameterList *ast) override; + bool visit(AST::FunctionBody *ast) override; + bool visit(AST::Program *ast) override; + bool visit(AST::PropertyNameAndValue *ast) override; + bool visit(AST::PropertyAssignmentList *ast) override; + bool visit(AST::PropertyGetterSetter *ast) override; + bool visit(AST::SourceElements *ast) override; + bool visit(AST::StatementList *ast) override; + bool visit(AST::UiArrayMemberList *ast) override; + bool visit(AST::UiImport *ast) override; + bool visit(AST::UiHeaderItemList *ast) override; + bool visit(AST::UiPragma *ast) override; + bool visit(AST::UiObjectInitializer *ast) override; + bool visit(AST::UiObjectMemberList *ast) override; + bool visit(AST::UiParameterList *ast) override; + bool visit(AST::UiProgram *ast) override; + bool visit(AST::UiQualifiedId *ast) override; + bool visit(AST::UiQualifiedPragmaId *ast) override; + bool visit(AST::VariableDeclaration *ast) override; + bool visit(AST::VariableDeclarationList *ast) override; // expressions - virtual bool visit(AST::Expression *ast); - virtual bool visit(AST::ArrayLiteral *ast); - virtual bool visit(AST::ArrayMemberExpression *ast); - virtual bool visit(AST::BinaryExpression *ast); - virtual bool visit(AST::CallExpression *ast); - virtual bool visit(AST::ConditionalExpression *ast); - virtual bool visit(AST::DeleteExpression *ast); - virtual bool visit(AST::FalseLiteral *ast); - virtual bool visit(AST::FieldMemberExpression *ast); - virtual bool visit(AST::FunctionExpression *ast); - virtual bool visit(AST::IdentifierExpression *ast); - virtual bool visit(AST::NestedExpression *ast); - virtual bool visit(AST::NewExpression *ast); - virtual bool visit(AST::NewMemberExpression *ast); - virtual bool visit(AST::NotExpression *ast); - virtual bool visit(AST::NullExpression *ast); - virtual bool visit(AST::NumericLiteral *ast); - virtual bool visit(AST::ObjectLiteral *ast); - virtual bool visit(AST::PostDecrementExpression *ast); - virtual bool visit(AST::PostIncrementExpression *ast); - virtual bool visit(AST::PreDecrementExpression *ast); - virtual bool visit(AST::PreIncrementExpression *ast); - virtual bool visit(AST::RegExpLiteral *ast); - virtual bool visit(AST::StringLiteral *ast); - virtual bool visit(AST::ThisExpression *ast); - virtual bool visit(AST::TildeExpression *ast); - virtual bool visit(AST::TrueLiteral *ast); - virtual bool visit(AST::TypeOfExpression *ast); - virtual bool visit(AST::UnaryMinusExpression *ast); - virtual bool visit(AST::UnaryPlusExpression *ast); - virtual bool visit(AST::VoidExpression *ast); - virtual bool visit(AST::FunctionDeclaration *ast); + bool visit(AST::Expression *ast) override; + bool visit(AST::ArrayLiteral *ast) override; + bool visit(AST::ArrayMemberExpression *ast) override; + bool visit(AST::BinaryExpression *ast) override; + bool visit(AST::CallExpression *ast) override; + bool visit(AST::ConditionalExpression *ast) override; + bool visit(AST::DeleteExpression *ast) override; + bool visit(AST::FalseLiteral *ast) override; + bool visit(AST::FieldMemberExpression *ast) override; + bool visit(AST::FunctionExpression *ast) override; + bool visit(AST::IdentifierExpression *ast) override; + bool visit(AST::NestedExpression *ast) override; + bool visit(AST::NewExpression *ast) override; + bool visit(AST::NewMemberExpression *ast) override; + bool visit(AST::NotExpression *ast) override; + bool visit(AST::NullExpression *ast) override; + bool visit(AST::NumericLiteral *ast) override; + bool visit(AST::ObjectLiteral *ast) override; + bool visit(AST::PostDecrementExpression *ast) override; + bool visit(AST::PostIncrementExpression *ast) override; + bool visit(AST::PreDecrementExpression *ast) override; + bool visit(AST::PreIncrementExpression *ast) override; + bool visit(AST::RegExpLiteral *ast) override; + bool visit(AST::StringLiteral *ast) override; + bool visit(AST::ThisExpression *ast) override; + bool visit(AST::TildeExpression *ast) override; + bool visit(AST::TrueLiteral *ast) override; + bool visit(AST::TypeOfExpression *ast) override; + bool visit(AST::UnaryMinusExpression *ast) override; + bool visit(AST::UnaryPlusExpression *ast) override; + bool visit(AST::VoidExpression *ast) override; + bool visit(AST::FunctionDeclaration *ast) override; // source elements - virtual bool visit(AST::FunctionSourceElement *ast); - virtual bool visit(AST::StatementSourceElement *ast); + bool visit(AST::FunctionSourceElement *ast) override; + bool visit(AST::StatementSourceElement *ast) override; // statements - virtual bool visit(AST::Block *ast); - virtual bool visit(AST::BreakStatement *ast); - virtual bool visit(AST::ContinueStatement *ast); - virtual bool visit(AST::DebuggerStatement *ast); - virtual bool visit(AST::DoWhileStatement *ast); - virtual bool visit(AST::EmptyStatement *ast); - virtual bool visit(AST::ExpressionStatement *ast); - virtual bool visit(AST::ForEachStatement *ast); - virtual bool visit(AST::ForStatement *ast); - virtual bool visit(AST::IfStatement *ast); - virtual bool visit(AST::LabelledStatement *ast); - virtual bool visit(AST::LocalForEachStatement *ast); - virtual bool visit(AST::LocalForStatement *ast); - virtual bool visit(AST::ReturnStatement *ast); - virtual bool visit(AST::SwitchStatement *ast); - virtual bool visit(AST::ThrowStatement *ast); - virtual bool visit(AST::TryStatement *ast); - virtual bool visit(AST::VariableStatement *ast); - virtual bool visit(AST::WhileStatement *ast); - virtual bool visit(AST::WithStatement *ast); + bool visit(AST::Block *ast) override; + bool visit(AST::BreakStatement *ast) override; + bool visit(AST::ContinueStatement *ast) override; + bool visit(AST::DebuggerStatement *ast) override; + bool visit(AST::DoWhileStatement *ast) override; + bool visit(AST::EmptyStatement *ast) override; + bool visit(AST::ExpressionStatement *ast) override; + bool visit(AST::ForEachStatement *ast) override; + bool visit(AST::ForStatement *ast) override; + bool visit(AST::IfStatement *ast) override; + bool visit(AST::LabelledStatement *ast) override; + bool visit(AST::LocalForEachStatement *ast) override; + bool visit(AST::LocalForStatement *ast) override; + bool visit(AST::ReturnStatement *ast) override; + bool visit(AST::SwitchStatement *ast) override; + bool visit(AST::ThrowStatement *ast) override; + bool visit(AST::TryStatement *ast) override; + bool visit(AST::VariableStatement *ast) override; + bool visit(AST::WhileStatement *ast) override; + bool visit(AST::WithStatement *ast) override; // ui object members - virtual bool visit(AST::UiArrayBinding *ast); - virtual bool visit(AST::UiObjectBinding *ast); - virtual bool visit(AST::UiObjectDefinition *ast); - virtual bool visit(AST::UiPublicMember *ast); - virtual bool visit(AST::UiScriptBinding *ast); - virtual bool visit(AST::UiSourceElement *ast); + bool visit(AST::UiArrayBinding *ast) override; + bool visit(AST::UiObjectBinding *ast) override; + bool visit(AST::UiObjectDefinition *ast) override; + bool visit(AST::UiPublicMember *ast) override; + bool visit(AST::UiScriptBinding *ast) override; + bool visit(AST::UiSourceElement *ast) override; bool throwSyntaxErrorOnEvalOrArgumentsInStrictMode(QV4::IR::Expr* expr, const AST::SourceLocation &loc); virtual void throwSyntaxError(const AST::SourceLocation &loc, const QString &detail); @@ -486,39 +486,39 @@ protected: void checkName(const QStringRef &name, const AST::SourceLocation &loc); void checkForArguments(AST::FormalParameterList *parameters); - virtual bool visit(AST::Program *ast); - virtual void endVisit(AST::Program *); + bool visit(AST::Program *ast) override; + void endVisit(AST::Program *) override; - virtual bool visit(AST::CallExpression *ast); - virtual bool visit(AST::NewMemberExpression *ast); - virtual bool visit(AST::ArrayLiteral *ast); - virtual bool visit(AST::VariableDeclaration *ast); - virtual bool visit(AST::IdentifierExpression *ast); - virtual bool visit(AST::ExpressionStatement *ast); - virtual bool visit(AST::FunctionExpression *ast); + bool visit(AST::CallExpression *ast) override; + bool visit(AST::NewMemberExpression *ast) override; + bool visit(AST::ArrayLiteral *ast) override; + bool visit(AST::VariableDeclaration *ast) override; + bool visit(AST::IdentifierExpression *ast) override; + bool visit(AST::ExpressionStatement *ast) override; + bool visit(AST::FunctionExpression *ast) override; void enterFunction(AST::FunctionExpression *ast, bool enterName, bool isExpression = true); - virtual void endVisit(AST::FunctionExpression *); + void endVisit(AST::FunctionExpression *) override; - virtual bool visit(AST::ObjectLiteral *ast); + bool visit(AST::ObjectLiteral *ast) override; - virtual bool visit(AST::PropertyGetterSetter *ast); - virtual void endVisit(AST::PropertyGetterSetter *); + bool visit(AST::PropertyGetterSetter *ast) override; + void endVisit(AST::PropertyGetterSetter *) override; - virtual bool visit(AST::FunctionDeclaration *ast); - virtual void endVisit(AST::FunctionDeclaration *); + bool visit(AST::FunctionDeclaration *ast) override; + void endVisit(AST::FunctionDeclaration *) override; - virtual bool visit(AST::WithStatement *ast); + bool visit(AST::WithStatement *ast) override; - virtual bool visit(AST::DoWhileStatement *ast); - virtual bool visit(AST::ForStatement *ast); - virtual bool visit(AST::LocalForStatement *ast); - virtual bool visit(AST::ForEachStatement *ast); - virtual bool visit(AST::LocalForEachStatement *ast); - virtual bool visit(AST::ThisExpression *ast); + bool visit(AST::DoWhileStatement *ast) override; + bool visit(AST::ForStatement *ast) override; + bool visit(AST::LocalForStatement *ast) override; + bool visit(AST::ForEachStatement *ast) override; + bool visit(AST::LocalForEachStatement *ast) override; + bool visit(AST::ThisExpression *ast) override; - virtual bool visit(AST::Block *ast); + bool visit(AST::Block *ast) override; protected: void enterFunction(AST::Node *ast, const QString &name, AST::FormalParameterList *formals, AST::FunctionBody *body, AST::FunctionExpression *expr, bool isExpression); @@ -544,8 +544,8 @@ public: , engine(engine) {} - virtual void throwSyntaxError(const AST::SourceLocation &loc, const QString &detail); - virtual void throwReferenceError(const AST::SourceLocation &loc, const QString &detail); + void throwSyntaxError(const AST::SourceLocation &loc, const QString &detail) override; + void throwReferenceError(const AST::SourceLocation &loc, const QString &detail) override; private: QV4::ExecutionEngine *engine; }; diff --git a/src/qml/compiler/qv4compiler.cpp b/src/qml/compiler/qv4compiler.cpp index 43347d246a..729c56540d 100644 --- a/src/qml/compiler/qv4compiler.cpp +++ b/src/qml/compiler/qv4compiler.cpp @@ -211,7 +211,7 @@ int QV4::Compiler::JSUnitGenerator::registerJSClass(int count, IR::ExprList *arg QV4::CompiledData::Unit *QV4::Compiler::JSUnitGenerator::generateUnit(GeneratorOption option) { registerString(irModule->fileName); - foreach (QV4::IR::Function *f, irModule->functions) { + for (QV4::IR::Function *f : qAsConst(irModule->functions)) { registerString(*f->name); for (int i = 0; i < f->formals.size(); ++i) registerString(*f->formals.at(i)); @@ -242,7 +242,7 @@ QV4::CompiledData::Unit *QV4::Compiler::JSUnitGenerator::generateUnit(GeneratorO } CompiledData::Lookup *lookupsToWrite = reinterpret_cast<CompiledData::Lookup*>(dataPtr + unit->offsetToLookupTable); - foreach (const CompiledData::Lookup &l, lookups) + for (const CompiledData::Lookup &l : qAsConst(lookups)) *lookupsToWrite++ = l; CompiledData::RegExp *regexpTable = reinterpret_cast<CompiledData::RegExp *>(dataPtr + unit->offsetToRegexpTable); diff --git a/src/qml/compiler/qv4isel_moth.cpp b/src/qml/compiler/qv4isel_moth.cpp index cd47f22205..5dd722bfc2 100644 --- a/src/qml/compiler/qv4isel_moth.cpp +++ b/src/qml/compiler/qv4isel_moth.cpp @@ -209,7 +209,7 @@ void InstructionSelection::run(int functionIndex) ConvertTemps().toStackSlots(_function); } - QSet<IR::Jump *> removableJumps = opt.calculateOptionalJumps(); + BitVector removableJumps = opt.calculateOptionalJumps(); qSwap(_removableJumps, removableJumps); IR::Stmt *cs = 0; @@ -292,7 +292,7 @@ QQmlRefPointer<QV4::CompiledData::CompilationUnit> InstructionSelection::backend { compilationUnit->codeRefs.resize(irModule->functions.size()); int i = 0; - foreach (IR::Function *irFunction, irModule->functions) + for (IR::Function *irFunction : qAsConst(irModule->functions)) compilationUnit->codeRefs[i++] = codeRefs[irFunction]; QQmlRefPointer<QV4::CompiledData::CompilationUnit> result; result.adopt(compilationUnit.take()); @@ -950,7 +950,7 @@ void InstructionSelection::visitJump(IR::Jump *s) { if (s->target == _nextBlock) return; - if (_removableJumps.contains(s)) + if (_removableJumps.at(_block->index())) return; addDebugInstruction(); diff --git a/src/qml/compiler/qv4isel_moth_p.h b/src/qml/compiler/qv4isel_moth_p.h index c304284cbc..9699555670 100644 --- a/src/qml/compiler/qv4isel_moth_p.h +++ b/src/qml/compiler/qv4isel_moth_p.h @@ -54,6 +54,7 @@ #include <private/qv4global_p.h> #include <private/qv4isel_p.h> #include <private/qv4isel_util_p.h> +#include <private/qv4util_p.h> #include <private/qv4jsir_p.h> #include <private/qv4value_p.h> #include "qv4instr_moth_p.h" @@ -83,68 +84,68 @@ public: InstructionSelection(QQmlEnginePrivate *qmlEngine, QV4::ExecutableAllocator *execAllocator, IR::Module *module, QV4::Compiler::JSUnitGenerator *jsGenerator, EvalISelFactory *iselFactory); ~InstructionSelection(); - virtual void run(int functionIndex); + void run(int functionIndex) override; protected: - virtual QQmlRefPointer<CompiledData::CompilationUnit> backendCompileStep(); - - virtual void visitJump(IR::Jump *); - virtual void visitCJump(IR::CJump *); - virtual void visitRet(IR::Ret *); - - virtual void callBuiltinInvalid(IR::Name *func, IR::ExprList *args, IR::Expr *result); - virtual void callBuiltinTypeofQmlContextProperty(IR::Expr *base, IR::Member::MemberKind kind, int propertyIndex, IR::Expr *result); - virtual void callBuiltinTypeofMember(IR::Expr *base, const QString &name, IR::Expr *result); - virtual void callBuiltinTypeofSubscript(IR::Expr *base, IR::Expr *index, IR::Expr *result); - virtual void callBuiltinTypeofName(const QString &name, IR::Expr *result); - virtual void callBuiltinTypeofValue(IR::Expr *value, IR::Expr *result); - virtual void callBuiltinDeleteMember(IR::Expr *base, const QString &name, IR::Expr *result); - virtual void callBuiltinDeleteSubscript(IR::Expr *base, IR::Expr *index, IR::Expr *result); - virtual void callBuiltinDeleteName(const QString &name, IR::Expr *result); - virtual void callBuiltinDeleteValue(IR::Expr *result); - virtual void callBuiltinThrow(IR::Expr *arg); - virtual void callBuiltinReThrow(); - virtual void callBuiltinUnwindException(IR::Expr *); - virtual void callBuiltinPushCatchScope(const QString &exceptionName); - virtual void callBuiltinForeachIteratorObject(IR::Expr *arg, IR::Expr *result); - virtual void callBuiltinForeachNextPropertyname(IR::Expr *arg, IR::Expr *result); - virtual void callBuiltinPushWithScope(IR::Expr *arg); - virtual void callBuiltinPopScope(); - virtual void callBuiltinDeclareVar(bool deletable, const QString &name); - virtual void callBuiltinDefineArray(IR::Expr *result, IR::ExprList *args); - virtual void callBuiltinDefineObjectLiteral(IR::Expr *result, int keyValuePairCount, IR::ExprList *keyValuePairs, IR::ExprList *arrayEntries, bool needSparseArray); - virtual void callBuiltinSetupArgumentObject(IR::Expr *result); - virtual void callBuiltinConvertThisToObject(); - virtual void callValue(IR::Expr *value, IR::ExprList *args, IR::Expr *result); - virtual void callQmlContextProperty(IR::Expr *base, IR::Member::MemberKind kind, int propertyIndex, IR::ExprList *args, IR::Expr *result); - virtual void callProperty(IR::Expr *base, const QString &name, IR::ExprList *args, IR::Expr *result); - virtual void callSubscript(IR::Expr *base, IR::Expr *index, IR::ExprList *args, IR::Expr *result); - virtual void convertType(IR::Expr *source, IR::Expr *target); - virtual void constructActivationProperty(IR::Name *func, IR::ExprList *args, IR::Expr *result); - virtual void constructProperty(IR::Expr *base, const QString &name, IR::ExprList *args, IR::Expr *result); - virtual void constructValue(IR::Expr *value, IR::ExprList *args, IR::Expr *result); - virtual void loadThisObject(IR::Expr *e); - virtual void loadQmlContext(IR::Expr *e); - virtual void loadQmlImportedScripts(IR::Expr *e); - virtual void loadQmlSingleton(const QString &name, IR::Expr *e); - virtual void loadConst(IR::Const *sourceConst, IR::Expr *e); - virtual void loadString(const QString &str, IR::Expr *target); - virtual void loadRegexp(IR::RegExp *sourceRegexp, IR::Expr *target); - virtual void getActivationProperty(const IR::Name *name, IR::Expr *target); - virtual void setActivationProperty(IR::Expr *source, const QString &targetName); - virtual void initClosure(IR::Closure *closure, IR::Expr *target); - virtual void getProperty(IR::Expr *base, const QString &name, IR::Expr *target); - virtual void setProperty(IR::Expr *source, IR::Expr *targetBase, const QString &targetName); - virtual void setQmlContextProperty(IR::Expr *source, IR::Expr *targetBase, IR::Member::MemberKind kind, int propertyIndex); - virtual void setQObjectProperty(IR::Expr *source, IR::Expr *targetBase, int propertyIndex); - virtual void getQmlContextProperty(IR::Expr *source, IR::Member::MemberKind kind, int index, bool captureRequired, IR::Expr *target); - virtual void getQObjectProperty(IR::Expr *base, int propertyIndex, bool captureRequired, bool isSingleton, int attachedPropertiesId, IR::Expr *target); - virtual void getElement(IR::Expr *base, IR::Expr *index, IR::Expr *target); - virtual void setElement(IR::Expr *source, IR::Expr *targetBase, IR::Expr *targetIndex); - virtual void copyValue(IR::Expr *source, IR::Expr *target); - virtual void swapValues(IR::Expr *source, IR::Expr *target); - virtual void unop(IR::AluOp oper, IR::Expr *source, IR::Expr *target); - virtual void binop(IR::AluOp oper, IR::Expr *leftSource, IR::Expr *rightSource, IR::Expr *target); + QQmlRefPointer<CompiledData::CompilationUnit> backendCompileStep() override; + + void visitJump(IR::Jump *) override; + void visitCJump(IR::CJump *) override; + void visitRet(IR::Ret *) override; + + void callBuiltinInvalid(IR::Name *func, IR::ExprList *args, IR::Expr *result) override; + void callBuiltinTypeofQmlContextProperty(IR::Expr *base, IR::Member::MemberKind kind, int propertyIndex, IR::Expr *result) override; + void callBuiltinTypeofMember(IR::Expr *base, const QString &name, IR::Expr *result) override; + void callBuiltinTypeofSubscript(IR::Expr *base, IR::Expr *index, IR::Expr *result) override; + void callBuiltinTypeofName(const QString &name, IR::Expr *result) override; + void callBuiltinTypeofValue(IR::Expr *value, IR::Expr *result) override; + void callBuiltinDeleteMember(IR::Expr *base, const QString &name, IR::Expr *result) override; + void callBuiltinDeleteSubscript(IR::Expr *base, IR::Expr *index, IR::Expr *result) override; + void callBuiltinDeleteName(const QString &name, IR::Expr *result) override; + void callBuiltinDeleteValue(IR::Expr *result) override; + void callBuiltinThrow(IR::Expr *arg) override; + void callBuiltinReThrow() override; + void callBuiltinUnwindException(IR::Expr *) override; + void callBuiltinPushCatchScope(const QString &exceptionName) override; + void callBuiltinForeachIteratorObject(IR::Expr *arg, IR::Expr *result) override; + void callBuiltinForeachNextPropertyname(IR::Expr *arg, IR::Expr *result) override; + void callBuiltinPushWithScope(IR::Expr *arg) override; + void callBuiltinPopScope() override; + void callBuiltinDeclareVar(bool deletable, const QString &name) override; + void callBuiltinDefineArray(IR::Expr *result, IR::ExprList *args) override; + void callBuiltinDefineObjectLiteral(IR::Expr *result, int keyValuePairCount, IR::ExprList *keyValuePairs, IR::ExprList *arrayEntries, bool needSparseArray) override; + void callBuiltinSetupArgumentObject(IR::Expr *result) override; + void callBuiltinConvertThisToObject() override; + void callValue(IR::Expr *value, IR::ExprList *args, IR::Expr *result) override; + void callQmlContextProperty(IR::Expr *base, IR::Member::MemberKind kind, int propertyIndex, IR::ExprList *args, IR::Expr *result) override; + void callProperty(IR::Expr *base, const QString &name, IR::ExprList *args, IR::Expr *result) override; + void callSubscript(IR::Expr *base, IR::Expr *index, IR::ExprList *args, IR::Expr *result) override; + void convertType(IR::Expr *source, IR::Expr *target) override; + void constructActivationProperty(IR::Name *func, IR::ExprList *args, IR::Expr *result) override; + void constructProperty(IR::Expr *base, const QString &name, IR::ExprList *args, IR::Expr *result) override; + void constructValue(IR::Expr *value, IR::ExprList *args, IR::Expr *result) override; + void loadThisObject(IR::Expr *e) override; + void loadQmlContext(IR::Expr *e) override; + void loadQmlImportedScripts(IR::Expr *e) override; + void loadQmlSingleton(const QString &name, IR::Expr *e) override; + void loadConst(IR::Const *sourceConst, IR::Expr *e) override; + void loadString(const QString &str, IR::Expr *target) override; + void loadRegexp(IR::RegExp *sourceRegexp, IR::Expr *target) override; + void getActivationProperty(const IR::Name *name, IR::Expr *target) override; + void setActivationProperty(IR::Expr *source, const QString &targetName) override; + void initClosure(IR::Closure *closure, IR::Expr *target) override; + void getProperty(IR::Expr *base, const QString &name, IR::Expr *target) override; + void setProperty(IR::Expr *source, IR::Expr *targetBase, const QString &targetName) override; + void setQmlContextProperty(IR::Expr *source, IR::Expr *targetBase, IR::Member::MemberKind kind, int propertyIndex) override; + void setQObjectProperty(IR::Expr *source, IR::Expr *targetBase, int propertyIndex) override; + void getQmlContextProperty(IR::Expr *source, IR::Member::MemberKind kind, int index, bool captureRequired, IR::Expr *target) override; + void getQObjectProperty(IR::Expr *base, int propertyIndex, bool captureRequired, bool isSingleton, int attachedPropertiesId, IR::Expr *target) override; + void getElement(IR::Expr *base, IR::Expr *index, IR::Expr *target) override; + void setElement(IR::Expr *source, IR::Expr *targetBase, IR::Expr *targetIndex) override; + void copyValue(IR::Expr *source, IR::Expr *target) override; + void swapValues(IR::Expr *source, IR::Expr *target) override; + void unop(IR::AluOp oper, IR::Expr *source, IR::Expr *target) override; + void binop(IR::AluOp oper, IR::Expr *leftSource, IR::Expr *rightSource, IR::Expr *target) override; private: Param binopHelper(IR::AluOp oper, IR::Expr *leftSource, IR::Expr *rightSource, IR::Expr *target); @@ -197,7 +198,7 @@ private: uchar *_codeNext; uchar *_codeEnd; - QSet<IR::Jump *> _removableJumps; + BitVector _removableJumps; IR::Stmt *_currentStatement; QScopedPointer<CompilationUnit> compilationUnit; diff --git a/src/qml/compiler/qv4ssa.cpp b/src/qml/compiler/qv4ssa.cpp index e4eaeaa3f6..a98cf6d338 100644 --- a/src/qml/compiler/qv4ssa.cpp +++ b/src/qml/compiler/qv4ssa.cpp @@ -1123,7 +1123,7 @@ public: { QVector<UntypedTemp> res; res.reserve(tempCount()); - foreach (const DefUse &du, _defUses) + for (const DefUse &du : _defUses) if (du.isValid()) res.append(UntypedTemp(du.temp)); return res; @@ -1150,7 +1150,7 @@ public: { Q_ASSERT(static_cast<unsigned>(variable.index) < _defUses.size()); QVector<Stmt *> &uses = _defUses[variable.index].uses; - foreach (Stmt *stmt, newUses) + for (Stmt *stmt : newUses) if (std::find(uses.begin(), uses.end(), stmt) == uses.end()) uses.push_back(stmt); } @@ -1226,7 +1226,7 @@ public: QVector<Stmt*> removeDefUses(Stmt *s) { QVector<Stmt*> defStmts; - foreach (const Temp &usedVar, usedVars(s)) { + for (const Temp &usedVar : usedVars(s)) { if (Stmt *ds = defStmt(usedVar)) defStmts += ds; removeUse(s, usedVar); @@ -1247,7 +1247,7 @@ public: buf.open(QIODevice::WriteOnly); QTextStream qout(&buf); qout << "Defines and uses:" << endl; - foreach (const DefUse &du, _defUses) { + for (const DefUse &du : _defUses) { if (!du.isValid()) continue; qout << '%' << du.temp.index; @@ -1255,14 +1255,14 @@ public: << ", statement: " << du.defStmt->id() << endl; qout << " uses:"; - foreach (Stmt *s, du.uses) + for (Stmt *s : du.uses) qout << ' ' << s->id(); qout << endl; } qout << "Uses per statement:" << endl; for (size_t i = 0, ei = _usesPerStatement.size(); i != ei; ++i) { qout << " " << i << ":"; - foreach (const Temp &t, _usesPerStatement[i]) + for (const Temp &t : _usesPerStatement[i]) qout << ' ' << t.index; qout << endl; } @@ -1633,7 +1633,7 @@ bool hasPhiOnlyUses(Phi *phi, const DefUses &defUses, QBitArray &collectedPhis) { collectedPhis.setBit(phi->id()); - foreach (Stmt *use, defUses.uses(*phi->targetTemp)) { + for (Stmt *use : defUses.uses(*phi->targetTemp)) { Phi *dependentPhi = use->asPhi(); if (!dependentPhi) return false; // there is a use by a non-phi node @@ -1679,7 +1679,7 @@ void cleanupPhis(DefUses &defUses) const Temp &targetVar = *phi->targetTemp; defUses.defStmtBlock(targetVar)->removeStatement(phi); - foreach (const Temp &usedVar, defUses.usedVars(phi)) + for (const Temp &usedVar : defUses.usedVars(phi)) defUses.removeUse(phi, usedVar); defUses.removeDef(targetVar); } @@ -1729,7 +1729,7 @@ public: worklist.assign(worklist.size(), false); worklistSize = 0; - foreach (Stmt *s, stmts) { + for (Stmt *s : stmts) { if (!s) continue; @@ -1802,7 +1802,7 @@ public: StatementWorklist &operator+=(const QVector<Stmt *> &stmts) { - foreach (Stmt *s, stmts) + for (Stmt *s : stmts) this->operator+=(s); return *this; @@ -2092,7 +2092,7 @@ public: theTemp = temp; if (Stmt *defStmt = defUses.defStmt(temp.temp)) visit(defStmt); - foreach (Stmt *use, defUses.uses(temp.temp)) + for (Stmt *use : defUses.uses(temp.temp)) visit(use); } @@ -2246,7 +2246,7 @@ private: it = ty; if (DebugTypeInference) { - foreach (Stmt *s, _defUses.uses(*t)) { + for (Stmt *s : _defUses.uses(*t)) { QBuffer buf; buf.open(QIODevice::WriteOnly); QTextStream qout(&buf); @@ -2606,7 +2606,7 @@ public: } PropagateTempTypes propagator(_defUses); - foreach (const UntypedTemp &t, knownOk) { + for (const UntypedTemp &t : qAsConst(knownOk)) { propagator.run(t, SInt32Type); if (Stmt *defStmt = _defUses.defStmt(t.temp)) { if (Move *m = defStmt->asMove()) { @@ -2630,7 +2630,7 @@ private: if (uses.isEmpty()) return false; - foreach (Stmt *use, uses) { + for (Stmt *use : uses) { if (Move *m = use->asMove()) { Temp *targetTemp = m->target->asTemp(); @@ -3165,7 +3165,8 @@ public: std::vector<BasicBlock *> backedges; backedges.reserve(4); - foreach (BasicBlock *bb, dt.calculateDFNodeIterOrder()) { + const auto order = dt.calculateDFNodeIterOrder(); + for (BasicBlock *bb : order) { Q_ASSERT(!bb->isRemoved()); backedges.clear(); @@ -3188,12 +3189,12 @@ public: if (!DebugLoopDetection) return; - foreach (LoopInfo *info, loopInfos) { + for (const LoopInfo *info : loopInfos) { qDebug() << "Loop header:" << info->loopHeader->index() << "for loop" << quint64(info); - foreach (BasicBlock *bb, info->loopBody) + for (BasicBlock *bb : info->loopBody) qDebug() << " " << bb->index(); - foreach (LoopInfo *nested, info->nestedLoops) + for (LoopInfo *nested : info->nestedLoops) qDebug() << " sub loop:" << quint64(nested); qDebug() << " parent loop:" << quint64(info->parentLoop); } @@ -3277,15 +3278,15 @@ private: findLoop(loopHeader)->loopBody.append(bb); } - foreach (LoopInfo *info, loopInfos) { - if (BasicBlock *containingLoopHeader = info->loopHeader->containingGroup()) - findLoop(containingLoopHeader)->addNestedLoop(info); + for (int i = 0, size = loopInfos.size(); i < size; ++i) { + if (BasicBlock *containingLoopHeader = loopInfos.at(i)->loopHeader->containingGroup()) + findLoop(containingLoopHeader)->addNestedLoop(loopInfos.at(i)); } } LoopInfo *findLoop(BasicBlock *loopHeader) { - foreach (LoopInfo *info, loopInfos) { + for (LoopInfo *info : qAsConst(loopInfos)) { if (info->loopHeader == loopHeader) return info; } @@ -3459,8 +3460,8 @@ public: }; #ifndef QT_NO_DEBUG -void checkCriticalEdges(QVector<BasicBlock *> basicBlocks) { - foreach (BasicBlock *bb, basicBlocks) { +void checkCriticalEdges(const QVector<BasicBlock *> &basicBlocks) { + for (BasicBlock *bb : basicBlocks) { if (bb && bb->out.size() > 1) { for (BasicBlock *bb2 : bb->out) { if (bb2 && bb2->in.size() > 1) { @@ -3594,7 +3595,7 @@ public: newUses->reserve(uses.size()); // qout << " " << uses.size() << " uses:"<<endl; - foreach (Stmt *use, uses) { + for (Stmt *use : uses) { // qout<<" ";use->dump(qout);qout<<"\n"; visit(use); // qout<<" -> ";use->dump(qout);qout<<"\n"; @@ -3752,7 +3753,7 @@ void unlink(BasicBlock *from, BasicBlock *to, IR::Function *func, DefUses &defUs return; to->in.remove(idx); - foreach (Stmt *outStmt, to->statements()) { + for (Stmt *outStmt : to->statements()) { if (!outStmt) continue; if (Phi *phi = outStmt->asPhi()) { @@ -3770,7 +3771,7 @@ void unlink(BasicBlock *from, BasicBlock *to, IR::Function *func, DefUses &defUs static bool isReachable(BasicBlock *bb, const DominatorTree &dt) { - foreach (BasicBlock *in, bb->in) { + for (BasicBlock *in : bb->in) { if (in->isRemoved()) continue; if (dt.dominates(bb, in)) // a back-edge, not interesting @@ -3940,13 +3941,13 @@ void cfg2dot(IR::Function *f, const QVector<LoopDetection::LoopInfo *> &loops = struct Util { QTextStream &qout; Util(QTextStream &qout): qout(qout) {} - void genLoop(LoopDetection::LoopInfo *loop) + void genLoop(const LoopDetection::LoopInfo *loop) { qout << " subgraph \"cluster" << quint64(loop) << "\" {\n"; qout << " L" << loop->loopHeader->index() << ";\n"; - foreach (BasicBlock *bb, loop->loopBody) + for (BasicBlock *bb : loop->loopBody) qout << " L" << bb->index() << ";\n"; - foreach (LoopDetection::LoopInfo *nested, loop->nestedLoops) + for (LoopDetection::LoopInfo *nested : loop->nestedLoops) genLoop(nested); qout << " }\n"; } @@ -3957,7 +3958,7 @@ void cfg2dot(IR::Function *f, const QVector<LoopDetection::LoopInfo *> &loops = else name = QStringLiteral("%1").arg((unsigned long long)f); qout << "digraph \"" << name << "\" { ordering=out;\n"; - foreach (LoopDetection::LoopInfo *l, loops) { + for (LoopDetection::LoopInfo *l : loops) { if (l->parentLoop == 0) Util(qout).genLoop(l); } @@ -4463,7 +4464,8 @@ public: qout << "Life ranges:" << endl; qout << "Intervals:" << endl; - foreach (const LifeTimeInterval *range, _sortedIntervals->intervals()) { + const auto intervals = _sortedIntervals->intervals(); + for (const LifeTimeInterval *range : intervals) { range->dump(qout); qout << endl; } @@ -4723,7 +4725,7 @@ private: clonedStmt = phi; phi->targetTemp = clone(p->targetTemp); - foreach (Expr *in, p->incoming) + for (Expr *in : p->incoming) phi->incoming.append(clone(in)); block->appendStatement(phi); } else { @@ -4753,7 +4755,7 @@ public: void run(const QVector<LoopDetection::LoopInfo *> &loops) { - foreach (LoopDetection::LoopInfo *loopInfo, loops) + for (LoopDetection::LoopInfo *loopInfo : loops) peelLoop(loopInfo); } @@ -4857,7 +4859,7 @@ private: // The original loop is now peeled off, and won't jump back to the loop header. Meaning, it // is not a loop anymore, so unmark it. loop->loopHeader->markAsGroupStart(false); - foreach (BasicBlock *bb, loop->loopBody) + for (BasicBlock *bb : qAsConst(loop->loopBody)) bb->setContainingGroup(loop->loopHeader->containingGroup()); // calculate the idoms in a separate loop, because addBasicBlock in the previous loop will @@ -4875,7 +4877,7 @@ private: } BasicBlockSet siblings(f); - foreach (BasicBlock *bb, loopExits) + for (BasicBlock *bb : qAsConst(loopExits)) dt.collectSiblings(bb, siblings); dt.recalculateIDoms(siblings, loop->loopHeader); @@ -5518,14 +5520,30 @@ LifeTimeIntervals::Ptr Optimizer::lifeTimeIntervals() const return lifeRanges.intervals(); } -QSet<Jump *> Optimizer::calculateOptionalJumps() +static int countPhis(BasicBlock *bb) { - QSet<Jump *> optional; - QSet<BasicBlock *> reachableWithoutJump; + int count = 0; + for (Stmt *s : bb->statements()) { + if (s->isa<Phi>()) + ++count; + else + break; + } + return count; +} + +// Basic blocks can have only 1 terminator. This function returns a bit vector, where a 1 on a +// certain index indicates that the terminator (jump) at the end of the basic block with that index +// can be omitted. +BitVector Optimizer::calculateOptionalJumps() +{ const int maxSize = function->basicBlockCount(); - optional.reserve(maxSize); - reachableWithoutJump.reserve(maxSize); + BitVector optional(maxSize, false); + if (maxSize < 2) + return optional; + + BitVector reachableWithoutJump(maxSize, false); for (int i = maxSize - 1; i >= 0; --i) { BasicBlock *bb = function->basicBlock(i); @@ -5533,17 +5551,17 @@ QSet<Jump *> Optimizer::calculateOptionalJumps() continue; if (Jump *jump = bb->statements().last()->asJump()) { - if (reachableWithoutJump.contains(jump->target)) { - if (bb->statements().size() > 1) + if (reachableWithoutJump.at(jump->target->index())) { + if (bb->statements().size() - countPhis(bb)> 1) reachableWithoutJump.clear(); - optional.insert(jump); - reachableWithoutJump.insert(bb); + optional.setBit(bb->index()); + reachableWithoutJump.setBit(bb->index()); continue; } } reachableWithoutJump.clear(); - reachableWithoutJump.insert(bb); + reachableWithoutJump.setBit(bb->index()); } return optional; @@ -5642,7 +5660,7 @@ QList<IR::Move *> MoveMapping::insertMoves(BasicBlock *bb, IR::Function *functio newMoves.reserve(_moves.size()); int insertionPoint = atEnd ? bb->statements().size() - 1 : 0; - foreach (const Move &m, _moves) { + for (const Move &m : _moves) { IR::Move *move = function->NewStmt<IR::Move>(); move->init(clone(m.to, function), clone(m.from, function)); move->swap = m.needsSwap; @@ -5661,7 +5679,7 @@ void MoveMapping::dump() const QTextStream os(&buf); IRPrinter printer(&os); os << "Move mapping has " << _moves.size() << " moves..." << endl; - foreach (const Move &m, _moves) { + for (const Move &m : _moves) { os << "\t"; printer.print(m.to); if (m.needsSwap) @@ -5678,8 +5696,8 @@ void MoveMapping::dump() const MoveMapping::Action MoveMapping::schedule(const Move &m, QList<Move> &todo, QList<Move> &delayed, QList<Move> &output, QList<Move> &swaps) const { - Moves usages = sourceUsages(m.to, todo) + sourceUsages(m.to, delayed); - foreach (const Move &dependency, usages) { + const Moves usages = sourceUsages(m.to, todo) + sourceUsages(m.to, delayed); + for (const Move &dependency : usages) { if (!output.contains(dependency)) { if (delayed.contains(dependency)) { // We have a cycle! Break it by swapping instead of assigning. @@ -5690,7 +5708,7 @@ MoveMapping::Action MoveMapping::schedule(const Move &m, QList<Move> &todo, QLis QTextStream out(&buf); IRPrinter printer(&out); out<<"we have a cycle! temps:" << endl; - foreach (const Move &m, delayed) { + for (const Move &m : qAsConst(delayed)) { out<<"\t"; printer.print(m.to); out<<" <- "; diff --git a/src/qml/compiler/qv4ssa_p.h b/src/qml/compiler/qv4ssa_p.h index 3a787f0347..db8b6edd1a 100644 --- a/src/qml/compiler/qv4ssa_p.h +++ b/src/qml/compiler/qv4ssa_p.h @@ -53,6 +53,7 @@ #include "qv4jsir_p.h" #include "qv4isel_util_p.h" +#include <private/qv4util_p.h> #include <QtCore/QSharedPointer> QT_BEGIN_NAMESPACE @@ -246,7 +247,7 @@ public: LifeTimeIntervals::Ptr lifeTimeIntervals() const; - QSet<IR::Jump *> calculateOptionalJumps(); + BitVector calculateOptionalJumps(); static void showMeTheCode(Function *function, const char *marker); @@ -340,7 +341,7 @@ public: } protected: - virtual int allocateFreeSlot() + int allocateFreeSlot() override { for (int i = 0, ei = _slotIsInUse.size(); i != ei; ++i) { if (!_slotIsInUse[i]) { @@ -357,7 +358,7 @@ protected: return -1; } - virtual void process(IR::Stmt *s) + void process(IR::Stmt *s) override { // qDebug("L%d statement %d:", _currentBasicBlock->index, s->id); @@ -411,8 +412,8 @@ protected: } } moves.order(); - QList<IR::Move *> newMoves = moves.insertMoves(_currentBasicBlock, _function, true); - foreach (IR::Move *move, newMoves) + const QList<IR::Move *> newMoves = moves.insertMoves(_currentBasicBlock, _function, true); + for (IR::Move *move : newMoves) visit(move); } } @@ -437,13 +438,13 @@ protected: // qDebug() << "\t - force activating temp" << t.index << "on slot" << _stackSlotForTemp[t.index]; } - virtual void visitPhi(IR::Phi *phi) + void visitPhi(IR::Phi *phi) override { Q_UNUSED(phi); #if !defined(QT_NO_DEBUG) Q_ASSERT(_stackSlotForTemp.contains(phi->targetTemp->index)); Q_ASSERT(_slotIsInUse[_stackSlotForTemp[phi->targetTemp->index]]); - foreach (IR::Expr *e, phi->incoming) { + for (IR::Expr *e : phi->incoming) { if (IR::Temp *t = e->asTemp()) Q_ASSERT(_stackSlotForTemp.contains(t->index)); } diff --git a/src/qml/debugger/qqmldebugconnector.cpp b/src/qml/debugger/qqmldebugconnector.cpp index 23440e7529..029df1e748 100644 --- a/src/qml/debugger/qqmldebugconnector.cpp +++ b/src/qml/debugger/qqmldebugconnector.cpp @@ -134,9 +134,11 @@ QQmlDebugConnector *QQmlDebugConnector::instance() } if (params->instance) { - foreach (const QJsonObject &object, metaDataForQQmlDebugService()) { - foreach (const QJsonValue &key, object.value(QLatin1String("MetaData")).toObject() - .value(QLatin1String("Keys")).toArray()) { + const auto metaData = metaDataForQQmlDebugService(); + for (const QJsonObject &object : metaData) { + const auto keys = object.value(QLatin1String("MetaData")).toObject() + .value(QLatin1String("Keys")).toArray(); + for (const QJsonValue &key : keys) { QString keyString = key.toString(); if (params->services.isEmpty() || params->services.contains(keyString)) loadQQmlDebugService(keyString); diff --git a/src/qml/jit/qv4isel_masm.cpp b/src/qml/jit/qv4isel_masm.cpp index d06d6907e5..12b1eb4473 100644 --- a/src/qml/jit/qv4isel_masm.cpp +++ b/src/qml/jit/qv4isel_masm.cpp @@ -113,8 +113,7 @@ static void printDisassembledOutputWithCalls(QByteArray processedOutput, const Q { for (QHash<void*, const char*>::ConstIterator it = functions.begin(), end = functions.end(); it != end; ++it) { - QByteArray ptrString = QByteArray::number(quintptr(it.key()), 16); - ptrString.prepend("0x"); + const QByteArray ptrString = "0x" + QByteArray::number(quintptr(it.key()), 16); int idx = processedOutput.indexOf(ptrString); if (idx < 0) continue; @@ -191,11 +190,8 @@ JSC::MacroAssemblerCodeRef Assembler::link(int *codeSize) WTF::setDataFile(new QIODevicePrintStream(&buf)); name = _function->name->toUtf8(); - if (name.isEmpty()) { - name = QByteArray::number(quintptr(_function), 16); - name.prepend("IR::Function(0x"); - name.append(')'); - } + if (name.isEmpty()) + name = "IR::Function(0x" + QByteArray::number(quintptr(_function), 16) + ')'; codeRef = linkBuffer.finalizeCodeWithDisassembly("%s", name.data()); WTF::setDataFile(stderr); @@ -232,11 +228,8 @@ JSC::MacroAssemblerCodeRef Assembler::link(int *codeSize) // this may have been pre-populated, if QV4_SHOW_ASM was on if (name.isEmpty()) { name = _function->name->toUtf8(); - if (name.isEmpty()) { - name = QByteArray::number(quintptr(_function), 16); - name.prepend("IR::Function(0x"); - name.append(')'); - } + if (name.isEmpty()) + name = "IR::Function(0x" + QByteArray::number(quintptr(_function), 16) + ')'; } fprintf(pmap, "%llx %x %.*s\n", @@ -288,7 +281,7 @@ void InstructionSelection::run(int functionIndex) IR::Optimizer::showMeTheCode(_function, "After stack slot allocation"); calculateRegistersToSave(Assembler::getRegisterInfo()); // FIXME: this saves all registers. We can probably do with a subset: those that are not used by the register allocator. } - QSet<IR::Jump *> removableJumps = opt.calculateOptionalJumps(); + BitVector removableJumps = opt.calculateOptionalJumps(); qSwap(_removableJumps, removableJumps); Assembler* oldAssembler = _as; @@ -1384,7 +1377,7 @@ void InstructionSelection::constructValue(IR::Expr *value, IR::ExprList *args, I void InstructionSelection::visitJump(IR::Jump *s) { - if (!_removableJumps.contains(s)) + if (!_removableJumps.at(_block->index())) _as->jumpToBlock(_block, s->target); } diff --git a/src/qml/jit/qv4isel_masm_p.h b/src/qml/jit/qv4isel_masm_p.h index 88241bd503..1742ff9a36 100644 --- a/src/qml/jit/qv4isel_masm_p.h +++ b/src/qml/jit/qv4isel_masm_p.h @@ -54,6 +54,7 @@ #include "private/qv4jsir_p.h" #include "private/qv4isel_p.h" #include "private/qv4isel_util_p.h" +#include "private/qv4util_p.h" #include "private/qv4value_p.h" #include "private/qv4lookup_p.h" @@ -272,7 +273,7 @@ private: } IR::BasicBlock *_block; - QSet<IR::Jump *> _removableJumps; + BitVector _removableJumps; Assembler* _as; QScopedPointer<CompilationUnit> compilationUnit; diff --git a/src/qml/jsruntime/jsruntime.pri b/src/qml/jsruntime/jsruntime.pri index e72b06359e..63cf8779d2 100644 --- a/src/qml/jsruntime/jsruntime.pri +++ b/src/qml/jsruntime/jsruntime.pri @@ -83,7 +83,6 @@ HEADERS += \ $$PWD/qv4serialize_p.h \ $$PWD/qv4script_p.h \ $$PWD/qv4scopedvalue_p.h \ - $$PWD/qv4util_p.h \ $$PWD/qv4executableallocator_p.h \ $$PWD/qv4sequenceobject_p.h \ $$PWD/qv4include_p.h \ @@ -102,6 +101,7 @@ HEADERS += \ $$PWD/qv4runtimeapi_p.h \ $$PWD/qv4value_p.h \ $$PWD/qv4string_p.h \ + $$PWD/qv4util_p.h \ $$PWD/qv4value_p.h SOURCES += \ diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index f8110d29f6..fe2aa1abdd 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -457,7 +457,7 @@ ExecutionEngine::~ExecutionEngine() QSet<QV4::CompiledData::CompilationUnit*> remainingUnits; qSwap(compilationUnits, remainingUnits); - foreach (QV4::CompiledData::CompilationUnit *unit, remainingUnits) + for (QV4::CompiledData::CompilationUnit *unit : qAsConst(remainingUnits)) unit->unlink(); emptyClass->destroy(); @@ -1021,7 +1021,7 @@ ReturnedValue ExecutionEngine::throwURIError(const Value &msg) ReturnedValue ExecutionEngine::throwUnimplemented(const QString &message) { Scope scope(this); - ScopedValue v(scope, newString(QStringLiteral("Unimplemented ") + message)); + ScopedValue v(scope, newString(QLatin1String("Unimplemented ") + message)); v = newErrorObject(v); return throwError(v); } diff --git a/src/qml/jsruntime/qv4executableallocator.cpp b/src/qml/jsruntime/qv4executableallocator.cpp index 6fe25f192d..64ac1267ce 100644 --- a/src/qml/jsruntime/qv4executableallocator.cpp +++ b/src/qml/jsruntime/qv4executableallocator.cpp @@ -147,7 +147,7 @@ ExecutableAllocator::ExecutableAllocator() ExecutableAllocator::~ExecutableAllocator() { - foreach (ChunkOfPages *chunk, chunks) { + for (ChunkOfPages *chunk : qAsConst(chunks)) { for (Allocation *allocation = chunk->firstAllocation; allocation; allocation = allocation->next) if (!allocation->free) allocation->invalidate(); diff --git a/src/qml/jsruntime/qv4numberobject.cpp b/src/qml/jsruntime/qv4numberobject.cpp index f8e0d8763b..444a4cd6f0 100644 --- a/src/qml/jsruntime/qv4numberobject.cpp +++ b/src/qml/jsruntime/qv4numberobject.cpp @@ -63,7 +63,9 @@ NumberLocale::NumberLocale() : QLocale(QLocale::C), // -128 means shortest string that can accurately represent the number. defaultDoublePrecision(0xffffff80) { - setNumberOptions(QLocale::OmitGroupSeparator | QLocale::OmitLeadingZeroInExponent); + setNumberOptions(QLocale::OmitGroupSeparator | + QLocale::OmitLeadingZeroInExponent | + QLocale::IncludeTrailingZeroesAfterDot); } const NumberLocale *NumberLocale::instance() @@ -291,24 +293,6 @@ ReturnedValue NumberPrototype::method_toPrecision(CallContext *ctx) return ctx->engine()->throwRangeError(error); } - // TODO: Once we get a NumberOption to retain trailing zeroes, replace the code below with: - // QString result = NumberLocale::instance()->toString(v->asDouble(), 'g', precision); - QByteArray format = "%#." + QByteArray::number(precision) + "g"; - QString result = QString::asprintf(format.constData(), v->asDouble()); - if (result.endsWith(QLatin1Char('.'))) { - // This is 'f' notation, not 'e'. - result.chop(1); - } else { - int ePos = result.indexOf(QLatin1Char('e')); - if (ePos != -1) { - Q_ASSERT(ePos + 2 < result.length()); // always '+' or '-', and number, after 'e' - Q_ASSERT(ePos > 0); // 'e' is not the first character - - if (result.at(ePos + 2) == QLatin1Char('0')) // Drop leading zeroes in exponent - result = result.remove(ePos + 2, 1); - if (result.at(ePos - 1) == QLatin1Char('.')) // Drop trailing dots before 'e' - result = result.remove(ePos - 1, 1); - } - } + QString result = NumberLocale::instance()->toString(v->asDouble(), 'g', precision); return scope.engine->newString(result)->asReturnedValue(); } diff --git a/src/qml/jsruntime/qv4profiling.cpp b/src/qml/jsruntime/qv4profiling.cpp index 349ec48e06..8862cbef8e 100644 --- a/src/qml/jsruntime/qv4profiling.cpp +++ b/src/qml/jsruntime/qv4profiling.cpp @@ -96,7 +96,7 @@ void Profiler::reportData(bool trackLocations) FunctionLocationHash locations; properties.reserve(m_data.size()); - foreach (const FunctionCall &call, m_data) { + for (const FunctionCall &call : qAsConst(m_data)) { properties.append(call.properties()); Function *function = call.function(); SentMarker &marker = m_sentLocations[reinterpret_cast<quintptr>(function)]; diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp index 5d5db8bed4..7707f3ba24 100644 --- a/src/qml/jsruntime/qv4qobjectwrapper.cpp +++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp @@ -1302,9 +1302,8 @@ static QV4::ReturnedValue CallPrecise(const QQmlObjectOrGadget &object, const QQ int returnType = object.methodReturnType(data, &unknownTypeError); if (returnType == QMetaType::UnknownType) { - QString typeName = QString::fromLatin1(unknownTypeError); - QString error = QStringLiteral("Unknown method return type: %1").arg(typeName); - return engine->throwError(error); + return engine->throwError(QLatin1String("Unknown method return type: ") + + QLatin1String(unknownTypeError)); } if (data.hasArguments()) { @@ -1319,9 +1318,8 @@ static QV4::ReturnedValue CallPrecise(const QQmlObjectOrGadget &object, const QQ args = object.methodParameterTypes(data.coreIndex(), &storage, &unknownTypeError); if (!args) { - QString typeName = QString::fromLatin1(unknownTypeError); - QString error = QStringLiteral("Unknown method parameter type: %1").arg(typeName); - return engine->throwError(error); + return engine->throwError(QLatin1String("Unknown method parameter type: ") + + QLatin1String(unknownTypeError)); } if (args[0] > callArgs->argc) { @@ -1898,8 +1896,8 @@ ReturnedValue QMetaObjectWrapper::constructInternal(CallData * callData) const { ExecutionEngine *v4 = engine(); const QMetaObject* mo = d()->metaObject; if (d()->constructors.isEmpty()) { - return v4->throwTypeError(QStringLiteral("%1 has no invokable constructor") - .arg(QLatin1String(mo->className()))); + return v4->throwTypeError(QLatin1String(mo->className()) + + QLatin1String(" has no invokable constructor")); } Scope scope(v4); diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp index b7a4c4f643..e82e7eb804 100644 --- a/src/qml/jsruntime/qv4runtime.cpp +++ b/src/qml/jsruntime/qv4runtime.cpp @@ -176,7 +176,7 @@ struct RuntimeCounters::Data { } std::sort(lines.begin(), lines.end(), Line::less); outs << lines.size() << " counters:" << endl; - foreach (const Line &line, lines) + for (const Line &line : qAsConst(lines)) outs << qSetFieldWidth(10) << line.count << qSetFieldWidth(0) << " | " << line.func << " | " << pretty(line.tag1) diff --git a/src/qml/jsruntime/qv4script.cpp b/src/qml/jsruntime/qv4script.cpp index e3475e5cd6..b40307d2f0 100644 --- a/src/qml/jsruntime/qv4script.cpp +++ b/src/qml/jsruntime/qv4script.cpp @@ -157,7 +157,8 @@ void Script::parse() const bool parsed = parser.parseProgram(); - foreach (const QQmlJS::DiagnosticMessage &m, parser.diagnosticMessages()) { + const auto diagnosticMessages = parser.diagnosticMessages(); + for (const QQmlJS::DiagnosticMessage &m : diagnosticMessages) { if (m.isError()) { valueScope.engine->throwSyntaxError(m.message, sourceFile, m.loc.startLine, m.loc.startColumn); return; @@ -259,7 +260,8 @@ QQmlRefPointer<QV4::CompiledData::CompilationUnit> Script::precompile(IR::Module QList<QQmlError> errors; - foreach (const QQmlJS::DiagnosticMessage &m, parser.diagnosticMessages()) { + const auto diagnosticMessages = parser.diagnosticMessages(); + for (const QQmlJS::DiagnosticMessage &m : diagnosticMessages) { if (m.isWarning()) { qWarning("%s:%d : %s", qPrintable(url.toString()), m.loc.startLine, qPrintable(m.message)); continue; diff --git a/src/qml/jsruntime/qv4util_p.h b/src/qml/jsruntime/qv4util_p.h index 59c12c5e46..2669a3e4bf 100644 --- a/src/qml/jsruntime/qv4util_p.h +++ b/src/qml/jsruntime/qv4util_p.h @@ -90,6 +90,9 @@ public: : bits(size, value) {} + void clear() + { bits = std::vector<bool>(bits.size(), false); } + void reserve(int size) { bits.reserve(size); } @@ -153,6 +156,9 @@ public: : bits(size, value) {} + void clear() + { bits = QBitArray(bits.size(), false); } + void reserve(int size) { Q_UNUSED(size); } diff --git a/src/qml/jsruntime/qv4variantobject.cpp b/src/qml/jsruntime/qv4variantobject.cpp index 444c0a37e0..39b41dd0d8 100644 --- a/src/qml/jsruntime/qv4variantobject.cpp +++ b/src/qml/jsruntime/qv4variantobject.cpp @@ -138,8 +138,11 @@ QV4::ReturnedValue VariantPrototype::method_toString(CallContext *ctx) if (!o) return Encode::undefined(); QString result = o->d()->data.toString(); - if (result.isEmpty() && !o->d()->data.canConvert(QVariant::String)) - result = QStringLiteral("QVariant(%0)").arg(QString::fromLatin1(o->d()->data.typeName())); + if (result.isEmpty() && !o->d()->data.canConvert(QVariant::String)) { + result = QLatin1String("QVariant(") + + QLatin1String(o->d()->data.typeName()) + + QLatin1Char(')'); + } return Encode(ctx->d()->engine->newString(result)); } diff --git a/src/qml/qml/qqmlcomponent.cpp b/src/qml/qml/qqmlcomponent.cpp index 5a440bdaf4..41f804f0ae 100644 --- a/src/qml/qml/qqmlcomponent.cpp +++ b/src/qml/qml/qqmlcomponent.cpp @@ -376,7 +376,7 @@ QQmlComponent::~QQmlComponent() if (isError()) { qWarning() << "This may have been caused by one of the following errors:"; - foreach (const QQmlError &error, d->state.errors) + for (const QQmlError &error : qAsConst(d->state.errors)) qWarning().nospace().noquote() << QLatin1String(" ") << error; } @@ -709,7 +709,7 @@ QString QQmlComponent::errorString() const QString ret; if(!isError()) return ret; - foreach(const QQmlError &e, d->state.errors) { + for (const QQmlError &e : d->state.errors) { ret += e.url().toString() + QLatin1Char(':') + QString::number(e.line()) + QLatin1Char(' ') + e.description() + QLatin1Char('\n'); diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp index cb51c18925..01f1f93b81 100644 --- a/src/qml/qml/qqmlengine.cpp +++ b/src/qml/qml/qqmlengine.cpp @@ -1006,8 +1006,8 @@ QQmlEngine::~QQmlEngine() // we do this here and not in the private dtor since otherwise a crash can // occur (if we are the QObject parent of the QObject singleton instance) // XXX TODO: performance -- store list of singleton types separately? - QList<QQmlType*> singletonTypes = QQmlMetaType::qmlSingletonTypes(); - foreach (QQmlType *currType, singletonTypes) + const QList<QQmlType*> singletonTypes = QQmlMetaType::qmlSingletonTypes(); + for (QQmlType *currType : singletonTypes) currType->singletonInstanceInfo()->destroy(this); delete d->rootContext; diff --git a/src/qml/qml/qqmlimport.cpp b/src/qml/qml/qqmlimport.cpp index 98e2f9eefd..4c5179dc75 100644 --- a/src/qml/qml/qqmlimport.cpp +++ b/src/qml/qml/qqmlimport.cpp @@ -229,7 +229,7 @@ public: }; QList<Import *> imports; - Import *findImport(const QString &uri); + Import *findImport(const QString &uri) const; bool resolveType(QQmlTypeLoader *typeLoader, const QHashedStringRef& type, int *vmajor, int *vminor, QQmlType** type_return, @@ -453,7 +453,7 @@ QList<QQmlImports::ScriptReference> QQmlImports::resolvedScripts() const for (int ii = set.imports.count() - 1; ii >= 0; --ii) { const QQmlImportNamespace::Import *import = set.imports.at(ii); - foreach (const QQmlDirParser::Script &script, import->qmlDirScripts) { + for (const QQmlDirParser::Script &script : import->qmlDirScripts) { ScriptReference ref; ref.nameSpace = script.nameSpace; ref.location = QUrl(import->url).resolved(QUrl(script.fileName)); @@ -467,7 +467,7 @@ QList<QQmlImports::ScriptReference> QQmlImports::resolvedScripts() const for (int ii = set.imports.count() - 1; ii >= 0; --ii) { const QQmlImportNamespace::Import *import = set.imports.at(ii); - foreach (const QQmlDirParser::Script &script, import->qmlDirScripts) { + for (const QQmlDirParser::Script &script : import->qmlDirScripts) { ScriptReference ref; ref.nameSpace = script.nameSpace; ref.qualifier = set.prefix; @@ -784,14 +784,13 @@ bool QQmlImportsPrivate::resolveType(const QHashedStringRef& type, int *vmajor, return false; } -QQmlImportNamespace::Import *QQmlImportNamespace::findImport(const QString &uri) +QQmlImportNamespace::Import *QQmlImportNamespace::findImport(const QString &uri) const { - for (QList<Import *>::iterator it = imports.begin(), end = imports.end(); it != end; ++it) { - if ((*it)->uri == uri) - return *it; + for (Import *import : imports) { + if (import->uri == uri) + return import; } - - return 0; + return nullptr; } bool QQmlImportNamespace::resolveType(QQmlTypeLoader *typeLoader, const QHashedStringRef &type, @@ -898,6 +897,21 @@ static QStringList versionUriList(const QString &uri, int vmaj, int vmin) } #ifndef QT_NO_LIBRARY +static QVector<QStaticPlugin> makePlugins() +{ + QVector<QStaticPlugin> plugins; + // To avoid traversing all static plugins for all imports, we cut down + // the list the first time called to only contain QML plugins: + const auto staticPlugins = QPluginLoader::staticPlugins(); + for (const QStaticPlugin &plugin : staticPlugins) { + if (plugin.metaData().value(QLatin1String("IID")).toString() + == QLatin1String(QQmlExtensionInterface_iid)) { + plugins.append(plugin); + } + } + return plugins; +} + /*! Get all static plugins that are QML plugins and has a meta data URI that matches with one of \a versionUris, which is a list of all possible versioned URI combinations - see versionUriList() @@ -906,17 +920,8 @@ static QStringList versionUriList(const QString &uri, int vmaj, int vmin) bool QQmlImportsPrivate::populatePluginPairVector(QVector<StaticPluginPair> &result, const QString &uri, const QStringList &versionUris, const QString &qmldirPath, QList<QQmlError> *errors) { - static QVector<QStaticPlugin> plugins; - if (plugins.isEmpty()) { - // To avoid traversing all static plugins for all imports, we cut down - // the list the first time called to only contain QML plugins: - foreach (const QStaticPlugin &plugin, QPluginLoader::staticPlugins()) { - if (plugin.metaData().value(QLatin1String("IID")).toString() == QLatin1String(QQmlExtensionInterface_iid)) - plugins.append(plugin); - } - } - - foreach (const QStaticPlugin &plugin, plugins) { + static const QVector<QStaticPlugin> plugins = makePlugins(); + for (const QStaticPlugin &plugin : plugins) { // Since a module can list more than one plugin, we keep iterating even after we found a match. if (QQmlExtensionPlugin *instance = qobject_cast<QQmlExtensionPlugin *>(plugin.instance())) { const QJsonArray metaTagsUriList = plugin.metaData().value(QLatin1String("uri")).toArray(); @@ -931,7 +936,7 @@ bool QQmlImportsPrivate::populatePluginPairVector(QVector<StaticPluginPair> &res return false; } // A plugin can be set up to handle multiple URIs, so go through the list: - foreach (const QJsonValue &metaTagUri, metaTagsUriList) { + for (const QJsonValue &metaTagUri : metaTagsUriList) { if (versionUris.contains(metaTagUri.toString())) { result.append(qMakePair(plugin, metaTagsUriList)); break; @@ -998,7 +1003,8 @@ bool QQmlImportsPrivate::importExtension(const QString &qmldirFilePath, int staticPluginsFound = 0; #if defined(QT_SHARED) - foreach (const QQmlDirParser::Plugin &plugin, qmldir->plugins()) { + const auto qmldirPlugins = qmldir->plugins(); + for (const QQmlDirParser::Plugin &plugin : qmldirPlugins) { QString resolvedFilePath = database->resolvePlugin(typeLoader, qmldirPath, plugin.path, plugin.name); if (!resolvedFilePath.isEmpty()) { dynamicPluginsFound++; @@ -1032,8 +1038,8 @@ bool QQmlImportsPrivate::importExtension(const QString &qmldirFilePath, const QString basePath = QFileInfo(qmldirPath).absoluteFilePath(); for (const QString &versionUri : versionUris) { - foreach (const StaticPluginPair &pair, pluginPairs) { - foreach (const QJsonValue &metaTagUri, pair.second) { + for (const StaticPluginPair &pair : qAsConst(pluginPairs)) { + for (const QJsonValue &metaTagUri : pair.second) { if (versionUri == metaTagUri.toString()) { staticPluginsFound++; QObject *instance = pair.first.instance(); @@ -1130,7 +1136,7 @@ QString QQmlImportsPrivate::resolvedUri(const QString &dir_arg, QQmlImportDataba std::sort(paths.begin(), paths.end(), I::greaterThan); // Ensure subdirs preceed their parents. QString stableRelativePath = dir; - foreach(const QString &path, paths) { + for (const QString &path : qAsConst(paths)) { if (dir.startsWith(path)) { stableRelativePath = dir.mid(path.length()+1); break; @@ -1671,8 +1677,7 @@ QString QQmlImportDatabase::resolvePlugin(QQmlTypeLoader *typeLoader, if (!qmldirPluginPathIsRelative) searchPaths.prepend(qmldirPluginPath); - foreach (const QString &pluginPath, searchPaths) { - + for (const QString &pluginPath : qAsConst(searchPaths)) { QString resolvedPath; if (pluginPath == QLatin1String(".")) { if (qmldirPluginPathIsRelative && !qmldirPluginPath.isEmpty() && qmldirPluginPath != QLatin1String(".")) @@ -1694,7 +1699,7 @@ QString QQmlImportDatabase::resolvePlugin(QQmlTypeLoader *typeLoader, resolvedPath += Slash; resolvedPath += prefix + baseName; - foreach (const QString &suffix, suffixes) { + for (const QString &suffix : suffixes) { const QString absolutePath = typeLoader->absoluteFilePath(resolvedPath + suffix); if (!absolutePath.isEmpty()) return absolutePath; @@ -1836,7 +1841,7 @@ QStringList QQmlImportDatabase::importPathList(PathType type) const return fileImportPath; QStringList list; - foreach (const QString &path, fileImportPath) { + for (const QString &path : fileImportPath) { bool localPath = isPathAbsolute(path) || QQmlFile::isLocalFile(path); if (localPath == (type == Local)) list.append(path); @@ -1930,7 +1935,7 @@ bool QQmlImportDatabase::registerPluginTypes(QObject *instance, const QString &b if (!registrationFailures.isEmpty()) { if (errors) { - foreach (const QString &failure, registrationFailures) { + for (const QString &failure : qAsConst(registrationFailures)) { QQmlError error; error.setDescription(failure); errors->prepend(error); diff --git a/src/qml/qml/qqmlmetatype.cpp b/src/qml/qml/qqmlmetatype.cpp index ce0f4b798a..08acb330b1 100644 --- a/src/qml/qml/qqmlmetatype.cpp +++ b/src/qml/qml/qqmlmetatype.cpp @@ -1444,11 +1444,11 @@ bool qmlProtectModule(const char *uri, int majVersion) bool QQmlMetaType::namespaceContainsRegistrations(const QString &uri, int majorVersion) { - QQmlMetaTypeData *data = metaTypeData(); + const QQmlMetaTypeData *data = metaTypeData(); // Has any type previously been installed to this namespace? QHashedString nameSpace(uri); - foreach (const QQmlType *type, data->types) + for (const QQmlType *type : data->types) if (type->module() == nameSpace && type->majorVersion() == majorVersion) return true; diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp index 566f5ef767..d4dc668bdc 100644 --- a/src/qml/qml/qqmltypeloader.cpp +++ b/src/qml/qml/qqmltypeloader.cpp @@ -1364,7 +1364,8 @@ bool QQmlTypeLoader::Blob::updateQmldir(QQmlQmldirData *data, const QV4::Compile // Does this library contain any qualified scripts? QUrl libraryUrl(qmldirUrl); const QmldirContent *qmldir = typeLoader()->qmldirContent(qmldirIdentifier); - foreach (const QQmlDirParser::Script &script, qmldir->scripts()) { + const auto qmldirScripts = qmldir->scripts(); + for (const QQmlDirParser::Script &script : qmldirScripts) { QUrl scriptUrl = libraryUrl.resolved(QUrl(script.fileName)); QQmlScriptBlob *blob = typeLoader()->getScript(scriptUrl); addDependency(blob); @@ -1411,7 +1412,8 @@ bool QQmlTypeLoader::Blob::addImport(const QV4::CompiledData::Import *import, QL // Does this library contain any qualified scripts? QUrl libraryUrl(qmldirUrl); const QmldirContent *qmldir = typeLoader()->qmldirContent(qmldirFilePath); - foreach (const QQmlDirParser::Script &script, qmldir->scripts()) { + const auto qmldirScripts = qmldir->scripts(); + for (const QQmlDirParser::Script &script : qmldirScripts) { QUrl scriptUrl = libraryUrl.resolved(QUrl(script.fileName)); QQmlScriptBlob *blob = typeLoader()->getScript(scriptUrl); addDependency(blob); @@ -2379,7 +2381,7 @@ bool QQmlTypeData::loadFromSource() if (!compiler.generateFromQml(code, finalUrlString(), m_document.data())) { QList<QQmlError> errors; errors.reserve(compiler.errors.count()); - foreach (const QQmlJS::DiagnosticMessage &msg, compiler.errors) { + for (const QQmlJS::DiagnosticMessage &msg : qAsConst(compiler.errors)) { QQmlError e; e.setUrl(finalUrl()); e.setLine(msg.loc.startLine); @@ -2514,8 +2516,8 @@ void QQmlTypeData::compile(const QQmlRefPointer<QQmlTypeNameCache> &importCache, void QQmlTypeData::resolveTypes() { // Add any imported scripts to our resolved set - foreach (const QQmlImports::ScriptReference &script, m_importCache.resolvedScripts()) - { + const auto resolvedScripts = m_importCache.resolvedScripts(); + for (const QQmlImports::ScriptReference &script : resolvedScripts) { QQmlScriptBlob *blob = typeLoader()->getScript(script.location); addDependency(blob); @@ -2535,7 +2537,8 @@ void QQmlTypeData::resolveTypes() } // Lets handle resolved composite singleton types - foreach (const QQmlImports::CompositeSingletonReference &csRef, m_importCache.resolvedCompositeSingletons()) { + const auto resolvedCompositeSingletons = m_importCache.resolvedCompositeSingletons(); + for (const QQmlImports::CompositeSingletonReference &csRef : resolvedCompositeSingletons) { TypeReference ref; QString typeName; if (!csRef.prefix.isEmpty()) { diff --git a/src/qml/qml/qqmlxmlhttprequest.cpp b/src/qml/qml/qqmlxmlhttprequest.cpp index 85e17525a5..dd517374a5 100644 --- a/src/qml/qml/qqmlxmlhttprequest.cpp +++ b/src/qml/qml/qqmlxmlhttprequest.cpp @@ -817,7 +817,8 @@ ReturnedValue Document::load(ExecutionEngine *v4, const QByteArray &data) } nodeStack.append(node); - foreach (const QXmlStreamAttribute &a, reader.attributes()) { + const auto attributes = reader.attributes(); + for (const QXmlStreamAttribute &a : attributes) { NodeImpl *attr = new NodeImpl; attr->document = document; attr->type = NodeImpl::Attr; @@ -1171,10 +1172,10 @@ QString QQmlXMLHttpRequest::headers() const void QQmlXMLHttpRequest::fillHeadersList() { - QList<QByteArray> headerList = m_network->rawHeaderList(); + const QList<QByteArray> headerList = m_network->rawHeaderList(); m_headersList.clear(); - foreach (const QByteArray &header, headerList) { + for (const QByteArray &header : headerList) { HeaderPair pair (header.toLower(), m_network->rawHeader(header)); if (pair.first == "set-cookie" || pair.first == "set-cookie2") @@ -1432,7 +1433,7 @@ void QQmlXMLHttpRequest::finished() void QQmlXMLHttpRequest::readEncoding() { - foreach (const HeaderPair &header, m_headersList) { + for (const HeaderPair &header : qAsConst(m_headersList)) { if (header.first == "content-type") { int separatorIdx = header.second.indexOf(';'); if (separatorIdx == -1) { diff --git a/src/qml/types/qqmllistmodel.cpp b/src/qml/types/qqmllistmodel.cpp index f7fdbf0d80..2786c9c1e4 100644 --- a/src/qml/types/qqmllistmodel.cpp +++ b/src/qml/types/qqmllistmodel.cpp @@ -1505,14 +1505,14 @@ void DynamicRoleModelNodeMetaObject::propertyWritten(int index) } int elementIndex = parentModel->m_modelObjects.indexOf(m_owner); - int roleIndex = parentModel->m_roles.indexOf(QString::fromLatin1(name(index).constData())); - - if (elementIndex != -1 && roleIndex != -1) { - - QVector<int> roles; - roles << roleIndex; + if (elementIndex != -1) { + int roleIndex = parentModel->m_roles.indexOf(QString::fromLatin1(name(index).constData())); + if (roleIndex != -1) { + QVector<int> roles; + roles << roleIndex; - parentModel->emitItemsChanged(elementIndex, 1, roles); + parentModel->emitItemsChanged(elementIndex, 1, roles); + } } } diff --git a/src/qml/types/qqmllistmodel_p_p.h b/src/qml/types/qqmllistmodel_p_p.h index d3ff032ae9..3628372f50 100644 --- a/src/qml/types/qqmllistmodel_p_p.h +++ b/src/qml/types/qqmllistmodel_p_p.h @@ -88,7 +88,7 @@ public: void updateValues(const QVariantMap &object, QVector<int> &roles); - QVariant getValue(const QString &name) + QVariant getValue(const QString &name) const { return m_meta->value(name.toUtf8()); } diff --git a/src/qml/util/qqmladaptormodel.cpp b/src/qml/util/qqmladaptormodel.cpp index 5fc2444b7c..b9d312d41f 100644 --- a/src/qml/util/qqmladaptormodel.cpp +++ b/src/qml/util/qqmladaptormodel.cpp @@ -146,7 +146,7 @@ public: bool changed = roles.isEmpty() && !watchedRoles.isEmpty(); if (!changed && !watchedRoles.isEmpty() && watchedRoleIds.isEmpty()) { QList<int> roleIds; - foreach (const QByteArray &r, watchedRoles) { + for (const QByteArray &r : watchedRoles) { QHash<QByteArray, int>::const_iterator it = roleNames.find(r); if (it != roleNames.end()) roleIds << it.value(); @@ -190,7 +190,7 @@ public: VDMModelDelegateDataType *dataType = const_cast<VDMModelDelegateDataType *>(this); dataType->watchedRoleIds.clear(); - foreach (const QByteArray &oldRole, oldRoles) + for (const QByteArray &oldRole : oldRoles) dataType->watchedRoles.removeOne(oldRole); dataType->watchedRoles += newRoles; } diff --git a/src/qml/util/qqmlchangeset.cpp b/src/qml/util/qqmlchangeset.cpp index 088ac5e8c0..79e3332331 100644 --- a/src/qml/util/qqmlchangeset.cpp +++ b/src/qml/util/qqmlchangeset.cpp @@ -558,9 +558,15 @@ void QQmlChangeSet::change(QVector<Change> *changes) QDebug operator <<(QDebug debug, const QQmlChangeSet &set) { debug.nospace() << "QQmlChangeSet("; - foreach (const QQmlChangeSet::Change &remove, set.removes()) debug << remove; - foreach (const QQmlChangeSet::Change &insert, set.inserts()) debug << insert; - foreach (const QQmlChangeSet::Change &change, set.changes()) debug << change; + const QVector<QQmlChangeSet::Change> &removes = set.removes(); + for (const QQmlChangeSet::Change &remove : removes) + debug << remove; + const QVector<QQmlChangeSet::Change> &inserts = set.inserts(); + for (const QQmlChangeSet::Change &insert : inserts) + debug << insert; + const QVector<QQmlChangeSet::Change> &changes = set.changes(); + for (const QQmlChangeSet::Change &change : changes) + debug << change; return debug.nospace() << ')'; } diff --git a/src/qml/util/qqmllistcompositor.cpp b/src/qml/util/qqmllistcompositor.cpp index 4cfdf77b2a..05a4eaac39 100644 --- a/src/qml/util/qqmllistcompositor.cpp +++ b/src/qml/util/qqmllistcompositor.cpp @@ -964,7 +964,7 @@ void QQmlListCompositor::listItemsInserted( it.incrementIndexes(it->count); continue; } - foreach (const QQmlChangeSet::Change &insertion, insertions) { + for (const QQmlChangeSet::Change &insertion : insertions) { int offset = insertion.index - it->index; if ((offset > 0 && offset < it->count) || (offset == 0 && it->prepend()) @@ -1301,7 +1301,7 @@ void QQmlListCompositor::listItemsChanged( } else if (!it->inGroup()) { continue; } - foreach (const QQmlChangeSet::Change &change, changes) { + for (const QQmlChangeSet::Change &change : changes) { const int offset = change.index - it->index; if (offset + change.count > 0 && offset < it->count) { const int changeOffset = qMax(0, offset); diff --git a/src/qmltest/quicktestevent.cpp b/src/qmltest/quicktestevent.cpp index f722fab6c4..966a60671d 100644 --- a/src/qmltest/quicktestevent.cpp +++ b/src/qmltest/quicktestevent.cpp @@ -317,6 +317,10 @@ bool QuickTestEvent::mouseMove QWindow *QuickTestEvent::eventWindow(QObject *item) { + QWindow * window = qobject_cast<QWindow *>(item); + if (window) + return window; + QQuickItem *quickItem = qobject_cast<QQuickItem *>(item); if (quickItem) return quickItem->window(); diff --git a/src/qmltest/quicktestresult.cpp b/src/qmltest/quicktestresult.cpp index e05d29bc05..d311e7810e 100644 --- a/src/qmltest/quicktestresult.cpp +++ b/src/qmltest/quicktestresult.cpp @@ -519,7 +519,7 @@ void QuickTestResult::stringify(QQmlV4Function *args) if (result.isEmpty()) { QString tmp = value->toQStringNoThrow(); if (value->as<QV4::ArrayObject>()) - result.append(QString::fromLatin1("[%1]").arg(tmp)); + result += QLatin1Char('[') + tmp + QLatin1Char(']'); else result.append(tmp); } diff --git a/src/quick/accessible/qaccessiblequickitem.cpp b/src/quick/accessible/qaccessiblequickitem.cpp index acea958e20..58eab508ad 100644 --- a/src/quick/accessible/qaccessiblequickitem.cpp +++ b/src/quick/accessible/qaccessiblequickitem.cpp @@ -273,8 +273,8 @@ void QAccessibleQuickItem::doAction(const QString &actionName) return; // Look for and call the accessible[actionName]Action() function on the item. // This allows for overriding the default action handling. - const QByteArray functionName = QByteArrayLiteral("accessible") + actionName.toLatin1() + QByteArrayLiteral("Action"); - if (object()->metaObject()->indexOfMethod(QByteArray(functionName + QByteArrayLiteral("()"))) != -1) { + const QByteArray functionName = "accessible" + actionName.toLatin1() + "Action"; + if (object()->metaObject()->indexOfMethod(QByteArray(functionName + "()")) != -1) { QMetaObject::invokeMethod(object(), functionName); return; } diff --git a/src/quick/items/context2d/qquickcontext2d_p.h b/src/quick/items/context2d/qquickcontext2d_p.h index b526c8320d..e5d777d411 100644 --- a/src/quick/items/context2d/qquickcontext2d_p.h +++ b/src/quick/items/context2d/qquickcontext2d_p.h @@ -181,17 +181,17 @@ public: QQuickContext2D(QObject *parent = 0); ~QQuickContext2D(); - QStringList contextNames() const; - void init(QQuickCanvasItem *canvasItem, const QVariantMap &args); - void prepare(const QSize& canvasSize, const QSize& tileSize, const QRect& canvasWindow, const QRect& dirtyRect, bool smooth, bool antialiasing); - void flush(); + QStringList contextNames() const override; + void init(QQuickCanvasItem *canvasItem, const QVariantMap &args) override; + void prepare(const QSize& canvasSize, const QSize& tileSize, const QRect& canvasWindow, const QRect& dirtyRect, bool smooth, bool antialiasing) override; + void flush() override; void sync(); QThread *thread() const { return m_thread; } QQuickContext2DTexture *texture() const; - QImage toImage(const QRectF& bounds); + QImage toImage(const QRectF& bounds) override; - QV4::ReturnedValue v4value() const; - void setV4Engine(QV4::ExecutionEngine *eng); + QV4::ReturnedValue v4value() const override; + void setV4Engine(QV4::ExecutionEngine *eng) override; QQuickCanvasItem* canvas() const { return m_canvas; } QQuickContext2DCommandBuffer* buffer() const { return m_buffer; } diff --git a/src/quick/items/context2d/qquickcontext2dtexture_p.h b/src/quick/items/context2d/qquickcontext2dtexture_p.h index ed38382892..d7202ba68f 100644 --- a/src/quick/items/context2d/qquickcontext2dtexture_p.h +++ b/src/quick/items/context2d/qquickcontext2dtexture_p.h @@ -120,7 +120,7 @@ public: // Called during sync() on the scene graph thread while GUI is blocked. virtual QSGTexture *textureForNextFrame(QSGTexture *lastFrame, QQuickWindow *window) = 0; - bool event(QEvent *e); + bool event(QEvent *e) override; #ifndef QT_NO_OPENGL void initializeOpenGL(QOpenGLContext *gl, QOffscreenSurface *s) { m_gl = gl; @@ -221,17 +221,17 @@ public: QQuickContext2DImageTexture(); ~QQuickContext2DImageTexture(); - virtual QQuickCanvasItem::RenderTarget renderTarget() const; + QQuickCanvasItem::RenderTarget renderTarget() const override; - virtual QQuickContext2DTile* createTile() const; - virtual QPaintDevice* beginPainting(); - virtual void endPainting(); - virtual void compositeTile(QQuickContext2DTile* tile); + QQuickContext2DTile* createTile() const override; + QPaintDevice* beginPainting() override; + void endPainting() override; + void compositeTile(QQuickContext2DTile* tile) override; - virtual QSGTexture *textureForNextFrame(QSGTexture *lastFrame, QQuickWindow *window); + QSGTexture *textureForNextFrame(QSGTexture *lastFrame, QQuickWindow *window) override; public Q_SLOTS: - virtual void grabImage(const QRectF& region = QRectF()); + void grabImage(const QRectF& region = QRectF()) override; private: QImage m_image; diff --git a/src/quick/items/context2d/qquickcontext2dtile_p.h b/src/quick/items/context2d/qquickcontext2dtile_p.h index a87202daae..160d51ec67 100644 --- a/src/quick/items/context2d/qquickcontext2dtile_p.h +++ b/src/quick/items/context2d/qquickcontext2dtile_p.h @@ -89,12 +89,12 @@ class QQuickContext2DFBOTile : public QQuickContext2DTile public: QQuickContext2DFBOTile(); ~QQuickContext2DFBOTile(); - virtual void setRect(const QRect& r); + virtual void setRect(const QRect& r) override; QOpenGLFramebufferObject* fbo() const {return m_fbo;} - void drawFinished(); + void drawFinished() override; protected: - void aboutToDraw(); + void aboutToDraw() override; private: @@ -106,7 +106,7 @@ class QQuickContext2DImageTile : public QQuickContext2DTile public: QQuickContext2DImageTile(); ~QQuickContext2DImageTile(); - void setRect(const QRect& r); + void setRect(const QRect& r) override; const QImage& image() const {return m_image;} private: QImage m_image; diff --git a/src/quick/items/qquickgenericshadereffect.cpp b/src/quick/items/qquickgenericshadereffect.cpp index 9714f39663..2f8d71fc11 100644 --- a/src/quick/items/qquickgenericshadereffect.cpp +++ b/src/quick/items/qquickgenericshadereffect.cpp @@ -510,9 +510,9 @@ void QQuickGenericShaderEffect::updateShaderVars(Shader shaderType) QSGShaderEffectNode::VariableData &vd(m_shaders[shaderType].varData[i]); const bool isSpecial = v.name.startsWith("qt_"); // special names not mapped to properties if (isSpecial) { - if (v.name == QByteArrayLiteral("qt_Opacity")) + if (v.name == "qt_Opacity") vd.specialType = QSGShaderEffectNode::VariableData::Opacity; - else if (v.name == QByteArrayLiteral("qt_Matrix")) + else if (v.name == "qt_Matrix") vd.specialType = QSGShaderEffectNode::VariableData::Matrix; else if (v.name.startsWith("qt_SubRect_")) vd.specialType = QSGShaderEffectNode::VariableData::SubRect; diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index f983d3d649..72edb5aeb8 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -774,7 +774,7 @@ const SigMap sigMap[] = { { 0, 0 } }; -const QByteArray QQuickKeysAttached::keyToSignal(int key) +QByteArray QQuickKeysAttached::keyToSignal(int key) { QByteArray keySignal; if (key >= Qt::Key_0 && key <= Qt::Key_9) { diff --git a/src/quick/items/qquickitem_p.h b/src/quick/items/qquickitem_p.h index 6d79d71021..7a39b7c4c7 100644 --- a/src/quick/items/qquickitem_p.h +++ b/src/quick/items/qquickitem_p.h @@ -857,7 +857,7 @@ private: void inputMethodEvent(QInputMethodEvent *, bool post) Q_DECL_OVERRIDE; QVariant inputMethodQuery(Qt::InputMethodQuery query) const Q_DECL_OVERRIDE; #endif - const QByteArray keyToSignal(int key); + static QByteArray keyToSignal(int key); bool isConnected(const char *signalName); }; diff --git a/src/quick/items/qquickitemgrabresult.h b/src/quick/items/qquickitemgrabresult.h index 42d71862de..371bee52bc 100644 --- a/src/quick/items/qquickitemgrabresult.h +++ b/src/quick/items/qquickitemgrabresult.h @@ -67,7 +67,7 @@ public: Q_INVOKABLE bool saveToFile(const QString &fileName); protected: - bool event(QEvent *); + bool event(QEvent *) override; Q_SIGNALS: void ready(); diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp index e017d6564a..8f6096a75f 100644 --- a/src/quick/items/qquickitemview.cpp +++ b/src/quick/items/qquickitemview.cpp @@ -935,9 +935,11 @@ void QQuickItemViewPrivate::positionViewAtIndex(int index, int mode) return; applyPendingChanges(); - int idx = qMax(qMin(index, model->count()-1), 0); + const int modelCount = model->count(); + int idx = qMax(qMin(index, modelCount - 1), 0); - qreal pos = isContentFlowReversed() ? -position() - size() : position(); + const auto viewSize = size(); + qreal pos = isContentFlowReversed() ? -position() - viewSize : position(); FxViewItem *item = visibleItem(idx); qreal maxExtent = calculatedMaxExtent(); if (!item) { @@ -961,22 +963,22 @@ void QQuickItemViewPrivate::positionViewAtIndex(int index, int mode) pos -= headerSize(); break; case QQuickItemView::Center: - pos = itemPos - (size() - item->size())/2; + pos = itemPos - (viewSize - item->size())/2; break; case QQuickItemView::End: - pos = itemPos - size() + item->size(); - if (footer && (index >= model->count() || hasStickyFooter())) + pos = itemPos - viewSize + item->size(); + if (footer && (index >= modelCount || hasStickyFooter())) pos += footerSize(); break; case QQuickItemView::Visible: - if (itemPos > pos + size()) - pos = itemPos - size() + item->size(); + if (itemPos > pos + viewSize) + pos = itemPos - viewSize + item->size(); else if (item->endPosition() <= pos) pos = itemPos; break; case QQuickItemView::Contain: - if (item->endPosition() >= pos + size()) - pos = itemPos - size() + item->size(); + if (item->endPosition() >= pos + viewSize) + pos = itemPos - viewSize + item->size(); if (itemPos < pos) pos = itemPos; break; @@ -1787,10 +1789,11 @@ void QQuickItemViewPrivate::animationFinished(QAbstractAnimationJob *) void QQuickItemViewPrivate::refill() { qreal s = qMax(size(), qreal(0.)); + const auto pos = position(); if (isContentFlowReversed()) - refill(-position()-displayMarginBeginning-s, -position()+displayMarginEnd); + refill(-pos - displayMarginBeginning-s, -pos + displayMarginEnd); else - refill(position()-displayMarginBeginning, position()+displayMarginEnd+s); + refill(pos - displayMarginBeginning, pos + displayMarginEnd+s); } void QQuickItemViewPrivate::refill(qreal from, qreal to) diff --git a/src/quick/items/qquickopenglshadereffect.cpp b/src/quick/items/qquickopenglshadereffect.cpp index b974641cca..42fcee3c0d 100644 --- a/src/quick/items/qquickopenglshadereffect.cpp +++ b/src/quick/items/qquickopenglshadereffect.cpp @@ -284,14 +284,14 @@ void QQuickOpenGLShaderEffectCommon::updateParseLog(bool ignoreAttributes) parseLog.clear(); if (!ignoreAttributes) { if (!attributes.contains(qtPositionAttributeName())) { - parseLog += QLatin1String("Warning: Missing reference to \'"); - parseLog += QLatin1String(qtPositionAttributeName()); - parseLog += QLatin1String("\'.\n"); + parseLog += QLatin1String("Warning: Missing reference to \'") + + QLatin1String(qtPositionAttributeName()) + + QLatin1String("\'.\n"); } if (!attributes.contains(qtTexCoordAttributeName())) { - parseLog += QLatin1String("Warning: Missing reference to \'"); - parseLog += QLatin1String(qtTexCoordAttributeName()); - parseLog += QLatin1String("\'.\n"); + parseLog += QLatin1String("Warning: Missing reference to \'") + + QLatin1String(qtTexCoordAttributeName()) + + QLatin1String("\'.\n"); } } bool respectsMatrix = false; @@ -918,9 +918,7 @@ QSGNode *QQuickOpenGLShaderEffect::handleUpdatePaintNode(QSGNode *oldNode, QQuic if (!mesh->validateAttributes(m_common.attributes, &posIndex)) { QString log = mesh->log(); if (!log.isNull()) { - m_log = parseLog(); - m_log += QLatin1String("*** Mesh ***\n"); - m_log += log; + m_log = parseLog() + QLatin1String("*** Mesh ***\n") + log; m_status = QQuickShaderEffect::Error; emit m_item->logChanged(); emit m_item->statusChanged(); diff --git a/src/quick/items/qquickopenglshadereffectnode.cpp b/src/quick/items/qquickopenglshadereffectnode.cpp index 02b76b2dbc..e01ecc59e3 100644 --- a/src/quick/items/qquickopenglshadereffectnode.cpp +++ b/src/quick/items/qquickopenglshadereffectnode.cpp @@ -261,13 +261,11 @@ void QQuickCustomMaterialShader::compile() m_log.clear(); m_compiled = true; if (!program()->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShader())) { - m_log += QLatin1String("*** Vertex shader ***\n"); - m_log += program()->log(); + m_log += QLatin1String("*** Vertex shader ***\n") + program()->log(); m_compiled = false; } if (!program()->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShader())) { - m_log += QLatin1String("*** Fragment shader ***\n"); - m_log += program()->log(); + m_log += QLatin1String("*** Fragment shader ***\n") + program()->log(); m_compiled = false; } diff --git a/src/quick/items/qquickpathview.cpp b/src/quick/items/qquickpathview.cpp index e54ee66fe5..0e9eb16e67 100644 --- a/src/quick/items/qquickpathview.cpp +++ b/src/quick/items/qquickpathview.cpp @@ -69,7 +69,7 @@ inline qreal qmlMod(qreal x, qreal y) return fmod(x, y); } -static QQmlOpenMetaObjectType *qPathViewAttachedType = 0; +static QQmlOpenMetaObjectType *qPathViewAttachedType = nullptr; QQuickPathViewAttached::QQuickPathViewAttached(QObject *parent) : QObject(parent), m_percent(-1), m_view(0), m_onPath(false), m_isCurrent(false) @@ -96,7 +96,7 @@ void QQuickPathViewAttached::setValue(const QByteArray &name, const QVariant &va } QQuickPathViewPrivate::QQuickPathViewPrivate() - : path(0), currentIndex(0), currentItemOffset(0.0), startPc(0) + : path(nullptr), currentIndex(0), currentItemOffset(0.0), startPc(0) , offset(0.0), offsetAdj(0.0), mappedRange(1.0), mappedCache(0.0) , stealMouse(false), ownModel(false), interactive(true), haveHighlightRange(true) , autoHighlight(true), highlightUp(false), layoutScheduled(false) @@ -106,7 +106,7 @@ QQuickPathViewPrivate::QQuickPathViewPrivate() , moveOffset(this, &QQuickPathViewPrivate::setAdjustedOffset), flickDuration(0) , pathItems(-1), requestedIndex(-1), cacheSize(0), requestedZ(0) , moveReason(Other), movementDirection(QQuickPathView::Shortest), moveDirection(QQuickPathView::Shortest) - , attType(0), highlightComponent(0), highlightItem(0) + , attType(nullptr), highlightComponent(nullptr), highlightItem(nullptr) , moveHighlight(this, &QQuickPathViewPrivate::setHighlightPosition) , highlightPosition(0) , highlightRangeStart(0), highlightRangeEnd(0) @@ -163,7 +163,7 @@ void QQuickPathView::createdItem(int index, QObject *object) if (d->requestedIndex != index) { qPathViewAttachedType = d->attachedType(); QQuickPathViewAttached *att = static_cast<QQuickPathViewAttached *>(qmlAttachedPropertiesObject<QQuickPathView>(item)); - qPathViewAttachedType = 0; + qPathViewAttachedType = nullptr; if (att) { att->m_view = this; att->setOnPath(false); @@ -186,7 +186,7 @@ void QQuickPathView::initItem(int index, QObject *object) item->setParentItem(this); qPathViewAttachedType = d->attachedType(); QQuickPathViewAttached *att = static_cast<QQuickPathViewAttached *>(qmlAttachedPropertiesObject<QQuickPathView>(item)); - qPathViewAttachedType = 0; + qPathViewAttachedType = nullptr; if (att) { att->m_view = this; qreal percent = d->positionOfIndex(index); @@ -215,7 +215,7 @@ void QQuickPathViewPrivate::releaseItem(QQuickItem *item) att->setOnPath(false); } else if (flags & QQmlInstanceModel::Destroyed) { // but we still reference it - item->setParentItem(0); + item->setParentItem(nullptr); } } @@ -244,7 +244,7 @@ void QQuickPathViewPrivate::clear() { if (currentItem) { releaseItem(currentItem); - currentItem = 0; + currentItem = nullptr; } for (QQuickItem *p : qAsConst(items)) releaseItem(p); @@ -315,13 +315,13 @@ void QQuickPathViewPrivate::createHighlight() bool changed = false; if (highlightItem) { - highlightItem->setParentItem(0); + highlightItem->setParentItem(nullptr); highlightItem->deleteLater(); - highlightItem = 0; + highlightItem = nullptr; changed = true; } - QQuickItem *item = 0; + QQuickItem *item = nullptr; if (highlightComponent) { QQmlContext *creationContext = highlightComponent->creationContext(); QQmlContext *highlightContext = new QQmlContext( @@ -636,7 +636,7 @@ void QQuickPathView::setModel(const QVariant &m) d->modelVariant = model; QObject *object = qvariant_cast<QObject*>(model); - QQmlInstanceModel *vim = 0; + QQmlInstanceModel *vim = nullptr; if (object && (vim = qobject_cast<QQmlInstanceModel *>(object))) { if (d->ownModel) { delete d->model; @@ -716,7 +716,7 @@ void QQuickPathView::setPath(QQuickPath *path) d->clear(); if (d->attType) { d->attType->release(); - d->attType = 0; + d->attType = nullptr; } d->regenerate(); } @@ -755,7 +755,7 @@ void QQuickPathView::setCurrentIndex(int idx) } int oldCurrentIdx = d->currentIndex; QQuickItem *oldCurrentItem = d->currentItem; - d->currentItem = 0; + d->currentItem = nullptr; d->moveReason = QQuickPathViewPrivate::SetIndex; d->currentIndex = idx; if (d->modelCount) { @@ -1237,7 +1237,7 @@ QQmlComponent *QQuickPathView::delegate() const return dataModel->delegate(); } - return 0; + return nullptr; } void QQuickPathView::setDelegate(QQmlComponent *delegate) @@ -1518,7 +1518,7 @@ int QQuickPathView::indexAt(qreal x, qreal y) const { Q_D(const QQuickPathView); QQuickItem *item = itemAt(x, y); - return item ? d->model->indexOf(item, 0) : -1; + return item ? d->model->indexOf(item, nullptr) : -1; } /*! @@ -1533,7 +1533,7 @@ QQuickItem *QQuickPathView::itemAt(qreal x, qreal y) const { Q_D(const QQuickPathView); if (!d->isValid()) - return 0; + return nullptr; for (QQuickItem *item : d->items) { QPointF p = item->mapFromItem(this, QPointF(x, y)); @@ -1541,7 +1541,7 @@ QQuickItem *QQuickPathView::itemAt(qreal x, qreal y) const return item; } - return 0; + return nullptr; } QPointF QQuickPathViewPrivate::pointNear(const QPointF &point, qreal *nearPercent) const @@ -1810,7 +1810,7 @@ bool QQuickPathView::sendMouseEvent(QMouseEvent *event) QPointF localPos = mapFromScene(event->windowPos()); QQuickWindow *c = window(); - QQuickItem *grabber = c ? c->mouseGrabberItem() : 0; + QQuickItem *grabber = c ? c->mouseGrabberItem() : nullptr; if (grabber == this && d->stealMouse) { // we are already the grabber and we do want the mouse event to ourselves. return true; @@ -1836,7 +1836,7 @@ bool QQuickPathView::sendMouseEvent(QMouseEvent *event) default: break; } - grabber = c ? c->mouseGrabberItem() : 0; + grabber = c ? c->mouseGrabberItem() : nullptr; if ((grabber && stealThisEvent && !grabber->keepMouseGrab() && grabber != this) || grabberDisabled) { grabMouse(); } @@ -1951,7 +1951,7 @@ void QQuickPathView::refill() QList<QQuickItem*>::iterator it = d->items.begin(); while (it != d->items.end()) { QQuickItem *item = *it; - int idx = d->model->indexOf(item, 0); + int idx = d->model->indexOf(item, nullptr); qreal pos = d->positionOfIndex(idx); if (lcItemViewDelegateLifecycle().isDebugEnabled()) { QQuickText *text = qmlobject_cast<QQuickText*>(item); @@ -1996,7 +1996,7 @@ void QQuickPathView::refill() startPos = 2.0; for (QQuickItem * item : qAsConst(d->items)) { - int idx = d->model->indexOf(item, 0); + int idx = d->model->indexOf(item, nullptr); qreal curPos = d->positionOfIndex(idx); if (curPos > endPos) { endPos = curPos; @@ -2198,7 +2198,7 @@ void QQuickPathView::modelUpdated(const QQmlChangeSet &changeSet, bool reset) if (QQuickPathViewAttached *att = d->attached(d->currentItem)) att->setIsCurrentItem(true); d->releaseItem(d->currentItem); - d->currentItem = 0; + d->currentItem = nullptr; } d->currentIndex = qMin(r.index, d->modelCount - r.count - 1); currentChanged = true; @@ -2312,7 +2312,7 @@ void QQuickPathViewPrivate::createCurrentItem() bool inItems = false; for (QQuickItem *item : qAsConst(items)) { - if (model->indexOf(item, 0) == currentIndex) { + if (model->indexOf(item, nullptr) == currentIndex) { inItems = true; break; } @@ -2350,7 +2350,7 @@ void QQuickPathViewPrivate::updateCurrent() } int oldCurrentIndex = currentIndex; currentIndex = idx; - currentItem = 0; + currentItem = nullptr; createCurrentItem(); if (oldCurrentIndex != currentIndex) emit q->currentIndexChanged(); diff --git a/src/quick/items/qquickpathview_p.h b/src/quick/items/qquickpathview_p.h index bdd56b6311..5fe08abef6 100644 --- a/src/quick/items/qquickpathview_p.h +++ b/src/quick/items/qquickpathview_p.h @@ -98,7 +98,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickPathView : public QQuickItem Q_PROPERTY(int cacheItemCount READ cacheItemCount WRITE setCacheItemCount NOTIFY cacheItemCountChanged) public: - QQuickPathView(QQuickItem *parent=0); + QQuickPathView(QQuickItem *parent = nullptr); virtual ~QQuickPathView(); QVariant model() const; diff --git a/src/quick/items/qquickshadereffectmesh.cpp b/src/quick/items/qquickshadereffectmesh.cpp index 8616bf8022..c1499579e6 100644 --- a/src/quick/items/qquickshadereffectmesh.cpp +++ b/src/quick/items/qquickshadereffectmesh.cpp @@ -95,9 +95,8 @@ bool QQuickGridMesh::validateAttributes(const QVector<QByteArray> &attributes, i return false; case 1: if (positionIndex != 0) { - m_log = QLatin1String("Error: Missing \'"); - m_log += QLatin1String(qtPositionAttributeName()); - m_log += QLatin1String("\' attribute.\n"); + m_log = QLatin1String("Error: Missing \'") + QLatin1String(qtPositionAttributeName()) + + QLatin1String("\' attribute.\n"); return false; } break; @@ -105,14 +104,12 @@ bool QQuickGridMesh::validateAttributes(const QVector<QByteArray> &attributes, i if (positionIndex == -1 || texCoordIndex == -1) { m_log.clear(); if (positionIndex == -1) { - m_log = QLatin1String("Error: Missing \'"); - m_log += QLatin1String(qtPositionAttributeName()); - m_log += QLatin1String("\' attribute.\n"); + m_log = QLatin1String("Error: Missing \'") + QLatin1String(qtPositionAttributeName()) + + QLatin1String("\' attribute.\n"); } if (texCoordIndex == -1) { - m_log += QLatin1String("Error: Missing \'"); - m_log += QLatin1String(qtTexCoordAttributeName()); - m_log += QLatin1String("\' attribute.\n"); + m_log += QLatin1String("Error: Missing \'") + QLatin1String(qtTexCoordAttributeName()) + + QLatin1String("\' attribute.\n"); } return false; } diff --git a/src/quick/items/qquicktextcontrol.cpp b/src/quick/items/qquicktextcontrol.cpp index ef7485a8e9..fe29249934 100644 --- a/src/quick/items/qquicktextcontrol.cpp +++ b/src/quick/items/qquicktextcontrol.cpp @@ -1664,8 +1664,8 @@ void QQuickTextControl::insertFromMimeData(const QMimeData *source) #ifndef QT_NO_TEXTHTMLPARSER if (source->hasFormat(QLatin1String("application/x-qrichtext")) && d->acceptRichText) { // x-qrichtext is always UTF-8 (taken from Qt3 since we don't use it anymore). - QString richtext = QString::fromUtf8(source->data(QLatin1String("application/x-qrichtext"))); - richtext.prepend(QLatin1String("<meta name=\"qrichtext\" content=\"1\" />")); + const QString richtext = QLatin1String("<meta name=\"qrichtext\" content=\"1\" />") + + QString::fromUtf8(source->data(QLatin1String("application/x-qrichtext"))); fragment = QTextDocumentFragment::fromHtml(richtext, d->doc); hasData = true; } else if (source->hasHtml() && d->acceptRichText) { diff --git a/src/quick/items/qquicktextdocument_p.h b/src/quick/items/qquicktextdocument_p.h index 3ffedb5b96..fd40669557 100644 --- a/src/quick/items/qquicktextdocument_p.h +++ b/src/quick/items/qquicktextdocument_p.h @@ -75,8 +75,8 @@ public: void setText(const QString &); int resourcesLoading() const { return outstanding; } - QSizeF intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format); - void drawObject(QPainter *p, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format); + QSizeF intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format) override; + void drawObject(QPainter *p, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format) override; QImage image(const QTextImageFormat &format); @@ -87,7 +87,7 @@ Q_SIGNALS: void imagesLoaded(); protected: - QVariant loadResource(int type, const QUrl &name); + QVariant loadResource(int type, const QUrl &name) override; QQuickPixmap *loadPixmap(QQmlContext *context, const QUrl &name); diff --git a/src/quick/scenegraph/adaptations/software/qsgsoftwareadaptation.cpp b/src/quick/scenegraph/adaptations/software/qsgsoftwareadaptation.cpp index 8ad9b50b09..92c02b4966 100644 --- a/src/quick/scenegraph/adaptations/software/qsgsoftwareadaptation.cpp +++ b/src/quick/scenegraph/adaptations/software/qsgsoftwareadaptation.cpp @@ -78,7 +78,7 @@ QSGRenderLoop *QSGSoftwareAdaptation::createWindowManager() static bool envChecked = false; if (!envChecked) { envChecked = true; - threaded = qgetenv("QSG_RENDER_LOOP") == QByteArrayLiteral("threaded"); + threaded = qgetenv("QSG_RENDER_LOOP") == "threaded"; } if (threaded) diff --git a/src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h b/src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h index 01e517e65b..d5e94cea3e 100644 --- a/src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h +++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h @@ -499,7 +499,7 @@ public: void updateRootTransforms(Node *n); void updateRootTransforms(Node *n, Node *root, const QMatrix4x4 &combined); - void updateStates(QSGNode *n); + void updateStates(QSGNode *n) override; void visitNode(Node *n); void registerWithParentRoot(QSGNode *subRoot, QSGNode *parentRoot); diff --git a/src/quick/scenegraph/coreapi/qsgnode.h b/src/quick/scenegraph/coreapi/qsgnode.h index f7ea6dbe23..1467f2233d 100644 --- a/src/quick/scenegraph/coreapi/qsgnode.h +++ b/src/quick/scenegraph/coreapi/qsgnode.h @@ -325,7 +325,7 @@ public: void setCombinedOpacity(qreal opacity); qreal combinedOpacity() const { return m_combined_opacity; } - bool isSubtreeBlocked() const; + bool isSubtreeBlocked() const override; private: qreal m_opacity; diff --git a/src/quick/scenegraph/coreapi/qsgrenderer_p.h b/src/quick/scenegraph/coreapi/qsgrenderer_p.h index 94b78a85b4..3fb23fe3cd 100644 --- a/src/quick/scenegraph/coreapi/qsgrenderer_p.h +++ b/src/quick/scenegraph/coreapi/qsgrenderer_p.h @@ -138,7 +138,7 @@ class QSGBindableFboId : public QSGBindable { public: QSGBindableFboId(GLuint); - virtual void bind() const; + void bind() const override; private: GLuint m_id; }; @@ -160,8 +160,8 @@ public: static void dump(QSGNode *n); QSGNodeDumper() : m_indent(0) {} - void visitNode(QSGNode *n); - void visitChildren(QSGNode *n); + void visitNode(QSGNode *n) override; + void visitChildren(QSGNode *n) override; private: int m_indent; diff --git a/src/quick/scenegraph/coreapi/qsgshaderrewriter.cpp b/src/quick/scenegraph/coreapi/qsgshaderrewriter.cpp index 3a35632d5c..48ab1aa52f 100644 --- a/src/quick/scenegraph/coreapi/qsgshaderrewriter.cpp +++ b/src/quick/scenegraph/coreapi/qsgshaderrewriter.cpp @@ -193,13 +193,13 @@ QByteArray qsgShaderRewriter_insertZAttributes(const char *input, QSurfaceFormat switch (profile) { case QSurfaceFormat::NoProfile: case QSurfaceFormat::CompatibilityProfile: - result += QByteArrayLiteral("attribute highp float _qt_order;\n"); - result += QByteArrayLiteral("uniform highp float _qt_zRange;\n"); + result += "attribute highp float _qt_order;\n" + "uniform highp float _qt_zRange;\n"; break; case QSurfaceFormat::CoreProfile: - result += QByteArrayLiteral("in float _qt_order;\n"); - result += QByteArrayLiteral("uniform float _qt_zRange;\n"); + result += "in float _qt_order;\n" + "uniform float _qt_zRange;\n"; break; } @@ -214,9 +214,9 @@ QByteArray qsgShaderRewriter_insertZAttributes(const char *input, QSurfaceFormat case Tokenizer::Token_CloseBrace: braceDepth--; if (braceDepth == 0) { - result += QByteArray::fromRawData(voidPos, tok.pos - 1 - voidPos); - result += QByteArrayLiteral(" gl_Position.z = (gl_Position.z * _qt_zRange + _qt_order) * gl_Position.w;\n"); - result += QByteArray(tok.pos - 1); + result += QByteArray::fromRawData(voidPos, tok.pos - 1 - voidPos) + + " gl_Position.z = (gl_Position.z * _qt_zRange + _qt_order) * gl_Position.w;\n" + + QByteArray(tok.pos - 1); return result; } break; diff --git a/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache_p.h b/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache_p.h index eeea104e91..9ad99e5c54 100644 --- a/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache_p.h +++ b/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache_p.h @@ -116,9 +116,8 @@ private: { m_blitProgram = new QOpenGLShaderProgram; { - QString source; - source.append(QLatin1String(qopenglslMainWithTexCoordsVertexShader)); - source.append(QLatin1String(qopenglslUntransformedPositionVertexShader)); + const QString source = QLatin1String(qopenglslMainWithTexCoordsVertexShader) + + QLatin1String(qopenglslUntransformedPositionVertexShader); QOpenGLShader *vertexShader = new QOpenGLShader(QOpenGLShader::Vertex, m_blitProgram); vertexShader->compileSourceCode(source); @@ -126,9 +125,8 @@ private: m_blitProgram->addShader(vertexShader); } { - QString source; - source.append(QLatin1String(qopenglslMainFragmentShader)); - source.append(QLatin1String(qopenglslImageSrcFragmentShader)); + const QString source = QLatin1String(qopenglslMainFragmentShader) + + QLatin1String(qopenglslImageSrcFragmentShader); QOpenGLShader *fragmentShader = new QOpenGLShader(QOpenGLShader::Fragment, m_blitProgram); fragmentShader->compileSourceCode(source); diff --git a/src/quick/scenegraph/qsgrenderloop.cpp b/src/quick/scenegraph/qsgrenderloop.cpp index e99e8dfe2e..a59f9ddcc7 100644 --- a/src/quick/scenegraph/qsgrenderloop.cpp +++ b/src/quick/scenegraph/qsgrenderloop.cpp @@ -209,11 +209,11 @@ QSGRenderLoop *QSGRenderLoop::instance() if (Q_UNLIKELY(qEnvironmentVariableIsSet("QSG_RENDER_LOOP"))) { const QByteArray loopName = qgetenv("QSG_RENDER_LOOP"); - if (loopName == QByteArrayLiteral("windows")) + if (loopName == "windows") loopType = WindowsRenderLoop; - else if (loopName == QByteArrayLiteral("basic")) + else if (loopName == "basic") loopType = BasicRenderLoop; - else if (loopName == QByteArrayLiteral("threaded")) + else if (loopName == "threaded") loopType = ThreadedRenderLoop; } diff --git a/src/quick/scenegraph/util/qsgatlastexture_p.h b/src/quick/scenegraph/util/qsgatlastexture_p.h index cd24645fcf..3dee539547 100644 --- a/src/quick/scenegraph/util/qsgatlastexture_p.h +++ b/src/quick/scenegraph/util/qsgatlastexture_p.h @@ -131,26 +131,26 @@ public: Texture(Atlas *atlas, const QRect &textureRect, const QImage &image); ~Texture(); - int textureId() const { return m_atlas->textureId(); } - QSize textureSize() const { return atlasSubRectWithoutPadding().size(); } + int textureId() const override { return m_atlas->textureId(); } + QSize textureSize() const override { return atlasSubRectWithoutPadding().size(); } void setHasAlphaChannel(bool alpha) { m_has_alpha = alpha; } - bool hasAlphaChannel() const { return m_has_alpha; } - bool hasMipmaps() const { return false; } - bool isAtlasTexture() const { return true; } + bool hasAlphaChannel() const override { return m_has_alpha; } + bool hasMipmaps() const override { return false; } + bool isAtlasTexture() const override { return true; } - QRectF normalizedTextureSubRect() const { return m_texture_coords_rect; } + QRectF normalizedTextureSubRect() const override { return m_texture_coords_rect; } QRect atlasSubRect() const { return m_allocated_rect; } QRect atlasSubRectWithoutPadding() const { return m_allocated_rect.adjusted(1, 1, -1, -1); } bool isTexture() const { return true; } - QSGTexture *removedFromAtlas() const; + QSGTexture *removedFromAtlas() const override; void releaseImage() { m_image = QImage(); } const QImage &image() const { return m_image; } - void bind(); + void bind() override; private: QRect m_allocated_rect; diff --git a/src/quick/scenegraph/util/qsgdefaultpainternode_p.h b/src/quick/scenegraph/util/qsgdefaultpainternode_p.h index 069ef155b1..a433b3292a 100644 --- a/src/quick/scenegraph/util/qsgdefaultpainternode_p.h +++ b/src/quick/scenegraph/util/qsgdefaultpainternode_p.h @@ -72,7 +72,7 @@ public: void setDirtyRect(const QRect &rect) { m_dirty_rect = rect; } - void bind(); + void bind() override; private: QRect m_dirty_rect; @@ -84,43 +84,43 @@ public: QSGDefaultPainterNode(QQuickPaintedItem *item); virtual ~QSGDefaultPainterNode(); - void setPreferredRenderTarget(QQuickPaintedItem::RenderTarget target); + void setPreferredRenderTarget(QQuickPaintedItem::RenderTarget target) override; - void setSize(const QSize &size); + void setSize(const QSize &size) override; QSize size() const { return m_size; } - void setDirty(const QRect &dirtyRect = QRect()); + void setDirty(const QRect &dirtyRect = QRect()) override; - void setOpaquePainting(bool opaque); + void setOpaquePainting(bool opaque) override; bool opaquePainting() const { return m_opaquePainting; } - void setLinearFiltering(bool linearFiltering); + void setLinearFiltering(bool linearFiltering) override; bool linearFiltering() const { return m_linear_filtering; } - void setMipmapping(bool mipmapping); + void setMipmapping(bool mipmapping) override; bool mipmapping() const { return m_mipmapping; } - void setSmoothPainting(bool s); + void setSmoothPainting(bool s) override; bool smoothPainting() const { return m_smoothPainting; } - void setFillColor(const QColor &c); + void setFillColor(const QColor &c) override; QColor fillColor() const { return m_fillColor; } - void setContentsScale(qreal s); + void setContentsScale(qreal s) override; qreal contentsScale() const { return m_contentsScale; } - void setFastFBOResizing(bool dynamic); + void setFastFBOResizing(bool dynamic) override; bool fastFBOResizing() const { return m_fastFBOResizing; } - void setTextureSize(const QSize &textureSize); + void setTextureSize(const QSize &textureSize) override; QSize textureSize() const { return m_textureSize; } - QImage toImage() const; - void update(); + QImage toImage() const override; + void update() override; void paint(); - QSGTexture *texture() const { return m_texture; } + QSGTexture *texture() const override { return m_texture; } private: void updateTexture(); diff --git a/src/quick/scenegraph/util/qsgdepthstencilbuffer_p.h b/src/quick/scenegraph/util/qsgdepthstencilbuffer_p.h index c2d0590532..f7c6923021 100644 --- a/src/quick/scenegraph/util/qsgdepthstencilbuffer_p.h +++ b/src/quick/scenegraph/util/qsgdepthstencilbuffer_p.h @@ -119,7 +119,7 @@ public: virtual ~QSGDefaultDepthStencilBuffer(); protected: - virtual void free(); + void free() override; }; diff --git a/src/quick/scenegraph/util/qsgflatcolormaterial.h b/src/quick/scenegraph/util/qsgflatcolormaterial.h index 7f292a2a9b..4829ac3279 100644 --- a/src/quick/scenegraph/util/qsgflatcolormaterial.h +++ b/src/quick/scenegraph/util/qsgflatcolormaterial.h @@ -49,13 +49,13 @@ class Q_QUICK_EXPORT QSGFlatColorMaterial : public QSGMaterial { public: QSGFlatColorMaterial(); - virtual QSGMaterialType *type() const; - virtual QSGMaterialShader *createShader() const; + QSGMaterialType *type() const override; + QSGMaterialShader *createShader() const override; void setColor(const QColor &color); const QColor &color() const { return m_color; } - int compare(const QSGMaterial *other) const; + int compare(const QSGMaterial *other) const override; private: QColor m_color; diff --git a/src/quick/scenegraph/util/qsgshadersourcebuilder.cpp b/src/quick/scenegraph/util/qsgshadersourcebuilder.cpp index caa296451e..25af1997a8 100644 --- a/src/quick/scenegraph/util/qsgshadersourcebuilder.cpp +++ b/src/quick/scenegraph/util/qsgshadersourcebuilder.cpp @@ -310,13 +310,10 @@ void QSGShaderSourceBuilder::addDefinition(const QByteArray &definition) const char *insertionPos = extensionPos ? extensionPos : (versionPos ? versionPos : input); // Construct a new shader string, inserting the definition - QByteArray newSource; - newSource.reserve(m_source.size() + definition.size() + 9); - newSource += QByteArray::fromRawData(input, insertionPos - input); - newSource += QByteArrayLiteral("#define ") + definition + QByteArrayLiteral("\n"); - newSource += QByteArray::fromRawData(insertionPos, m_source.size() - (insertionPos - input)); - - m_source = newSource; + QByteArray newSource = QByteArray::fromRawData(input, insertionPos - input) + + "#define " + definition + '\n' + + QByteArray::fromRawData(insertionPos, m_source.size() - (insertionPos - input)); + m_source = std::move(newSource); } void QSGShaderSourceBuilder::removeVersion() diff --git a/src/quick/scenegraph/util/qsgsimplematerial.h b/src/quick/scenegraph/util/qsgsimplematerial.h index d07a68e850..01f98767fd 100644 --- a/src/quick/scenegraph/util/qsgsimplematerial.h +++ b/src/quick/scenegraph/util/qsgsimplematerial.h @@ -149,8 +149,8 @@ public: { } - QSGMaterialShader *createShader() const { return m_func(); } - QSGMaterialType *type() const { return &m_type; } + QSGMaterialShader *createShader() const override { return m_func(); } + QSGMaterialType *type() const override { return &m_type; } State *state() { return &m_state; } const State *state() const { return &m_state; } diff --git a/src/quick/scenegraph/util/qsgtexture_p.h b/src/quick/scenegraph/util/qsgtexture_p.h index a0d7eb41e3..e09cbdbef1 100644 --- a/src/quick/scenegraph/util/qsgtexture_p.h +++ b/src/quick/scenegraph/util/qsgtexture_p.h @@ -87,19 +87,19 @@ public: bool ownsTexture() const { return m_owns_texture; } void setTextureId(int id); - int textureId() const; + int textureId() const override; void setTextureSize(const QSize &size) { m_texture_size = size; } - QSize textureSize() const { return m_texture_size; } + QSize textureSize() const override { return m_texture_size; } void setHasAlphaChannel(bool alpha) { m_has_alpha = alpha; } - bool hasAlphaChannel() const { return m_has_alpha; } + bool hasAlphaChannel() const override { return m_has_alpha; } - bool hasMipmaps() const { return mipmapFiltering() != QSGTexture::None; } + bool hasMipmaps() const override { return mipmapFiltering() != QSGTexture::None; } void setImage(const QImage &image); const QImage &image() { return m_image; } - virtual void bind(); + void bind() override; static QSGPlainTexture *fromImage(const QImage &image) { QSGPlainTexture *t = new QSGPlainTexture(); diff --git a/src/quick/scenegraph/util/qsgtexturematerial.h b/src/quick/scenegraph/util/qsgtexturematerial.h index 02b59108b3..dc87131773 100644 --- a/src/quick/scenegraph/util/qsgtexturematerial.h +++ b/src/quick/scenegraph/util/qsgtexturematerial.h @@ -50,9 +50,9 @@ class Q_QUICK_EXPORT QSGOpaqueTextureMaterial : public QSGMaterial public: QSGOpaqueTextureMaterial(); - virtual QSGMaterialType *type() const; - virtual QSGMaterialShader *createShader() const; - virtual int compare(const QSGMaterial *other) const; + QSGMaterialType *type() const override; + QSGMaterialShader *createShader() const override; + int compare(const QSGMaterial *other) const override; void setTexture(QSGTexture *texture); QSGTexture *texture() const { return m_texture; } @@ -84,8 +84,8 @@ protected: class Q_QUICK_EXPORT QSGTextureMaterial : public QSGOpaqueTextureMaterial { public: - virtual QSGMaterialType *type() const; - virtual QSGMaterialShader *createShader() const; + QSGMaterialType *type() const override; + QSGMaterialShader *createShader() const override; }; QT_END_NAMESPACE diff --git a/src/quick/scenegraph/util/qsgtexturematerial_p.h b/src/quick/scenegraph/util/qsgtexturematerial_p.h index 75e5877a72..093d820801 100644 --- a/src/quick/scenegraph/util/qsgtexturematerial_p.h +++ b/src/quick/scenegraph/util/qsgtexturematerial_p.h @@ -61,13 +61,13 @@ class Q_QUICK_PRIVATE_EXPORT QSGOpaqueTextureMaterialShader : public QSGMaterial public: QSGOpaqueTextureMaterialShader(); - virtual void updateState(const RenderState &state, QSGMaterial *newEffect, QSGMaterial *oldEffect); - virtual char const *const *attributeNames() const; + void updateState(const RenderState &state, QSGMaterial *newEffect, QSGMaterial *oldEffect) override; + char const *const *attributeNames() const override; static QSGMaterialType type; protected: - virtual void initialize(); + void initialize() override; int m_matrix_id; }; @@ -77,8 +77,8 @@ class QSGTextureMaterialShader : public QSGOpaqueTextureMaterialShader public: QSGTextureMaterialShader(); - virtual void updateState(const RenderState &state, QSGMaterial *newEffect, QSGMaterial *oldEffect); - virtual void initialize(); + void updateState(const RenderState &state, QSGMaterial *newEffect, QSGMaterial *oldEffect) override; + void initialize() override; static QSGMaterialType type; diff --git a/src/quick/scenegraph/util/qsgvertexcolormaterial.h b/src/quick/scenegraph/util/qsgvertexcolormaterial.h index 68f32d8af0..65cb642d92 100644 --- a/src/quick/scenegraph/util/qsgvertexcolormaterial.h +++ b/src/quick/scenegraph/util/qsgvertexcolormaterial.h @@ -49,11 +49,11 @@ class Q_QUICK_EXPORT QSGVertexColorMaterial : public QSGMaterial public: QSGVertexColorMaterial(); - int compare(const QSGMaterial *other) const; + int compare(const QSGMaterial *other) const override; protected: - virtual QSGMaterialType *type() const; - virtual QSGMaterialShader *createShader() const; + QSGMaterialType *type() const override; + QSGMaterialShader *createShader() const override; }; QT_END_NAMESPACE diff --git a/src/quick/util/qquickanimation_p.h b/src/quick/util/qquickanimation_p.h index 145f2656d2..e27871dcaa 100644 --- a/src/quick/util/qquickanimation_p.h +++ b/src/quick/util/qquickanimation_p.h @@ -114,8 +114,8 @@ public: void setDisableUserControl(); void setEnableUserControl(); bool userControlDisabled() const; - void classBegin(); - void componentComplete(); + void classBegin() override; + void componentComplete() override; virtual ThreadingModel threadingModel() const; @@ -150,7 +150,7 @@ public: private Q_SLOTS: void componentFinalized(); private: - virtual void setTarget(const QQmlProperty &); + void setTarget(const QQmlProperty &) override; void notifyRunningChanged(bool running); friend class QQuickBehavior; friend class QQuickBehaviorPrivate; @@ -179,7 +179,7 @@ protected: QAbstractAnimationJob* transition(QQuickStateActions &actions, QQmlProperties &modified, TransitionDirection direction, - QObject *defaultTarget = 0); + QObject *defaultTarget = 0) override; }; class QQuickScriptActionPrivate; @@ -202,10 +202,10 @@ public: void setStateChangeScriptName(const QString &); protected: - virtual QAbstractAnimationJob* transition(QQuickStateActions &actions, + QAbstractAnimationJob* transition(QQuickStateActions &actions, QQmlProperties &modified, TransitionDirection direction, - QObject *defaultTarget = 0); + QObject *defaultTarget = 0) override; }; class QQuickPropertyActionPrivate; @@ -247,10 +247,10 @@ Q_SIGNALS: void propertyChanged(); protected: - virtual QAbstractAnimationJob* transition(QQuickStateActions &actions, + QAbstractAnimationJob* transition(QQuickStateActions &actions, QQmlProperties &modified, TransitionDirection direction, - QObject *defaultTarget = 0); + QObject *defaultTarget = 0) override; }; class QQuickPropertyAnimationPrivate; @@ -303,10 +303,10 @@ protected: QObject *defaultTarget = 0); QQuickPropertyAnimation(QQuickPropertyAnimationPrivate &dd, QObject *parent); - virtual QAbstractAnimationJob* transition(QQuickStateActions &actions, + QAbstractAnimationJob* transition(QQuickStateActions &actions, QQmlProperties &modified, TransitionDirection direction, - QObject *defaultTarget = 0); + QObject *defaultTarget = 0) override; Q_SIGNALS: void durationChanged(int); void fromChanged(const QVariant &); @@ -438,11 +438,11 @@ public: virtual ~QQuickSequentialAnimation(); protected: - virtual ThreadingModel threadingModel() const; - virtual QAbstractAnimationJob* transition(QQuickStateActions &actions, + ThreadingModel threadingModel() const override; + QAbstractAnimationJob* transition(QQuickStateActions &actions, QQmlProperties &modified, TransitionDirection direction, - QObject *defaultTarget = 0); + QObject *defaultTarget = 0) override; }; class Q_QUICK_PRIVATE_EXPORT QQuickParallelAnimation : public QQuickAnimationGroup @@ -455,11 +455,11 @@ public: virtual ~QQuickParallelAnimation(); protected: - virtual ThreadingModel threadingModel() const; - virtual QAbstractAnimationJob* transition(QQuickStateActions &actions, + ThreadingModel threadingModel() const override; + QAbstractAnimationJob* transition(QQuickStateActions &actions, QQmlProperties &modified, TransitionDirection direction, - QObject *defaultTarget = 0); + QObject *defaultTarget = 0) override; }; diff --git a/src/quick/util/qquickanimation_p_p.h b/src/quick/util/qquickanimation_p_p.h index ea7bf62171..59e0e9821a 100644 --- a/src/quick/util/qquickanimation_p_p.h +++ b/src/quick/util/qquickanimation_p_p.h @@ -104,13 +104,13 @@ public: QActionAnimation(QAbstractAnimationAction *action); ~QActionAnimation(); - virtual int duration() const; + int duration() const override; void setAnimAction(QAbstractAnimationAction *action); protected: - virtual void updateCurrentTime(int); - virtual void updateState(State newState, State oldState); - void debugAnimation(QDebug d) const; + void updateCurrentTime(int) override; + void updateState(State newState, State oldState) override; + void debugAnimation(QDebug d) const override; private: QAbstractAnimationAction *animAction; @@ -137,16 +137,16 @@ public: void setFromSourcedValue(bool *value) { fromSourced = value; } - int duration() const { return m_duration; } + int duration() const override { return m_duration; } void setDuration(int msecs) { m_duration = msecs; } QEasingCurve easingCurve() const { return easing; } void setEasingCurve(const QEasingCurve &curve) { easing = curve; } protected: - void updateCurrentTime(int currentTime); - void topLevelAnimationLoopChanged(); - void debugAnimation(QDebug d) const; + void updateCurrentTime(int currentTime) override; + void topLevelAnimationLoopChanged() override; + void debugAnimation(QDebug d) const override; private: QQuickBulkValueUpdater *animValue; @@ -162,9 +162,9 @@ class QTickAnimationProxy : public QAbstractAnimationJob Q_DISABLE_COPY(QTickAnimationProxy) public: QTickAnimationProxy(T *instance) : QAbstractAnimationJob(), m_instance(instance) {} - virtual int duration() const { return -1; } + int duration() const override { return -1; } protected: - virtual void updateCurrentTime(int msec) { (m_instance->*method)(msec); } + void updateCurrentTime(int msec) override { (m_instance->*method)(msec); } private: T *m_instance; @@ -192,7 +192,7 @@ public: int loopCount; void commence(); - virtual void animationFinished(QAbstractAnimationJob *); + void animationFinished(QAbstractAnimationJob *) override; QQmlProperty defaultProperty; @@ -309,9 +309,9 @@ public: QQuickAnimationPropertyUpdater() : interpolatorType(0), interpolator(0), prevInterpolatorType(0), reverse(false), fromSourced(false), fromDefined(false), wasDeleted(0) {} ~QQuickAnimationPropertyUpdater(); - void setValue(qreal v); + void setValue(qreal v) override; - void debugUpdater(QDebug d, int indentLevel) const; + void debugUpdater(QDebug d, int indentLevel) const override; QQuickStateActions actions; int interpolatorType; //for Number/ColorAnimation diff --git a/src/quick/util/qquickanimationcontroller_p.h b/src/quick/util/qquickanimationcontroller_p.h index e37bb90a0a..43555ac1c1 100644 --- a/src/quick/util/qquickanimationcontroller_p.h +++ b/src/quick/util/qquickanimationcontroller_p.h @@ -78,8 +78,8 @@ public: QQuickAbstractAnimation *animation() const; void setAnimation(QQuickAbstractAnimation *animation); - void classBegin(); - void componentComplete() {} + void classBegin() override; + void componentComplete() override {} Q_SIGNALS: void progressChanged(); void animationChanged(); diff --git a/src/quick/util/qquickanimator_p.h b/src/quick/util/qquickanimator_p.h index f1e2d4e1d9..807ed6da58 100644 --- a/src/quick/util/qquickanimator_p.h +++ b/src/quick/util/qquickanimator_p.h @@ -86,13 +86,13 @@ public: void setFrom(qreal from); protected: - ThreadingModel threadingModel() const { return RenderThread; } + ThreadingModel threadingModel() const override { return RenderThread; } virtual QQuickAnimatorJob *createJob() const = 0; virtual QString propertyName() const = 0; QAbstractAnimationJob *transition(QQuickStateActions &actions, QQmlProperties &modified, TransitionDirection, - QObject *); + QObject *) override; QQuickAnimator(QQuickAnimatorPrivate &dd, QObject *parent = 0); QQuickAnimator(QObject *parent = 0); @@ -112,8 +112,8 @@ class Q_QUICK_PRIVATE_EXPORT QQuickScaleAnimator : public QQuickAnimator public: QQuickScaleAnimator(QObject *parent = 0); protected: - QQuickAnimatorJob *createJob() const; - QString propertyName() const { return QStringLiteral("scale"); } + QQuickAnimatorJob *createJob() const override; + QString propertyName() const override { return QStringLiteral("scale"); } }; class Q_QUICK_PRIVATE_EXPORT QQuickXAnimator : public QQuickAnimator @@ -122,8 +122,8 @@ class Q_QUICK_PRIVATE_EXPORT QQuickXAnimator : public QQuickAnimator public: QQuickXAnimator(QObject *parent = 0); protected: - QQuickAnimatorJob *createJob() const; - QString propertyName() const{ return QStringLiteral("x"); } + QQuickAnimatorJob *createJob() const override; + QString propertyName() const override { return QStringLiteral("x"); } }; class Q_QUICK_PRIVATE_EXPORT QQuickYAnimator : public QQuickAnimator @@ -132,8 +132,8 @@ class Q_QUICK_PRIVATE_EXPORT QQuickYAnimator : public QQuickAnimator public: QQuickYAnimator(QObject *parent = 0); protected: - QQuickAnimatorJob *createJob() const; - QString propertyName() const { return QStringLiteral("y"); } + QQuickAnimatorJob *createJob() const override; + QString propertyName() const override { return QStringLiteral("y"); } }; class Q_QUICK_PRIVATE_EXPORT QQuickOpacityAnimator : public QQuickAnimator @@ -142,8 +142,8 @@ class Q_QUICK_PRIVATE_EXPORT QQuickOpacityAnimator : public QQuickAnimator public: QQuickOpacityAnimator(QObject *parent = 0); protected: - QQuickAnimatorJob *createJob() const; - QString propertyName() const { return QStringLiteral("opacity"); } + QQuickAnimatorJob *createJob() const override; + QString propertyName() const override { return QStringLiteral("opacity"); } }; class QQuickRotationAnimatorPrivate; @@ -166,8 +166,8 @@ Q_SIGNALS: void directionChanged(RotationDirection dir); protected: - QQuickAnimatorJob *createJob() const; - QString propertyName() const { return QStringLiteral("rotation"); } + QQuickAnimatorJob *createJob() const override; + QString propertyName() const override { return QStringLiteral("rotation"); } }; #ifndef QT_NO_OPENGL class QQuickUniformAnimatorPrivate; @@ -187,8 +187,8 @@ Q_SIGNALS: void uniformChanged(const QString &); protected: - QQuickAnimatorJob *createJob() const; - QString propertyName() const; + QQuickAnimatorJob *createJob() const override; + QString propertyName() const override; }; #endif diff --git a/src/quick/util/qquickanimatorcontroller_p.h b/src/quick/util/qquickanimatorcontroller_p.h index 0a9902cc30..b63518abad 100644 --- a/src/quick/util/qquickanimatorcontroller_p.h +++ b/src/quick/util/qquickanimatorcontroller_p.h @@ -74,8 +74,8 @@ public: void beforeNodeSync(); void afterNodeSync(); - void animationFinished(QAbstractAnimationJob *job); - void animationStateChanged(QAbstractAnimationJob *job, QAbstractAnimationJob::State newState, QAbstractAnimationJob::State oldState); + void animationFinished(QAbstractAnimationJob *job) override; + void animationStateChanged(QAbstractAnimationJob *job, QAbstractAnimationJob::State newState, QAbstractAnimationJob::State oldState) override; void requestSync(); diff --git a/src/quick/util/qquickbehavior_p.h b/src/quick/util/qquickbehavior_p.h index c3438d8c6d..b3fd2af400 100644 --- a/src/quick/util/qquickbehavior_p.h +++ b/src/quick/util/qquickbehavior_p.h @@ -75,8 +75,8 @@ public: QQuickBehavior(QObject *parent=0); ~QQuickBehavior(); - virtual void setTarget(const QQmlProperty &); - virtual void write(const QVariant &value); + void setTarget(const QQmlProperty &) override; + void write(const QVariant &value) override; QQuickAbstractAnimation *animation(); void setAnimation(QQuickAbstractAnimation *); diff --git a/src/quick/util/qquickimageprovider.h b/src/quick/util/qquickimageprovider.h index d4719a7f5b..879c4d0fcc 100644 --- a/src/quick/util/qquickimageprovider.h +++ b/src/quick/util/qquickimageprovider.h @@ -90,8 +90,8 @@ public: QQuickImageProvider(ImageType type, Flags flags = Flags()); virtual ~QQuickImageProvider(); - ImageType imageType() const; - Flags flags() const; + ImageType imageType() const override; + Flags flags() const override; #if QT_VERSION >= QT_VERSION_CHECK(6,0,0) virtual QImage requestImage(const QString &id, QSize *size, const QSize& requestedSize, bool requestedAutoTransform); diff --git a/src/quick/util/qquickpath_p.h b/src/quick/util/qquickpath_p.h index fa6cbc668a..59f1ff3c69 100644 --- a/src/quick/util/qquickpath_p.h +++ b/src/quick/util/qquickpath_p.h @@ -152,7 +152,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickPathLine : public QQuickCurve public: QQuickPathLine(QObject *parent=0) : QQuickCurve(parent) {} - void addToPath(QPainterPath &path, const QQuickPathData &); + void addToPath(QPainterPath &path, const QQuickPathData &) override; }; class Q_QUICK_PRIVATE_EXPORT QQuickPathQuad : public QQuickCurve @@ -180,7 +180,7 @@ public: void setRelativeControlY(qreal y); bool hasRelativeControlY(); - void addToPath(QPainterPath &path, const QQuickPathData &); + void addToPath(QPainterPath &path, const QQuickPathData &) override; Q_SIGNALS: void controlXChanged(); @@ -238,7 +238,7 @@ public: void setRelativeControl2Y(qreal y); bool hasRelativeControl2Y(); - void addToPath(QPainterPath &path, const QQuickPathData &); + void addToPath(QPainterPath &path, const QQuickPathData &) override; Q_SIGNALS: void control1XChanged(); @@ -267,7 +267,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickPathCatmullRomCurve : public QQuickCurve public: QQuickPathCatmullRomCurve(QObject *parent=0) : QQuickCurve(parent) {} - void addToPath(QPainterPath &path, const QQuickPathData &); + void addToPath(QPainterPath &path, const QQuickPathData &) override; }; class Q_QUICK_PRIVATE_EXPORT QQuickPathArc : public QQuickCurve @@ -297,7 +297,7 @@ public: ArcDirection direction() const; void setDirection(ArcDirection direction); - void addToPath(QPainterPath &path, const QQuickPathData &); + void addToPath(QPainterPath &path, const QQuickPathData &) override; Q_SIGNALS: void radiusXChanged(); @@ -322,7 +322,7 @@ public: QString path() const; void setPath(const QString &path); - void addToPath(QPainterPath &path, const QQuickPathData &); + void addToPath(QPainterPath &path, const QQuickPathData &) override; Q_SIGNALS: void pathChanged(); @@ -401,8 +401,8 @@ Q_SIGNALS: void startYChanged(); protected: - virtual void componentComplete(); - virtual void classBegin(); + void componentComplete() override; + void classBegin() override; void disconnectPathElements(); void connectPathElements(); void gatherAttributes(); diff --git a/src/quick/util/qquicksmoothedanimation_p.h b/src/quick/util/qquicksmoothedanimation_p.h index d640985b39..2f0e3bc0d8 100644 --- a/src/quick/util/qquicksmoothedanimation_p.h +++ b/src/quick/util/qquicksmoothedanimation_p.h @@ -79,8 +79,8 @@ public: ReversingMode reversingMode() const; void setReversingMode(ReversingMode); - virtual int duration() const; - virtual void setDuration(int); + int duration() const override; + void setDuration(int) override; qreal velocity() const; void setVelocity(qreal); @@ -88,10 +88,10 @@ public: int maximumEasingTime() const; void setMaximumEasingTime(int); - virtual QAbstractAnimationJob* transition(QQuickStateActions &actions, + QAbstractAnimationJob* transition(QQuickStateActions &actions, QQmlProperties &modified, TransitionDirection direction, - QObject *defaultTarget = 0); + QObject *defaultTarget = 0) override; Q_SIGNALS: void velocityChanged(); void reversingModeChanged(); diff --git a/src/quick/util/qquicksmoothedanimation_p_p.h b/src/quick/util/qquicksmoothedanimation_p_p.h index 4a61599592..a415fdb55f 100644 --- a/src/quick/util/qquicksmoothedanimation_p_p.h +++ b/src/quick/util/qquicksmoothedanimation_p_p.h @@ -93,7 +93,7 @@ public: QQmlProperty target; - int duration() const; + int duration() const override; void restart(); void init(); @@ -101,9 +101,9 @@ public: void clearTemplate() { animationTemplate = 0; } protected: - virtual void updateCurrentTime(int); - virtual void updateState(QAbstractAnimationJob::State, QAbstractAnimationJob::State); - void debugAnimation(QDebug d) const; + void updateCurrentTime(int) override; + void updateState(QAbstractAnimationJob::State, QAbstractAnimationJob::State) override; + void debugAnimation(QDebug d) const override; private: qreal easeFollow(qreal); diff --git a/src/quick/util/qquickspringanimation_p.h b/src/quick/util/qquickspringanimation_p.h index 141a2469d7..ffb2c41e6b 100644 --- a/src/quick/util/qquickspringanimation_p.h +++ b/src/quick/util/qquickspringanimation_p.h @@ -94,10 +94,10 @@ public: qreal modulus() const; void setModulus(qreal modulus); - virtual QAbstractAnimationJob* transition(QQuickStateActions &actions, + QAbstractAnimationJob* transition(QQuickStateActions &actions, QQmlProperties &modified, TransitionDirection direction, - QObject *defaultTarget = 0); + QObject *defaultTarget = 0) override; Q_SIGNALS: void modulusChanged(); diff --git a/src/quick/util/qquickstatechangescript_p.h b/src/quick/util/qquickstatechangescript_p.h index 0c17b7c68c..a1315ae2ef 100644 --- a/src/quick/util/qquickstatechangescript_p.h +++ b/src/quick/util/qquickstatechangescript_p.h @@ -69,9 +69,9 @@ public: QQuickStateChangeScript(QObject *parent=0); ~QQuickStateChangeScript(); - virtual ActionList actions(); + ActionList actions() override; - virtual EventType type() const; + EventType type() const override; QQmlScriptString script() const; void setScript(const QQmlScriptString &); @@ -79,7 +79,7 @@ public: QString name() const; void setName(const QString &); - virtual void execute(); + void execute() override; }; diff --git a/src/quick/util/qquickstategroup_p.h b/src/quick/util/qquickstategroup_p.h index 78508ac166..eebe3a9e56 100644 --- a/src/quick/util/qquickstategroup_p.h +++ b/src/quick/util/qquickstategroup_p.h @@ -81,8 +81,8 @@ public: QQuickState *findState(const QString &name) const; void removeState(QQuickState *state); - virtual void classBegin(); - virtual void componentComplete(); + void classBegin() override; + void componentComplete() override; Q_SIGNALS: void stateChanged(const QString &); diff --git a/src/quick/util/qquickstyledtext.cpp b/src/quick/util/qquickstyledtext.cpp index 4139c87eda..ae8719341d 100644 --- a/src/quick/util/qquickstyledtext.cpp +++ b/src/quick/util/qquickstyledtext.cpp @@ -721,8 +721,7 @@ void QQuickStyledTextPrivate::parseImageAttributes(const QChar *&ch, const QStri QString padding(qFloor(imgWidth / spaceWidth), QChar::Nbsp); if (!trailingSpace) textOut += QLatin1Char(' '); - textOut += padding; - textOut += QLatin1Char(' '); + textOut += padding + QLatin1Char(' '); } QPair<QStringRef,QStringRef> QQuickStyledTextPrivate::parseAttribute(const QChar *&ch, const QString &textIn) diff --git a/src/quick/util/qquicktimeline_p_p.h b/src/quick/util/qquicktimeline_p_p.h index 552f194b79..ae1087487b 100644 --- a/src/quick/util/qquicktimeline_p_p.h +++ b/src/quick/util/qquicktimeline_p_p.h @@ -100,14 +100,14 @@ public: int time() const; - virtual int duration() const; + int duration() const override; Q_SIGNALS: void updated(); void completed(); protected: - virtual void updateCurrentTime(int); - void debugAnimation(QDebug d) const; + void updateCurrentTime(int) override; + void debugAnimation(QDebug d) const override; private: void remove(QQuickTimeLineObject *); @@ -181,7 +181,7 @@ public: Q_ASSERT(_class); } - virtual void setValue(qreal v) + void setValue(qreal v) override { QQuickTimeLineValue::setValue(v); if (_setFunctionReal) (_class->*_setFunctionReal)(v); diff --git a/tests/auto/qml/qjsengine/tst_qjsengine.cpp b/tests/auto/qml/qjsengine/tst_qjsengine.cpp index 7163fd8cff..f4eb17f1ca 100644 --- a/tests/auto/qml/qjsengine/tst_qjsengine.cpp +++ b/tests/auto/qml/qjsengine/tst_qjsengine.cpp @@ -2142,12 +2142,27 @@ void tst_QJSEngine::jsNumberClass() QJSValue ret = eng.evaluate("new Number(123).toExponential()"); QVERIFY(ret.isString()); QCOMPARE(ret.toString(), QString::fromLatin1("1.23e+2")); + ret = eng.evaluate("new Number(123).toExponential(1)"); + QVERIFY(ret.isString()); + QCOMPARE(ret.toString(), QString::fromLatin1("1.2e+2")); + ret = eng.evaluate("new Number(123).toExponential(2)"); + QVERIFY(ret.isString()); + QCOMPARE(ret.toString(), QString::fromLatin1("1.23e+2")); + ret = eng.evaluate("new Number(123).toExponential(3)"); + QVERIFY(ret.isString()); + QCOMPARE(ret.toString(), QString::fromLatin1("1.230e+2")); } QVERIFY(proto.property("toFixed").isCallable()); { QJSValue ret = eng.evaluate("new Number(123).toFixed()"); QVERIFY(ret.isString()); QCOMPARE(ret.toString(), QString::fromLatin1("123")); + ret = eng.evaluate("new Number(123).toFixed(1)"); + QVERIFY(ret.isString()); + QCOMPARE(ret.toString(), QString::fromLatin1("123.0")); + ret = eng.evaluate("new Number(123).toFixed(2)"); + QVERIFY(ret.isString()); + QCOMPARE(ret.toString(), QString::fromLatin1("123.00")); } QVERIFY(proto.property("toPrecision").isCallable()); { diff --git a/tests/auto/qmltest/events/tst_events.qml b/tests/auto/qmltest/events/tst_events.qml index e655c26c7d..d9868a316c 100644 --- a/tests/auto/qmltest/events/tst_events.qml +++ b/tests/auto/qmltest/events/tst_events.qml @@ -27,6 +27,7 @@ ****************************************************************************/ import QtQuick 2.0 +import QtQuick.Window 2.0 import QtTest 1.1 Rectangle { @@ -56,6 +57,16 @@ Rectangle { signalName: "doubleClickSignalHelper" } + Window { + id: sub + visible: true + property bool clicked: false + MouseArea { + anchors.fill: parent + onClicked: sub.clicked = true + } + } + MouseArea { anchors.fill: parent onClicked: { @@ -89,6 +100,11 @@ Rectangle { tryCompare(top, "mouseHasBeenClicked", true, 10000) } + function test_mouse_click_subwindow() { + mouseClick(sub) + tryCompare(sub, "clicked", true, 10000) + } + function test_mouse_doubleclick() { doubleClickSpy.clear() mouseDoubleClickSequence(top, 25, 30) diff --git a/tools/qml/main.cpp b/tools/qml/main.cpp index be62500858..fdfc66f3a6 100644 --- a/tools/qml/main.cpp +++ b/tools/qml/main.cpp @@ -463,7 +463,7 @@ int main(int argc, char *argv[]) QString dummyDir; //Handle main arguments - QStringList argList = app->arguments(); + const QStringList argList = app->arguments(); for (int i = 1; i < argList.count(); i++) { const QString &arg = argList[i]; if (arg == QLatin1String("-quiet")) diff --git a/tools/qmleasing/mainwindow.cpp b/tools/qmleasing/mainwindow.cpp index 5a5f651396..d36ab5fd75 100644 --- a/tools/qmleasing/mainwindow.cpp +++ b/tools/qmleasing/mainwindow.cpp @@ -73,7 +73,8 @@ MainWindow::MainWindow(QWidget *parent) : quickView.rootContext()->setContextProperty(QLatin1String("spinBox"), ui_properties.spinBox); - foreach (const QString &name, splineEditor->presetNames()) + const auto presetNames = splineEditor->presetNames(); + for (const QString &name : presetNames) ui_properties.comboBox->addItem(name); connect(ui_properties.comboBox, SIGNAL(currentIndexChanged(QString)), splineEditor, SLOT(setPreset(QString))); diff --git a/tools/qmleasing/splineeditor.cpp b/tools/qmleasing/splineeditor.cpp index 6fee013c62..d54a101b69 100644 --- a/tools/qmleasing/splineeditor.cpp +++ b/tools/qmleasing/splineeditor.cpp @@ -620,7 +620,7 @@ void SplineEditor::mouseMoveEvent(QMouseEvent *e) if (indexIsRealPoint(m_activeControlPoint)) { //move also the tangents QPointF targetPoint = p; - QPointF distance = targetPoint - m_controlPoints[m_activeControlPoint]; + QPointF distance = targetPoint - m_controlPoints.at(m_activeControlPoint); m_controlPoints[m_activeControlPoint] = targetPoint; m_controlPoints[m_activeControlPoint - 1] += distance; m_controlPoints[m_activeControlPoint + 1] += distance; @@ -629,7 +629,7 @@ void SplineEditor::mouseMoveEvent(QMouseEvent *e) m_controlPoints[m_activeControlPoint] = p; } else { QPointF targetPoint = p; - QPointF distance = targetPoint - m_controlPoints[m_activeControlPoint]; + QPointF distance = targetPoint - m_controlPoints.at(m_activeControlPoint); m_controlPoints[m_activeControlPoint] = p; if ((m_activeControlPoint > 1) && (m_activeControlPoint % 3) == 0) { //right control point diff --git a/tools/qmlimportscanner/main.cpp b/tools/qmlimportscanner/main.cpp index f7f5a5e4e4..8f476649e9 100644 --- a/tools/qmlimportscanner/main.cpp +++ b/tools/qmlimportscanner/main.cpp @@ -145,7 +145,7 @@ QVariantMap pluginsForModulePath(const QString &modulePath) { classnames += QString::fromUtf8(line.split(' ').at(1)); classnames += QLatin1Char(' '); } else if (line.startsWith("depends")) { - QList<QByteArray> dep = line.split(' '); + const QList<QByteArray> dep = line.split(' '); if (dep.length() != 3) std::cerr << "depends: expected 2 arguments: module identifier and version" << std::endl; else @@ -217,8 +217,8 @@ QVariantList findPathsForModuleImports(const QVariantList &imports) QVariantList importsCopy(imports); for (int i = 0; i < importsCopy.length(); ++i) { - QVariantMap import = qvariant_cast<QVariantMap>(importsCopy[i]); - if (import[typeLiteral()] == QLatin1String("module")) { + QVariantMap import = qvariant_cast<QVariantMap>(importsCopy.at(i)); + if (import.value(typeLiteral()) == QLatin1String("module")) { QString path = resolveImportPath(import.value(nameLiteral()).toString(), import.value(versionLiteral()).toString()); if (!path.isEmpty()) import[pathLiteral()] = path; @@ -256,7 +256,8 @@ static QVariantList findQmlImportsInQmlCode(const QString &filePath, const QStri if (!parser.parse() || !parser.diagnosticMessages().isEmpty()) { // Extract errors from the parser - foreach (const QQmlJS::DiagnosticMessage &m, parser.diagnosticMessages()) { + const auto diagnosticMessages = parser.diagnosticMessages(); + for (const QQmlJS::DiagnosticMessage &m : diagnosticMessages) { std::cerr << QDir::toNativeSeparators(filePath).toStdString() << ':' << m.loc.startLine << ':' << m.message.toStdString() << std::endl; } @@ -334,7 +335,8 @@ QVariantList findQmlImportsInJavascriptFile(const QString &filePath) QQmlJS::Parser parser(&ee); parser.parseProgram(); - foreach (const QQmlJS::DiagnosticMessage &m, parser.diagnosticMessages()) + const auto diagnosticMessages = parser.diagnosticMessages(); + for (const QQmlJS::DiagnosticMessage &m : diagnosticMessages) if (m.isError()) return QVariantList(); diff --git a/tools/qmljs/qmljs.cpp b/tools/qmljs/qmljs.cpp index 964afc265b..44ff37b925 100644 --- a/tools/qmljs/qmljs.cpp +++ b/tools/qmljs/qmljs.cpp @@ -145,22 +145,22 @@ int main(int argc, char *argv[]) bool runAsQml = false; if (!args.isEmpty()) { - if (args.first() == QLatin1String("--jit")) { + if (args.constFirst() == QLatin1String("--jit")) { mode = use_masm; args.removeFirst(); } - if (args.first() == QLatin1String("--interpret")) { + if (args.constFirst() == QLatin1String("--interpret")) { mode = use_moth; args.removeFirst(); } - if (args.first() == QLatin1String("--qml")) { + if (args.constFirst() == QLatin1String("--qml")) { runAsQml = true; args.removeFirst(); } - if (args.first() == QLatin1String("--help")) { + if (args.constFirst() == QLatin1String("--help")) { std::cerr << "Usage: qmljs [|--jit|--interpret|--qml] file..." << std::endl; return EXIT_SUCCESS; } diff --git a/tools/qmllint/main.cpp b/tools/qmllint/main.cpp index 211427cc64..99a53110a8 100644 --- a/tools/qmllint/main.cpp +++ b/tools/qmllint/main.cpp @@ -59,7 +59,8 @@ static bool lint_file(const QString &filename, bool silent) bool success = isJavaScript ? parser.parseProgram() : parser.parse(); if (!success && !silent) { - foreach (const QQmlJS::DiagnosticMessage &m, parser.diagnosticMessages()) { + const auto diagnosticMessages = parser.diagnosticMessages(); + for (const QQmlJS::DiagnosticMessage &m : diagnosticMessages) { qWarning("%s:%d : %s", qPrintable(filename), m.loc.startLine, qPrintable(m.message)); } } @@ -82,15 +83,15 @@ int main(int argv, char *argc[]) parser.process(app); - if (parser.positionalArguments().isEmpty()) { + const auto positionalArguments = parser.positionalArguments(); + if (positionalArguments.isEmpty()) { parser.showHelp(-1); } bool silent = parser.isSet(silentOption); bool success = true; - foreach (const QString &filename, parser.positionalArguments()) { + for (const QString &filename : positionalArguments) success &= lint_file(filename, silent); - } return success ? 0 : -1; } diff --git a/tools/qmlplugindump/main.cpp b/tools/qmlplugindump/main.cpp index ea54fee885..3294fa1e87 100644 --- a/tools/qmlplugindump/main.cpp +++ b/tools/qmlplugindump/main.cpp @@ -205,7 +205,8 @@ QByteArray convertToId(const QMetaObject *mo) // Collect all metaobjects for types registered with qmlRegisterType() without parameters void collectReachableMetaObjectsWithoutQmlName(QQmlEnginePrivate *engine, QSet<const QMetaObject *>& metas ) { - foreach (const QQmlType *ty, QQmlMetaType::qmlAllTypes()) { + const auto qmlAllTypes = QQmlMetaType::qmlAllTypes(); + for (const QQmlType *ty : qmlAllTypes) { if ( ! metas.contains(ty->metaObject()) ) { if (!ty->isComposite()) { collectReachableMetaObjects(engine, ty, &metas); @@ -225,7 +226,8 @@ QSet<const QMetaObject *> collectReachableMetaObjects(QQmlEngine *engine, metas.insert(FriendlyQObject::qtMeta()); QHash<QByteArray, QSet<QByteArray> > extensions; - foreach (const QQmlType *ty, QQmlMetaType::qmlTypes()) { + const auto qmlTypes = QQmlMetaType::qmlTypes(); + for (const QQmlType *ty : qmlTypes) { if (!ty->isCreatable()) noncreatables.insert(ty->metaObject()); if (ty->isSingleton()) @@ -275,7 +277,7 @@ QSet<const QMetaObject *> collectReachableMetaObjects(QQmlEngine *engine, if (creatable) { // find even more QMetaObjects by instantiating QML types and running // over the instances - foreach (QQmlType *ty, QQmlMetaType::qmlTypes()) { + for (QQmlType *ty : qmlTypes) { if (skip.contains(ty)) continue; if (ty->isExtendedType()) @@ -766,7 +768,8 @@ static bool readDependenciesData(QString dependenciesFile, const QByteArray &fil const QStringList requiredKeys = QStringList() << QStringLiteral("name") << QStringLiteral("type") << QStringLiteral("version"); - foreach (const QJsonValue &dep, doc.array()) { + const auto deps = doc.array(); + for (const QJsonValue &dep : deps) { if (dep.isObject()) { QJsonObject obj = dep.toObject(); for (const QString &requiredKey : requiredKeys) @@ -833,7 +836,8 @@ static bool getDependencies(const QQmlEngine &engine, const QString &pluginImpor QStringList commandArgs = QStringList() << QLatin1String("-qmlFiles") << QLatin1String("-"); - foreach (const QString &path, engine.importPathList()) + const auto importPathList = engine.importPathList(); + for (const QString &path : importPathList) commandArgs << QLatin1String("-importPath") << path; QProcess importScanner; @@ -877,20 +881,20 @@ bool compactDependencies(QStringList *dependencies) if (dependencies->isEmpty()) return false; dependencies->sort(); - QStringList oldDep = dependencies->first().split(QLatin1Char(' ')); + QStringList oldDep = dependencies->constFirst().split(QLatin1Char(' ')); Q_ASSERT(oldDep.size() == 2); int oldPos = 0; for (int idep = 1; idep < dependencies->size(); ++idep) { QString depStr = dependencies->at(idep); const QStringList newDep = depStr.split(QLatin1Char(' ')); Q_ASSERT(newDep.size() == 2); - if (newDep.first() != oldDep.first()) { + if (newDep.constFirst() != oldDep.constFirst()) { if (++oldPos != idep) dependencies->replace(oldPos, depStr); oldDep = newDep; } else { - QStringList v1 = oldDep.last().split(QLatin1Char('.')); - QStringList v2 = newDep.last().split(QLatin1Char('.')); + const QStringList v1 = oldDep.constLast().split(QLatin1Char('.')); + const QStringList v2 = newDep.constLast().split(QLatin1Char('.')); Q_ASSERT(v1.size() == 2); Q_ASSERT(v2.size() == 2); bool ok; @@ -899,9 +903,9 @@ bool compactDependencies(QStringList *dependencies) int major2 = v2.first().toInt(&ok); Q_ASSERT(ok); if (major1 != major2) { - std::cerr << "Found a dependency on " << qPrintable(oldDep.first()) - << " with two major versions:" << qPrintable(oldDep.last()) - << " and " << qPrintable(newDep.last()) + std::cerr << "Found a dependency on " << qPrintable(oldDep.constFirst()) + << " with two major versions:" << qPrintable(oldDep.constLast()) + << " and " << qPrintable(newDep.constLast()) << " which is unsupported, discarding smaller version" << std::endl; if (major1 < major2) dependencies->replace(oldPos, depStr); @@ -1057,18 +1061,18 @@ int main(int argc, char *argv[]) std::cerr << "Incorrect number of positional arguments" << std::endl; return EXIT_INVALIDARGUMENTS; } - pluginImportUri = positionalArgs[1]; + pluginImportUri = positionalArgs.at(1); pluginImportVersion = positionalArgs[2]; if (positionalArgs.size() >= 4) - pluginImportPath = positionalArgs[3]; + pluginImportPath = positionalArgs.at(3); } else if (action == Path) { if (positionalArgs.size() != 2 && positionalArgs.size() != 3) { std::cerr << "Incorrect number of positional arguments" << std::endl; return EXIT_INVALIDARGUMENTS; } - pluginImportPath = QDir::fromNativeSeparators(positionalArgs[1]); + pluginImportPath = QDir::fromNativeSeparators(positionalArgs.at(1)); if (positionalArgs.size() == 3) - pluginImportVersion = positionalArgs[2]; + pluginImportVersion = positionalArgs.at(2); } else if (action == Builtins) { if (positionalArgs.size() != 1) { std::cerr << "Incorrect number of positional arguments" << std::endl; @@ -1090,7 +1094,7 @@ int main(int argc, char *argv[]) QStringList mergeDependencies; QString mergeComponents; if (!mergeFile.isEmpty()) { - QStringList merge = readQmlTypes(mergeFile); + const QStringList merge = readQmlTypes(mergeFile); if (!merge.isEmpty()) { QRegularExpression re("(\\w+\\.*\\w*\\s*\\d+\\.\\d+)"); QRegularExpressionMatchIterator i = re.globalMatch(merge[1]); @@ -1132,8 +1136,9 @@ int main(int argc, char *argv[]) QQmlComponent c(&engine); c.setData(code, QUrl::fromLocalFile(pluginImportPath + "/loaddependencies.qml")); c.create(); - if (!c.errors().isEmpty()) { - foreach (const QQmlError &error, c.errors()) + const auto errors = c.errors(); + if (!errors.isEmpty()) { + for (const QQmlError &error : errors) std::cerr << qPrintable( error.toString() ) << std::endl; return EXIT_IMPORTERROR; } @@ -1162,7 +1167,7 @@ int main(int argc, char *argv[]) } } else if (pluginImportUri == QLatin1String("QtQml")) { bool ok = false; - const uint major = pluginImportVersion.split('.')[0].toUInt(&ok, 10); + const uint major = pluginImportVersion.splitRef('.').at(0).toUInt(&ok, 10); if (!ok) { std::cerr << "Malformed version string \""<< qPrintable(pluginImportVersion) << "\"." << std::endl; @@ -1218,8 +1223,9 @@ int main(int argc, char *argv[]) c.setData(code, QUrl::fromLocalFile(pluginImportPath + "/typelist.qml")); c.create(); - if (!c.errors().isEmpty()) { - foreach (const QQmlError &error, c.errors()) + const auto errors = c.errors(); + if (!errors.isEmpty()) { + for (const QQmlError &error : errors) std::cerr << qPrintable( error.toString() ) << std::endl; return EXIT_IMPORTERROR; } diff --git a/tools/qmlprofiler/qmlprofilerdata.cpp b/tools/qmlprofiler/qmlprofilerdata.cpp index 048c92bb93..668cb3ce2d 100644 --- a/tools/qmlprofiler/qmlprofilerdata.cpp +++ b/tools/qmlprofiler/qmlprofilerdata.cpp @@ -403,23 +403,23 @@ void QmlProfilerData::computeQmlTime() int level = minimumLevel; for (int i = 0; i < d->startInstanceList.count(); i++) { - qint64 st = d->startInstanceList[i].startTime; + qint64 st = d->startInstanceList.at(i).startTime; - if (d->startInstanceList[i].data->rangeType == QQmlProfilerDefinitions::Painting) { + if (d->startInstanceList.at(i).data->rangeType == QQmlProfilerDefinitions::Painting) { continue; } // general level - if (endtimesPerLevel[level] > st) { + if (endtimesPerLevel.value(level) > st) { level++; } else { while (level > minimumLevel && endtimesPerLevel[level-1] <= st) level--; } - endtimesPerLevel[level] = st + d->startInstanceList[i].duration; + endtimesPerLevel[level] = st + d->startInstanceList.at(i).duration; if (level == minimumLevel) { - d->qmlMeasuredTime += d->startInstanceList[i].duration; + d->qmlMeasuredTime += d->startInstanceList.at(i).duration; } } } |