aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2014-07-17 10:35:15 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2014-07-22 13:49:20 +0200
commite6f3bcf66e0d154866e96a51b6ab2736ef5e2dc3 (patch)
treecca7f6d655fa34b3ff9fbd553c88b5a7448af441 /src
parent3110273d1cbb47cb28a4ea96e34373cc7bbdbaa9 (diff)
Disable T::Data compile time size assertion for some compilers
The fallback implementation of Q_STATIC_ASSERT does not support the use of "this" in the condition for all compilers, so let's use this macro only with proper compilers and skip it otherwise. Change-Id: Ia78ef9cc641dc403be66576033e35e61e28963e5 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/qml/jsruntime/qv4arraydata_p.h2
-rw-r--r--src/qml/jsruntime/qv4managed_p.h10
2 files changed, 9 insertions, 3 deletions
diff --git a/src/qml/jsruntime/qv4arraydata_p.h b/src/qml/jsruntime/qv4arraydata_p.h
index a582effb01..c95f9b598d 100644
--- a/src/qml/jsruntime/qv4arraydata_p.h
+++ b/src/qml/jsruntime/qv4arraydata_p.h
@@ -57,7 +57,7 @@ namespace QV4 {
static inline const QV4::ManagedVTable *staticVTable() { return &static_vtbl.managedVTable; } \
template <typename T> \
QV4::Returned<T> *asReturned() { return QV4::Returned<T>::create(this); } \
- void __dataTest() { Q_STATIC_ASSERT(sizeof(*this) == sizeof(Data)); } \
+ V4_MANAGED_SIZE_TEST \
const Data *d() const { return &static_cast<const Data &>(Managed::data); } \
Data *d() { return &static_cast<Data &>(Managed::data); }
diff --git a/src/qml/jsruntime/qv4managed_p.h b/src/qml/jsruntime/qv4managed_p.h
index 4d7af1a5f0..1faed6286a 100644
--- a/src/qml/jsruntime/qv4managed_p.h
+++ b/src/qml/jsruntime/qv4managed_p.h
@@ -62,6 +62,12 @@ inline int qYouForgotTheQ_MANAGED_Macro(T, T) { return 0; }
template <typename T1, typename T2>
inline void qYouForgotTheQ_MANAGED_Macro(T1, T2) {}
+#ifdef Q_COMPILER_STATIC_ASSERT
+#define V4_MANAGED_SIZE_TEST void __dataTest() { Q_STATIC_ASSERT(sizeof(*this) == sizeof(Data)); }
+#else
+#define V4_MANAGED_SIZE_TEST
+#endif
+
#define V4_MANAGED(superClass) \
public: \
Q_MANAGED_CHECK \
@@ -70,7 +76,7 @@ inline void qYouForgotTheQ_MANAGED_Macro(T1, T2) {}
static inline const QV4::ManagedVTable *staticVTable() { return &static_vtbl; } \
template <typename T> \
QV4::Returned<T> *asReturned() { return QV4::Returned<T>::create(this); } \
- void __dataTest() { Q_STATIC_ASSERT(sizeof(*this) == sizeof(Data)); } \
+ V4_MANAGED_SIZE_TEST \
const Data *d() const { return &static_cast<const Data &>(Managed::data); } \
Data *d() { return &static_cast<Data &>(Managed::data); }
@@ -82,7 +88,7 @@ inline void qYouForgotTheQ_MANAGED_Macro(T1, T2) {}
static inline const QV4::ManagedVTable *staticVTable() { return &static_vtbl.managedVTable; } \
template <typename T> \
QV4::Returned<T> *asReturned() { return QV4::Returned<T>::create(this); } \
- void __dataTest() { Q_STATIC_ASSERT(sizeof(*this) == sizeof(Data)); } \
+ V4_MANAGED_SIZE_TEST \
const Data *d() const { return &static_cast<const Data &>(Managed::data); } \
Data *d() { return &static_cast<Data &>(Managed::data); }