Skip to content

Commit 41aa71f

Browse files
Fix sharing of typed arrays from constructor
1 parent 21d526e commit 41aa71f

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

include/godot_cpp/variant/typed_array.hpp

+16-6
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,15 @@ class TypedArray : public Array {
4444
_ref(p_array);
4545
}
4646
_FORCE_INLINE_ TypedArray(const Variant &p_variant) :
47-
Array(p_variant.operator Array(), Variant::OBJECT, T::get_class_static(), Variant()) {
47+
TypedArray(Array(p_variant)) {
4848
}
49-
_FORCE_INLINE_ TypedArray(const Array &p_array) :
50-
Array(p_array, Variant::OBJECT, T::get_class_static(), Variant()) {
49+
_FORCE_INLINE_ TypedArray(const Array &p_array) {
50+
set_typed(Variant::OBJECT, T::get_class_static(), Variant());
51+
if (is_same_typed(p_array)) {
52+
_ref(p_array);
53+
} else {
54+
assign(p_array);
55+
}
5156
}
5257
_FORCE_INLINE_ TypedArray() {
5358
set_typed(Variant::OBJECT, T::get_class_static(), Variant());
@@ -65,10 +70,15 @@ class TypedArray : public Array {
6570
_ref(p_array); \
6671
} \
6772
_FORCE_INLINE_ TypedArray(const Variant &p_variant) : \
68-
Array(p_variant.operator Array(), m_variant_type, StringName(), Variant()) { \
73+
TypedArray(Array(p_variant)) { \
6974
} \
70-
_FORCE_INLINE_ TypedArray(const Array &p_array) : \
71-
Array(p_array, m_variant_type, StringName(), Variant()) { \
75+
_FORCE_INLINE_ TypedArray(const Array &p_array) { \
76+
set_typed(m_variant_type, StringName(), Variant()); \
77+
if (is_same_typed(p_array)) { \
78+
_ref(p_array); \
79+
} else { \
80+
assign(p_array); \
81+
} \
7282
} \
7383
_FORCE_INLINE_ TypedArray() { \
7484
set_typed(m_variant_type, StringName(), Variant()); \

0 commit comments

Comments
 (0)