Merge remote-tracking branch 'origin/5.12' into 5.13

Change-Id: I6472cd72b27c69257efe54376e428274ebf68050
This commit is contained in:
Qt Forward Merge Bot 2019-09-12 19:49:23 +02:00
commit 9a1e4ffa66
11 changed files with 195 additions and 43 deletions

89
dist/changes-5.12.5 vendored Normal file
View File

@ -0,0 +1,89 @@
Qt 5.12.5 is a bug-fix release. It maintains both forward and backward
compatibility (source and binary) with Qt 5.12.0 through 5.12.4.
For more details, refer to the online documentation included in this
distribution. The documentation is also available online:
https://doc.qt.io/qt-5/index.html
The Qt version 5.12 series is binary compatible with the 5.11.x series.
Applications compiled for 5.11 will continue to run with 5.12.
Some of the changes listed in this file include issue tracking numbers
corresponding to tasks in the Qt Bug Tracker:
https://bugreports.qt.io/
Each of these identifiers can be entered in the bug tracker to obtain more
information about a particular change.
****************************************************************************
* Important Behavior Changes *
****************************************************************************
- [QTBUG-76871] TapHandler.point now holds the release position while the
tapped() signal is emitted.
****************************************************************************
* QtQml *
****************************************************************************
- [QTBUG-76018] Readonly QML properties can now be templates such as
list<...>.
- [QTBUG-76085] QQmlApplication engine now automatically loads translation
files from resource directories.
- [QTBUG-75939] Instances of QJSValue can now safely be passed between
threads and destroyed in a different thread.
- [QTBUG-75642] Fixed an invalid memory read caused by the JIT compiler.
- [QTBUG-71387] Fixed a use-after-free condition caused by calling
qmlClearTypeRegistrations().
- [QTBUG-76656] Made sure JavaScript "this" points to the right object when
calling scope and context properties through lookups.
- [QTBUG-76796] Fixed bindings to typeof(<name>) to get re-evaluated when
<name> gets defined.
- [QTBUG-55407] Avoid invalid memory access when calling setData() on a
QQmlComponent constructed without an engine.
- [QTBUG-76441] Fixed importing "qrc:/" (with exactly one slash).
- [QTBUG-71329] Implemented the missing bits of JavaScript promise chains.
- [QTBUG-75983] Fixed null pointer dereference in QQmlXmlHttpRequest.
- [QTBUG-77012] Fixed static build issue: multiple definitions of
qtPositionAttributeName().
- [QTBUG-77102] The component versioning is not enforced when loading
singletons.
****************************************************************************
* QtQuick *
****************************************************************************
- Item Views:
* [QTBUG-76487] We now properly populate delegates with the populate
transition when the view is resized after componentComplete.
* [QTBUG-31677] A ListView footer is now positioned correctly after the
last item is removed.
* [QTBUG-76433][QTBUG-44308] Fixed a crash while doing fast flicking in
transitions that use Animators.
* [QTBUG-76254] Fixed a crash in QQmlDelegateModel.
- Input:
* [QTBUG-75399] Fixed a crash when using the KeyNavigation attached property.
* [QTBUG-76875] DragHandler now respects acceptedButtons.
* [QTBUG-71218] If a Controls 2 Button has a DragHandler, the button is
now released when the drag begins.
- Scene graph:
* [QTBUG-76603] qmlscene now sets the default surface format earlier
and correctly.
* [QTBUG-68566] Fixed rendering freeze when using software rendering
of WebEngine in QQuickWidget.
* [QTBUG-66810] Software rendering: repaint everything when moving
between HiDpi and lower-resolution screens.
- Text:
* [QTBUG-77217] Fixed a bug where aligning an image to "top" or "bottom"
could cause a crash under certain circumstances.
* [QTBUG-76528] Fixed missing glyphs and in some cases crashes when
displaying many characters from the same font on a system with a
low maximum texture size.
* [QTBUG-76528] Fixed a bug when displaying many characters from the same
font on a system with a low maximum texture size.
* [QTBUG-74761] Added support for text color when using color fonts.

