@@ -717,6 +717,7 @@ PyAPI_FUNC(void) Py_DecRef(PyObject *);
717
717
PyAPI_FUNC (void ) _Py_IncRef (PyObject * );
718
718
PyAPI_FUNC (void ) _Py_DecRef (PyObject * );
719
719
720
+ #if defined(Py_LIMITED_API ) && (Py_LIMITED_API + 0 >= 0x030c0000 || defined(Py_REF_DEBUG ))
720
721
static inline Py_ALWAYS_INLINE void Py_INCREF (PyObject * op )
721
722
{
722
723
#if defined(Py_LIMITED_API ) && (Py_LIMITED_API + 0 >= 0x030c0000 || defined(Py_REF_DEBUG ))
@@ -765,8 +766,12 @@ static inline Py_ALWAYS_INLINE void Py_INCREF(PyObject *op)
765
766
#endif
766
767
#endif
767
768
}
768
- #if !defined(Py_LIMITED_API ) || Py_LIMITED_API + 0 < 0x030b0000
769
- # define Py_INCREF (op ) Py_INCREF(_PyObject_CAST(op))
769
+
770
+ # if !defined(Py_LIMITED_API ) || Py_LIMITED_API + 0 < 0x030b0000
771
+ # define Py_INCREF (op ) Py_INCREF(_PyObject_CAST(op))
772
+ # endif
773
+ #else
774
+ // Implemented in cpython/object.h
770
775
#endif
771
776
772
777
@@ -795,84 +800,8 @@ static inline void Py_DECREF(PyObject *op) {
795
800
# endif
796
801
}
797
802
#define Py_DECREF (op ) Py_DECREF(_PyObject_CAST(op))
798
-
799
- #elif defined(Py_NOGIL ) && defined(Py_REF_DEBUG )
800
- static inline void Py_DECREF (const char * filename , int lineno , PyObject * op )
801
- {
802
- uint32_t local = _Py_atomic_load_uint32_relaxed (& op -> ob_ref_local );
803
- if (local == _Py_IMMORTAL_REFCNT_LOCAL ) {
804
- return ;
805
- }
806
- _Py_DECREF_STAT_INC ();
807
- _Py_DECREF_DecRefTotal ();
808
- if (_Py_IsOwnedByCurrentThread (op )) {
809
- if (local == 0 ) {
810
- _Py_NegativeRefcount (filename , lineno , op );
811
- }
812
- local -- ;
813
- _Py_atomic_store_uint32_relaxed (& op -> ob_ref_local , local );
814
- if (local == 0 ) {
815
- _Py_MergeZeroLocalRefcount (op );
816
- }
817
- }
818
- else {
819
- _Py_DecRefSharedDebug (op , filename , lineno );
820
- }
821
- }
822
- #define Py_DECREF (op ) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
823
-
824
- #elif defined(Py_NOGIL )
825
- static inline void Py_DECREF (PyObject * op )
826
- {
827
- uint32_t local = _Py_atomic_load_uint32_relaxed (& op -> ob_ref_local );
828
- if (local == _Py_IMMORTAL_REFCNT_LOCAL ) {
829
- return ;
830
- }
831
- _Py_DECREF_STAT_INC ();
832
- if (_Py_IsOwnedByCurrentThread (op )) {
833
- local -- ;
834
- _Py_atomic_store_uint32_relaxed (& op -> ob_ref_local , local );
835
- if (local == 0 ) {
836
- _Py_MergeZeroLocalRefcount (op );
837
- }
838
- }
839
- else {
840
- _Py_DecRefShared (op );
841
- }
842
- }
843
- #define Py_DECREF (op ) Py_DECREF(_PyObject_CAST(op))
844
-
845
- #elif defined(Py_REF_DEBUG )
846
- static inline void Py_DECREF (const char * filename , int lineno , PyObject * op )
847
- {
848
- if (op -> ob_refcnt <= 0 ) {
849
- _Py_NegativeRefcount (filename , lineno , op );
850
- }
851
- if (_Py_IsImmortal (op )) {
852
- return ;
853
- }
854
- _Py_DECREF_STAT_INC ();
855
- _Py_DECREF_DecRefTotal ();
856
- if (-- op -> ob_refcnt == 0 ) {
857
- _Py_Dealloc (op );
858
- }
859
- }
860
- #define Py_DECREF (op ) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
861
-
862
803
#else
863
- static inline Py_ALWAYS_INLINE void Py_DECREF (PyObject * op )
864
- {
865
- // Non-limited C API and limited C API for Python 3.9 and older access
866
- // directly PyObject.ob_refcnt.
867
- if (_Py_IsImmortal (op )) {
868
- return ;
869
- }
870
- _Py_DECREF_STAT_INC ();
871
- if (-- op -> ob_refcnt == 0 ) {
872
- _Py_Dealloc (op );
873
- }
874
- }
875
- #define Py_DECREF (op ) Py_DECREF(_PyObject_CAST(op))
804
+ // Implemented in cpython/object.h
876
805
#endif
877
806
878
807
@@ -948,58 +877,6 @@ static inline Py_ALWAYS_INLINE void Py_DECREF(PyObject *op)
948
877
#endif
949
878
950
879
951
- /* Function to use in case the object pointer can be NULL: */
952
- static inline void Py_XINCREF (PyObject * op )
953
- {
954
- if (op != _Py_NULL ) {
955
- Py_INCREF (op );
956
- }
957
- }
958
- #if !defined(Py_LIMITED_API ) || Py_LIMITED_API + 0 < 0x030b0000
959
- # define Py_XINCREF (op ) Py_XINCREF(_PyObject_CAST(op))
960
- #endif
961
-
962
- static inline void Py_XDECREF (PyObject * op )
963
- {
964
- if (op != _Py_NULL ) {
965
- Py_DECREF (op );
966
- }
967
- }
968
- #if !defined(Py_LIMITED_API ) || Py_LIMITED_API + 0 < 0x030b0000
969
- # define Py_XDECREF (op ) Py_XDECREF(_PyObject_CAST(op))
970
- #endif
971
-
972
- // Create a new strong reference to an object:
973
- // increment the reference count of the object and return the object.
974
- PyAPI_FUNC (PyObject * ) Py_NewRef (PyObject * obj );
975
-
976
- // Similar to Py_NewRef(), but the object can be NULL.
977
- PyAPI_FUNC (PyObject * ) Py_XNewRef (PyObject * obj );
978
-
979
- static inline PyObject * _Py_NewRef (PyObject * obj )
980
- {
981
- Py_INCREF (obj );
982
- return obj ;
983
- }
984
-
985
- static inline PyObject * _Py_XNewRef (PyObject * obj )
986
- {
987
- Py_XINCREF (obj );
988
- return obj ;
989
- }
990
-
991
- // Py_NewRef() and Py_XNewRef() are exported as functions for the stable ABI.
992
- // Names overridden with macros by static inline functions for best
993
- // performances.
994
- #if !defined(Py_LIMITED_API ) || Py_LIMITED_API + 0 < 0x030b0000
995
- # define Py_NewRef (obj ) _Py_NewRef(_PyObject_CAST(obj))
996
- # define Py_XNewRef (obj ) _Py_XNewRef(_PyObject_CAST(obj))
997
- #else
998
- # define Py_NewRef (obj ) _Py_NewRef(obj)
999
- # define Py_XNewRef (obj ) _Py_XNewRef(obj)
1000
- #endif
1001
-
1002
-
1003
880
/*
1004
881
_Py_NoneStruct is an object of undefined type which can be used in contexts
1005
882
where NULL (nil) is not suitable (since NULL often means 'error').
@@ -1120,6 +997,58 @@ times.
1120
997
#endif
1121
998
1122
999
1000
+ /* Function to use in case the object pointer can be NULL: */
1001
+ static inline void Py_XINCREF (PyObject * op )
1002
+ {
1003
+ if (op != _Py_NULL ) {
1004
+ Py_INCREF (op );
1005
+ }
1006
+ }
1007
+ #if !defined(Py_LIMITED_API ) || Py_LIMITED_API + 0 < 0x030b0000
1008
+ # define Py_XINCREF (op ) Py_XINCREF(_PyObject_CAST(op))
1009
+ #endif
1010
+
1011
+ static inline void Py_XDECREF (PyObject * op )
1012
+ {
1013
+ if (op != _Py_NULL ) {
1014
+ Py_DECREF (op );
1015
+ }
1016
+ }
1017
+ #if !defined(Py_LIMITED_API ) || Py_LIMITED_API + 0 < 0x030b0000
1018
+ # define Py_XDECREF (op ) Py_XDECREF(_PyObject_CAST(op))
1019
+ #endif
1020
+
1021
+ // Create a new strong reference to an object:
1022
+ // increment the reference count of the object and return the object.
1023
+ PyAPI_FUNC (PyObject * ) Py_NewRef (PyObject * obj );
1024
+
1025
+ // Similar to Py_NewRef(), but the object can be NULL.
1026
+ PyAPI_FUNC (PyObject * ) Py_XNewRef (PyObject * obj );
1027
+
1028
+ static inline PyObject * _Py_NewRef (PyObject * obj )
1029
+ {
1030
+ Py_INCREF (obj );
1031
+ return obj ;
1032
+ }
1033
+
1034
+ static inline PyObject * _Py_XNewRef (PyObject * obj )
1035
+ {
1036
+ Py_XINCREF (obj );
1037
+ return obj ;
1038
+ }
1039
+
1040
+ // Py_NewRef() and Py_XNewRef() are exported as functions for the stable ABI.
1041
+ // Names overridden with macros by static inline functions for best
1042
+ // performances.
1043
+ #if !defined(Py_LIMITED_API ) || Py_LIMITED_API + 0 < 0x030b0000
1044
+ # define Py_NewRef (obj ) _Py_NewRef(_PyObject_CAST(obj))
1045
+ # define Py_XNewRef (obj ) _Py_XNewRef(_PyObject_CAST(obj))
1046
+ #else
1047
+ # define Py_NewRef (obj ) _Py_NewRef(obj)
1048
+ # define Py_XNewRef (obj ) _Py_XNewRef(obj)
1049
+ #endif
1050
+
1051
+
1123
1052
static inline int
1124
1053
PyType_HasFeature (PyTypeObject * type , unsigned long feature )
1125
1054
{
0 commit comments