Merge pull request #66584 from rune-scape/rune-validated-call-obj-bug

Fix unset `ObjectID` with validated `get_object()` call
This commit is contained in:
Rémi Verschelde 2022-10-10 13:53:26 +02:00
commit 51bb3c36dd

View File

@ -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