aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/memory
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2017-02-03 16:28:17 +0100
committerLars Knoll <lars.knoll@qt.io>2017-03-09 08:58:46 +0000
commitdf3256b1f1eaa3ff9137ad1da36508365d978a8a (patch)
treea9d7fdb2dc49efbfd4d4809a8525b864ffb2b60c /src/qml/memory
parentae92e34a0c3e8a2df88a854081678fa35c4f6b42 (diff)
Go through proper set() functions when writing to MemberData
This is required, so we only have to add the write barrier in one place. Change-Id: I4e8bde823b30ad18f043312ac3f1ed46597b91a7 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/memory')
-rw-r--r--src/qml/memory/qv4mmdefs_p.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/qml/memory/qv4mmdefs_p.h b/src/qml/memory/qv4mmdefs_p.h
index 63e51f9742..9c84a49e90 100644
--- a/src/qml/memory/qv4mmdefs_p.h
+++ b/src/qml/memory/qv4mmdefs_p.h
@@ -278,6 +278,10 @@ struct MarkFlagEvaluator<ValueArray<o>> {
static Q_CONSTEXPR quint64 value = static_cast<quint64>(Mark_ValueArray) << (2*o / sizeof(quintptr));
};
template <size_t o>
+struct MarkFlagEvaluator<HeapValueArray<o>> {
+ static Q_CONSTEXPR quint64 value = static_cast<quint64>(Mark_ValueArray) << (o >> 2);
+};
+template <size_t o>
struct MarkFlagEvaluator<HeapValue<o>> {
static Q_CONSTEXPR quint64 value = static_cast<quint64>(Mark_Value) << (2 *o / sizeof(quintptr));
};
@@ -288,7 +292,7 @@ struct MarkFlagEvaluator<HeapValue<o>> {
#define HEAP_OBJECT_OFFSET_MEMBER_EXPANSION_Pointer(c, type, name) Pointer<type, 0> name;
#define HEAP_OBJECT_OFFSET_MEMBER_EXPANSION_NoMark(c, type, name) type name;
#define HEAP_OBJECT_OFFSET_MEMBER_EXPANSION_HeapValue(c, type, name) HeapValue<0> name;
-#define HEAP_OBJECT_OFFSET_MEMBER_EXPANSION_ValueArray(c, type, name) ValueArray<0> name;
+#define HEAP_OBJECT_OFFSET_MEMBER_EXPANSION_ValueArray(c, type, name) type<0> name;
#define HEAP_OBJECT_MEMBER_EXPANSION(c, gcType, type, name) \
HEAP_OBJECT_MEMBER_EXPANSION_##gcType(c, type, name)
@@ -300,7 +304,7 @@ struct MarkFlagEvaluator<HeapValue<o>> {
#define HEAP_OBJECT_MEMBER_EXPANSION_HeapValue(c, type, name) \
HeapValue<offsetof(c##OffsetStruct, name) + baseOffset> name;
#define HEAP_OBJECT_MEMBER_EXPANSION_ValueArray(c, type, name) \
- ValueArray<offsetof(c##OffsetStruct, name) + baseOffset> name;
+ type<offsetof(c##OffsetStruct, name) + baseOffset> name;
#define HEAP_OBJECT_MARK_EXPANSION(class, gcType, type, name) \
MarkFlagEvaluator<decltype(class::name)>::value |