summaryrefslogtreecommitdiffstats
path: root/core/variant/variant_internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/variant/variant_internal.h')
-rw-r--r--core/variant/variant_internal.h12
1 files changed, 6 insertions, 6 deletions
diff --git a/core/variant/variant_internal.h b/core/variant/variant_internal.h
index b7bd2a9c8c..8013c1a32a 100644
--- a/core/variant/variant_internal.h
+++ b/core/variant/variant_internal.h
@@ -1534,14 +1534,14 @@ struct VariantTypeAdjust<Object *> {
template <class T>
struct VariantTypeConstructor {
- _FORCE_INLINE_ static void variant_from_type(void *p_variant, void *p_value) {
- Variant *variant = reinterpret_cast<Variant *>(p_variant);
- VariantInitializer<T>::init(variant);
- VariantInternalAccessor<T>::set(variant, *((T *)p_value));
+ _FORCE_INLINE_ static void variant_from_type(void *r_variant, void *p_value) {
+ // r_variant is provided by caller as uninitialized memory
+ memnew_placement(r_variant, Variant(*((T *)p_value)));
}
- _FORCE_INLINE_ static void type_from_variant(void *p_value, void *p_variant) {
- *((T *)p_value) = VariantInternalAccessor<T>::get(reinterpret_cast<Variant *>(p_variant));
+ _FORCE_INLINE_ static void type_from_variant(void *r_value, void *p_variant) {
+ // r_value is provided by caller as uninitialized memory
+ memnew_placement(r_value, T(VariantInternalAccessor<T>::get(reinterpret_cast<Variant *>(p_variant))));
}
};