summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@digia.com>2013-03-11 10:42:03 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-03-15 16:18:09 +0100
commit14166395053bf93a561d87846d172515e5325882 (patch)
treeca42de1eb797cbe255c64769274a8c03f4c8520a
parentac46d0b14d7601412c28675ab2ff9fcd31e097be (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.cpp9
-rw-r--r--src/declarative/qml/qdeclarativevme.cpp13
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);