diff options
Diffstat (limited to 'src/corelib/kernel/qvariant.cpp')
-rw-r--r-- | src/corelib/kernel/qvariant.cpp | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index 533ccd7..ebd2e30 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -156,7 +156,16 @@ static void construct(QVariant::Private *x, const void *copy) x->data.b = copy ? *static_cast<const bool *>(copy) : false; break; case QVariant::Double: +#if defined(Q_CC_RVCT) + // Using trinary operator with 64bit constants crashes when ran on Symbian device + if (copy){ + x->data.d = *static_cast<const double*>(copy); + } else { + x->data.d = 0.0; + } +#else x->data.d = copy ? *static_cast<const double*>(copy) : 0.0; +#endif break; case QMetaType::Float: x->data.f = copy ? *static_cast<const float*>(copy) : 0.0f; @@ -165,10 +174,28 @@ static void construct(QVariant::Private *x, const void *copy) x->data.o = copy ? *static_cast<QObject *const*>(copy) : 0; break; case QVariant::LongLong: +#if defined(Q_CC_RVCT) + // Using trinary operator with 64bit constants crashes when ran on Symbian device + if (copy){ + x->data.ll = *static_cast<const qlonglong *>(copy); + } else { + x->data.ll = Q_INT64_C(0); + } +#else x->data.ll = copy ? *static_cast<const qlonglong *>(copy) : Q_INT64_C(0); +#endif break; case QVariant::ULongLong: +#if defined(Q_CC_RVCT) + // Using trinary operator with 64bit constants crashes when ran on Symbian device + if (copy){ + x->data.ull = *static_cast<const qulonglong *>(copy); + } else { + x->data.ull = Q_UINT64_C(0); + } +#else x->data.ull = copy ? *static_cast<const qulonglong *>(copy) : Q_UINT64_C(0); +#endif break; case QVariant::Invalid: case QVariant::UserType: @@ -598,7 +625,7 @@ static bool convert(const QVariant::Private *d, QVariant::Type t, void *result, ok = &dummy; switch (uint(t)) { - case QVariant::Url: + case QVariant::Url: switch (d->type) { case QVariant::String: *static_cast<QUrl *>(result) = QUrl(*v_cast<QString>(d)); @@ -1197,8 +1224,8 @@ const QVariant::Handler *QVariant::handler = &qt_kernel_variant_handler; and versatile, but may prove less memory and speed efficient than storing specific types in standard data structures. - QVariant also supports the notion of null values, where you can - have a defined type with no value set. However, note that QVariant + QVariant also supports the notion of null values, where you can + have a defined type with no value set. However, note that QVariant types can only be cast when they have had a value set. \snippet doc/src/snippets/code/src_corelib_kernel_qvariant.cpp 1 |