summaryrefslogtreecommitdiff
path: root/core/variant
diff options
context:
space:
mode:
authorrune-scape <allie.smith.epic@gmail.com>2022-09-28 23:04:22 -0700
committerrune-scape <allie.smith.epic@gmail.com>2022-09-28 23:04:22 -0700
commit51c411c7ad46ea25565058ac9e08ae1528b5ba85 (patch)
tree2b030a84c4445070fda4ee1c558309e22af2ba63 /core/variant
parentf8745f2f71c79972df66f17a3da75f6e328bc55d (diff)
Fix unset `ObjectID` with validated `get_object()` call
Fixes unset `ObjectID` in variant when calling a validated builtin method returning an `Object *`.
Diffstat (limited to 'core/variant')
-rw-r--r--core/variant/variant_internal.h25
1 files changed, 1 insertions, 24 deletions
diff --git a/core/variant/variant_internal.h b/core/variant/variant_internal.h
index 874a183d29..7ae2368fe4 100644
--- a/core/variant/variant_internal.h
+++ b/core/variant/variant_internal.h
@@ -1047,7 +1047,7 @@ struct VariantInternalAccessor<PackedColorArray> {
template <>
struct VariantInternalAccessor<Object *> {
static _FORCE_INLINE_ Object *get(const Variant *v) { return const_cast<Object *>(*VariantInternal::get_object(v)); }
- static _FORCE_INLINE_ void set(Variant *v, const Object *p_value) { *VariantInternal::get_object(v) = const_cast<Object *>(p_value); }
+ static _FORCE_INLINE_ void set(Variant *v, const Object *p_value) { VariantInternal::object_assign(v, p_value); }
};
template <>
@@ -1532,27 +1532,4 @@ struct VariantTypeConstructor {
}
};
-template <>
-struct VariantTypeConstructor<Object *> {
- _FORCE_INLINE_ static void variant_from_type(void *p_variant, void *p_value) {
- Variant *variant = reinterpret_cast<Variant *>(p_variant);
- VariantInitializer<Object *>::init(variant);
- Object *object = *(reinterpret_cast<Object **>(p_value));
- if (object) {
- if (object->is_ref_counted()) {
- if (!VariantInternal::initialize_ref(object)) {
- return;
- }
- }
- VariantInternalAccessor<Object *>::set(variant, object);
- VariantInternalAccessor<ObjectID>::set(variant, object->get_instance_id());
- }
- }
-
- _FORCE_INLINE_ static void type_from_variant(void *p_value, void *p_variant) {
- Object **value = reinterpret_cast<Object **>(p_value);
- *value = VariantInternalAccessor<Object *>::get(reinterpret_cast<Variant *>(p_variant));
- }
-};
-
#endif // VARIANT_INTERNAL_H