View File

@ -621,9 +621,9 @@ public:
loadPtr(exceptionHandlerAddress(), ScratchRegister);
Jump exitFunction = branchPtr(Equal, ScratchRegister, TrustedImmPtr(0));
loadUndefined();
jump(ScratchRegister);
exitFunction.link(this);
loadUndefined();
if (functionExit.isSet())
jump(functionExit);

View File

@ -1479,6 +1479,12 @@ void BaselineAssembler::saveAccumulatorInFrame()
offsetof(CallData, accumulator)));
}
void BaselineAssembler::loadAccumulatorFromFrame()
{
pasm()->loadAccumulator(PlatformAssembler::Address(PlatformAssembler::JSStackFrameRegister,
offsetof(CallData, accumulator)));
}
static ReturnedValue TheJitIs__Tail_Calling__ToTheRuntimeSoTheJitFrameIsMissing(CppStackFrame *frame, ExecutionEngine *engine)
{
return Runtime::method_tailCall(frame, engine);
@ -1606,7 +1612,6 @@ void BaselineAssembler::deadTemporalZoneCheck(int offsetForSavedIP, int variable
{
auto valueIsAliveJump = pasm()->jumpNotEmpty();
storeInstructionPointer(offsetForSavedIP);
saveAccumulatorInFrame();
prepareCallWithArgCount(2);
passInt32AsArg(variableName, 1);
passEngineAsArg(0);

View File

@ -153,6 +153,7 @@ public:
void passPointerAsArg(void *ptr, int arg);
void callRuntime(const char *functionName, const void *funcPtr, CallResultDestination dest);
void saveAccumulatorInFrame();
void loadAccumulatorFromFrame();
void jsTailCall(int func, int thisObject, int argc, int argv);
// exception/context stuff

View File

@ -77,6 +77,7 @@ void BaselineJIT::generate()
#define STORE_IP() as->storeInstructionPointer(nextInstructionOffset())
#define STORE_ACC() as->saveAccumulatorInFrame()
#define LOAD_ACC() as->loadAccumulatorFromFrame()
#define BASELINEJIT_GENERATE_RUNTIME_CALL(function, destination) \
as->GENERATE_RUNTIME_CALL(function, destination)
#define BASELINEJIT_GENERATE_TAIL_CALL(function) \
@ -235,6 +236,7 @@ void BaselineJIT::generate_StoreNameSloppy(int name)
as->passEngineAsArg(0);
BASELINEJIT_GENERATE_RUNTIME_CALL(Runtime::method_storeNameSloppy, CallResultDestination::Ignore);
as->checkException();
LOAD_ACC();
}
void BaselineJIT::generate_StoreNameStrict(int name)
@ -247,6 +249,7 @@ void BaselineJIT::generate_StoreNameStrict(int name)
as->passEngineAsArg(0);
BASELINEJIT_GENERATE_RUNTIME_CALL(Runtime::method_storeNameStrict, CallResultDestination::Ignore);
as->checkException();
LOAD_ACC();
}
void BaselineJIT::generate_LoadElement(int base, int /*traceSlot*/)
@ -272,6 +275,7 @@ void BaselineJIT::generate_StoreElement(int base, int index, int /*traceSlot*/)
as->passEngineAsArg(0);
BASELINEJIT_GENERATE_RUNTIME_CALL(Runtime::method_storeElement, CallResultDestination::Ignore);
as->checkException();
LOAD_ACC();
}
void BaselineJIT::generate_LoadProperty(int name, int /*traceSlot*/)
@ -310,6 +314,7 @@ void BaselineJIT::generate_StoreProperty(int name, int base)
as->passEngineAsArg(0);
BASELINEJIT_GENERATE_RUNTIME_CALL(Runtime::method_storeProperty, CallResultDestination::Ignore);
as->checkException();
LOAD_ACC();
}
void BaselineJIT::generate_SetLookup(int index, int base)
@ -329,7 +334,6 @@ void BaselineJIT::generate_SetLookup(int index, int base)
void BaselineJIT::generate_LoadSuperProperty(int property)
{
STORE_IP();
STORE_ACC();
as->prepareCallWithArgCount(2);
as->passJSSlotAsArg(property, 1);
as->passEngineAsArg(0);
@ -347,6 +351,7 @@ void BaselineJIT::generate_StoreSuperProperty(int property)
as->passEngineAsArg(0);
BASELINEJIT_GENERATE_RUNTIME_CALL(Runtime::method_storeSuperProperty, CallResultDestination::Ignore);
as->checkException();
LOAD_ACC();
}
void BaselineJIT::generate_Yield()
@ -592,6 +597,7 @@ void BaselineJIT::generate_PushBlockContext(int index)
as->passInt32AsArg(index, 1);
as->passJSSlotAsArg(0, 0);
BASELINEJIT_GENERATE_RUNTIME_CALL(Helpers::pushBlockContext, CallResultDestination::Ignore);
as->loadAccumulatorFromFrame();
}
void BaselineJIT::generate_CloneBlockContext()
@ -600,6 +606,7 @@ void BaselineJIT::generate_CloneBlockContext()
as->prepareCallWithArgCount(1);
as->passJSSlotAsArg(CallData::Context, 0);
BASELINEJIT_GENERATE_RUNTIME_CALL(Helpers::cloneBlockContext, CallResultDestination::Ignore);
as->loadAccumulatorFromFrame();
}
void BaselineJIT::generate_PushScriptContext(int index)
@ -610,6 +617,7 @@ void BaselineJIT::generate_PushScriptContext(int index)
as->passEngineAsArg(1);
as->passJSSlotAsArg(0, 0);
BASELINEJIT_GENERATE_RUNTIME_CALL(Helpers::pushScriptContext, CallResultDestination::Ignore);
as->loadAccumulatorFromFrame();
}
void BaselineJIT::generate_PopScriptContext()
@ -619,6 +627,7 @@ void BaselineJIT::generate_PopScriptContext()
as->passEngineAsArg(1);
as->passJSSlotAsArg(0, 0);
BASELINEJIT_GENERATE_RUNTIME_CALL(Helpers::popScriptContext, CallResultDestination::Ignore);
as->loadAccumulatorFromFrame();
}
void BaselineJIT::generate_PopContext() { as->popContext(); }
@ -719,11 +728,13 @@ void BaselineJIT::generate_TypeofValue()
void BaselineJIT::generate_DeclareVar(int varName, int isDeletable)
{
STORE_ACC();
as->prepareCallWithArgCount(3);
as->passInt32AsArg(varName, 2);
as->passInt32AsArg(isDeletable, 1);
as->passEngineAsArg(0);
BASELINEJIT_GENERATE_RUNTIME_CALL(Runtime::method_declareVar, CallResultDestination::Ignore);
LOAD_ACC();
}
void BaselineJIT::generate_DefineArray(int argc, int args)
@ -781,11 +792,13 @@ void BaselineJIT::generate_CreateRestParameter(int argIndex)
void BaselineJIT::generate_ConvertThisToObject()
{
STORE_ACC();
as->prepareCallWithArgCount(2);
as->passJSSlotAsArg(CallData::This, 1);
as->passEngineAsArg(0);
BASELINEJIT_GENERATE_RUNTIME_CALL(Helpers::convertThisToObject, CallResultDestination::Ignore);
as->checkException();
LOAD_ACC();
}
void BaselineJIT::generate_LoadSuperConstructor()
@ -931,6 +944,7 @@ void BaselineJIT::generate_ThrowOnNullOrUndefined()
as->passEngineAsArg(0);
BASELINEJIT_GENERATE_RUNTIME_CALL(Helpers::throwOnNullOrUndefined, CallResultDestination::Ignore);
as->checkException();
LOAD_ACC();
}
void BaselineJIT::generate_GetTemplateObject(int index)

