diff options
author | Lars Knoll <lars.knoll@qt.io> | 2017-02-03 16:28:17 +0100 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2017-03-09 08:58:46 +0000 |
commit | df3256b1f1eaa3ff9137ad1da36508365d978a8a (patch) | |
tree | a9d7fdb2dc49efbfd4d4809a8525b864ffb2b60c /src/qml/memory/qv4mmdefs_p.h | |
parent | ae92e34a0c3e8a2df88a854081678fa35c4f6b42 (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/qv4mmdefs_p.h')
-rw-r--r-- | src/qml/memory/qv4mmdefs_p.h | 8 |
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 | |