mirror of https://github.com/godotengine/godot
Revert "Make freed object different than null in comparison operators"
This reverts commit 150b50cfcd.
As discussed with the GDScript team, this has some implications which aren't
fully consensual yet, and which we want to revisit.
For now we revert to the 4.2 behavior for the 4.3 release, to avoid breaking
user expectations.
This commit is contained in:
parent
446e7a7c22
commit
152d7c1bba
|
|
@ -951,7 +951,7 @@ bool Variant::is_zero() const {
|
||||||
return *reinterpret_cast<const ::RID *>(_data._mem) == ::RID();
|
return *reinterpret_cast<const ::RID *>(_data._mem) == ::RID();
|
||||||
}
|
}
|
||||||
case OBJECT: {
|
case OBJECT: {
|
||||||
return get_validated_object() == nullptr;
|
return _get_obj().obj == nullptr;
|
||||||
}
|
}
|
||||||
case CALLABLE: {
|
case CALLABLE: {
|
||||||
return reinterpret_cast<const Callable *>(_data._mem)->is_null();
|
return reinterpret_cast<const Callable *>(_data._mem)->is_null();
|
||||||
|
|
|
||||||
|
|
@ -548,14 +548,14 @@ public:
|
||||||
class OperatorEvaluatorEqualObject {
|
class OperatorEvaluatorEqualObject {
|
||||||
public:
|
public:
|
||||||
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
||||||
const ObjectID &a = VariantInternal::get_object_id(&p_left);
|
const Object *a = p_left.get_validated_object();
|
||||||
const ObjectID &b = VariantInternal::get_object_id(&p_right);
|
const Object *b = p_right.get_validated_object();
|
||||||
*r_ret = a == b;
|
*r_ret = a == b;
|
||||||
r_valid = true;
|
r_valid = true;
|
||||||
}
|
}
|
||||||
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
||||||
const ObjectID &a = VariantInternal::get_object_id(left);
|
const Object *a = left->get_validated_object();
|
||||||
const ObjectID &b = VariantInternal::get_object_id(right);
|
const Object *b = right->get_validated_object();
|
||||||
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = a == b;
|
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = a == b;
|
||||||
}
|
}
|
||||||
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
||||||
|
|
@ -567,12 +567,12 @@ public:
|
||||||
class OperatorEvaluatorEqualObjectNil {
|
class OperatorEvaluatorEqualObjectNil {
|
||||||
public:
|
public:
|
||||||
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
||||||
const Object *a = p_left.operator Object *();
|
const Object *a = p_left.get_validated_object();
|
||||||
*r_ret = a == nullptr;
|
*r_ret = a == nullptr;
|
||||||
r_valid = true;
|
r_valid = true;
|
||||||
}
|
}
|
||||||
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
||||||
const Object *a = left->operator Object *();
|
const Object *a = left->get_validated_object();
|
||||||
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = a == nullptr;
|
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = a == nullptr;
|
||||||
}
|
}
|
||||||
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
||||||
|
|
@ -584,12 +584,12 @@ public:
|
||||||
class OperatorEvaluatorEqualNilObject {
|
class OperatorEvaluatorEqualNilObject {
|
||||||
public:
|
public:
|
||||||
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
||||||
const Object *b = p_right.operator Object *();
|
const Object *b = p_right.get_validated_object();
|
||||||
*r_ret = nullptr == b;
|
*r_ret = nullptr == b;
|
||||||
r_valid = true;
|
r_valid = true;
|
||||||
}
|
}
|
||||||
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
||||||
const Object *b = right->operator Object *();
|
const Object *b = right->get_validated_object();
|
||||||
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = nullptr == b;
|
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = nullptr == b;
|
||||||
}
|
}
|
||||||
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
||||||
|
|
@ -619,14 +619,14 @@ public:
|
||||||
class OperatorEvaluatorNotEqualObject {
|
class OperatorEvaluatorNotEqualObject {
|
||||||
public:
|
public:
|
||||||
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
||||||
const ObjectID &a = VariantInternal::get_object_id(&p_left);
|
Object *a = p_left.get_validated_object();
|
||||||
const ObjectID &b = VariantInternal::get_object_id(&p_right);
|
Object *b = p_right.get_validated_object();
|
||||||
*r_ret = a != b;
|
*r_ret = a != b;
|
||||||
r_valid = true;
|
r_valid = true;
|
||||||
}
|
}
|
||||||
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
||||||
const ObjectID &a = VariantInternal::get_object_id(left);
|
Object *a = left->get_validated_object();
|
||||||
const ObjectID &b = VariantInternal::get_object_id(right);
|
Object *b = right->get_validated_object();
|
||||||
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = a != b;
|
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = a != b;
|
||||||
}
|
}
|
||||||
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
||||||
|
|
@ -638,12 +638,12 @@ public:
|
||||||
class OperatorEvaluatorNotEqualObjectNil {
|
class OperatorEvaluatorNotEqualObjectNil {
|
||||||
public:
|
public:
|
||||||
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
||||||
Object *a = p_left.operator Object *();
|
Object *a = p_left.get_validated_object();
|
||||||
*r_ret = a != nullptr;
|
*r_ret = a != nullptr;
|
||||||
r_valid = true;
|
r_valid = true;
|
||||||
}
|
}
|
||||||
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
||||||
Object *a = left->operator Object *();
|
Object *a = left->get_validated_object();
|
||||||
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = a != nullptr;
|
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = a != nullptr;
|
||||||
}
|
}
|
||||||
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
||||||
|
|
@ -655,12 +655,12 @@ public:
|
||||||
class OperatorEvaluatorNotEqualNilObject {
|
class OperatorEvaluatorNotEqualNilObject {
|
||||||
public:
|
public:
|
||||||
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
||||||
Object *b = p_right.operator Object *();
|
Object *b = p_right.get_validated_object();
|
||||||
*r_ret = nullptr != b;
|
*r_ret = nullptr != b;
|
||||||
r_valid = true;
|
r_valid = true;
|
||||||
}
|
}
|
||||||
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
||||||
Object *b = right->operator Object *();
|
Object *b = right->get_validated_object();
|
||||||
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = nullptr != b;
|
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = nullptr != b;
|
||||||
}
|
}
|
||||||
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue