diff options
author | Friedemann Kleint <Friedemann.Kleint@digia.com> | 2013-03-11 10:42:03 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-03-15 16:18:09 +0100 |
commit | 14166395053bf93a561d87846d172515e5325882 (patch) | |
tree | ca42de1eb797cbe255c64769274a8c03f4c8520a | |
parent | ac46d0b14d7601412c28675ab2ff9fcd31e097be (diff) |
Fix warning about extended date/time range in Qt 5.
Store the qint64 julian day in 2 ints, allowing Qt Quick1
applications to work until approx 2.5 Quadrillion AD.
Task-number: QTBUG-28119
Change-Id: Id9cbcd8f01fb15e3eef13609e96d107b48b3ad9b
Reviewed-by: Alan Alpert (Personal) <416365416c@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r-- | src/declarative/qml/qdeclarativecompiler.cpp | 9 | ||||
-rw-r--r-- | src/declarative/qml/qdeclarativevme.cpp | 13 |
2 files changed, 11 insertions, 11 deletions
diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp index 69109d12..85ae3ebc 100644 --- a/src/declarative/qml/qdeclarativecompiler.cpp +++ b/src/declarative/qml/qdeclarativecompiler.cpp @@ -438,15 +438,14 @@ void QDeclarativeCompiler::genLiteralAssignment(const QMetaProperty &prop, case QVariant::DateTime: { QDateTime dateTime = QDeclarativeStringConverters::dateTimeFromString(string); -#ifdef Q_CC_GNU -# warning "QDateTime range has extended in Qt 5, please fix me" -#endif - int data[] = { int(dateTime.date().toJulianDay()), + // Stuff the qint64 julianDay into an array of int. + const qint64 julianDay = dateTime.date().toJulianDay(); + int data[] = { int(julianDay & 0xFFFFFFFF), int(julianDay >> 32), dateTime.time().hour(), dateTime.time().minute(), dateTime.time().second(), dateTime.time().msec() }; - int index = output->indexForInt(data, 5); + const int index = output->indexForInt(data, 6); instr.type = QDeclarativeInstruction::StoreDateTime; instr.storeDateTime.propertyIndex = prop.propertyIndex(); instr.storeDateTime.valueIndex = index; diff --git a/src/declarative/qml/qdeclarativevme.cpp b/src/declarative/qml/qdeclarativevme.cpp index f3adbe76..c4be742c 100644 --- a/src/declarative/qml/qdeclarativevme.cpp +++ b/src/declarative/qml/qdeclarativevme.cpp @@ -534,12 +534,13 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEObjectStack &stack, QObject *target = stack.top(); CLEAN_PROPERTY(target, instr.storeDateTime.propertyIndex); - QTime t; - t.setHMS(intData.at(instr.storeDateTime.valueIndex+1), - intData.at(instr.storeDateTime.valueIndex+2), - intData.at(instr.storeDateTime.valueIndex+3), - intData.at(instr.storeDateTime.valueIndex+4)); - QDateTime dt(QDate::fromJulianDay(intData.at(instr.storeDateTime.valueIndex)), t); + const qint64 julianDay = qint64((quint64)(uint)(intData.at(instr.storeDateTime.valueIndex))) + + (qint64(intData.at(instr.storeDateTime.valueIndex + 1)) << 32); + QDateTime dt(QDate::fromJulianDay(julianDay), + QTime(intData.at(instr.storeDateTime.valueIndex + 2), + intData.at(instr.storeDateTime.valueIndex + 3), + intData.at(instr.storeDateTime.valueIndex + 4), + intData.at(instr.storeDateTime.valueIndex + 5))); void *a[] = { &dt, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, instr.storeDateTime.propertyIndex, a); |