summaryrefslogtreecommitdiffstats
path: root/core/variant/variant_construct.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2020-11-30 20:22:15 +0100
committerGitHub <noreply@github.com>2020-11-30 20:22:15 +0100
commit04bef80b42408f45d7838f9ef29f0e0553957475 (patch)
treec070bb40bd256567dff8b80c8f5c04df4e179669 /core/variant/variant_construct.cpp
parent8f3dde18f1a264de5a71bee76a706d76111f2b17 (diff)
parent029fd88adbc95e32d8613d315fa81fa978ca04c3 (diff)
downloadredot-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.cpp25
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) {