Skip to content

Commit ca19d34

Browse files
committed
Merge pull request #73896 from vnen/object-null-boolean-consistency
Make freed object different than null in comparison operators
2 parents e7a1eae + 150b50c commit ca19d34

2 files changed

Lines changed: 17 additions & 17 deletions

File tree

core/variant/variant.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -931,7 +931,7 @@ bool Variant::is_zero() const {
931931
return *reinterpret_cast<const ::RID *>(_data._mem) == ::RID();
932932
}
933933
case OBJECT: {
934-
return _get_obj().obj == nullptr;
934+
return get_validated_object() == nullptr;
935935
}
936936
case CALLABLE: {
937937
return reinterpret_cast<const Callable *>(_data._mem)->is_null();

core/variant/variant_op.h

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -549,14 +549,14 @@ class OperatorEvaluatorEqual {
549549
class OperatorEvaluatorEqualObject {
550550
public:
551551
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
552-
const Object *a = p_left.get_validated_object();
553-
const Object *b = p_right.get_validated_object();
552+
const ObjectID &a = VariantInternal::get_object_id(&p_left);
553+
const ObjectID &b = VariantInternal::get_object_id(&p_right);
554554
*r_ret = a == b;
555555
r_valid = true;
556556
}
557557
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
558-
const Object *a = left->get_validated_object();
559-
const Object *b = right->get_validated_object();
558+
const ObjectID &a = VariantInternal::get_object_id(left);
559+
const ObjectID &b = VariantInternal::get_object_id(right);
560560
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = a == b;
561561
}
562562
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
@@ -568,12 +568,12 @@ class OperatorEvaluatorEqualObject {
568568
class OperatorEvaluatorEqualObjectNil {
569569
public:
570570
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
571-
const Object *a = p_left.get_validated_object();
571+
const Object *a = p_left.operator Object *();
572572
*r_ret = a == nullptr;
573573
r_valid = true;
574574
}
575575
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
576-
const Object *a = left->get_validated_object();
576+
const Object *a = left->operator Object *();
577577
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = a == nullptr;
578578
}
579579
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
@@ -585,12 +585,12 @@ class OperatorEvaluatorEqualObjectNil {
585585
class OperatorEvaluatorEqualNilObject {
586586
public:
587587
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
588-
const Object *b = p_right.get_validated_object();
588+
const Object *b = p_right.operator Object *();
589589
*r_ret = nullptr == b;
590590
r_valid = true;
591591
}
592592
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
593-
const Object *b = right->get_validated_object();
593+
const Object *b = right->operator Object *();
594594
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = nullptr == b;
595595
}
596596
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
@@ -620,14 +620,14 @@ class OperatorEvaluatorNotEqual {
620620
class OperatorEvaluatorNotEqualObject {
621621
public:
622622
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
623-
Object *a = p_left.get_validated_object();
624-
Object *b = p_right.get_validated_object();
623+
const ObjectID &a = VariantInternal::get_object_id(&p_left);
624+
const ObjectID &b = VariantInternal::get_object_id(&p_right);
625625
*r_ret = a != b;
626626
r_valid = true;
627627
}
628628
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
629-
Object *a = left->get_validated_object();
630-
Object *b = right->get_validated_object();
629+
const ObjectID &a = VariantInternal::get_object_id(left);
630+
const ObjectID &b = VariantInternal::get_object_id(right);
631631
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = a != b;
632632
}
633633
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
@@ -639,12 +639,12 @@ class OperatorEvaluatorNotEqualObject {
639639
class OperatorEvaluatorNotEqualObjectNil {
640640
public:
641641
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
642-
Object *a = p_left.get_validated_object();
642+
Object *a = p_left.operator Object *();
643643
*r_ret = a != nullptr;
644644
r_valid = true;
645645
}
646646
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
647-
Object *a = left->get_validated_object();
647+
Object *a = left->operator Object *();
648648
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = a != nullptr;
649649
}
650650
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
@@ -656,12 +656,12 @@ class OperatorEvaluatorNotEqualObjectNil {
656656
class OperatorEvaluatorNotEqualNilObject {
657657
public:
658658
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
659-
Object *b = p_right.get_validated_object();
659+
Object *b = p_right.operator Object *();
660660
*r_ret = nullptr != b;
661661
r_valid = true;
662662
}
663663
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
664-
Object *b = right->get_validated_object();
664+
Object *b = right->operator Object *();
665665
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = nullptr != b;
666666
}
667667
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {

0 commit comments

Comments
 (0)