apply patches

This commit is contained in:
openKylinBot 2022-05-14 17:42:42 +08:00
commit 0d4b7be309
37 changed files with 93 additions and 61 deletions

View File

@ -1,6 +1,9 @@
load(qt_build_config)
CONFIG += warning_clean
QMAKE_CXXFLAGS += -DTESTBINDIR=\\\"$$PWD/bin\\\"
QMAKE_CXXFLAGS += -DTESTEXAMPLEDIR=\\\"$$PWD/examples\\\"
DEFINES += QT_NO_LINKED_LIST
DEFINES += QT_NO_JAVA_STYLE_ITERATORS

View File

@ -268,13 +268,13 @@ class UdItabGenerator( ud_opcode.UdOpcodeTables ):
opr = e[ 'operands' ]
for i in range(len(opr)):
if not (opr[i] in self.OperandDict.keys()):
print "error: invalid operand declaration: %s\n" % opr[i]
print("error: invalid operand declaration: %s\n" % opr[i])
opr_c[i] = "O_" + opr[i]
opr = "%s %s %s" % (opr_c[0] + ",", opr_c[1] + ",", opr_c[2])
for p in e['prefixes']:
if not ( p in self.PrefixDict.keys() ):
print "error: invalid prefix specification: %s \n" % pfx
print("error: invalid prefix specification: %s \n" % pfx)
pfx_c.append( self.PrefixDict[p] )
if len(e['prefixes']) == 0:
pfx_c.append( "P_none" )

View File

@ -50,7 +50,7 @@ class UdOptableXmlParser:
elif def_node.localName == 'vendor':
ven = ( def_node.firstChild.data );
else:
print "warning: invalid node - %s" % def_node.localName
print("warning: invalid node - %s" % def_node.localName)
continue
return ( pfx, opc, opr, ven )
@ -65,7 +65,7 @@ class UdOptableXmlParser:
if not insnNode.localName:
continue
if insnNode.localName != "instruction":
print "warning: invalid insn node - %s" % insnNode.localName
print("warning: invalid insn node - %s" % insnNode.localName)
continue
mnemonic = insnNode.getElementsByTagName( 'mnemonic' )[ 0 ].firstChild.data
@ -84,11 +84,11 @@ class UdOptableXmlParser:
def printFn( pfx, mnm, opc, opr, ven ):
print 'def: ',
print('def: ', end='')
if len( pfx ):
print ' '.join( pfx ),
print "%s %s %s %s" % \
( mnm, ' '.join( opc ), ' '.join( opr ), ven )
print(' '.join( pfx ), end='')
print("%s %s %s %s" % \
( mnm, ' '.join( opc ), ' '.join( opr ), ven ))
def parse( xml, callback ):

View File

