Merge pull request #73896 from vnen/object-null-boolean-consistency
Make freed object different than null in comparison operators
This commit is contained in:
commit
ca19d34bde
@ -931,7 +931,7 @@ bool Variant::is_zero() const {
|
||||
return *reinterpret_cast<const ::RID *>(_data._mem) == ::RID();
|
||||
}
|
||||
case OBJECT: {
|
||||
return _get_obj().obj == nullptr;
|
||||
return get_validated_object() == nullptr;
|
||||
}
|
||||
case CALLABLE: {
|
||||
return reinterpret_cast<const Callable *>(_data._mem)->is_null();
|
||||
|
@ -549,14 +549,14 @@ public:
|
||||
class OperatorEvaluatorEqualObject {
|
||||
public:
|
||||
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
||||
const Object *a = p_left.get_validated_object();
|
||||
const Object *b = p_right.get_validated_object();
|
||||
const ObjectID &a = VariantInternal::get_object_id(&p_left);
|
||||
const ObjectID &b = VariantInternal::get_object_id(&p_right);
|
||||
*r_ret = a == b;
|
||||
r_valid = true;
|
||||
}
|
||||
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
||||
const Object *a = left->get_validated_object();
|
||||
const Object *b = right->get_validated_object();
|
||||
const ObjectID &a = VariantInternal::get_object_id(left);
|
||||
const ObjectID &b = VariantInternal::get_object_id(right);
|
||||
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = a == b;
|
||||
}
|
||||
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
||||
@ -568,12 +568,12 @@ public:
|
||||
class OperatorEvaluatorEqualObjectNil {
|
||||
public:
|
||||
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
||||
const Object *a = p_left.get_validated_object();
|
||||
const Object *a = p_left.operator Object *();
|
||||
*r_ret = a == nullptr;
|
||||
r_valid = true;
|
||||
}
|
||||
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
||||
const Object *a = left->get_validated_object();
|
||||
const Object *a = left->operator Object *();
|
||||
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = a == nullptr;
|
||||
}
|
||||
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
||||
@ -585,12 +585,12 @@ public:
|
||||
class OperatorEvaluatorEqualNilObject {
|
||||
public:
|
||||
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
||||
const Object *b = p_right.get_validated_object();
|
||||
const Object *b = p_right.operator Object *();
|
||||
*r_ret = nullptr == b;
|
||||
r_valid = true;
|
||||
}
|
||||
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
||||
const Object *b = right->get_validated_object();
|
||||
const Object *b = right->operator Object *();
|
||||
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = nullptr == b;
|
||||
}
|
||||
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
||||
@ -620,14 +620,14 @@ public:
|
||||
class OperatorEvaluatorNotEqualObject {
|
||||
public:
|
||||
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
||||
Object *a = p_left.get_validated_object();
|
||||
Object *b = p_right.get_validated_object();
|
||||
const ObjectID &a = VariantInternal::get_object_id(&p_left);
|
||||
const ObjectID &b = VariantInternal::get_object_id(&p_right);
|
||||
*r_ret = a != b;
|
||||
r_valid = true;
|
||||
}
|
||||
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
||||
Object *a = left->get_validated_object();
|
||||
Object *b = right->get_validated_object();
|
||||
const ObjectID &a = VariantInternal::get_object_id(left);
|
||||
const ObjectID &b = VariantInternal::get_object_id(right);
|
||||
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = a != b;
|
||||
}
|
||||
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
||||
@ -639,12 +639,12 @@ public:
|
||||
class OperatorEvaluatorNotEqualObjectNil {
|
||||
public:
|
||||
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
||||
Object *a = p_left.get_validated_object();
|
||||
Object *a = p_left.operator Object *();
|
||||
*r_ret = a != nullptr;
|
||||
r_valid = true;
|
||||
}
|
||||
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
||||
Object *a = left->get_validated_object();
|
||||
Object *a = left->operator Object *();
|
||||
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = a != nullptr;
|
||||
}
|
||||
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
||||
@ -656,12 +656,12 @@ public:
|
||||
class OperatorEvaluatorNotEqualNilObject {
|
||||
public:
|
||||
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
||||
Object *b = p_right.get_validated_object();
|
||||
Object *b = p_right.operator Object *();
|
||||
*r_ret = nullptr != b;
|
||||
r_valid = true;
|
||||
}
|
||||
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
||||
Object *b = right->get_validated_object();
|
||||
Object *b = right->operator Object *();
|
||||
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = nullptr != b;
|
||||
}
|
||||
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
||||
|
Loading…
Reference in New Issue
Block a user