diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2020-11-30 20:22:15 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-30 20:22:15 +0100 |
commit | 04bef80b42408f45d7838f9ef29f0e0553957475 (patch) | |
tree | c070bb40bd256567dff8b80c8f5c04df4e179669 /core/variant/variant_construct.cpp | |
parent | 8f3dde18f1a264de5a71bee76a706d76111f2b17 (diff) | |
parent | 029fd88adbc95e32d8613d315fa81fa978ca04c3 (diff) | |
download | redot-engine-04bef80b42408f45d7838f9ef29f0e0553957475.tar.gz |
Merge pull request #43992 from vnen/variant-internal-object-set
Fix VariantInternal initialization and setting of object
Diffstat (limited to 'core/variant/variant_construct.cpp')
-rw-r--r-- | core/variant/variant_construct.cpp | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/core/variant/variant_construct.cpp b/core/variant/variant_construct.cpp index 01f5b7df59..3bb3fa3634 100644 --- a/core/variant/variant_construct.cpp +++ b/core/variant/variant_construct.cpp @@ -777,18 +777,23 @@ String Variant::get_constructor_argument_name(Variant::Type p_type, int p_constr return construct_data[p_type][p_constructor].arg_names[p_argument]; } -void VariantInternal::object_assign(Variant *v, const Variant *o) { - if (o->_get_obj().obj && o->_get_obj().id.is_reference()) { - Reference *reference = static_cast<Reference *>(o->_get_obj().obj); - if (!reference->reference()) { - v->_get_obj().obj = nullptr; - v->_get_obj().id = ObjectID(); - return; +void VariantInternal::object_assign(Variant *v, const Object *o) { + if (o) { + if (o->is_reference()) { + Reference *reference = const_cast<Reference *>(static_cast<const Reference *>(o)); + if (!reference->init_ref()) { + v->_get_obj().obj = nullptr; + v->_get_obj().id = ObjectID(); + return; + } } - } - v->_get_obj().obj = const_cast<Object *>(o->_get_obj().obj); - v->_get_obj().id = o->_get_obj().id; + v->_get_obj().obj = const_cast<Object *>(o); + v->_get_obj().id = o->get_instance_id(); + } else { + v->_get_obj().obj = nullptr; + v->_get_obj().id = ObjectID(); + } } void Variant::get_constructor_list(Type p_type, List<MethodInfo> *r_list) { |