View File

@ -727,7 +727,6 @@ QV4::ReturnedValue VME::interpret(CppStackFrame *frame, ExecutionEngine *engine,
MOTH_BEGIN_INSTR(LoadSuperProperty)
STORE_IP();
STORE_ACC();
acc = Runtime::method_loadSuperProperty(engine, STACK_VALUE(property));
CHECK_EXCEPTION;
MOTH_END_INSTR(LoadSuperProperty)
@ -884,12 +883,14 @@ QV4::ReturnedValue VME::interpret(CppStackFrame *frame, ExecutionEngine *engine,
MOTH_BEGIN_INSTR(Construct)
STORE_IP();
STORE_ACC();
acc = Runtime::method_construct(engine, STACK_VALUE(func), ACC, stack + argv, argc);
CHECK_EXCEPTION;
MOTH_END_INSTR(Construct)
MOTH_BEGIN_INSTR(ConstructWithSpread)
STORE_IP();
STORE_ACC();
acc = Runtime::method_constructWithSpread(engine, STACK_VALUE(func), ACC, stack + argv, argc);
CHECK_EXCEPTION;
MOTH_END_INSTR(ConstructWithSpread)
@ -917,7 +918,6 @@ QV4::ReturnedValue VME::interpret(CppStackFrame *frame, ExecutionEngine *engine,
MOTH_BEGIN_INSTR(DeadTemporalZoneCheck)
if (ACC.isEmpty()) {
STORE_IP();
STORE_ACC();
Runtime::method_throwReferenceError(engine, name);
goto handleUnwind;
}
@ -1086,6 +1086,7 @@ QV4::ReturnedValue VME::interpret(CppStackFrame *frame, ExecutionEngine *engine,
if (t->isNullOrUndefined()) {
*t = engine->globalObject->asReturnedValue();
} else {
STORE_ACC();
*t = t->toObject(engine)->asReturnedValue();
CHECK_EXCEPTION;
}
@ -1098,6 +1099,7 @@ QV4::ReturnedValue VME::interpret(CppStackFrame *frame, ExecutionEngine *engine,
MOTH_END_INSTR(LoadSuperConstructor)
MOTH_BEGIN_INSTR(ToObject)
STORE_ACC();
acc = ACC.toObject(engine)->asReturnedValue();
CHECK_EXCEPTION;
MOTH_END_INSTR(ToObject)

View File

@ -238,12 +238,11 @@ void StringLiteral::accept0(Visitor *visitor)
void TemplateLiteral::accept0(Visitor *visitor)
{
if (visitor->visit(this)) {
if (next)
accept(next, visitor);
bool accepted = true;
for (TemplateLiteral *it = this; it && accepted; it = it->next) {
accepted = visitor->visit(it);
visitor->endVisit(it);
}
visitor->endVisit(this);
}
void NumericLiteral::accept0(Visitor *visitor)
@ -1013,13 +1012,13 @@ QStringList FormalParameterList::boundNames() const
void FormalParameterList::accept0(Visitor *visitor)
{
if (visitor->visit(this)) {
accept(element, visitor);
if (next)
accept(next, visitor);
bool accepted = true;
for (FormalParameterList *it = this; it && accepted; it = it->next) {
accepted = visitor->visit(it);
if (accepted)
accept(it->element, visitor);
visitor->endVisit(it);
}
visitor->endVisit(this);
}
FormalParameterList *FormalParameterList::finish(QQmlJS::MemoryPool *pool)
@ -1290,12 +1289,14 @@ void UiPragma::accept0(Visitor *visitor)
void UiHeaderItemList::accept0(Visitor *visitor)
{
if (visitor->visit(this)) {
accept(headerItem, visitor);
accept(next, visitor);
}
bool accepted = true;
for (UiHeaderItemList *it = this; it && accepted; it = it->next) {
accepted = visitor->visit(it);
if (accepted)
accept(it->headerItem, visitor);
visitor->endVisit(this);
visitor->endVisit(it);
}
}
@ -1359,14 +1360,15 @@ void PatternElement::boundNames(QStringList *names)
void PatternElementList::accept0(Visitor *visitor)
{
if (visitor->visit(this)) {
accept(elision, visitor);
accept(element, visitor);
if (next)
accept(next, visitor);
bool accepted = true;
for (PatternElementList *it = this; it && accepted; it = it->next) {
accepted = visitor->visit(it);
if (accepted) {
accept(it->elision, visitor);
accept(it->element, visitor);
}
visitor->endVisit(it);
}
visitor->endVisit(this);
}
void PatternElementList::boundNames(QStringList *names)
@ -1395,13 +1397,13 @@ void PatternProperty::boundNames(QStringList *names)
void PatternPropertyList::accept0(Visitor *visitor)
{
if (visitor->visit(this)) {
accept(property, visitor);
if (next)
accept(next, visitor);
bool accepted = true;
for (PatternPropertyList *it = this; it && accepted; it = it->next) {
accepted = visitor->visit(it);
if (accepted)
accept(it->property, visitor);
visitor->endVisit(it);
}
visitor->endVisit(this);
}
void PatternPropertyList::boundNames(QStringList *names)
@ -1446,13 +1448,14 @@ void ClassDeclaration::accept0(Visitor *visitor)
void ClassElementList::accept0(Visitor *visitor)
{
if (visitor->visit(this)) {
accept(property, visitor);
if (next)
accept(next, visitor);
}
bool accepted = true;
for (ClassElementList *it = this; it && accepted; it = it->next) {
accepted = visitor->visit(it);
if (accepted)
accept(it->property, visitor);
visitor->endVisit(this);
visitor->endVisit(it);
}
}
ClassElementList *ClassElementList::finish()

View File

@ -781,8 +781,8 @@ void QQuickTextNodeEngine::addToSceneGraph(QQuickTextNode *parentNode,
for (int i = 0; i < m_backgrounds.size(); ++i) {
const QRectF &rect = m_backgrounds.at(i).first;
const QColor &color = m_backgrounds.at(i).second;
parentNode->addRectangleNode(rect, color);
if (color.alpha() != 0)
parentNode->addRectangleNode(rect, color);
}
// Add all text with unselected color first

@ -1 +1 @@
Subproject commit 6b0c42c63c2492bd0a7a96d3179d122b5f71793f
Subproject commit 3c69133cc419840c1be34638039cd8c48a7ef581

View File

@ -0,0 +1,16 @@
import QtQuick 2.0
Rectangle {
width: 200
height: 200
color: "white"
Text {
objectName: "text"
textFormat: Text.RichText
anchors.fill: parent
color: "black"
text: "<h1 style=\"background-color:rgba(255,255,255,0.00)\">foo</h1>"
verticalAlignment: Text.AlignTop
horizontalAlignment: Text.AlignLeft
}
}

View File

@ -164,6 +164,8 @@ private slots:
void verticallyAlignedImageInTable();
void transparentBackground();
private:
QStringList standard;
QStringList richText;
@ -4429,6 +4431,26 @@ void tst_qquicktext::verticallyAlignedImageInTable()
// Don't crash
}
void tst_qquicktext::transparentBackground()
{
if ((QGuiApplication::platformName() == QLatin1String("offscreen"))
|| (QGuiApplication::platformName() == QLatin1String("minimal")))
QSKIP("Skipping due to grabToImage not functional on offscreen/minimimal platforms");
QScopedPointer<QQuickView> window(new QQuickView);
window->setSource(testFileUrl("transparentBackground.qml"));
QTRY_COMPARE(window->status(), QQuickView::Ready);
window->show();
QVERIFY(QTest::qWaitForWindowExposed(window.data()));
QImage img = window->grabWindow();
QCOMPARE(img.isNull(), false);
QColor color = img.pixelColor(0, 0);
QCOMPARE(color.red(), 255);
QCOMPARE(color.blue(), 255);
QCOMPARE(color.green(), 255);
}
QTEST_MAIN(tst_qquicktext)
#include "tst_qquicktext.moc"