@ -28,6 +28,7 @@
#pragma once
#include <limits.h>
#include <limits>
#include "YarrErrorCode.h"
namespace JSC { namespace Yarr {

View File

@ -186,13 +186,13 @@ QT_WARNING_POP
Q_REQUIRED_RESULT Jump jumpNotUndefined()
{
Instruction::JumpNotUndefined data;
Instruction::JumpNotUndefined data{};
return addJumpInstruction(data);
}
Q_REQUIRED_RESULT Jump jumpNoException()
{
Instruction::JumpNoException data;
Instruction::JumpNoException data{};
return addJumpInstruction(data);
}

View File

@ -981,7 +981,7 @@ void MemoryManager::sweep(bool lastSweep, ClassDestroyStatsCallback classCountPt
if (MultiplyWrappedQObjectMap *multiplyWrappedQObjects = engine->m_multiplyWrappedQObjects) {
for (MultiplyWrappedQObjectMap::Iterator it = multiplyWrappedQObjects->begin(); it != multiplyWrappedQObjects->end();) {
if (!it.value().isNullOrUndefined())
if (it.value().isNullOrUndefined())
it = multiplyWrappedQObjects->erase(it);
else
++it;

View File

@ -20,6 +20,9 @@ solaris-cc*:QMAKE_CXXFLAGS_RELEASE -= -O2
# Ensure this gcc optimization is switched off for mips platforms to avoid trouble with JIT.
gcc:isEqual(QT_ARCH, "mips"): QMAKE_CXXFLAGS += -fno-reorder-blocks
# Link with -latomic on riscv64. Ideally qmake should use -pthread instead of -lpthread
isEqual(QT_ARCH, "riscv64"): QMAKE_LIBS += -latomic
DEFINES += QT_NO_FOREACH
exists("qqml_enable_gcov") {

View File

@ -48,6 +48,7 @@
#include <QtCore/qmetatype.h>
#include <initializer_list>
#include <limits>
#include <type_traits>
//

View File

@ -41,10 +41,8 @@ QObjectList or a \l QAbstractItemModel. The first three are useful for exposing
simpler datasets, while QAbstractItemModel provides a more flexible solution for
more complex models.
Here is a video tutorial that takes you through the whole process of exposing a C++
model to QML:
\youtube 9BcAYDlpuT8
Here is a \l{https://www.youtube.com/watch?v=9BcAYDlpuT8}{video tutorial} that
takes you through the whole process of exposing a C++ model to QML.
\section2 QStringList-based Model

View File

@ -2168,7 +2168,7 @@ void QQuickText::resetMaximumLineCount()
<img src="" align="top,middle,bottom" width="" height=""> - inline images
<ol type="">, <ul type=""> and <li> - ordered and unordered lists
<pre></pre> - preformatted
&gt; &lt; &amp;
&gt; &lt; &amp; &quot; &nbsp; &apos;
\endcode
\c Text.StyledText parser is strict, requiring tags to be correctly nested.

View File

@ -562,6 +562,8 @@ void QQuickStyledTextPrivate::parseEntity(const QChar *&ch, const QString &textI
textOut += QChar(60);
else if (entity == QLatin1String("amp"))
textOut += QChar(38);
else if (entity == QLatin1String("apos"))
textOut += QChar(39);
else if (entity == QLatin1String("quot"))
textOut += QChar(34);
else if (entity == QLatin1String("nbsp"))

View File

@ -11,7 +11,6 @@ SUBDIRS=\
qtHaveModule(gui):qtConfig(opengl(es1|es2)?) {
SUBDIRS += particles
qtHaveModule(widgets): SUBDIRS += quickwidgets
}

View File

@ -8,7 +8,6 @@ PUBLICTESTS += \
qqmlenginedebugservice \
qqmldebugjs \
qqmlinspector \
qqmlprofilerservice \
qpacketprotocol \
qqmlenginedebuginspectorintegrationtest \
qqmlenginecontrol \

View File

@ -135,7 +135,7 @@ QList<QQmlDebugClient *> tst_QDebugMessageService::createClients()
void tst_QDebugMessageService::retrieveDebugOutput()
{
QCOMPARE(QQmlDebugTest::connectTo(QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qml",
QCOMPARE(QQmlDebugTest::connectTo(TESTBINDIR "/qml",
QString(), testFile(QMLFILE), true), ConnectSuccess);
QTRY_VERIFY(m_client->logBuffer.size() >= 2);

View File

@ -102,8 +102,7 @@ void tst_QQmlDebuggingEnabler::qmlscene()
QFETCH(bool, blockMode);
QFETCH(QStringList, services);
m_process = new QQmlDebugProcess(
QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qmlscene", this);
m_process = new QQmlDebugProcess(TESTBINDIR "/qmlscene", this);
m_process->setMaximumBindErrors(1);
m_process->start(QStringList()
<< QString::fromLatin1("-qmljsdebugger=connector:%1%2%3%4")

View File

@ -178,7 +178,7 @@ QQmlDebugTest::ConnectResult tst_QQmlDebugJS::init(bool qmlscene, const QString
bool blockMode, bool restrictServices)
{
const QString executable = qmlscene
? QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qmlscene"
? TESTBINDIR "/qmlscene"
: debugJsServerPath("qqmldebugjs");
return QQmlDebugTest::connectTo(
executable, restrictServices ? QStringLiteral("V8Debugger") : QString(),
@ -471,7 +471,7 @@ void tst_QQmlDebugJS::setBreakpointInJavaScript()
if (seedCache) { // Make sure there is a qmlc file that the engine should _not_ laod.
QProcess process;
process.start(QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qmlscene",
process.start(QStringLiteral(TESTBINDIR "/qmlscene"),
{ testFile(QUITINJS_QMLFILE) });
QTRY_COMPARE(process.state(), QProcess::NotRunning);
}
@ -853,8 +853,7 @@ void tst_QQmlDebugJS::evaluateInLocalScope()
void tst_QQmlDebugJS::evaluateInContext()
{
m_connection = new QQmlDebugConnection();
m_process = new QQmlDebugProcess(
QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qmlscene", this);
m_process = new QQmlDebugProcess(TESTBINDIR "/qmlscene", this);
m_client = new QV4DebugClient(m_connection);
QScopedPointer<QQmlEngineDebugClient> engineClient(new QQmlEngineDebugClient(m_connection));
m_process->start(QStringList() << QLatin1String(BLOCKMODE) << testFile(ONCOMPLETED_QMLFILE));

View File

@ -106,8 +106,7 @@ void tst_QQmlDebugService::checkPortRange()
{
QScopedPointer<QQmlDebugConnection> connection1(new QQmlDebugConnection());
QScopedPointer<QQmlDebugProcess> process1(
new QQmlDebugProcess(QLibraryInfo::location(QLibraryInfo::BinariesPath)
+ "/qmlscene", this));
new QQmlDebugProcess(TESTBINDIR "/qmlscene", this));
process1->start(QStringList() << QLatin1String("-qmljsdebugger=port:3782,3792")
<< testFile("test.qml"));
@ -123,8 +122,7 @@ void tst_QQmlDebugService::checkPortRange()
// Second instance
QScopedPointer<QQmlDebugConnection> connection2(new QQmlDebugConnection());
QScopedPointer<QQmlDebugProcess> process2(
new QQmlDebugProcess(QLibraryInfo::location(QLibraryInfo::BinariesPath)
+ "/qmlscene", this));
new QQmlDebugProcess(TESTBINDIR "/qmlscene", this));
process2->start(QStringList() << QLatin1String("-qmljsdebugger=port:3782,3792")
<< testFile("test.qml"));

View File

@ -66,7 +66,7 @@ QList<QQmlDebugClient *> tst_QQmlDebugTranslationService::createClients()
void tst_QQmlDebugTranslationService::pluginConnection()
{
auto executable = QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qml";
auto executable = QStringLiteral(TESTBINDIR "/qml");
auto services = "DebugTranslation";
auto extraArgs = testFile(QMLFILE);
auto block = true;

View File

@ -82,7 +82,7 @@ private slots:
QQmlDebugTest::ConnectResult tst_QQmlEngineControl::connectTo(const QString &file,
bool restrictServices)
{
return QQmlDebugTest::connectTo(QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qmlscene",
return QQmlDebugTest::connectTo(TESTBINDIR "/qmlscene",
restrictServices ? QStringLiteral("EngineControl") : QString(),
testFile(file), true);
}

View File

@ -88,7 +88,7 @@ QQmlEngineDebugObjectReference tst_QQmlEngineDebugInspectorIntegration::findRoot
QQmlDebugTest::ConnectResult tst_QQmlEngineDebugInspectorIntegration::init(bool restrictServices)
{
return QQmlDebugTest::connectTo(
QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qml",
TESTBINDIR "/qml",
restrictServices ? QStringLiteral("QmlDebugger,QmlInspector") : QString(),
testFile("qtquick2.qml"), true);
}

View File

@ -64,7 +64,7 @@ private slots:
QQmlDebugTest::ConnectResult tst_QQmlInspector::startQmlProcess(const QString &qmlFile,
bool restrictServices)
{
return QQmlDebugTest::connectTo(QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qml",
return QQmlDebugTest::connectTo(TESTBINDIR "/qml",
restrictServices ? QStringLiteral("QmlInspector") : QString(),
testFile(qmlFile), true);
}

View File

@ -74,7 +74,7 @@ private slots:
QQmlDebugTest::ConnectResult tst_QQmlPreview::startQmlProcess(const QString &qmlFile)
{
return QQmlDebugTest::connectTo(QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qml",
return QQmlDebugTest::connectTo(QStringLiteral(TESTBINDIR "/qml"),
QStringLiteral("QmlPreview"), testFile(qmlFile), true);
}

View File

@ -203,8 +203,7 @@ private:
ConnectResult connectTo(bool block, const QString &file, bool recordFromStart = true,
uint flushInterval = 0, bool restrictServices = true,
const QString &executable
= QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qmlscene");
const QString &executable = QStringLiteral(TESTBINDIR "/qmlscene"));
void checkProcessTerminated();
void checkTraceReceived();
void checkJsHeap();

View File

@ -102,6 +102,7 @@ private slots:
void valueConversion_RegularExpression();
void castWithMultipleInheritance();
void collectGarbage();
void collectGarbageNestedWrappersTwoEngines();
void gcWithNestedDataStructure();
void stacktrace();
void numberParsing_data();
@ -1809,6 +1810,44 @@ void tst_QJSEngine::collectGarbage()
QVERIFY(ptr.isNull());
}
class TestObjectContainer : public QObject
{
Q_OBJECT
Q_PROPERTY(QObject *dummy MEMBER m_dummy CONSTANT)
public:
TestObjectContainer() : m_dummy(new QObject(this)) {}
private:
QObject *m_dummy;
};
void tst_QJSEngine::collectGarbageNestedWrappersTwoEngines()
{
QJSEngine engine1;
QJSEngine engine2;
TestObjectContainer container;
QQmlEngine::setObjectOwnership(&container, QQmlEngine::CppOwnership);
engine1.globalObject().setProperty("foobar", engine1.newQObject(&container));
engine2.globalObject().setProperty("foobar", engine2.newQObject(&container));
engine1.evaluate("foobar.dummy.baz = 42");
engine2.evaluate("foobar.dummy.baz = 43");
QCOMPARE(engine1.evaluate("foobar.dummy.baz").toInt(), 42);
QCOMPARE(engine2.evaluate("foobar.dummy.baz").toInt(), 43);
engine1.collectGarbage();
engine2.collectGarbage();
// The GC should not collect dummy object wrappers neither in engine1 nor engine2, we
// verify that by checking whether the baz property still has its previous value.
QCOMPARE(engine1.evaluate("foobar.dummy.baz").toInt(), 42);
QCOMPARE(engine2.evaluate("foobar.dummy.baz").toInt(), 43);
}
void tst_QJSEngine::gcWithNestedDataStructure()
{
// The GC must be able to traverse deeply nested objects, otherwise this

View File

@ -25,7 +25,6 @@ PUBLICTESTS += \
qqmlmoduleplugin \
qqmlnotifier \
qqmlqt \
qqmlxmlhttprequest \
qqmlpromise \
qtqmlmodules \
qquickfolderlistmodel \
@ -95,10 +94,6 @@ qtConfig(process) {
}
}
qtConfig(library) {
SUBDIRS += qqmlextensionplugin
}
qtConfig(private_tests): \
SUBDIRS += $$PRIVATETESTS

View File

@ -107,7 +107,7 @@ static bool generateCache(const QString &qmlFileName, QByteArray *capturedStderr
QProcess proc;
if (capturedStderr == nullptr)
proc.setProcessChannelMode(QProcess::ForwardedChannels);
proc.setProgram(QLibraryInfo::location(QLibraryInfo::BinariesPath) + QDir::separator() + QLatin1String("qmlcachegen"));
proc.setProgram(TESTBINDIR "/qmlcachegen");
proc.setArguments(QStringList() << qmlFileName);
proc.start();
if (!proc.waitForFinished())

View File

@ -376,9 +376,8 @@ void tst_qmldiskcache::regenerateAfterChange()
QCOMPARE(quint32(obj->nBindings), quint32(2));
QCOMPARE(quint32(obj->bindingTable()->type), quint32(QV4::CompiledData::Binding::Type_Number));
QCOMPARE(reinterpret_cast<const QV4::Value *>(testUnit->constants())
[obj->bindingTable()->value.constantValueIndex].doubleValue(),
double(42));
const QV4::Value value(testUnit->constants()[obj->bindingTable()->value.constantValueIndex]);
QCOMPARE(value.doubleValue(), double(42));
QCOMPARE(quint32(testUnit->functionTableSize), quint32(1));

View File

@ -84,7 +84,7 @@ private:
void TestQmlformat::initTestCase()
{
QQmlDataTest::initTestCase();
m_qmlformatPath = QLibraryInfo::location(QLibraryInfo::BinariesPath) + QLatin1String("/qmlformat");
m_qmlformatPath = QStringLiteral(TESTBINDIR "/qmlformat");
#ifdef Q_OS_WIN
m_qmlformatPath += QLatin1String(".exe");
#endif

View File

@ -59,7 +59,7 @@ private:
void TestQmllint::initTestCase()
{
QQmlDataTest::initTestCase();
m_qmllintPath = QLibraryInfo::location(QLibraryInfo::BinariesPath) + QLatin1String("/qmllint");
m_qmllintPath = QLatin1String(TESTBINDIR "/qmllint");
#ifdef Q_OS_WIN
m_qmllintPath += QLatin1String(".exe");
#endif
@ -214,7 +214,7 @@ void TestQmllint::cleanQmlCode()
QString TestQmllint::runQmllint(const QString &fileToLint, bool shouldSucceed)
{
auto qmlImportDir = QLibraryInfo::location(QLibraryInfo::Qml2ImportsPath);
auto qmlImportDir = QString::fromUtf8(qgetenv("QML2_IMPORT_PATH"));
QStringList args;
args << QStringLiteral("-U") << testFile(fileToLint)
<< QStringLiteral("-I") << qmlImportDir

View File

@ -68,7 +68,7 @@ tst_qmlmin::tst_qmlmin()
void tst_qmlmin::initTestCase()
{
#if QT_CONFIG(process) && !defined(QTEST_CROSS_COMPILED) // sources not available when cross compiled
qmlminPath = QLibraryInfo::location(QLibraryInfo::BinariesPath) + QLatin1String("/qmlmin");
qmlminPath = QStringLiteral(TESTBINDIR "/qmlmin");
#ifdef Q_OS_WIN
qmlminPath += QLatin1String(".exe");
#endif

View File

@ -62,7 +62,7 @@ tst_qmlplugindump::tst_qmlplugindump()
void tst_qmlplugindump::initTestCase()
{
QQmlDataTest::initTestCase();
qmlplugindumpPath = QLibraryInfo::location(QLibraryInfo::BinariesPath);
qmlplugindumpPath = QLatin1String(TESTBINDIR);
#if defined(Q_OS_WIN)
qmlplugindumpPath += QLatin1String("/qmlplugindump.exe");

View File

@ -9249,7 +9249,7 @@ void tst_qqmlecmascript::hugeStack()
void tst_qqmlecmascript::gcCrashRegressionTest()
{
const QString qmljs = QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qmljs";
const QString qmljs = QStringLiteral(TESTBINDIR "/qmljs");
if (!QFile::exists(qmljs)) {
QSKIP("Tets requires qmljs");
}

View File

@ -62,7 +62,7 @@ void tst_QV4Assembler::perfMapFile()
#if !defined(Q_OS_LINUX) || defined(Q_OS_ANDROID)
QSKIP("perf map files are only generated on linux");
#else
const QString qmljs = QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qmljs";
const QString qmljs = QStringLiteral(TESTBINDIR "/qmljs");
QProcess process;
QTemporaryFile infile;

View File

@ -76,10 +76,10 @@ void tst_qv4mm::multiWrappedQObjects()
QCOMPARE(engine1.memoryManager->m_pendingFreedObjectWrapperValue.size(), 1);
QCOMPARE(engine2.memoryManager->m_pendingFreedObjectWrapperValue.size(), 0);
// Moves the additional WeakValue from m_multiplyWrappedQObjects to
// m_pendingFreedObjectWrapperValue. It's still alive after all.
// The additional WeakValue from m_multiplyWrappedQObjects hasn't been moved
// to m_pendingFreedObjectWrapperValue yet. It's still alive after all.
engine1.memoryManager->runGC();
QCOMPARE(engine1.memoryManager->m_pendingFreedObjectWrapperValue.size(), 2);
QCOMPARE(engine1.memoryManager->m_pendingFreedObjectWrapperValue.size(), 1);
// engine2 doesn't own the object as engine1 was the first to wrap it above.
// Therefore, no effect here.

View File

@ -167,8 +167,8 @@ void tst_examples::namingConvention(const QDir &d)
void tst_examples::namingConvention()
{
QStringList examplesLocations;
examplesLocations << QLibraryInfo::location(QLibraryInfo::ExamplesPath) + QLatin1String("/qml");
examplesLocations << QLibraryInfo::location(QLibraryInfo::ExamplesPath) + QLatin1String("/quick");
examplesLocations << QLatin1String(TESTEXAMPLEDIR "/qml");
examplesLocations << QLatin1String(TESTEXAMPLEDIR "/quick");
foreach(const QString &examples, examplesLocations) {
QDir d(examples);

View File

@ -6,9 +6,7 @@ PUBLICTESTS += \
qtConfig(opengl(es1|es2)?) {
PUBLICTESTS += \
drawingmodes \
rendernode
qtHaveModule(widgets): PUBLICTESTS += nodes
drawingmodes
QUICKTESTS += \
qquickanimatedsprite \

View File

@ -73,7 +73,7 @@ void tst_SignalSpy::testCount()
window.resize(200, 200);
window.setSource(testFileUrl("signalspy.qml"));
window.show();
QVERIFY(QTest::qWaitForWindowActive(&window));
QVERIFY(QTest::qWaitForWindowExposed(&window));
QVERIFY(window.rootObject() != nullptr);
QObject *mouseSpy = window.rootObject()->findChild<QObject*>("mouseSpy");