Coverage Report

Created: 2026-10-31 06:21

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/cpython/Include/refcount.h
Line
Count
Source
1
#ifndef _Py_REFCOUNT_H
2
#define _Py_REFCOUNT_H
3
#ifdef __cplusplus
4
extern "C" {
5
#endif
6
7
8
#if !defined(_Py_OPAQUE_PYOBJECT)
9
/*
10
Immortalization:
11
12
The following indicates the immortalization strategy depending on the amount
13
of available bits in the reference count field. All strategies are backwards
14
compatible but the specific reference count value or immortalization check
15
might change depending on the specializations for the underlying system.
16
17
Proper deallocation of immortal instances requires distinguishing between
18
statically allocated immortal instances vs those promoted by the runtime to be
19
immortal. The latter should be the only instances that require
20
cleanup during runtime finalization.
21
*/
22
23
#if SIZEOF_VOID_P > 4
24
/*
25
In 64+ bit systems, any object whose 32 bit reference count is >= 2**31
26
will be treated as immortal.
27
28
Using the lower 32 bits makes the value backwards compatible by allowing
29
C-Extensions without the updated checks in Py_INCREF and Py_DECREF to safely
30
increase and decrease the objects reference count.
31
32
In order to offer sufficient resilience to C extensions using the stable ABI
33
compiled against 3.11 or earlier, we set the initial value near the
34
middle of the range (2**31, 2**32). That way the refcount can be
35
off by ~1 billion without affecting immortality.
36
37
Reference count increases will use saturated arithmetic, taking advantage of
38
having all the lower 32 bits set, which will avoid the reference count to go
39
beyond the refcount limit. Immortality checks for reference count decreases will
40
be done by checking the bit sign flag in the lower 32 bits.
41
42
To ensure that once an object becomes immortal, it remains immortal, the threshold
43
for omitting increfs is much higher than for omitting decrefs. Consequently, once
44
the refcount for an object exceeds _Py_IMMORTAL_MINIMUM_REFCNT it will gradually
45
increase over time until it reaches _Py_IMMORTAL_INITIAL_REFCNT.
46
*/
47
13.3G
#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
48
553
#define _Py_IMMORTAL_MINIMUM_REFCNT (1ULL << 31)
49
211M
#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
50
211M
#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
51
52
#else
53
/*
54
In 32 bit systems, an object will be treated as immortal if its reference
55
count equals or exceeds _Py_IMMORTAL_MINIMUM_REFCNT (2**30).
56
57
Using the lower 30 bits makes the value backwards compatible by allowing
58
C-Extensions without the updated checks in Py_INCREF and Py_DECREF to safely
59
increase and decrease the objects reference count. The object would lose its
60
immortality, but the execution would still be correct.
61
62
Reference count increases and decreases will first go through an immortality
63
check by comparing the reference count field to the minimum immortality refcount.
64
*/
65
#define _Py_IMMORTAL_INITIAL_REFCNT ((Py_ssize_t)(5L << 28))
66
#define _Py_IMMORTAL_MINIMUM_REFCNT ((Py_ssize_t)(1L << 30))
67
#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT ((Py_ssize_t)(7L << 28))
68
#define _Py_STATIC_IMMORTAL_MINIMUM_REFCNT ((Py_ssize_t)(6L << 28))
69
#endif
70
71
// Py_GIL_DISABLED builds indicate immortal objects using `ob_ref_local`, which is
72
// always 32-bits.
73
#ifdef Py_GIL_DISABLED
74
#define _Py_IMMORTAL_REFCNT_LOCAL UINT32_MAX
75
#endif
76
77
78
#ifdef Py_GIL_DISABLED
79
   // The shared reference count uses the two least-significant bits to store
80
   // flags. The remaining bits are used to store the reference count.
81
#  define _Py_REF_SHARED_SHIFT        2
82
#  define _Py_REF_SHARED_FLAG_MASK    0x3
83
84
   // The shared flags are initialized to zero.
85
#  define _Py_REF_SHARED_INIT         0x0
86
#  define _Py_REF_MAYBE_WEAKREF       0x1
87
#  define _Py_REF_QUEUED              0x2
88
#  define _Py_REF_MERGED              0x3
89
90
   // Create a shared field from a refcnt and desired flags
91
#  define _Py_REF_SHARED(refcnt, flags) \
92
              (((refcnt) << _Py_REF_SHARED_SHIFT) + (flags))
93
#endif  // Py_GIL_DISABLED
94
#endif  // _Py_OPAQUE_PYOBJECT
95
96
// Py_REFCNT() implementation for the stable ABI
97
PyAPI_FUNC(Py_ssize_t) Py_REFCNT(PyObject *ob);
98
99
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030e0000
100
    // Stable ABI implements Py_REFCNT() as a function call
101
    // on limited C API version 3.14 and newer, and on abi3t.
102
#elif defined(_Py_OPAQUE_PYOBJECT)
103
    // Py_REFCNT() is also a function call in abi3t.
104
#else
105
1.14G
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
1.14G
    #if !defined(Py_GIL_DISABLED)
107
1.14G
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
1.14G
    }
bytesobject.c:_Py_REFCNT
Line
Count
Source
105
8.90M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
8.90M
    #if !defined(Py_GIL_DISABLED)
107
8.90M
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
8.90M
    }
Unexecuted instantiation: call.c:_Py_REFCNT
Unexecuted instantiation: exceptions.c:_Py_REFCNT
Unexecuted instantiation: genericaliasobject.c:_Py_REFCNT
Unexecuted instantiation: floatobject.c:_Py_REFCNT
listobject.c:_Py_REFCNT
Line
Count
Source
105
553
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
553
    #if !defined(Py_GIL_DISABLED)
107
553
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
553
    }
longobject.c:_Py_REFCNT
Line
Count
Source
105
32.1k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
32.1k
    #if !defined(Py_GIL_DISABLED)
107
32.1k
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
32.1k
    }
dictobject.c:_Py_REFCNT
Line
Count
Source
105
265M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
265M
    #if !defined(Py_GIL_DISABLED)
107
265M
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
265M
    }
Unexecuted instantiation: memoryobject.c:_Py_REFCNT
Unexecuted instantiation: moduleobject.c:_Py_REFCNT
object.c:_Py_REFCNT
Line
Count
Source
105
122M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
122M
    #if !defined(Py_GIL_DISABLED)
107
122M
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
122M
    }
Unexecuted instantiation: obmalloc.c:_Py_REFCNT
Unexecuted instantiation: picklebufobject.c:_Py_REFCNT
Unexecuted instantiation: rangeobject.c:_Py_REFCNT
Unexecuted instantiation: sentinelobject.c:_Py_REFCNT
setobject.c:_Py_REFCNT
Line
Count
Source
105
4.45k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
4.45k
    #if !defined(Py_GIL_DISABLED)
107
4.45k
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
4.45k
    }
Unexecuted instantiation: sliceobject.c:_Py_REFCNT
Unexecuted instantiation: structseq.c:_Py_REFCNT
Unexecuted instantiation: templateobject.c:_Py_REFCNT
tupleobject.c:_Py_REFCNT
Line
Count
Source
105
140k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
140k
    #if !defined(Py_GIL_DISABLED)
107
140k
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
140k
    }
typeobject.c:_Py_REFCNT
Line
Count
Source
105
629
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
629
    #if !defined(Py_GIL_DISABLED)
107
629
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
629
    }
Unexecuted instantiation: typevarobject.c:_Py_REFCNT
unicode_format.c:_Py_REFCNT
Line
Count
Source
105
4.68M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
4.68M
    #if !defined(Py_GIL_DISABLED)
107
4.68M
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
4.68M
    }
Unexecuted instantiation: unicode_formatter.c:_Py_REFCNT
Unexecuted instantiation: unicode_writer.c:_Py_REFCNT
Unexecuted instantiation: unicodectype.c:_Py_REFCNT
unicodeobject.c:_Py_REFCNT
Line
Count
Source
105
63.9M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
63.9M
    #if !defined(Py_GIL_DISABLED)
107
63.9M
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
63.9M
    }
Unexecuted instantiation: unionobject.c:_Py_REFCNT
weakrefobject.c:_Py_REFCNT
Line
Count
Source
105
54.8M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
54.8M
    #if !defined(Py_GIL_DISABLED)
107
54.8M
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
54.8M
    }
Unexecuted instantiation: _warnings.c:_Py_REFCNT
bltinmodule.c:_Py_REFCNT
Line
Count
Source
105
2.30M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
2.30M
    #if !defined(Py_GIL_DISABLED)
107
2.30M
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
2.30M
    }
Unexecuted instantiation: ceval.c:_Py_REFCNT
Unexecuted instantiation: codecs.c:_Py_REFCNT
Unexecuted instantiation: codegen.c:_Py_REFCNT
Unexecuted instantiation: compile.c:_Py_REFCNT
Unexecuted instantiation: context.c:_Py_REFCNT
Unexecuted instantiation: errors.c:_Py_REFCNT
Unexecuted instantiation: flowgraph.c:_Py_REFCNT
frame.c:_Py_REFCNT
Line
Count
Source
105
52.7M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
52.7M
    #if !defined(Py_GIL_DISABLED)
107
52.7M
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
52.7M
    }
Unexecuted instantiation: future.c:_Py_REFCNT
gc.c:_Py_REFCNT
Line
Count
Source
105
483M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
483M
    #if !defined(Py_GIL_DISABLED)
107
483M
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
483M
    }
Unexecuted instantiation: gc_gil.c:_Py_REFCNT
Unexecuted instantiation: getargs.c:_Py_REFCNT
Unexecuted instantiation: ceval_gil.c:_Py_REFCNT
Unexecuted instantiation: hamt.c:_Py_REFCNT
Unexecuted instantiation: hashtable.c:_Py_REFCNT
import.c:_Py_REFCNT
Line
Count
Source
105
37
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
37
    #if !defined(Py_GIL_DISABLED)
107
37
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
37
    }
Unexecuted instantiation: importdl.c:_Py_REFCNT
Unexecuted instantiation: initconfig.c:_Py_REFCNT
Unexecuted instantiation: instrumentation.c:_Py_REFCNT
Unexecuted instantiation: instruction_sequence.c:_Py_REFCNT
Unexecuted instantiation: intrinsics.c:_Py_REFCNT
Unexecuted instantiation: legacy_tracing.c:_Py_REFCNT
Unexecuted instantiation: lock.c:_Py_REFCNT
marshal.c:_Py_REFCNT
Line
Count
Source
105
57.9k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
57.9k
    #if !defined(Py_GIL_DISABLED)
107
57.9k
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
57.9k
    }
Unexecuted instantiation: modsupport.c:_Py_REFCNT
Unexecuted instantiation: mysnprintf.c:_Py_REFCNT
Unexecuted instantiation: parking_lot.c:_Py_REFCNT
Unexecuted instantiation: preconfig.c:_Py_REFCNT
Unexecuted instantiation: pyarena.c:_Py_REFCNT
Unexecuted instantiation: pyctype.c:_Py_REFCNT
Unexecuted instantiation: pyhash.c:_Py_REFCNT
Unexecuted instantiation: pylifecycle.c:_Py_REFCNT
Unexecuted instantiation: pymath.c:_Py_REFCNT
Unexecuted instantiation: pystate.c:_Py_REFCNT
Unexecuted instantiation: pythonrun.c:_Py_REFCNT
Unexecuted instantiation: pytime.c:_Py_REFCNT
Unexecuted instantiation: qsbr.c:_Py_REFCNT
Unexecuted instantiation: bootstrap_hash.c:_Py_REFCNT
Unexecuted instantiation: specialize.c:_Py_REFCNT
Unexecuted instantiation: slots.c:_Py_REFCNT
Unexecuted instantiation: slots_generated.c:_Py_REFCNT
Unexecuted instantiation: structmember.c:_Py_REFCNT
Unexecuted instantiation: symtable.c:_Py_REFCNT
sysmodule.c:_Py_REFCNT
Line
Count
Source
105
4
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
4
    #if !defined(Py_GIL_DISABLED)
107
4
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
4
    }
Unexecuted instantiation: thread.c:_Py_REFCNT
Unexecuted instantiation: traceback.c:_Py_REFCNT
Unexecuted instantiation: tracemalloc.c:_Py_REFCNT
Unexecuted instantiation: typecache.c:_Py_REFCNT
Unexecuted instantiation: getopt.c:_Py_REFCNT
Unexecuted instantiation: pystrcmp.c:_Py_REFCNT
Unexecuted instantiation: pystrtod.c:_Py_REFCNT
Unexecuted instantiation: pystrhex.c:_Py_REFCNT
Unexecuted instantiation: dtoa.c:_Py_REFCNT
Unexecuted instantiation: fileutils.c:_Py_REFCNT
Unexecuted instantiation: suggestions.c:_Py_REFCNT
Unexecuted instantiation: perf_trampoline.c:_Py_REFCNT
Unexecuted instantiation: perf_jit_trampoline.c:_Py_REFCNT
Unexecuted instantiation: jit_unwind.c:_Py_REFCNT
Unexecuted instantiation: remote_debugging.c:_Py_REFCNT
Unexecuted instantiation: dynload_shlib.c:_Py_REFCNT
Unexecuted instantiation: config.c:_Py_REFCNT
Unexecuted instantiation: gcmodule.c:_Py_REFCNT
Unexecuted instantiation: _asynciomodule.c:_Py_REFCNT
Unexecuted instantiation: atexitmodule.c:_Py_REFCNT
Unexecuted instantiation: faulthandler.c:_Py_REFCNT
Unexecuted instantiation: posixmodule.c:_Py_REFCNT
Unexecuted instantiation: signalmodule.c:_Py_REFCNT
Unexecuted instantiation: _tracemalloc.c:_Py_REFCNT
Unexecuted instantiation: _suggestions.c:_Py_REFCNT
Unexecuted instantiation: _datetimemodule.c:_Py_REFCNT
Unexecuted instantiation: _codecsmodule.c:_Py_REFCNT
Unexecuted instantiation: _collectionsmodule.c:_Py_REFCNT
Unexecuted instantiation: errnomodule.c:_Py_REFCNT
Unexecuted instantiation: _iomodule.c:_Py_REFCNT
iobase.c:_Py_REFCNT
Line
Count
Source
105
94.9k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
94.9k
    #if !defined(Py_GIL_DISABLED)
107
94.9k
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
94.9k
    }
Unexecuted instantiation: fileio.c:_Py_REFCNT
bytesio.c:_Py_REFCNT
Line
Count
Source
105
54.5k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
54.5k
    #if !defined(Py_GIL_DISABLED)
107
54.5k
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
54.5k
    }
Unexecuted instantiation: bufferedio.c:_Py_REFCNT
Unexecuted instantiation: textio.c:_Py_REFCNT
Unexecuted instantiation: stringio.c:_Py_REFCNT
itertoolsmodule.c:_Py_REFCNT
Line
Count
Source
105
830
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
830
    #if !defined(Py_GIL_DISABLED)
107
830
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
830
    }
Unexecuted instantiation: sre.c:_Py_REFCNT
Unexecuted instantiation: _sysconfig.c:_Py_REFCNT
Unexecuted instantiation: _threadmodule.c:_Py_REFCNT
Unexecuted instantiation: timemodule.c:_Py_REFCNT
Unexecuted instantiation: _typesmodule.c:_Py_REFCNT
Unexecuted instantiation: _typingmodule.c:_Py_REFCNT
Unexecuted instantiation: _weakref.c:_Py_REFCNT
Unexecuted instantiation: _abc.c:_Py_REFCNT
_functoolsmodule.c:_Py_REFCNT
Line
Count
Source
105
165k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
165k
    #if !defined(Py_GIL_DISABLED)
107
165k
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
165k
    }
Unexecuted instantiation: _localemodule.c:_Py_REFCNT
Unexecuted instantiation: _opcode.c:_Py_REFCNT
Unexecuted instantiation: _operator.c:_Py_REFCNT
Unexecuted instantiation: _stat.c:_Py_REFCNT
Unexecuted instantiation: symtablemodule.c:_Py_REFCNT
Unexecuted instantiation: pwdmodule.c:_Py_REFCNT
Unexecuted instantiation: getpath.c:_Py_REFCNT
Unexecuted instantiation: frozen.c:_Py_REFCNT
Unexecuted instantiation: getbuildinfo.c:_Py_REFCNT
Unexecuted instantiation: peg_api.c:_Py_REFCNT
Unexecuted instantiation: reader.c:_Py_REFCNT
Unexecuted instantiation: source.c:_Py_REFCNT
Unexecuted instantiation: helpers.c:_Py_REFCNT
Unexecuted instantiation: myreadline.c:_Py_REFCNT
Unexecuted instantiation: abstract.c:_Py_REFCNT
Unexecuted instantiation: boolobject.c:_Py_REFCNT
Unexecuted instantiation: bytes_methods.c:_Py_REFCNT
Unexecuted instantiation: bytearrayobject.c:_Py_REFCNT
Unexecuted instantiation: capsule.c:_Py_REFCNT
Unexecuted instantiation: cellobject.c:_Py_REFCNT
Unexecuted instantiation: classobject.c:_Py_REFCNT
codeobject.c:_Py_REFCNT
Line
Count
Source
105
153k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
153k
    #if !defined(Py_GIL_DISABLED)
107
153k
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
153k
    }
Unexecuted instantiation: complexobject.c:_Py_REFCNT
Unexecuted instantiation: descrobject.c:_Py_REFCNT
enumobject.c:_Py_REFCNT
Line
Count
Source
105
52.1M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
52.1M
    #if !defined(Py_GIL_DISABLED)
107
52.1M
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
52.1M
    }
Unexecuted instantiation: genobject.c:_Py_REFCNT
Unexecuted instantiation: fileobject.c:_Py_REFCNT
Unexecuted instantiation: frameobject.c:_Py_REFCNT
funcobject.c:_Py_REFCNT
Line
Count
Source
105
35.0M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
35.0M
    #if !defined(Py_GIL_DISABLED)
107
35.0M
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
35.0M
    }
Unexecuted instantiation: interpolationobject.c:_Py_REFCNT
Unexecuted instantiation: iterobject.c:_Py_REFCNT
Unexecuted instantiation: lazyimportobject.c:_Py_REFCNT
Unexecuted instantiation: odictobject.c:_Py_REFCNT
Unexecuted instantiation: methodobject.c:_Py_REFCNT
Unexecuted instantiation: namespaceobject.c:_Py_REFCNT
Unexecuted instantiation: _contextvars.c:_Py_REFCNT
Unexecuted instantiation: _strptime.c:_Py_REFCNT
Unexecuted instantiation: Python-ast.c:_Py_REFCNT
Unexecuted instantiation: Python-tokenize.c:_Py_REFCNT
Unexecuted instantiation: asdl.c:_Py_REFCNT
Unexecuted instantiation: assemble.c:_Py_REFCNT
Unexecuted instantiation: ast.c:_Py_REFCNT
Unexecuted instantiation: ast_preprocess.c:_Py_REFCNT
Unexecuted instantiation: ast_unparse.c:_Py_REFCNT
Unexecuted instantiation: critical_section.c:_Py_REFCNT
Unexecuted instantiation: crossinterp.c:_Py_REFCNT
Unexecuted instantiation: getcopyright.c:_Py_REFCNT
Unexecuted instantiation: getplatform.c:_Py_REFCNT
Unexecuted instantiation: getversion.c:_Py_REFCNT
Unexecuted instantiation: optimizer.c:_Py_REFCNT
Unexecuted instantiation: pathconfig.c:_Py_REFCNT
Unexecuted instantiation: pegen.c:_Py_REFCNT
Unexecuted instantiation: pegen_errors.c:_Py_REFCNT
Unexecuted instantiation: parser.c:_Py_REFCNT
Unexecuted instantiation: parser_invalid.c:_Py_REFCNT
Unexecuted instantiation: lexer.c:_Py_REFCNT
Unexecuted instantiation: layout.c:_Py_REFCNT
Unexecuted instantiation: number.c:_Py_REFCNT
Unexecuted instantiation: state.c:_Py_REFCNT
Unexecuted instantiation: string.c:_Py_REFCNT
Unexecuted instantiation: decoder.c:_Py_REFCNT
Unexecuted instantiation: api.c:_Py_REFCNT
Unexecuted instantiation: getcompiler.c:_Py_REFCNT
Unexecuted instantiation: mystrtoul.c:_Py_REFCNT
Unexecuted instantiation: token.c:_Py_REFCNT
Unexecuted instantiation: action_helpers.c:_Py_REFCNT
Unexecuted instantiation: string_parser.c:_Py_REFCNT
118
    #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
119
957M
    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
120
    #else
121
    #  define Py_REFCNT(ob) _Py_REFCNT(ob)
122
    #endif
123
#endif
124
125
#ifndef _Py_OPAQUE_PYOBJECT
126
static inline Py_ALWAYS_INLINE int _Py_IsImmortal(PyObject *op)
127
24.8G
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
24.8G
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
24.8G
}
bytesobject.c:_Py_IsImmortal
Line
Count
Source
127
21.3M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
21.3M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
21.3M
}
call.c:_Py_IsImmortal
Line
Count
Source
127
199M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
199M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
199M
}
exceptions.c:_Py_IsImmortal
Line
Count
Source
127
210M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
210M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
210M
}
genericaliasobject.c:_Py_IsImmortal
Line
Count
Source
127
296
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
296
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
296
}
floatobject.c:_Py_IsImmortal
Line
Count
Source
127
672k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
672k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
672k
}
listobject.c:_Py_IsImmortal
Line
Count
Source
127
2.75G
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
2.75G
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
2.75G
}
longobject.c:_Py_IsImmortal
Line
Count
Source
127
61.9M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
61.9M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
61.9M
}
dictobject.c:_Py_IsImmortal
Line
Count
Source
127
1.01G
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
1.01G
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.01G
}
memoryobject.c:_Py_IsImmortal
Line
Count
Source
127
5.07M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
5.07M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
5.07M
}
moduleobject.c:_Py_IsImmortal
Line
Count
Source
127
2.82M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
2.82M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
2.82M
}
object.c:_Py_IsImmortal
Line
Count
Source
127
938M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
938M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
938M
}
Unexecuted instantiation: obmalloc.c:_Py_IsImmortal
Unexecuted instantiation: picklebufobject.c:_Py_IsImmortal
rangeobject.c:_Py_IsImmortal
Line
Count
Source
127
26.6M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
26.6M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
26.6M
}
sentinelobject.c:_Py_IsImmortal
Line
Count
Source
127
124
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
124
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
124
}
setobject.c:_Py_IsImmortal
Line
Count
Source
127
34.4M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
34.4M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
34.4M
}
sliceobject.c:_Py_IsImmortal
Line
Count
Source
127
144M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
144M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
144M
}
structseq.c:_Py_IsImmortal
Line
Count
Source
127
4.77M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
4.77M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
4.77M
}
templateobject.c:_Py_IsImmortal
Line
Count
Source
127
22
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
22
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
22
}
tupleobject.c:_Py_IsImmortal
Line
Count
Source
127
3.78G
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
3.78G
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
3.78G
}
typeobject.c:_Py_IsImmortal
Line
Count
Source
127
460M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
460M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
460M
}
typevarobject.c:_Py_IsImmortal
Line
Count
Source
127
180k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
180k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
180k
}
unicode_format.c:_Py_IsImmortal
Line
Count
Source
127
16.0M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
16.0M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
16.0M
}
unicode_formatter.c:_Py_IsImmortal
Line
Count
Source
127
22.3M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
22.3M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
22.3M
}
unicode_writer.c:_Py_IsImmortal
Line
Count
Source
127
38.2M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
38.2M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
38.2M
}
Unexecuted instantiation: unicodectype.c:_Py_IsImmortal
unicodeobject.c:_Py_IsImmortal
Line
Count
Source
127
147M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
147M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
147M
}
unionobject.c:_Py_IsImmortal
Line
Count
Source
127
4.52k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
4.52k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
4.52k
}
weakrefobject.c:_Py_IsImmortal
Line
Count
Source
127
694k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
694k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
694k
}
_warnings.c:_Py_IsImmortal
Line
Count
Source
127
30.6M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
30.6M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
30.6M
}
bltinmodule.c:_Py_IsImmortal
Line
Count
Source
127
1.53G
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
1.53G
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.53G
}
ceval.c:_Py_IsImmortal
Line
Count
Source
127
10.0G
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
10.0G
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
10.0G
}
codecs.c:_Py_IsImmortal
Line
Count
Source
127
26.1M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
26.1M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
26.1M
}
codegen.c:_Py_IsImmortal
Line
Count
Source
127
59.8k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
59.8k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
59.8k
}
compile.c:_Py_IsImmortal
Line
Count
Source
127
335k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
335k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
335k
}
context.c:_Py_IsImmortal
Line
Count
Source
127
74
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
74
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
74
}
errors.c:_Py_IsImmortal
Line
Count
Source
127
87.1M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
87.1M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
87.1M
}
flowgraph.c:_Py_IsImmortal
Line
Count
Source
127
60.8k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
60.8k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
60.8k
}
frame.c:_Py_IsImmortal
Line
Count
Source
127
116M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
116M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
116M
}
future.c:_Py_IsImmortal
Line
Count
Source
127
136
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
136
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
136
}
gc.c:_Py_IsImmortal
Line
Count
Source
127
486M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
486M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
486M
}
Unexecuted instantiation: gc_gil.c:_Py_IsImmortal
getargs.c:_Py_IsImmortal
Line
Count
Source
127
14.4M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
14.4M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
14.4M
}
Unexecuted instantiation: ceval_gil.c:_Py_IsImmortal
Unexecuted instantiation: hamt.c:_Py_IsImmortal
Unexecuted instantiation: hashtable.c:_Py_IsImmortal
import.c:_Py_IsImmortal
Line
Count
Source
127
18.3M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
18.3M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
18.3M
}
importdl.c:_Py_IsImmortal
Line
Count
Source
127
4.23k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
4.23k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
4.23k
}
initconfig.c:_Py_IsImmortal
Line
Count
Source
127
5.32k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
5.32k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
5.32k
}
instrumentation.c:_Py_IsImmortal
Line
Count
Source
127
888
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
888
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
888
}
instruction_sequence.c:_Py_IsImmortal
Line
Count
Source
127
1
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
1
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1
}
intrinsics.c:_Py_IsImmortal
Line
Count
Source
127
82.6k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
82.6k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
82.6k
}
Unexecuted instantiation: legacy_tracing.c:_Py_IsImmortal
Unexecuted instantiation: lock.c:_Py_IsImmortal
marshal.c:_Py_IsImmortal
Line
Count
Source
127
1.62M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
1.62M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.62M
}
modsupport.c:_Py_IsImmortal
Line
Count
Source
127
72.5k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
72.5k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
72.5k
}
Unexecuted instantiation: mysnprintf.c:_Py_IsImmortal
Unexecuted instantiation: parking_lot.c:_Py_IsImmortal
Unexecuted instantiation: preconfig.c:_Py_IsImmortal
pyarena.c:_Py_IsImmortal
Line
Count
Source
127
1.10M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
1.10M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.10M
}
Unexecuted instantiation: pyctype.c:_Py_IsImmortal
Unexecuted instantiation: pyhash.c:_Py_IsImmortal
pylifecycle.c:_Py_IsImmortal
Line
Count
Source
127
1.33k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
1.33k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.33k
}
Unexecuted instantiation: pymath.c:_Py_IsImmortal
Unexecuted instantiation: pystate.c:_Py_IsImmortal
pythonrun.c:_Py_IsImmortal
Line
Count
Source
127
1.82k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
1.82k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.82k
}
Unexecuted instantiation: pytime.c:_Py_IsImmortal
Unexecuted instantiation: qsbr.c:_Py_IsImmortal
Unexecuted instantiation: bootstrap_hash.c:_Py_IsImmortal
specialize.c:_Py_IsImmortal
Line
Count
Source
127
2.45M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
2.45M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
2.45M
}
Unexecuted instantiation: slots.c:_Py_IsImmortal
Unexecuted instantiation: slots_generated.c:_Py_IsImmortal
structmember.c:_Py_IsImmortal
Line
Count
Source
127
1.77k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
1.77k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.77k
}
symtable.c:_Py_IsImmortal
Line
Count
Source
127
353k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
353k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
353k
}
sysmodule.c:_Py_IsImmortal
Line
Count
Source
127
2.14M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
2.14M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
2.14M
}
Unexecuted instantiation: thread.c:_Py_IsImmortal
traceback.c:_Py_IsImmortal
Line
Count
Source
127
171M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
171M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
171M
}
Unexecuted instantiation: tracemalloc.c:_Py_IsImmortal
typecache.c:_Py_IsImmortal
Line
Count
Source
127
653M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
653M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
653M
}
Unexecuted instantiation: getopt.c:_Py_IsImmortal
Unexecuted instantiation: pystrcmp.c:_Py_IsImmortal
Unexecuted instantiation: pystrtod.c:_Py_IsImmortal
Unexecuted instantiation: pystrhex.c:_Py_IsImmortal
Unexecuted instantiation: dtoa.c:_Py_IsImmortal
fileutils.c:_Py_IsImmortal
Line
Count
Source
127
63.6k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
63.6k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
63.6k
}
Unexecuted instantiation: suggestions.c:_Py_IsImmortal
Unexecuted instantiation: perf_trampoline.c:_Py_IsImmortal
Unexecuted instantiation: perf_jit_trampoline.c:_Py_IsImmortal
Unexecuted instantiation: jit_unwind.c:_Py_IsImmortal
Unexecuted instantiation: remote_debugging.c:_Py_IsImmortal
Unexecuted instantiation: dynload_shlib.c:_Py_IsImmortal
Unexecuted instantiation: config.c:_Py_IsImmortal
Unexecuted instantiation: gcmodule.c:_Py_IsImmortal
Unexecuted instantiation: _asynciomodule.c:_Py_IsImmortal
atexitmodule.c:_Py_IsImmortal
Line
Count
Source
127
30
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
30
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
30
}
Unexecuted instantiation: faulthandler.c:_Py_IsImmortal
posixmodule.c:_Py_IsImmortal
Line
Count
Source
127
2.52M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
2.52M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
2.52M
}
signalmodule.c:_Py_IsImmortal
Line
Count
Source
127
74
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
74
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
74
}
Unexecuted instantiation: _tracemalloc.c:_Py_IsImmortal
Unexecuted instantiation: _suggestions.c:_Py_IsImmortal
_datetimemodule.c:_Py_IsImmortal
Line
Count
Source
127
119k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
119k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
119k
}
Unexecuted instantiation: _codecsmodule.c:_Py_IsImmortal
_collectionsmodule.c:_Py_IsImmortal
Line
Count
Source
127
935k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
935k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
935k
}
Unexecuted instantiation: errnomodule.c:_Py_IsImmortal
_iomodule.c:_Py_IsImmortal
Line
Count
Source
127
1.60M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
1.60M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.60M
}
iobase.c:_Py_IsImmortal
Line
Count
Source
127
1.85M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
1.85M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.85M
}
fileio.c:_Py_IsImmortal
Line
Count
Source
127
68.6k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
68.6k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
68.6k
}
bytesio.c:_Py_IsImmortal
Line
Count
Source
127
328k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
328k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
328k
}
bufferedio.c:_Py_IsImmortal
Line
Count
Source
127
7.49M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
7.49M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
7.49M
}
textio.c:_Py_IsImmortal
Line
Count
Source
127
942k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
942k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
942k
}
stringio.c:_Py_IsImmortal
Line
Count
Source
127
322k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
322k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
322k
}
itertoolsmodule.c:_Py_IsImmortal
Line
Count
Source
127
94.5k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
94.5k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
94.5k
}
sre.c:_Py_IsImmortal
Line
Count
Source
127
203M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
203M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
203M
}
Unexecuted instantiation: _sysconfig.c:_Py_IsImmortal
_threadmodule.c:_Py_IsImmortal
Line
Count
Source
127
8.49M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
8.49M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
8.49M
}
Unexecuted instantiation: timemodule.c:_Py_IsImmortal
Unexecuted instantiation: _typesmodule.c:_Py_IsImmortal
Unexecuted instantiation: _typingmodule.c:_Py_IsImmortal
Unexecuted instantiation: _weakref.c:_Py_IsImmortal
_abc.c:_Py_IsImmortal
Line
Count
Source
127
561k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
561k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
561k
}
_functoolsmodule.c:_Py_IsImmortal
Line
Count
Source
127
855k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
855k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
855k
}
Unexecuted instantiation: _localemodule.c:_Py_IsImmortal
Unexecuted instantiation: _opcode.c:_Py_IsImmortal
_operator.c:_Py_IsImmortal
Line
Count
Source
127
718k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
718k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
718k
}
Unexecuted instantiation: _stat.c:_Py_IsImmortal
Unexecuted instantiation: symtablemodule.c:_Py_IsImmortal
Unexecuted instantiation: pwdmodule.c:_Py_IsImmortal
getpath.c:_Py_IsImmortal
Line
Count
Source
127
1.51k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
1.51k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.51k
}
Unexecuted instantiation: frozen.c:_Py_IsImmortal
Unexecuted instantiation: getbuildinfo.c:_Py_IsImmortal
Unexecuted instantiation: peg_api.c:_Py_IsImmortal
reader.c:_Py_IsImmortal
Line
Count
Source
127
16
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
16
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
16
}
Unexecuted instantiation: source.c:_Py_IsImmortal
helpers.c:_Py_IsImmortal
Line
Count
Source
127
31.3k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
31.3k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
31.3k
}
Unexecuted instantiation: myreadline.c:_Py_IsImmortal
abstract.c:_Py_IsImmortal
Line
Count
Source
127
536M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
536M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
536M
}
Unexecuted instantiation: boolobject.c:_Py_IsImmortal
Unexecuted instantiation: bytes_methods.c:_Py_IsImmortal
bytearrayobject.c:_Py_IsImmortal
Line
Count
Source
127
23.9M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
23.9M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
23.9M
}
capsule.c:_Py_IsImmortal
Line
Count
Source
127
20
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
20
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
20
}
cellobject.c:_Py_IsImmortal
Line
Count
Source
127
10.6M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
10.6M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
10.6M
}
classobject.c:_Py_IsImmortal
Line
Count
Source
127
85.6M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
85.6M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
85.6M
}
codeobject.c:_Py_IsImmortal
Line
Count
Source
127
871k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
871k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
871k
}
Unexecuted instantiation: complexobject.c:_Py_IsImmortal
descrobject.c:_Py_IsImmortal
Line
Count
Source
127
52.8M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
52.8M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
52.8M
}
enumobject.c:_Py_IsImmortal
Line
Count
Source
127
170M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
170M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
170M
}
genobject.c:_Py_IsImmortal
Line
Count
Source
127
165M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
165M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
165M
}
fileobject.c:_Py_IsImmortal
Line
Count
Source
127
240k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
240k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
240k
}
frameobject.c:_Py_IsImmortal
Line
Count
Source
127
38.0M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
38.0M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
38.0M
}
funcobject.c:_Py_IsImmortal
Line
Count
Source
127
196M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
196M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
196M
}
interpolationobject.c:_Py_IsImmortal
Line
Count
Source
127
53
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
53
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
53
}
iterobject.c:_Py_IsImmortal
Line
Count
Source
127
3.23M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
3.23M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
3.23M
}
lazyimportobject.c:_Py_IsImmortal
Line
Count
Source
127
332
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
332
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
332
}
odictobject.c:_Py_IsImmortal
Line
Count
Source
127
19.3k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
19.3k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
19.3k
}
methodobject.c:_Py_IsImmortal
Line
Count
Source
127
183M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
183M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
183M
}
namespaceobject.c:_Py_IsImmortal
Line
Count
Source
127
65
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
65
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
65
}
Unexecuted instantiation: _contextvars.c:_Py_IsImmortal
Unexecuted instantiation: _strptime.c:_Py_IsImmortal
Python-ast.c:_Py_IsImmortal
Line
Count
Source
127
3.20M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
3.20M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
3.20M
}
Python-tokenize.c:_Py_IsImmortal
Line
Count
Source
127
492
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
492
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
492
}
Unexecuted instantiation: asdl.c:_Py_IsImmortal
assemble.c:_Py_IsImmortal
Line
Count
Source
127
28.0k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
28.0k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
28.0k
}
Unexecuted instantiation: ast.c:_Py_IsImmortal
Unexecuted instantiation: ast_preprocess.c:_Py_IsImmortal
Unexecuted instantiation: ast_unparse.c:_Py_IsImmortal
Unexecuted instantiation: critical_section.c:_Py_IsImmortal
Unexecuted instantiation: crossinterp.c:_Py_IsImmortal
Unexecuted instantiation: getcopyright.c:_Py_IsImmortal
Unexecuted instantiation: getplatform.c:_Py_IsImmortal
Unexecuted instantiation: getversion.c:_Py_IsImmortal
Unexecuted instantiation: optimizer.c:_Py_IsImmortal
Unexecuted instantiation: pathconfig.c:_Py_IsImmortal
pegen.c:_Py_IsImmortal
Line
Count
Source
127
133k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
133k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
133k
}
pegen_errors.c:_Py_IsImmortal
Line
Count
Source
127
252k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
252k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
252k
}
Unexecuted instantiation: parser.c:_Py_IsImmortal
Unexecuted instantiation: parser_invalid.c:_Py_IsImmortal
lexer.c:_Py_IsImmortal
Line
Count
Source
127
15.3k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
15.3k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
15.3k
}
Unexecuted instantiation: layout.c:_Py_IsImmortal
Unexecuted instantiation: number.c:_Py_IsImmortal
state.c:_Py_IsImmortal
Line
Count
Source
127
74.1k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
74.1k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
74.1k
}
Unexecuted instantiation: string.c:_Py_IsImmortal
decoder.c:_Py_IsImmortal
Line
Count
Source
127
3.50k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
3.50k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
3.50k
}
Unexecuted instantiation: api.c:_Py_IsImmortal
Unexecuted instantiation: getcompiler.c:_Py_IsImmortal
Unexecuted instantiation: mystrtoul.c:_Py_IsImmortal
Unexecuted instantiation: token.c:_Py_IsImmortal
action_helpers.c:_Py_IsImmortal
Line
Count
Source
127
264
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
264
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
264
}
string_parser.c:_Py_IsImmortal
Line
Count
Source
127
7.57k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
7.57k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
7.57k
}
137
26.7G
#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
138
139
140
static inline Py_ALWAYS_INLINE int _Py_IsStaticImmortal(PyObject *op)
141
0
{
142
0
#if defined(Py_GIL_DISABLED) || SIZEOF_VOID_P > 4
143
0
    return (op->ob_flags & _Py_STATICALLY_ALLOCATED_FLAG) != 0;
144
#else
145
    return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT;
146
#endif
147
0
}
Unexecuted instantiation: bytesobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: call.c:_Py_IsStaticImmortal
Unexecuted instantiation: exceptions.c:_Py_IsStaticImmortal
Unexecuted instantiation: genericaliasobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: floatobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: listobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: longobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: dictobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: memoryobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: moduleobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: object.c:_Py_IsStaticImmortal
Unexecuted instantiation: obmalloc.c:_Py_IsStaticImmortal
Unexecuted instantiation: picklebufobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: rangeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: sentinelobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: setobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: sliceobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: structseq.c:_Py_IsStaticImmortal
Unexecuted instantiation: templateobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: tupleobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: typeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: typevarobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicode_format.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicode_formatter.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicode_writer.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicodectype.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicodeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: unionobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: weakrefobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: _warnings.c:_Py_IsStaticImmortal
Unexecuted instantiation: bltinmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: ceval.c:_Py_IsStaticImmortal
Unexecuted instantiation: codecs.c:_Py_IsStaticImmortal
Unexecuted instantiation: codegen.c:_Py_IsStaticImmortal
Unexecuted instantiation: compile.c:_Py_IsStaticImmortal
Unexecuted instantiation: context.c:_Py_IsStaticImmortal
Unexecuted instantiation: errors.c:_Py_IsStaticImmortal
Unexecuted instantiation: flowgraph.c:_Py_IsStaticImmortal
Unexecuted instantiation: frame.c:_Py_IsStaticImmortal
Unexecuted instantiation: future.c:_Py_IsStaticImmortal
Unexecuted instantiation: gc.c:_Py_IsStaticImmortal
Unexecuted instantiation: gc_gil.c:_Py_IsStaticImmortal
Unexecuted instantiation: getargs.c:_Py_IsStaticImmortal
Unexecuted instantiation: ceval_gil.c:_Py_IsStaticImmortal
Unexecuted instantiation: hamt.c:_Py_IsStaticImmortal
Unexecuted instantiation: hashtable.c:_Py_IsStaticImmortal
Unexecuted instantiation: import.c:_Py_IsStaticImmortal
Unexecuted instantiation: importdl.c:_Py_IsStaticImmortal
Unexecuted instantiation: initconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: instrumentation.c:_Py_IsStaticImmortal
Unexecuted instantiation: instruction_sequence.c:_Py_IsStaticImmortal
Unexecuted instantiation: intrinsics.c:_Py_IsStaticImmortal
Unexecuted instantiation: legacy_tracing.c:_Py_IsStaticImmortal
Unexecuted instantiation: lock.c:_Py_IsStaticImmortal
Unexecuted instantiation: marshal.c:_Py_IsStaticImmortal
Unexecuted instantiation: modsupport.c:_Py_IsStaticImmortal
Unexecuted instantiation: mysnprintf.c:_Py_IsStaticImmortal
Unexecuted instantiation: parking_lot.c:_Py_IsStaticImmortal
Unexecuted instantiation: preconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: pyarena.c:_Py_IsStaticImmortal
Unexecuted instantiation: pyctype.c:_Py_IsStaticImmortal
Unexecuted instantiation: pyhash.c:_Py_IsStaticImmortal
Unexecuted instantiation: pylifecycle.c:_Py_IsStaticImmortal
Unexecuted instantiation: pymath.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystate.c:_Py_IsStaticImmortal
Unexecuted instantiation: pythonrun.c:_Py_IsStaticImmortal
Unexecuted instantiation: pytime.c:_Py_IsStaticImmortal
Unexecuted instantiation: qsbr.c:_Py_IsStaticImmortal
Unexecuted instantiation: bootstrap_hash.c:_Py_IsStaticImmortal
Unexecuted instantiation: specialize.c:_Py_IsStaticImmortal
Unexecuted instantiation: slots.c:_Py_IsStaticImmortal
Unexecuted instantiation: slots_generated.c:_Py_IsStaticImmortal
Unexecuted instantiation: structmember.c:_Py_IsStaticImmortal
Unexecuted instantiation: symtable.c:_Py_IsStaticImmortal
Unexecuted instantiation: sysmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: thread.c:_Py_IsStaticImmortal
Unexecuted instantiation: traceback.c:_Py_IsStaticImmortal
Unexecuted instantiation: tracemalloc.c:_Py_IsStaticImmortal
Unexecuted instantiation: typecache.c:_Py_IsStaticImmortal
Unexecuted instantiation: getopt.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystrcmp.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystrtod.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystrhex.c:_Py_IsStaticImmortal
Unexecuted instantiation: dtoa.c:_Py_IsStaticImmortal
Unexecuted instantiation: fileutils.c:_Py_IsStaticImmortal
Unexecuted instantiation: suggestions.c:_Py_IsStaticImmortal
Unexecuted instantiation: perf_trampoline.c:_Py_IsStaticImmortal
Unexecuted instantiation: perf_jit_trampoline.c:_Py_IsStaticImmortal
Unexecuted instantiation: jit_unwind.c:_Py_IsStaticImmortal
Unexecuted instantiation: remote_debugging.c:_Py_IsStaticImmortal
Unexecuted instantiation: dynload_shlib.c:_Py_IsStaticImmortal
Unexecuted instantiation: config.c:_Py_IsStaticImmortal
Unexecuted instantiation: gcmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _asynciomodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: atexitmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: faulthandler.c:_Py_IsStaticImmortal
Unexecuted instantiation: posixmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: signalmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _tracemalloc.c:_Py_IsStaticImmortal
Unexecuted instantiation: _suggestions.c:_Py_IsStaticImmortal
Unexecuted instantiation: _datetimemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _codecsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _collectionsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: errnomodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _iomodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: iobase.c:_Py_IsStaticImmortal
Unexecuted instantiation: fileio.c:_Py_IsStaticImmortal
Unexecuted instantiation: bytesio.c:_Py_IsStaticImmortal
Unexecuted instantiation: bufferedio.c:_Py_IsStaticImmortal
Unexecuted instantiation: textio.c:_Py_IsStaticImmortal
Unexecuted instantiation: stringio.c:_Py_IsStaticImmortal
Unexecuted instantiation: itertoolsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: sre.c:_Py_IsStaticImmortal
Unexecuted instantiation: _sysconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: _threadmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: timemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _typesmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _typingmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _weakref.c:_Py_IsStaticImmortal
Unexecuted instantiation: _abc.c:_Py_IsStaticImmortal
Unexecuted instantiation: _functoolsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _localemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _opcode.c:_Py_IsStaticImmortal
Unexecuted instantiation: _operator.c:_Py_IsStaticImmortal
Unexecuted instantiation: _stat.c:_Py_IsStaticImmortal
Unexecuted instantiation: symtablemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: pwdmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: getpath.c:_Py_IsStaticImmortal
Unexecuted instantiation: frozen.c:_Py_IsStaticImmortal
Unexecuted instantiation: getbuildinfo.c:_Py_IsStaticImmortal
Unexecuted instantiation: peg_api.c:_Py_IsStaticImmortal
Unexecuted instantiation: reader.c:_Py_IsStaticImmortal
Unexecuted instantiation: source.c:_Py_IsStaticImmortal
Unexecuted instantiation: helpers.c:_Py_IsStaticImmortal
Unexecuted instantiation: myreadline.c:_Py_IsStaticImmortal
Unexecuted instantiation: abstract.c:_Py_IsStaticImmortal
Unexecuted instantiation: boolobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: bytes_methods.c:_Py_IsStaticImmortal
Unexecuted instantiation: bytearrayobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: capsule.c:_Py_IsStaticImmortal
Unexecuted instantiation: cellobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: classobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: codeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: complexobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: descrobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: enumobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: genobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: fileobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: frameobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: funcobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: interpolationobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: iterobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: lazyimportobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: odictobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: methodobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: namespaceobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: _contextvars.c:_Py_IsStaticImmortal
Unexecuted instantiation: _strptime.c:_Py_IsStaticImmortal
Unexecuted instantiation: Python-ast.c:_Py_IsStaticImmortal
Unexecuted instantiation: Python-tokenize.c:_Py_IsStaticImmortal
Unexecuted instantiation: asdl.c:_Py_IsStaticImmortal
Unexecuted instantiation: assemble.c:_Py_IsStaticImmortal
Unexecuted instantiation: ast.c:_Py_IsStaticImmortal
Unexecuted instantiation: ast_preprocess.c:_Py_IsStaticImmortal
Unexecuted instantiation: ast_unparse.c:_Py_IsStaticImmortal
Unexecuted instantiation: critical_section.c:_Py_IsStaticImmortal
Unexecuted instantiation: crossinterp.c:_Py_IsStaticImmortal
Unexecuted instantiation: getcopyright.c:_Py_IsStaticImmortal
Unexecuted instantiation: getplatform.c:_Py_IsStaticImmortal
Unexecuted instantiation: getversion.c:_Py_IsStaticImmortal
Unexecuted instantiation: optimizer.c:_Py_IsStaticImmortal
Unexecuted instantiation: pathconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: pegen.c:_Py_IsStaticImmortal
Unexecuted instantiation: pegen_errors.c:_Py_IsStaticImmortal
Unexecuted instantiation: parser.c:_Py_IsStaticImmortal
Unexecuted instantiation: parser_invalid.c:_Py_IsStaticImmortal
Unexecuted instantiation: lexer.c:_Py_IsStaticImmortal
Unexecuted instantiation: layout.c:_Py_IsStaticImmortal
Unexecuted instantiation: number.c:_Py_IsStaticImmortal
Unexecuted instantiation: state.c:_Py_IsStaticImmortal
Unexecuted instantiation: string.c:_Py_IsStaticImmortal
Unexecuted instantiation: decoder.c:_Py_IsStaticImmortal
Unexecuted instantiation: api.c:_Py_IsStaticImmortal
Unexecuted instantiation: getcompiler.c:_Py_IsStaticImmortal
Unexecuted instantiation: mystrtoul.c:_Py_IsStaticImmortal
Unexecuted instantiation: token.c:_Py_IsStaticImmortal
Unexecuted instantiation: action_helpers.c:_Py_IsStaticImmortal
Unexecuted instantiation: string_parser.c:_Py_IsStaticImmortal
148
0
#define _Py_IsStaticImmortal(op) _Py_IsStaticImmortal(_PyObject_CAST(op))
149
#endif // !defined(_Py_OPAQUE_PYOBJECT)
150
151
// Py_SET_REFCNT() implementation for stable ABI
152
PyAPI_FUNC(void) _Py_SetRefcnt(PyObject *ob, Py_ssize_t refcnt);
153
154
380M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
380M
    assert(refcnt >= 0);
156
#if (defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000) \
157
    || defined(_Py_OPAQUE_PYOBJECT)
158
    // Stable ABI implements Py_SET_REFCNT() as a function call
159
    // on limited C API version 3.13 and newer, and abi3t.
160
    _Py_SetRefcnt(ob, refcnt);
161
#else
162
    // This immortal check is for code that is unaware of immortal objects.
163
    // The runtime tracks these objects and we should avoid as much
164
    // as possible having extensions inadvertently change the refcnt
165
    // of an immortalized object.
166
380M
    if (_Py_IsImmortal(ob)) {
167
1.10k
        return;
168
1.10k
    }
169
380M
#ifndef Py_GIL_DISABLED
170
380M
#if SIZEOF_VOID_P > 4
171
380M
    ob->ob_refcnt = (uint32_t)refcnt;
172
#else
173
    ob->ob_refcnt = refcnt;
174
#endif
175
#else
176
    if (_Py_IsOwnedByCurrentThread(ob)) {
177
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
178
            // On overflow, make the object immortal
179
            ob->ob_tid = _Py_UNOWNED_TID;
180
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
181
            ob->ob_ref_shared = 0;
182
        }
183
        else {
184
            // Set local refcount to desired refcount and shared refcount
185
            // to zero, but preserve the shared refcount flags.
186
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
187
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
188
        }
189
    }
190
    else {
191
        // Set local refcount to zero and shared refcount to desired refcount.
192
        // Mark the object as merged.
193
        ob->ob_tid = _Py_UNOWNED_TID;
194
        ob->ob_ref_local = 0;
195
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
196
    }
197
#endif  // Py_GIL_DISABLED
198
380M
#endif  // Py_LIMITED_API
199
380M
}
Unexecuted instantiation: bytesobject.c:Py_SET_REFCNT
Unexecuted instantiation: call.c:Py_SET_REFCNT
Unexecuted instantiation: exceptions.c:Py_SET_REFCNT
Unexecuted instantiation: genericaliasobject.c:Py_SET_REFCNT
Unexecuted instantiation: floatobject.c:Py_SET_REFCNT
Unexecuted instantiation: listobject.c:Py_SET_REFCNT
Unexecuted instantiation: longobject.c:Py_SET_REFCNT
dictobject.c:Py_SET_REFCNT
Line
Count
Source
154
262M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
262M
    assert(refcnt >= 0);
156
#if (defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000) \
157
    || defined(_Py_OPAQUE_PYOBJECT)
158
    // Stable ABI implements Py_SET_REFCNT() as a function call
159
    // on limited C API version 3.13 and newer, and abi3t.
160
    _Py_SetRefcnt(ob, refcnt);
161
#else
162
    // This immortal check is for code that is unaware of immortal objects.
163
    // The runtime tracks these objects and we should avoid as much
164
    // as possible having extensions inadvertently change the refcnt
165
    // of an immortalized object.
166
262M
    if (_Py_IsImmortal(ob)) {
167
0
        return;
168
0
    }
169
262M
#ifndef Py_GIL_DISABLED
170
262M
#if SIZEOF_VOID_P > 4
171
262M
    ob->ob_refcnt = (uint32_t)refcnt;
172
#else
173
    ob->ob_refcnt = refcnt;
174
#endif
175
#else
176
    if (_Py_IsOwnedByCurrentThread(ob)) {
177
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
178
            // On overflow, make the object immortal
179
            ob->ob_tid = _Py_UNOWNED_TID;
180
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
181
            ob->ob_ref_shared = 0;
182
        }
183
        else {
184
            // Set local refcount to desired refcount and shared refcount
185
            // to zero, but preserve the shared refcount flags.
186
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
187
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
188
        }
189
    }
190
    else {
191
        // Set local refcount to zero and shared refcount to desired refcount.
192
        // Mark the object as merged.
193
        ob->ob_tid = _Py_UNOWNED_TID;
194
        ob->ob_ref_local = 0;
195
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
196
    }
197
#endif  // Py_GIL_DISABLED
198
262M
#endif  // Py_LIMITED_API
199
262M
}
Unexecuted instantiation: memoryobject.c:Py_SET_REFCNT
moduleobject.c:Py_SET_REFCNT
Line
Count
Source
154
1.10k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
1.10k
    assert(refcnt >= 0);
156
#if (defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000) \
157
    || defined(_Py_OPAQUE_PYOBJECT)
158
    // Stable ABI implements Py_SET_REFCNT() as a function call
159
    // on limited C API version 3.13 and newer, and abi3t.
160
    _Py_SetRefcnt(ob, refcnt);
161
#else
162
    // This immortal check is for code that is unaware of immortal objects.
163
    // The runtime tracks these objects and we should avoid as much
164
    // as possible having extensions inadvertently change the refcnt
165
    // of an immortalized object.
166
1.10k
    if (_Py_IsImmortal(ob)) {
167
1.10k
        return;
168
1.10k
    }
169
0
#ifndef Py_GIL_DISABLED
170
0
#if SIZEOF_VOID_P > 4
171
0
    ob->ob_refcnt = (uint32_t)refcnt;
172
#else
173
    ob->ob_refcnt = refcnt;
174
#endif
175
#else
176
    if (_Py_IsOwnedByCurrentThread(ob)) {
177
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
178
            // On overflow, make the object immortal
179
            ob->ob_tid = _Py_UNOWNED_TID;
180
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
181
            ob->ob_ref_shared = 0;
182
        }
183
        else {
184
            // Set local refcount to desired refcount and shared refcount
185
            // to zero, but preserve the shared refcount flags.
186
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
187
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
188
        }
189
    }
190
    else {
191
        // Set local refcount to zero and shared refcount to desired refcount.
192
        // Mark the object as merged.
193
        ob->ob_tid = _Py_UNOWNED_TID;
194
        ob->ob_ref_local = 0;
195
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
196
    }
197
#endif  // Py_GIL_DISABLED
198
0
#endif  // Py_LIMITED_API
199
0
}
object.c:Py_SET_REFCNT
Line
Count
Source
154
81.8M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
81.8M
    assert(refcnt >= 0);
156
#if (defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000) \
157
    || defined(_Py_OPAQUE_PYOBJECT)
158
    // Stable ABI implements Py_SET_REFCNT() as a function call
159
    // on limited C API version 3.13 and newer, and abi3t.
160
    _Py_SetRefcnt(ob, refcnt);
161
#else
162
    // This immortal check is for code that is unaware of immortal objects.
163
    // The runtime tracks these objects and we should avoid as much
164
    // as possible having extensions inadvertently change the refcnt
165
    // of an immortalized object.
166
81.8M
    if (_Py_IsImmortal(ob)) {
167
0
        return;
168
0
    }
169
81.8M
#ifndef Py_GIL_DISABLED
170
81.8M
#if SIZEOF_VOID_P > 4
171
81.8M
    ob->ob_refcnt = (uint32_t)refcnt;
172
#else
173
    ob->ob_refcnt = refcnt;
174
#endif
175
#else
176
    if (_Py_IsOwnedByCurrentThread(ob)) {
177
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
178
            // On overflow, make the object immortal
179
            ob->ob_tid = _Py_UNOWNED_TID;
180
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
181
            ob->ob_ref_shared = 0;
182
        }
183
        else {
184
            // Set local refcount to desired refcount and shared refcount
185
            // to zero, but preserve the shared refcount flags.
186
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
187
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
188
        }
189
    }
190
    else {
191
        // Set local refcount to zero and shared refcount to desired refcount.
192
        // Mark the object as merged.
193
        ob->ob_tid = _Py_UNOWNED_TID;
194
        ob->ob_ref_local = 0;
195
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
196
    }
197
#endif  // Py_GIL_DISABLED
198
81.8M
#endif  // Py_LIMITED_API
199
81.8M
}
Unexecuted instantiation: obmalloc.c:Py_SET_REFCNT
Unexecuted instantiation: picklebufobject.c:Py_SET_REFCNT
Unexecuted instantiation: rangeobject.c:Py_SET_REFCNT
Unexecuted instantiation: sentinelobject.c:Py_SET_REFCNT
Unexecuted instantiation: setobject.c:Py_SET_REFCNT
Unexecuted instantiation: sliceobject.c:Py_SET_REFCNT
Unexecuted instantiation: structseq.c:Py_SET_REFCNT
Unexecuted instantiation: templateobject.c:Py_SET_REFCNT
Unexecuted instantiation: tupleobject.c:Py_SET_REFCNT
Unexecuted instantiation: typeobject.c:Py_SET_REFCNT
Unexecuted instantiation: typevarobject.c:Py_SET_REFCNT
Unexecuted instantiation: unicode_format.c:Py_SET_REFCNT
Unexecuted instantiation: unicode_formatter.c:Py_SET_REFCNT
Unexecuted instantiation: unicode_writer.c:Py_SET_REFCNT
Unexecuted instantiation: unicodectype.c:Py_SET_REFCNT
unicodeobject.c:Py_SET_REFCNT
Line
Count
Source
154
914k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
914k
    assert(refcnt >= 0);
156
#if (defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000) \
157
    || defined(_Py_OPAQUE_PYOBJECT)
158
    // Stable ABI implements Py_SET_REFCNT() as a function call
159
    // on limited C API version 3.13 and newer, and abi3t.
160
    _Py_SetRefcnt(ob, refcnt);
161
#else
162
    // This immortal check is for code that is unaware of immortal objects.
163
    // The runtime tracks these objects and we should avoid as much
164
    // as possible having extensions inadvertently change the refcnt
165
    // of an immortalized object.
166
914k
    if (_Py_IsImmortal(ob)) {
167
0
        return;
168
0
    }
169
914k
#ifndef Py_GIL_DISABLED
170
914k
#if SIZEOF_VOID_P > 4
171
914k
    ob->ob_refcnt = (uint32_t)refcnt;
172
#else
173
    ob->ob_refcnt = refcnt;
174
#endif
175
#else
176
    if (_Py_IsOwnedByCurrentThread(ob)) {
177
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
178
            // On overflow, make the object immortal
179
            ob->ob_tid = _Py_UNOWNED_TID;
180
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
181
            ob->ob_ref_shared = 0;
182
        }
183
        else {
184
            // Set local refcount to desired refcount and shared refcount
185
            // to zero, but preserve the shared refcount flags.
186
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
187
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
188
        }
189
    }
190
    else {
191
        // Set local refcount to zero and shared refcount to desired refcount.
192
        // Mark the object as merged.
193
        ob->ob_tid = _Py_UNOWNED_TID;
194
        ob->ob_ref_local = 0;
195
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
196
    }
197
#endif  // Py_GIL_DISABLED
198
914k
#endif  // Py_LIMITED_API
199
914k
}
Unexecuted instantiation: unionobject.c:Py_SET_REFCNT
Unexecuted instantiation: weakrefobject.c:Py_SET_REFCNT
Unexecuted instantiation: _warnings.c:Py_SET_REFCNT
Unexecuted instantiation: bltinmodule.c:Py_SET_REFCNT
Unexecuted instantiation: ceval.c:Py_SET_REFCNT
Unexecuted instantiation: codecs.c:Py_SET_REFCNT
Unexecuted instantiation: codegen.c:Py_SET_REFCNT
Unexecuted instantiation: compile.c:Py_SET_REFCNT
Unexecuted instantiation: context.c:Py_SET_REFCNT
Unexecuted instantiation: errors.c:Py_SET_REFCNT
Unexecuted instantiation: flowgraph.c:Py_SET_REFCNT
Unexecuted instantiation: frame.c:Py_SET_REFCNT
Unexecuted instantiation: future.c:Py_SET_REFCNT
Unexecuted instantiation: gc.c:Py_SET_REFCNT
Unexecuted instantiation: gc_gil.c:Py_SET_REFCNT
Unexecuted instantiation: getargs.c:Py_SET_REFCNT
Unexecuted instantiation: ceval_gil.c:Py_SET_REFCNT
Unexecuted instantiation: hamt.c:Py_SET_REFCNT
Unexecuted instantiation: hashtable.c:Py_SET_REFCNT
Unexecuted instantiation: import.c:Py_SET_REFCNT
Unexecuted instantiation: importdl.c:Py_SET_REFCNT
Unexecuted instantiation: initconfig.c:Py_SET_REFCNT
Unexecuted instantiation: instrumentation.c:Py_SET_REFCNT
Unexecuted instantiation: instruction_sequence.c:Py_SET_REFCNT
Unexecuted instantiation: intrinsics.c:Py_SET_REFCNT
Unexecuted instantiation: legacy_tracing.c:Py_SET_REFCNT
Unexecuted instantiation: lock.c:Py_SET_REFCNT
Unexecuted instantiation: marshal.c:Py_SET_REFCNT
Unexecuted instantiation: modsupport.c:Py_SET_REFCNT
Unexecuted instantiation: mysnprintf.c:Py_SET_REFCNT
Unexecuted instantiation: parking_lot.c:Py_SET_REFCNT
Unexecuted instantiation: preconfig.c:Py_SET_REFCNT
Unexecuted instantiation: pyarena.c:Py_SET_REFCNT
Unexecuted instantiation: pyctype.c:Py_SET_REFCNT
Unexecuted instantiation: pyhash.c:Py_SET_REFCNT
Unexecuted instantiation: pylifecycle.c:Py_SET_REFCNT
Unexecuted instantiation: pymath.c:Py_SET_REFCNT
Unexecuted instantiation: pystate.c:Py_SET_REFCNT
Unexecuted instantiation: pythonrun.c:Py_SET_REFCNT
Unexecuted instantiation: pytime.c:Py_SET_REFCNT
Unexecuted instantiation: qsbr.c:Py_SET_REFCNT
Unexecuted instantiation: bootstrap_hash.c:Py_SET_REFCNT
Unexecuted instantiation: specialize.c:Py_SET_REFCNT
Unexecuted instantiation: slots.c:Py_SET_REFCNT
Unexecuted instantiation: slots_generated.c:Py_SET_REFCNT
Unexecuted instantiation: structmember.c:Py_SET_REFCNT
Unexecuted instantiation: symtable.c:Py_SET_REFCNT
Unexecuted instantiation: sysmodule.c:Py_SET_REFCNT
Unexecuted instantiation: thread.c:Py_SET_REFCNT
Unexecuted instantiation: traceback.c:Py_SET_REFCNT
Unexecuted instantiation: tracemalloc.c:Py_SET_REFCNT
Unexecuted instantiation: typecache.c:Py_SET_REFCNT
Unexecuted instantiation: getopt.c:Py_SET_REFCNT
Unexecuted instantiation: pystrcmp.c:Py_SET_REFCNT
Unexecuted instantiation: pystrtod.c:Py_SET_REFCNT
Unexecuted instantiation: pystrhex.c:Py_SET_REFCNT
Unexecuted instantiation: dtoa.c:Py_SET_REFCNT
Unexecuted instantiation: fileutils.c:Py_SET_REFCNT
Unexecuted instantiation: suggestions.c:Py_SET_REFCNT
Unexecuted instantiation: perf_trampoline.c:Py_SET_REFCNT
Unexecuted instantiation: perf_jit_trampoline.c:Py_SET_REFCNT
Unexecuted instantiation: jit_unwind.c:Py_SET_REFCNT
Unexecuted instantiation: remote_debugging.c:Py_SET_REFCNT
Unexecuted instantiation: dynload_shlib.c:Py_SET_REFCNT
Unexecuted instantiation: config.c:Py_SET_REFCNT
Unexecuted instantiation: gcmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _asynciomodule.c:Py_SET_REFCNT
Unexecuted instantiation: atexitmodule.c:Py_SET_REFCNT
Unexecuted instantiation: faulthandler.c:Py_SET_REFCNT
Unexecuted instantiation: posixmodule.c:Py_SET_REFCNT
Unexecuted instantiation: signalmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _tracemalloc.c:Py_SET_REFCNT
Unexecuted instantiation: _suggestions.c:Py_SET_REFCNT
Unexecuted instantiation: _datetimemodule.c:Py_SET_REFCNT
Unexecuted instantiation: _codecsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _collectionsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: errnomodule.c:Py_SET_REFCNT
Unexecuted instantiation: _iomodule.c:Py_SET_REFCNT
Unexecuted instantiation: iobase.c:Py_SET_REFCNT
Unexecuted instantiation: fileio.c:Py_SET_REFCNT
Unexecuted instantiation: bytesio.c:Py_SET_REFCNT
Unexecuted instantiation: bufferedio.c:Py_SET_REFCNT
Unexecuted instantiation: textio.c:Py_SET_REFCNT
Unexecuted instantiation: stringio.c:Py_SET_REFCNT
Unexecuted instantiation: itertoolsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: sre.c:Py_SET_REFCNT
Unexecuted instantiation: _sysconfig.c:Py_SET_REFCNT
Unexecuted instantiation: _threadmodule.c:Py_SET_REFCNT
Unexecuted instantiation: timemodule.c:Py_SET_REFCNT
Unexecuted instantiation: _typesmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _typingmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _weakref.c:Py_SET_REFCNT
Unexecuted instantiation: _abc.c:Py_SET_REFCNT
Unexecuted instantiation: _functoolsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _localemodule.c:Py_SET_REFCNT
Unexecuted instantiation: _opcode.c:Py_SET_REFCNT
Unexecuted instantiation: _operator.c:Py_SET_REFCNT
Unexecuted instantiation: _stat.c:Py_SET_REFCNT
Unexecuted instantiation: symtablemodule.c:Py_SET_REFCNT
Unexecuted instantiation: pwdmodule.c:Py_SET_REFCNT
Unexecuted instantiation: getpath.c:Py_SET_REFCNT
Unexecuted instantiation: frozen.c:Py_SET_REFCNT
Unexecuted instantiation: getbuildinfo.c:Py_SET_REFCNT
Unexecuted instantiation: peg_api.c:Py_SET_REFCNT
Unexecuted instantiation: reader.c:Py_SET_REFCNT
Unexecuted instantiation: source.c:Py_SET_REFCNT
Unexecuted instantiation: helpers.c:Py_SET_REFCNT
Unexecuted instantiation: myreadline.c:Py_SET_REFCNT
Unexecuted instantiation: abstract.c:Py_SET_REFCNT
Unexecuted instantiation: boolobject.c:Py_SET_REFCNT
Unexecuted instantiation: bytes_methods.c:Py_SET_REFCNT
Unexecuted instantiation: bytearrayobject.c:Py_SET_REFCNT
Unexecuted instantiation: capsule.c:Py_SET_REFCNT
Unexecuted instantiation: cellobject.c:Py_SET_REFCNT
Unexecuted instantiation: classobject.c:Py_SET_REFCNT
codeobject.c:Py_SET_REFCNT
Line
Count
Source
154
153k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
153k
    assert(refcnt >= 0);
156
#if (defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000) \
157
    || defined(_Py_OPAQUE_PYOBJECT)
158
    // Stable ABI implements Py_SET_REFCNT() as a function call
159
    // on limited C API version 3.13 and newer, and abi3t.
160
    _Py_SetRefcnt(ob, refcnt);
161
#else
162
    // This immortal check is for code that is unaware of immortal objects.
163
    // The runtime tracks these objects and we should avoid as much
164
    // as possible having extensions inadvertently change the refcnt
165
    // of an immortalized object.
166
153k
    if (_Py_IsImmortal(ob)) {
167
0
        return;
168
0
    }
169
153k
#ifndef Py_GIL_DISABLED
170
153k
#if SIZEOF_VOID_P > 4
171
153k
    ob->ob_refcnt = (uint32_t)refcnt;
172
#else
173
    ob->ob_refcnt = refcnt;
174
#endif
175
#else
176
    if (_Py_IsOwnedByCurrentThread(ob)) {
177
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
178
            // On overflow, make the object immortal
179
            ob->ob_tid = _Py_UNOWNED_TID;
180
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
181
            ob->ob_ref_shared = 0;
182
        }
183
        else {
184
            // Set local refcount to desired refcount and shared refcount
185
            // to zero, but preserve the shared refcount flags.
186
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
187
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
188
        }
189
    }
190
    else {
191
        // Set local refcount to zero and shared refcount to desired refcount.
192
        // Mark the object as merged.
193
        ob->ob_tid = _Py_UNOWNED_TID;
194
        ob->ob_ref_local = 0;
195
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
196
    }
197
#endif  // Py_GIL_DISABLED
198
153k
#endif  // Py_LIMITED_API
199
153k
}
Unexecuted instantiation: complexobject.c:Py_SET_REFCNT
Unexecuted instantiation: descrobject.c:Py_SET_REFCNT
Unexecuted instantiation: enumobject.c:Py_SET_REFCNT
Unexecuted instantiation: genobject.c:Py_SET_REFCNT
Unexecuted instantiation: fileobject.c:Py_SET_REFCNT
Unexecuted instantiation: frameobject.c:Py_SET_REFCNT
funcobject.c:Py_SET_REFCNT
Line
Count
Source
154
35.0M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
35.0M
    assert(refcnt >= 0);
156
#if (defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000) \
157
    || defined(_Py_OPAQUE_PYOBJECT)
158
    // Stable ABI implements Py_SET_REFCNT() as a function call
159
    // on limited C API version 3.13 and newer, and abi3t.
160
    _Py_SetRefcnt(ob, refcnt);
161
#else
162
    // This immortal check is for code that is unaware of immortal objects.
163
    // The runtime tracks these objects and we should avoid as much
164
    // as possible having extensions inadvertently change the refcnt
165
    // of an immortalized object.
166
35.0M
    if (_Py_IsImmortal(ob)) {
167
0
        return;
168
0
    }
169
35.0M
#ifndef Py_GIL_DISABLED
170
35.0M
#if SIZEOF_VOID_P > 4
171
35.0M
    ob->ob_refcnt = (uint32_t)refcnt;
172
#else
173
    ob->ob_refcnt = refcnt;
174
#endif
175
#else
176
    if (_Py_IsOwnedByCurrentThread(ob)) {
177
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
178
            // On overflow, make the object immortal
179
            ob->ob_tid = _Py_UNOWNED_TID;
180
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
181
            ob->ob_ref_shared = 0;
182
        }
183
        else {
184
            // Set local refcount to desired refcount and shared refcount
185
            // to zero, but preserve the shared refcount flags.
186
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
187
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
188
        }
189
    }
190
    else {
191
        // Set local refcount to zero and shared refcount to desired refcount.
192
        // Mark the object as merged.
193
        ob->ob_tid = _Py_UNOWNED_TID;
194
        ob->ob_ref_local = 0;
195
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
196
    }
197
#endif  // Py_GIL_DISABLED
198
35.0M
#endif  // Py_LIMITED_API
199
35.0M
}
Unexecuted instantiation: interpolationobject.c:Py_SET_REFCNT
Unexecuted instantiation: iterobject.c:Py_SET_REFCNT
Unexecuted instantiation: lazyimportobject.c:Py_SET_REFCNT
Unexecuted instantiation: odictobject.c:Py_SET_REFCNT
Unexecuted instantiation: methodobject.c:Py_SET_REFCNT
Unexecuted instantiation: namespaceobject.c:Py_SET_REFCNT
Unexecuted instantiation: _contextvars.c:Py_SET_REFCNT
Unexecuted instantiation: _strptime.c:Py_SET_REFCNT
Unexecuted instantiation: Python-ast.c:Py_SET_REFCNT
Unexecuted instantiation: Python-tokenize.c:Py_SET_REFCNT
Unexecuted instantiation: asdl.c:Py_SET_REFCNT
Unexecuted instantiation: assemble.c:Py_SET_REFCNT
Unexecuted instantiation: ast.c:Py_SET_REFCNT
Unexecuted instantiation: ast_preprocess.c:Py_SET_REFCNT
Unexecuted instantiation: ast_unparse.c:Py_SET_REFCNT
Unexecuted instantiation: critical_section.c:Py_SET_REFCNT
Unexecuted instantiation: crossinterp.c:Py_SET_REFCNT
Unexecuted instantiation: getcopyright.c:Py_SET_REFCNT
Unexecuted instantiation: getplatform.c:Py_SET_REFCNT
Unexecuted instantiation: getversion.c:Py_SET_REFCNT
Unexecuted instantiation: optimizer.c:Py_SET_REFCNT
Unexecuted instantiation: pathconfig.c:Py_SET_REFCNT
Unexecuted instantiation: pegen.c:Py_SET_REFCNT
Unexecuted instantiation: pegen_errors.c:Py_SET_REFCNT
Unexecuted instantiation: parser.c:Py_SET_REFCNT
Unexecuted instantiation: parser_invalid.c:Py_SET_REFCNT
Unexecuted instantiation: lexer.c:Py_SET_REFCNT
Unexecuted instantiation: layout.c:Py_SET_REFCNT
Unexecuted instantiation: number.c:Py_SET_REFCNT
Unexecuted instantiation: state.c:Py_SET_REFCNT
Unexecuted instantiation: string.c:Py_SET_REFCNT
Unexecuted instantiation: decoder.c:Py_SET_REFCNT
Unexecuted instantiation: api.c:Py_SET_REFCNT
Unexecuted instantiation: getcompiler.c:Py_SET_REFCNT
Unexecuted instantiation: mystrtoul.c:Py_SET_REFCNT
Unexecuted instantiation: token.c:Py_SET_REFCNT
Unexecuted instantiation: action_helpers.c:Py_SET_REFCNT
Unexecuted instantiation: string_parser.c:Py_SET_REFCNT
200
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
201
380M
#  define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt))
202
#endif
203
204
205
/*
206
The macros Py_INCREF(op) and Py_DECREF(op) are used to increment or decrement
207
reference counts.  Py_DECREF calls the object's deallocator function when
208
the refcount falls to 0; for
209
objects that don't contain references to other objects or heap memory
210
this can be the standard function free().  Both macros can be used
211
wherever a void expression is allowed.  The argument must not be a
212
NULL pointer.  If it may be NULL, use Py_XINCREF/Py_XDECREF instead.
213
The macro _Py_NewReference(op) initialize reference counts to 1, and
214
in special builds (Py_REF_DEBUG, Py_TRACE_REFS) performs additional
215
bookkeeping appropriate to the special build.
216
217
We assume that the reference count field can never overflow; this can
218
be proven when the size of the field is the same as the pointer size, so
219
we ignore the possibility.  Provided a C int is at least 32 bits (which
220
is implicitly assumed in many parts of this code), that's enough for
221
about 2**31 references to an object.
222
223
XXX The following became out of date in Python 2.2, but I'm not sure
224
XXX what the full truth is now.  Certainly, heap-allocated type objects
225
XXX can and should be deallocated.
226
Type objects should never be deallocated; the type pointer in an object
227
is not considered to be a reference to the type object, to save
228
complications in the deallocation function.  (This is actually a
229
decision that's up to the implementer of each new type so if you want,
230
you can count such references to the type object.)
231
*/
232
233
#if defined(Py_REF_DEBUG) && !defined(Py_LIMITED_API)
234
PyAPI_FUNC(void) _Py_NegativeRefcount(const char *filename, int lineno,
235
                                      PyObject *op);
236
PyAPI_FUNC(void) _Py_INCREF_IncRefTotal(void);
237
PyAPI_FUNC(void) _Py_DECREF_DecRefTotal(void);
238
#endif  // Py_REF_DEBUG && !Py_LIMITED_API
239
240
PyAPI_FUNC(void) _Py_Dealloc(PyObject *);
241
242
243
/*
244
These are provided as conveniences to Python runtime embedders, so that
245
they can have object code that is not dependent on Python compilation flags.
246
*/
247
PyAPI_FUNC(void) Py_IncRef(PyObject *);
248
PyAPI_FUNC(void) Py_DecRef(PyObject *);
249
250
// Similar to Py_IncRef() and Py_DecRef() but the argument must be non-NULL.
251
// Private functions used by Py_INCREF() and Py_DECREF().
252
PyAPI_FUNC(void) _Py_IncRef(PyObject *);
253
PyAPI_FUNC(void) _Py_DecRef(PyObject *);
254
255
static inline Py_ALWAYS_INLINE void Py_INCREF(PyObject *op)
256
13.0G
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
13.0G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
6.79G
        _Py_INCREF_IMMORTAL_STAT_INC();
290
6.79G
        return;
291
6.79G
    }
292
6.29G
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
6.29G
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
6.29G
#endif
308
6.29G
}
bytesobject.c:Py_INCREF
Line
Count
Source
256
162M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
162M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
160M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
160M
        return;
291
160M
    }
292
2.06M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
2.06M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
2.06M
#endif
308
2.06M
}
call.c:Py_INCREF
Line
Count
Source
256
28.3M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
28.3M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
15.5M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
15.5M
        return;
291
15.5M
    }
292
12.7M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
12.7M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
12.7M
#endif
308
12.7M
}
exceptions.c:Py_INCREF
Line
Count
Source
256
194M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
194M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
43.4M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
43.4M
        return;
291
43.4M
    }
292
150M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
150M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
150M
#endif
308
150M
}
genericaliasobject.c:Py_INCREF
Line
Count
Source
256
2.27k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
2.27k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.72k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.72k
        return;
291
1.72k
    }
292
550
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
550
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
550
#endif
308
550
}
floatobject.c:Py_INCREF
Line
Count
Source
256
1.31M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
1.31M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.31M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.31M
        return;
291
1.31M
    }
292
0
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
0
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
0
#endif
308
0
}
listobject.c:Py_INCREF
Line
Count
Source
256
2.15G
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
2.15G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
356M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
356M
        return;
291
356M
    }
292
1.79G
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
1.79G
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
1.79G
#endif
308
1.79G
}
longobject.c:Py_INCREF
Line
Count
Source
256
106M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
106M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
106M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
106M
        return;
291
106M
    }
292
1.03k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
1.03k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
1.03k
#endif
308
1.03k
}
dictobject.c:Py_INCREF
Line
Count
Source
256
1.57G
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
1.57G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
328M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
328M
        return;
291
328M
    }
292
1.24G
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
1.24G
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
1.24G
#endif
308
1.24G
}
memoryobject.c:Py_INCREF
Line
Count
Source
256
4.93M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
4.93M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
108
        _Py_INCREF_IMMORTAL_STAT_INC();
290
108
        return;
291
108
    }
292
4.93M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
4.93M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
4.93M
#endif
308
4.93M
}
moduleobject.c:Py_INCREF
Line
Count
Source
256
7.33k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
7.33k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
5.81k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
5.81k
        return;
291
5.81k
    }
292
1.51k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
1.51k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
1.51k
#endif
308
1.51k
}
object.c:Py_INCREF
Line
Count
Source
256
918M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
918M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
614M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
614M
        return;
291
614M
    }
292
303M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
303M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
303M
#endif
308
303M
}
Unexecuted instantiation: obmalloc.c:Py_INCREF
Unexecuted instantiation: picklebufobject.c:Py_INCREF
rangeobject.c:Py_INCREF
Line
Count
Source
256
2.19M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
2.19M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.18M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.18M
        return;
291
2.18M
    }
292
17.5k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
17.5k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
17.5k
#endif
308
17.5k
}
sentinelobject.c:Py_INCREF
Line
Count
Source
256
376
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
376
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
298
        _Py_INCREF_IMMORTAL_STAT_INC();
290
298
        return;
291
298
    }
292
78
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
78
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
78
#endif
308
78
}
setobject.c:Py_INCREF
Line
Count
Source
256
24.1M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
24.1M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.64M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.64M
        return;
291
2.64M
    }
292
21.4M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
21.4M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
21.4M
#endif
308
21.4M
}
sliceobject.c:Py_INCREF
Line
Count
Source
256
143M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
143M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
83.5M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
83.5M
        return;
291
83.5M
    }
292
60.0M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
60.0M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
60.0M
#endif
308
60.0M
}
structseq.c:Py_INCREF
Line
Count
Source
256
96.9k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
96.9k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
88.1k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
88.1k
        return;
291
88.1k
    }
292
8.81k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
8.81k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
8.81k
#endif
308
8.81k
}
templateobject.c:Py_INCREF
Line
Count
Source
256
22
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
22
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
7
        _Py_INCREF_IMMORTAL_STAT_INC();
290
7
        return;
291
7
    }
292
15
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
15
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
15
#endif
308
15
}
tupleobject.c:Py_INCREF
Line
Count
Source
256
3.35G
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
3.35G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.49G
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.49G
        return;
291
2.49G
    }
292
861M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
861M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
861M
#endif
308
861M
}
typeobject.c:Py_INCREF
Line
Count
Source
256
319M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
319M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
183M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
183M
        return;
291
183M
    }
292
135M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
135M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
135M
#endif
308
135M
}
typevarobject.c:Py_INCREF
Line
Count
Source
256
2.21k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
2.21k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
786
        _Py_INCREF_IMMORTAL_STAT_INC();
290
786
        return;
291
786
    }
292
1.42k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
1.42k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
1.42k
#endif
308
1.42k
}
unicode_format.c:Py_INCREF
Line
Count
Source
256
6.60M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
6.60M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.07M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.07M
        return;
291
1.07M
    }
292
5.52M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
5.52M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
5.52M
#endif
308
5.52M
}
Unexecuted instantiation: unicode_formatter.c:Py_INCREF
unicode_writer.c:Py_INCREF
Line
Count
Source
256
8.73M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
8.73M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
8.62M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
8.62M
        return;
291
8.62M
    }
292
106k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
106k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
106k
#endif
308
106k
}
Unexecuted instantiation: unicodectype.c:Py_INCREF
unicodeobject.c:Py_INCREF
Line
Count
Source
256
760M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
760M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
680M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
680M
        return;
291
680M
    }
292
80.1M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
80.1M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
80.1M
#endif
308
80.1M
}
unionobject.c:Py_INCREF
Line
Count
Source
256
924
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
924
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
580
        _Py_INCREF_IMMORTAL_STAT_INC();
290
580
        return;
291
580
    }
292
344
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
344
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
344
#endif
308
344
}
weakrefobject.c:Py_INCREF
Line
Count
Source
256
1.28M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
1.28M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
85.0k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
85.0k
        return;
291
85.0k
    }
292
1.19M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
1.19M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
1.19M
#endif
308
1.19M
}
_warnings.c:Py_INCREF
Line
Count
Source
256
3.06M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
3.06M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.58M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.58M
        return;
291
1.58M
    }
292
1.48M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
1.48M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
1.48M
#endif
308
1.48M
}
bltinmodule.c:Py_INCREF
Line
Count
Source
256
69.3M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
69.3M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
34.3M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
34.3M
        return;
291
34.3M
    }
292
34.9M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
34.9M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
34.9M
#endif
308
34.9M
}
ceval.c:Py_INCREF
Line
Count
Source
256
1.19G
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
1.19G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
637M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
637M
        return;
291
637M
    }
292
560M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
560M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
560M
#endif
308
560M
}
codecs.c:Py_INCREF
Line
Count
Source
256
12.6M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
12.6M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
530k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
530k
        return;
291
530k
    }
292
12.0M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
12.0M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
12.0M
#endif
308
12.0M
}
codegen.c:Py_INCREF
Line
Count
Source
256
2.44k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
2.44k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.44k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.44k
        return;
291
2.44k
    }
292
0
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
0
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
0
#endif
308
0
}
compile.c:Py_INCREF
Line
Count
Source
256
78.0k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
78.0k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
38.2k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
38.2k
        return;
291
38.2k
    }
292
39.7k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
39.7k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
39.7k
#endif
308
39.7k
}
context.c:Py_INCREF
Line
Count
Source
256
66
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
66
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
29
        _Py_INCREF_IMMORTAL_STAT_INC();
290
29
        return;
291
29
    }
292
37
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
37
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
37
#endif
308
37
}
errors.c:Py_INCREF
Line
Count
Source
256
87.6M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
87.6M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
37.9M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
37.9M
        return;
291
37.9M
    }
292
49.7M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
49.7M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
49.7M
#endif
308
49.7M
}
flowgraph.c:Py_INCREF
Line
Count
Source
256
64.8k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
64.8k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
36.1k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
36.1k
        return;
291
36.1k
    }
292
28.7k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
28.7k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
28.7k
#endif
308
28.7k
}
frame.c:Py_INCREF
Line
Count
Source
256
56.8M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
56.8M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
0
        _Py_INCREF_IMMORTAL_STAT_INC();
290
0
        return;
291
0
    }
292
56.8M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
56.8M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
56.8M
#endif
308
56.8M
}
Unexecuted instantiation: future.c:Py_INCREF
gc.c:Py_INCREF
Line
Count
Source
256
520M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
520M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
451M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
451M
        return;
291
451M
    }
292
68.9M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
68.9M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
68.9M
#endif
308
68.9M
}
Unexecuted instantiation: gc_gil.c:Py_INCREF
getargs.c:Py_INCREF
Line
Count
Source
256
2.45M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
2.45M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.66M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.66M
        return;
291
1.66M
    }
292
795k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
795k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
795k
#endif
308
795k
}
Unexecuted instantiation: ceval_gil.c:Py_INCREF
Unexecuted instantiation: hamt.c:Py_INCREF
Unexecuted instantiation: hashtable.c:Py_INCREF
import.c:Py_INCREF
Line
Count
Source
256
11.1M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
11.1M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.45M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.45M
        return;
291
2.45M
    }
292
8.64M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
8.64M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
8.64M
#endif
308
8.64M
}
importdl.c:Py_INCREF
Line
Count
Source
256
989
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
989
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
862
        _Py_INCREF_IMMORTAL_STAT_INC();
290
862
        return;
291
862
    }
292
127
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
127
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
127
#endif
308
127
}
initconfig.c:Py_INCREF
Line
Count
Source
256
629
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
629
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
629
        _Py_INCREF_IMMORTAL_STAT_INC();
290
629
        return;
291
629
    }
292
0
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
0
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
0
#endif
308
0
}
Unexecuted instantiation: instrumentation.c:Py_INCREF
Unexecuted instantiation: instruction_sequence.c:Py_INCREF
intrinsics.c:Py_INCREF
Line
Count
Source
256
58.5k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
58.5k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
0
        _Py_INCREF_IMMORTAL_STAT_INC();
290
0
        return;
291
0
    }
292
58.5k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
58.5k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
58.5k
#endif
308
58.5k
}
Unexecuted instantiation: legacy_tracing.c:Py_INCREF
Unexecuted instantiation: lock.c:Py_INCREF
marshal.c:Py_INCREF
Line
Count
Source
256
1.75M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
1.75M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.56M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.56M
        return;
291
1.56M
    }
292
194k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
194k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
194k
#endif
308
194k
}
modsupport.c:Py_INCREF
Line
Count
Source
256
4.72M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
4.72M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
573k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
573k
        return;
291
573k
    }
292
4.14M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
4.14M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
4.14M
#endif
308
4.14M
}
Unexecuted instantiation: mysnprintf.c:Py_INCREF
Unexecuted instantiation: parking_lot.c:Py_INCREF
Unexecuted instantiation: preconfig.c:Py_INCREF
Unexecuted instantiation: pyarena.c:Py_INCREF
Unexecuted instantiation: pyctype.c:Py_INCREF
Unexecuted instantiation: pyhash.c:Py_INCREF
pylifecycle.c:Py_INCREF
Line
Count
Source
256
37
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
37
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
0
        _Py_INCREF_IMMORTAL_STAT_INC();
290
0
        return;
291
0
    }
292
37
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
37
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
37
#endif
308
37
}
Unexecuted instantiation: pymath.c:Py_INCREF
pystate.c:Py_INCREF
Line
Count
Source
256
710k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
710k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
0
        _Py_INCREF_IMMORTAL_STAT_INC();
290
0
        return;
291
0
    }
292
710k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
710k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
710k
#endif
308
710k
}
Unexecuted instantiation: pythonrun.c:Py_INCREF
Unexecuted instantiation: pytime.c:Py_INCREF
Unexecuted instantiation: qsbr.c:Py_INCREF
Unexecuted instantiation: bootstrap_hash.c:Py_INCREF
Unexecuted instantiation: specialize.c:Py_INCREF
Unexecuted instantiation: slots.c:Py_INCREF
Unexecuted instantiation: slots_generated.c:Py_INCREF
structmember.c:Py_INCREF
Line
Count
Source
256
3.66M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
3.66M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
793k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
793k
        return;
291
793k
    }
292
2.86M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
2.86M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
2.86M
#endif
308
2.86M
}
symtable.c:Py_INCREF
Line
Count
Source
256
111k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
111k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
110k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
110k
        return;
291
110k
    }
292
200
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
200
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
200
#endif
308
200
}
sysmodule.c:Py_INCREF
Line
Count
Source
256
30.0k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
30.0k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.28k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.28k
        return;
291
2.28k
    }
292
27.7k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
27.7k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
27.7k
#endif
308
27.7k
}
Unexecuted instantiation: thread.c:Py_INCREF
traceback.c:Py_INCREF
Line
Count
Source
256
85.6M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
85.6M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
0
        _Py_INCREF_IMMORTAL_STAT_INC();
290
0
        return;
291
0
    }
292
85.6M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
85.6M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
85.6M
#endif
308
85.6M
}
Unexecuted instantiation: tracemalloc.c:Py_INCREF
typecache.c:Py_INCREF
Line
Count
Source
256
3.28M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
3.28M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
3.22M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
3.22M
        return;
291
3.22M
    }
292
52.1k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
52.1k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
52.1k
#endif
308
52.1k
}
Unexecuted instantiation: getopt.c:Py_INCREF
Unexecuted instantiation: pystrcmp.c:Py_INCREF
Unexecuted instantiation: pystrtod.c:Py_INCREF
Unexecuted instantiation: pystrhex.c:Py_INCREF
Unexecuted instantiation: dtoa.c:Py_INCREF
Unexecuted instantiation: fileutils.c:Py_INCREF
suggestions.c:Py_INCREF
Line
Count
Source
256
25
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
25
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
0
        _Py_INCREF_IMMORTAL_STAT_INC();
290
0
        return;
291
0
    }
292
25
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
25
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
25
#endif
308
25
}
Unexecuted instantiation: perf_trampoline.c:Py_INCREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_INCREF
Unexecuted instantiation: jit_unwind.c:Py_INCREF
Unexecuted instantiation: remote_debugging.c:Py_INCREF
Unexecuted instantiation: dynload_shlib.c:Py_INCREF
Unexecuted instantiation: config.c:Py_INCREF
Unexecuted instantiation: gcmodule.c:Py_INCREF
Unexecuted instantiation: _asynciomodule.c:Py_INCREF
atexitmodule.c:Py_INCREF
Line
Count
Source
256
10
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
10
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
0
        _Py_INCREF_IMMORTAL_STAT_INC();
290
0
        return;
291
0
    }
292
10
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
10
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
10
#endif
308
10
}
Unexecuted instantiation: faulthandler.c:Py_INCREF
posixmodule.c:Py_INCREF
Line
Count
Source
256
1.94M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
1.94M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
407k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
407k
        return;
291
407k
    }
292
1.53M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
1.53M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
1.53M
#endif
308
1.53M
}
signalmodule.c:Py_INCREF
Line
Count
Source
256
2.36k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
2.36k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.36k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.36k
        return;
291
2.36k
    }
292
0
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
0
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
0
#endif
308
0
}
Unexecuted instantiation: _tracemalloc.c:Py_INCREF
Unexecuted instantiation: _suggestions.c:Py_INCREF
_datetimemodule.c:Py_INCREF
Line
Count
Source
256
43.2k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
43.2k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
30.7k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
30.7k
        return;
291
30.7k
    }
292
12.5k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
12.5k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
12.5k
#endif
308
12.5k
}
Unexecuted instantiation: _codecsmodule.c:Py_INCREF
_collectionsmodule.c:Py_INCREF
Line
Count
Source
256
24.5M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
24.5M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
20.3M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
20.3M
        return;
291
20.3M
    }
292
4.12M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
4.12M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
4.12M
#endif
308
4.12M
}
Unexecuted instantiation: errnomodule.c:Py_INCREF
_iomodule.c:Py_INCREF
Line
Count
Source
256
278
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
278
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
252
        _Py_INCREF_IMMORTAL_STAT_INC();
290
252
        return;
291
252
    }
292
26
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
26
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
26
#endif
308
26
}
iobase.c:Py_INCREF
Line
Count
Source
256
93.1k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
93.1k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
0
        _Py_INCREF_IMMORTAL_STAT_INC();
290
0
        return;
291
0
    }
292
93.1k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
93.1k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
93.1k
#endif
308
93.1k
}
Unexecuted instantiation: fileio.c:Py_INCREF
bytesio.c:Py_INCREF
Line
Count
Source
256
75.2k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
75.2k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.34k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.34k
        return;
291
1.34k
    }
292
73.9k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
73.9k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
73.9k
#endif
308
73.9k
}
bufferedio.c:Py_INCREF
Line
Count
Source
256
33.2k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
33.2k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
0
        _Py_INCREF_IMMORTAL_STAT_INC();
290
0
        return;
291
0
    }
292
33.2k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
33.2k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
33.2k
#endif
308
33.2k
}
textio.c:Py_INCREF
Line
Count
Source
256
686k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
686k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
20.2k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
20.2k
        return;
291
20.2k
    }
292
666k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
666k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
666k
#endif
308
666k
}
stringio.c:Py_INCREF
Line
Count
Source
256
22.3k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
22.3k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
92
        _Py_INCREF_IMMORTAL_STAT_INC();
290
92
        return;
291
92
    }
292
22.2k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
22.2k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
22.2k
#endif
308
22.2k
}
itertoolsmodule.c:Py_INCREF
Line
Count
Source
256
39.4k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
39.4k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
38.1k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
38.1k
        return;
291
38.1k
    }
292
1.32k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
1.32k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
1.32k
#endif
308
1.32k
}
sre.c:Py_INCREF
Line
Count
Source
256
149M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
149M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
56.4M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
56.4M
        return;
291
56.4M
    }
292
93.0M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
93.0M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
93.0M
#endif
308
93.0M
}
Unexecuted instantiation: _sysconfig.c:Py_INCREF
_threadmodule.c:Py_INCREF
Line
Count
Source
256
168
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
168
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
84
        _Py_INCREF_IMMORTAL_STAT_INC();
290
84
        return;
291
84
    }
292
84
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
84
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
84
#endif
308
84
}
Unexecuted instantiation: timemodule.c:Py_INCREF
Unexecuted instantiation: _typesmodule.c:Py_INCREF
Unexecuted instantiation: _typingmodule.c:Py_INCREF
Unexecuted instantiation: _weakref.c:Py_INCREF
_abc.c:Py_INCREF
Line
Count
Source
256
141k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
141k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
140k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
140k
        return;
291
140k
    }
292
392
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
392
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
392
#endif
308
392
}
_functoolsmodule.c:Py_INCREF
Line
Count
Source
256
530k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
530k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
8.19k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
8.19k
        return;
291
8.19k
    }
292
522k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
522k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
522k
#endif
308
522k
}
Unexecuted instantiation: _localemodule.c:Py_INCREF
Unexecuted instantiation: _opcode.c:Py_INCREF
_operator.c:Py_INCREF
Line
Count
Source
256
1.50M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
1.50M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.47M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.47M
        return;
291
1.47M
    }
292
32.5k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
32.5k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
32.5k
#endif
308
32.5k
}
Unexecuted instantiation: _stat.c:Py_INCREF
Unexecuted instantiation: symtablemodule.c:Py_INCREF
Unexecuted instantiation: pwdmodule.c:Py_INCREF
getpath.c:Py_INCREF
Line
Count
Source
256
296
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
296
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
296
        _Py_INCREF_IMMORTAL_STAT_INC();
290
296
        return;
291
296
    }
292
0
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
0
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
0
#endif
308
0
}
Unexecuted instantiation: frozen.c:Py_INCREF
Unexecuted instantiation: getbuildinfo.c:Py_INCREF
Unexecuted instantiation: peg_api.c:Py_INCREF
reader.c:Py_INCREF
Line
Count
Source
256
16
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
16
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
0
        _Py_INCREF_IMMORTAL_STAT_INC();
290
0
        return;
291
0
    }
292
16
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
16
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
16
#endif
308
16
}
Unexecuted instantiation: source.c:Py_INCREF
Unexecuted instantiation: helpers.c:Py_INCREF
Unexecuted instantiation: myreadline.c:Py_INCREF
abstract.c:Py_INCREF
Line
Count
Source
256
519M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
519M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
296M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
296M
        return;
291
296M
    }
292
223M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
223M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
223M
#endif
308
223M
}
Unexecuted instantiation: boolobject.c:Py_INCREF
Unexecuted instantiation: bytes_methods.c:Py_INCREF
bytearrayobject.c:Py_INCREF
Line
Count
Source
256
14.7M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
14.7M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
0
        _Py_INCREF_IMMORTAL_STAT_INC();
290
0
        return;
291
0
    }
292
14.7M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
14.7M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
14.7M
#endif
308
14.7M
}
Unexecuted instantiation: capsule.c:Py_INCREF
cellobject.c:Py_INCREF
Line
Count
Source
256
3.66M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
3.66M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
378k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
378k
        return;
291
378k
    }
292
3.28M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
3.28M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
3.28M
#endif
308
3.28M
}
classobject.c:Py_INCREF
Line
Count
Source
256
85.6M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
85.6M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
133
        _Py_INCREF_IMMORTAL_STAT_INC();
290
133
        return;
291
133
    }
292
85.6M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
85.6M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
85.6M
#endif
308
85.6M
}
codeobject.c:Py_INCREF
Line
Count
Source
256
1.73M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
1.73M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
773k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
773k
        return;
291
773k
    }
292
965k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
965k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
965k
#endif
308
965k
}
complexobject.c:Py_INCREF
Line
Count
Source
256
1.85k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
1.85k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.85k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.85k
        return;
291
1.85k
    }
292
0
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
0
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
0
#endif
308
0
}
descrobject.c:Py_INCREF
Line
Count
Source
256
24.9M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
24.9M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
72.7k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
72.7k
        return;
291
72.7k
    }
292
24.9M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
24.9M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
24.9M
#endif
308
24.9M
}
enumobject.c:Py_INCREF
Line
Count
Source
256
52.1M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
52.1M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
12
        _Py_INCREF_IMMORTAL_STAT_INC();
290
12
        return;
291
12
    }
292
52.1M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
52.1M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
52.1M
#endif
308
52.1M
}
genobject.c:Py_INCREF
Line
Count
Source
256
81.4M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
81.4M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
81.3M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
81.3M
        return;
291
81.3M
    }
292
155k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
155k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
155k
#endif
308
155k
}
Unexecuted instantiation: fileobject.c:Py_INCREF
frameobject.c:Py_INCREF
Line
Count
Source
256
20.6M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
20.6M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
168
        _Py_INCREF_IMMORTAL_STAT_INC();
290
168
        return;
291
168
    }
292
20.6M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
20.6M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
20.6M
#endif
308
20.6M
}
funcobject.c:Py_INCREF
Line
Count
Source
256
88.5M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
88.5M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
52.8M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
52.8M
        return;
291
52.8M
    }
292
35.6M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
35.6M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
35.6M
#endif
308
35.6M
}
interpolationobject.c:Py_INCREF
Line
Count
Source
256
12
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
12
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
12
        _Py_INCREF_IMMORTAL_STAT_INC();
290
12
        return;
291
12
    }
292
0
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
0
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
0
#endif
308
0
}
iterobject.c:Py_INCREF
Line
Count
Source
256
2.85M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
2.85M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
753k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
753k
        return;
291
753k
    }
292
2.10M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
2.10M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
2.10M
#endif
308
2.10M
}
lazyimportobject.c:Py_INCREF
Line
Count
Source
256
1.94k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
1.94k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
581
        _Py_INCREF_IMMORTAL_STAT_INC();
290
581
        return;
291
581
    }
292
1.36k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
1.36k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
1.36k
#endif
308
1.36k
}
odictobject.c:Py_INCREF
Line
Count
Source
256
14.0k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
14.0k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
10.1k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
10.1k
        return;
291
10.1k
    }
292
3.83k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
3.83k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
3.83k
#endif
308
3.83k
}
methodobject.c:Py_INCREF
Line
Count
Source
256
183M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
183M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
23.2M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
23.2M
        return;
291
23.2M
    }
292
159M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
159M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
159M
#endif
308
159M
}
Unexecuted instantiation: namespaceobject.c:Py_INCREF
Unexecuted instantiation: _contextvars.c:Py_INCREF
Unexecuted instantiation: _strptime.c:Py_INCREF
Python-ast.c:Py_INCREF
Line
Count
Source
256
530k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
530k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
248k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
248k
        return;
291
248k
    }
292
281k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
281k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
281k
#endif
308
281k
}
Unexecuted instantiation: Python-tokenize.c:Py_INCREF
Unexecuted instantiation: asdl.c:Py_INCREF
assemble.c:Py_INCREF
Line
Count
Source
256
19.9k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
19.9k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
19.9k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
19.9k
        return;
291
19.9k
    }
292
8
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
8
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
8
#endif
308
8
}
Unexecuted instantiation: ast.c:Py_INCREF
Unexecuted instantiation: ast_preprocess.c:Py_INCREF
Unexecuted instantiation: ast_unparse.c:Py_INCREF
Unexecuted instantiation: critical_section.c:Py_INCREF
Unexecuted instantiation: crossinterp.c:Py_INCREF
Unexecuted instantiation: getcopyright.c:Py_INCREF
Unexecuted instantiation: getplatform.c:Py_INCREF
Unexecuted instantiation: getversion.c:Py_INCREF
Unexecuted instantiation: optimizer.c:Py_INCREF
Unexecuted instantiation: pathconfig.c:Py_INCREF
pegen.c:Py_INCREF
Line
Count
Source
256
597
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
597
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
597
        _Py_INCREF_IMMORTAL_STAT_INC();
290
597
        return;
291
597
    }
292
0
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
0
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
0
#endif
308
0
}
pegen_errors.c:Py_INCREF
Line
Count
Source
256
60.9k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
60.9k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2
        return;
291
2
    }
292
60.8k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
60.8k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
60.8k
#endif
308
60.8k
}
Unexecuted instantiation: parser.c:Py_INCREF
Unexecuted instantiation: parser_invalid.c:Py_INCREF
Unexecuted instantiation: lexer.c:Py_INCREF
Unexecuted instantiation: layout.c:Py_INCREF
Unexecuted instantiation: number.c:Py_INCREF
Unexecuted instantiation: state.c:Py_INCREF
Unexecuted instantiation: string.c:Py_INCREF
Unexecuted instantiation: decoder.c:Py_INCREF
api.c:Py_INCREF
Line
Count
Source
256
74.1k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
74.1k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
762
        _Py_INCREF_IMMORTAL_STAT_INC();
290
762
        return;
291
762
    }
292
73.3k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
73.3k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
73.3k
#endif
308
73.3k
}
Unexecuted instantiation: getcompiler.c:Py_INCREF
Unexecuted instantiation: mystrtoul.c:Py_INCREF
Unexecuted instantiation: token.c:Py_INCREF
action_helpers.c:Py_INCREF
Line
Count
Source
256
5.80k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
5.80k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
4.69k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
4.69k
        return;
291
4.69k
    }
292
1.11k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
1.11k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
1.11k
#endif
308
1.11k
}
Unexecuted instantiation: string_parser.c:Py_INCREF
309
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
310
13.0G
#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
311
#endif
312
313
#if !defined(Py_LIMITED_API)
314
#if defined(Py_GIL_DISABLED)
315
// Implements Py_DECREF on objects not owned by the current thread.
316
PyAPI_FUNC(void) _Py_DecRefShared(PyObject *);
317
PyAPI_FUNC(void) _Py_DecRefSharedDebug(PyObject *, const char *, int);
318
319
// Called from Py_DECREF by the owning thread when the local refcount reaches
320
// zero. The call will deallocate the object if the shared refcount is also
321
// zero. Otherwise, the thread gives up ownership and merges the reference
322
// count fields.
323
PyAPI_FUNC(void) _Py_MergeZeroLocalRefcount(PyObject *);
324
#endif  // Py_GIL_DISABLED
325
#endif  // Py_LIMITED_API
326
327
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
328
    || defined(_Py_OPAQUE_PYOBJECT)
329
// Stable ABI implements Py_DECREF() as a function call on limited C API
330
// version 3.12 and newer, abi3t, and on Python built in debug mode.
331
// _Py_DecRef() was added to Python 3.10.0a7, use Py_DecRef() on older versions.
332
// Py_DecRef() accepts NULL whereas _Py_DecRef() doesn't.
333
10.1k
static inline void Py_DECREF(PyObject *op) {
334
10.1k
#  if Py_LIMITED_API+0 >= 0x030a00A7
335
10.1k
    _Py_DecRef(op);
336
#  else
337
    Py_DecRef(op);
338
#  endif
339
10.1k
}
errnomodule.c:Py_DECREF
Line
Count
Source
333
10.1k
static inline void Py_DECREF(PyObject *op) {
334
10.1k
#  if Py_LIMITED_API+0 >= 0x030a00A7
335
10.1k
    _Py_DecRef(op);
336
#  else
337
    Py_DecRef(op);
338
#  endif
339
10.1k
}
Unexecuted instantiation: _stat.c:Py_DECREF
340
10.1k
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
341
342
#elif defined(Py_GIL_DISABLED) && defined(Py_REF_DEBUG)
343
static inline void Py_DECREF(const char *filename, int lineno, PyObject *op)
344
{
345
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
346
    if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
347
        _Py_DECREF_IMMORTAL_STAT_INC();
348
        return;
349
    }
350
    _Py_DECREF_STAT_INC();
351
    _Py_DECREF_DecRefTotal();
352
    if (_Py_IsOwnedByCurrentThread(op)) {
353
        if (local == 0) {
354
            _Py_NegativeRefcount(filename, lineno, op);
355
        }
356
        local--;
357
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, local);
358
        if (local == 0) {
359
            _Py_MergeZeroLocalRefcount(op);
360
        }
361
    }
362
    else {
363
        _Py_DecRefSharedDebug(op, filename, lineno);
364
    }
365
}
366
#define Py_DECREF(op) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
367
368
#elif defined(Py_GIL_DISABLED)
369
static inline void Py_DECREF(PyObject *op)
370
{
371
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
372
    if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
373
        _Py_DECREF_IMMORTAL_STAT_INC();
374
        return;
375
    }
376
    _Py_DECREF_STAT_INC();
377
    if (_Py_IsOwnedByCurrentThread(op)) {
378
        local--;
379
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, local);
380
        if (local == 0) {
381
            _Py_MergeZeroLocalRefcount(op);
382
        }
383
    }
384
    else {
385
        _Py_DecRefShared(op);
386
    }
387
}
388
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
389
390
#elif defined(Py_REF_DEBUG)
391
392
static inline void Py_DECREF(const char *filename, int lineno, PyObject *op)
393
{
394
#if SIZEOF_VOID_P > 4
395
    /* If an object has been freed, it will have a negative full refcnt
396
     * If it has not it been freed, will have a very large refcnt */
397
    if (op->ob_refcnt_full <= 0 || op->ob_refcnt > (((uint32_t)-1) - (1<<20))) {
398
#else
399
    if (op->ob_refcnt <= 0) {
400
#endif
401
        _Py_NegativeRefcount(filename, lineno, op);
402
    }
403
    if (_Py_IsImmortal(op)) {
404
        _Py_DECREF_IMMORTAL_STAT_INC();
405
        return;
406
    }
407
    _Py_DECREF_STAT_INC();
408
    _Py_DECREF_DecRefTotal();
409
    if (--op->ob_refcnt == 0) {
410
        _Py_Dealloc(op);
411
    }
412
}
413
#define Py_DECREF(op) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
414
415
#else
416
417
static inline Py_ALWAYS_INLINE void Py_DECREF(PyObject *op)
418
12.8G
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
12.8G
    if (_Py_IsImmortal(op)) {
422
6.91G
        _Py_DECREF_IMMORTAL_STAT_INC();
423
6.91G
        return;
424
6.91G
    }
425
5.97G
    _Py_DECREF_STAT_INC();
426
5.97G
    if (--op->ob_refcnt == 0) {
427
1.18G
        _Py_Dealloc(op);
428
1.18G
    }
429
5.97G
}
bytesobject.c:Py_DECREF
Line
Count
Source
418
21.3M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
21.3M
    if (_Py_IsImmortal(op)) {
422
21.1M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
21.1M
        return;
424
21.1M
    }
425
216k
    _Py_DECREF_STAT_INC();
426
216k
    if (--op->ob_refcnt == 0) {
427
166k
        _Py_Dealloc(op);
428
166k
    }
429
216k
}
call.c:Py_DECREF
Line
Count
Source
418
199M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
199M
    if (_Py_IsImmortal(op)) {
422
81.6M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
81.6M
        return;
424
81.6M
    }
425
117M
    _Py_DECREF_STAT_INC();
426
117M
    if (--op->ob_refcnt == 0) {
427
74.7M
        _Py_Dealloc(op);
428
74.7M
    }
429
117M
}
exceptions.c:Py_DECREF
Line
Count
Source
418
210M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
210M
    if (_Py_IsImmortal(op)) {
422
45.8M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
45.8M
        return;
424
45.8M
    }
425
165M
    _Py_DECREF_STAT_INC();
426
165M
    if (--op->ob_refcnt == 0) {
427
98.1M
        _Py_Dealloc(op);
428
98.1M
    }
429
165M
}
genericaliasobject.c:Py_DECREF
Line
Count
Source
418
296
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
296
    if (_Py_IsImmortal(op)) {
422
168
        _Py_DECREF_IMMORTAL_STAT_INC();
423
168
        return;
424
168
    }
425
128
    _Py_DECREF_STAT_INC();
426
128
    if (--op->ob_refcnt == 0) {
427
128
        _Py_Dealloc(op);
428
128
    }
429
128
}
floatobject.c:Py_DECREF
Line
Count
Source
418
672k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
672k
    if (_Py_IsImmortal(op)) {
422
34.8k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
34.8k
        return;
424
34.8k
    }
425
637k
    _Py_DECREF_STAT_INC();
426
637k
    if (--op->ob_refcnt == 0) {
427
335
        _Py_Dealloc(op);
428
335
    }
429
637k
}
listobject.c:Py_DECREF
Line
Count
Source
418
2.75G
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
2.75G
    if (_Py_IsImmortal(op)) {
422
763M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
763M
        return;
424
763M
    }
425
1.99G
    _Py_DECREF_STAT_INC();
426
1.99G
    if (--op->ob_refcnt == 0) {
427
290M
        _Py_Dealloc(op);
428
290M
    }
429
1.99G
}
longobject.c:Py_DECREF
Line
Count
Source
418
33.6M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
33.6M
    if (_Py_IsImmortal(op)) {
422
25.4M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
25.4M
        return;
424
25.4M
    }
425
8.21M
    _Py_DECREF_STAT_INC();
426
8.21M
    if (--op->ob_refcnt == 0) {
427
2.21M
        _Py_Dealloc(op);
428
2.21M
    }
429
8.21M
}
dictobject.c:Py_DECREF
Line
Count
Source
418
713M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
713M
    if (_Py_IsImmortal(op)) {
422
343M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
343M
        return;
424
343M
    }
425
369M
    _Py_DECREF_STAT_INC();
426
369M
    if (--op->ob_refcnt == 0) {
427
93.7M
        _Py_Dealloc(op);
428
93.7M
    }
429
369M
}
memoryobject.c:Py_DECREF
Line
Count
Source
418
5.07M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
5.07M
    if (_Py_IsImmortal(op)) {
422
97.8k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
97.8k
        return;
424
97.8k
    }
425
4.98M
    _Py_DECREF_STAT_INC();
426
4.98M
    if (--op->ob_refcnt == 0) {
427
2.42M
        _Py_Dealloc(op);
428
2.42M
    }
429
4.98M
}
moduleobject.c:Py_DECREF
Line
Count
Source
418
2.81M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
2.81M
    if (_Py_IsImmortal(op)) {
422
2.78M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
2.78M
        return;
424
2.78M
    }
425
37.2k
    _Py_DECREF_STAT_INC();
426
37.2k
    if (--op->ob_refcnt == 0) {
427
3.49k
        _Py_Dealloc(op);
428
3.49k
    }
429
37.2k
}
object.c:Py_DECREF
Line
Count
Source
418
856M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
856M
    if (_Py_IsImmortal(op)) {
422
596M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
596M
        return;
424
596M
    }
425
259M
    _Py_DECREF_STAT_INC();
426
259M
    if (--op->ob_refcnt == 0) {
427
512k
        _Py_Dealloc(op);
428
512k
    }
429
259M
}
Unexecuted instantiation: obmalloc.c:Py_DECREF
Unexecuted instantiation: picklebufobject.c:Py_DECREF
rangeobject.c:Py_DECREF
Line
Count
Source
418
26.6M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
26.6M
    if (_Py_IsImmortal(op)) {
422
26.3M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
26.3M
        return;
424
26.3M
    }
425
295k
    _Py_DECREF_STAT_INC();
426
295k
    if (--op->ob_refcnt == 0) {
427
105k
        _Py_Dealloc(op);
428
105k
    }
429
295k
}
sentinelobject.c:Py_DECREF
Line
Count
Source
418
124
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
124
    if (_Py_IsImmortal(op)) {
422
87
        _Py_DECREF_IMMORTAL_STAT_INC();
423
87
        return;
424
87
    }
425
37
    _Py_DECREF_STAT_INC();
426
37
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
37
}
setobject.c:Py_DECREF
Line
Count
Source
418
34.4M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
34.4M
    if (_Py_IsImmortal(op)) {
422
17.4M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
17.4M
        return;
424
17.4M
    }
425
16.9M
    _Py_DECREF_STAT_INC();
426
16.9M
    if (--op->ob_refcnt == 0) {
427
3.64M
        _Py_Dealloc(op);
428
3.64M
    }
429
16.9M
}
sliceobject.c:Py_DECREF
Line
Count
Source
418
144M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
144M
    if (_Py_IsImmortal(op)) {
422
84.4M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
84.4M
        return;
424
84.4M
    }
425
60.0M
    _Py_DECREF_STAT_INC();
426
60.0M
    if (--op->ob_refcnt == 0) {
427
22.3k
        _Py_Dealloc(op);
428
22.3k
    }
429
60.0M
}
structseq.c:Py_DECREF
Line
Count
Source
418
4.77M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
4.77M
    if (_Py_IsImmortal(op)) {
422
1.45M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.45M
        return;
424
1.45M
    }
425
3.32M
    _Py_DECREF_STAT_INC();
426
3.32M
    if (--op->ob_refcnt == 0) {
427
3.03M
        _Py_Dealloc(op);
428
3.03M
    }
429
3.32M
}
templateobject.c:Py_DECREF
Line
Count
Source
418
22
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
22
    if (_Py_IsImmortal(op)) {
422
7
        _Py_DECREF_IMMORTAL_STAT_INC();
423
7
        return;
424
7
    }
425
15
    _Py_DECREF_STAT_INC();
426
15
    if (--op->ob_refcnt == 0) {
427
4
        _Py_Dealloc(op);
428
4
    }
429
15
}
tupleobject.c:Py_DECREF
Line
Count
Source
418
3.78G
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
3.78G
    if (_Py_IsImmortal(op)) {
422
2.60G
        _Py_DECREF_IMMORTAL_STAT_INC();
423
2.60G
        return;
424
2.60G
    }
425
1.18G
    _Py_DECREF_STAT_INC();
426
1.18G
    if (--op->ob_refcnt == 0) {
427
137M
        _Py_Dealloc(op);
428
137M
    }
429
1.18G
}
typeobject.c:Py_DECREF
Line
Count
Source
418
337M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
337M
    if (_Py_IsImmortal(op)) {
422
97.6M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
97.6M
        return;
424
97.6M
    }
425
239M
    _Py_DECREF_STAT_INC();
426
239M
    if (--op->ob_refcnt == 0) {
427
37.9M
        _Py_Dealloc(op);
428
37.9M
    }
429
239M
}
typevarobject.c:Py_DECREF
Line
Count
Source
418
180k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
180k
    if (_Py_IsImmortal(op)) {
422
368
        _Py_DECREF_IMMORTAL_STAT_INC();
423
368
        return;
424
368
    }
425
179k
    _Py_DECREF_STAT_INC();
426
179k
    if (--op->ob_refcnt == 0) {
427
812
        _Py_Dealloc(op);
428
812
    }
429
179k
}
unicode_format.c:Py_DECREF
Line
Count
Source
418
16.0M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
16.0M
    if (_Py_IsImmortal(op)) {
422
1.10M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.10M
        return;
424
1.10M
    }
425
14.9M
    _Py_DECREF_STAT_INC();
426
14.9M
    if (--op->ob_refcnt == 0) {
427
9.39M
        _Py_Dealloc(op);
428
9.39M
    }
429
14.9M
}
unicode_formatter.c:Py_DECREF
Line
Count
Source
418
22.3M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
22.3M
    if (_Py_IsImmortal(op)) {
422
16.7M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
16.7M
        return;
424
16.7M
    }
425
5.59M
    _Py_DECREF_STAT_INC();
426
5.59M
    if (--op->ob_refcnt == 0) {
427
5.59M
        _Py_Dealloc(op);
428
5.59M
    }
429
5.59M
}
unicode_writer.c:Py_DECREF
Line
Count
Source
418
38.2M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
38.2M
    if (_Py_IsImmortal(op)) {
422
12.7M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
12.7M
        return;
424
12.7M
    }
425
25.4M
    _Py_DECREF_STAT_INC();
426
25.4M
    if (--op->ob_refcnt == 0) {
427
20.7M
        _Py_Dealloc(op);
428
20.7M
    }
429
25.4M
}
Unexecuted instantiation: unicodectype.c:Py_DECREF
unicodeobject.c:Py_DECREF
Line
Count
Source
418
139M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
139M
    if (_Py_IsImmortal(op)) {
422
59.7M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
59.7M
        return;
424
59.7M
    }
425
79.3M
    _Py_DECREF_STAT_INC();
426
79.3M
    if (--op->ob_refcnt == 0) {
427
17.4M
        _Py_Dealloc(op);
428
17.4M
    }
429
79.3M
}
unionobject.c:Py_DECREF
Line
Count
Source
418
4.52k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
4.52k
    if (_Py_IsImmortal(op)) {
422
556
        _Py_DECREF_IMMORTAL_STAT_INC();
423
556
        return;
424
556
    }
425
3.96k
    _Py_DECREF_STAT_INC();
426
3.96k
    if (--op->ob_refcnt == 0) {
427
3.37k
        _Py_Dealloc(op);
428
3.37k
    }
429
3.96k
}
weakrefobject.c:Py_DECREF
Line
Count
Source
418
694k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
694k
    if (_Py_IsImmortal(op)) {
422
110k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
110k
        return;
424
110k
    }
425
583k
    _Py_DECREF_STAT_INC();
426
583k
    if (--op->ob_refcnt == 0) {
427
26.7k
        _Py_Dealloc(op);
428
26.7k
    }
429
583k
}
_warnings.c:Py_DECREF
Line
Count
Source
418
30.6M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
30.6M
    if (_Py_IsImmortal(op)) {
422
3.71M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
3.71M
        return;
424
3.71M
    }
425
26.9M
    _Py_DECREF_STAT_INC();
426
26.9M
    if (--op->ob_refcnt == 0) {
427
1.45M
        _Py_Dealloc(op);
428
1.45M
    }
429
26.9M
}
bltinmodule.c:Py_DECREF
Line
Count
Source
418
1.53G
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.53G
    if (_Py_IsImmortal(op)) {
422
1.35G
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.35G
        return;
424
1.35G
    }
425
179M
    _Py_DECREF_STAT_INC();
426
179M
    if (--op->ob_refcnt == 0) {
427
121M
        _Py_Dealloc(op);
428
121M
    }
429
179M
}
ceval.c:Py_DECREF
Line
Count
Source
418
111k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
111k
    if (_Py_IsImmortal(op)) {
422
15.9k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
15.9k
        return;
424
15.9k
    }
425
95.2k
    _Py_DECREF_STAT_INC();
426
95.2k
    if (--op->ob_refcnt == 0) {
427
12.9k
        _Py_Dealloc(op);
428
12.9k
    }
429
95.2k
}
codecs.c:Py_DECREF
Line
Count
Source
418
26.1M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
26.1M
    if (_Py_IsImmortal(op)) {
422
8.90M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
8.90M
        return;
424
8.90M
    }
425
17.2M
    _Py_DECREF_STAT_INC();
426
17.2M
    if (--op->ob_refcnt == 0) {
427
8.38M
        _Py_Dealloc(op);
428
8.38M
    }
429
17.2M
}
codegen.c:Py_DECREF
Line
Count
Source
418
59.8k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
59.8k
    if (_Py_IsImmortal(op)) {
422
52.5k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
52.5k
        return;
424
52.5k
    }
425
7.32k
    _Py_DECREF_STAT_INC();
426
7.32k
    if (--op->ob_refcnt == 0) {
427
234
        _Py_Dealloc(op);
428
234
    }
429
7.32k
}
compile.c:Py_DECREF
Line
Count
Source
418
335k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
335k
    if (_Py_IsImmortal(op)) {
422
174k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
174k
        return;
424
174k
    }
425
160k
    _Py_DECREF_STAT_INC();
426
160k
    if (--op->ob_refcnt == 0) {
427
55.9k
        _Py_Dealloc(op);
428
55.9k
    }
429
160k
}
context.c:Py_DECREF
Line
Count
Source
418
74
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
74
    if (_Py_IsImmortal(op)) {
422
37
        _Py_DECREF_IMMORTAL_STAT_INC();
423
37
        return;
424
37
    }
425
37
    _Py_DECREF_STAT_INC();
426
37
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
37
}
errors.c:Py_DECREF
Line
Count
Source
418
87.1M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
87.1M
    if (_Py_IsImmortal(op)) {
422
37.9M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
37.9M
        return;
424
37.9M
    }
425
49.2M
    _Py_DECREF_STAT_INC();
426
49.2M
    if (--op->ob_refcnt == 0) {
427
16.8M
        _Py_Dealloc(op);
428
16.8M
    }
429
49.2M
}
flowgraph.c:Py_DECREF
Line
Count
Source
418
60.8k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
60.8k
    if (_Py_IsImmortal(op)) {
422
37.8k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
37.8k
        return;
424
37.8k
    }
425
23.0k
    _Py_DECREF_STAT_INC();
426
23.0k
    if (--op->ob_refcnt == 0) {
427
130
        _Py_Dealloc(op);
428
130
    }
429
23.0k
}
frame.c:Py_DECREF
Line
Count
Source
418
52.7M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
52.7M
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
52.7M
    _Py_DECREF_STAT_INC();
426
52.7M
    if (--op->ob_refcnt == 0) {
427
14.5M
        _Py_Dealloc(op);
428
14.5M
    }
429
52.7M
}
future.c:Py_DECREF
Line
Count
Source
418
136
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
136
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
136
    _Py_DECREF_STAT_INC();
426
136
    if (--op->ob_refcnt == 0) {
427
111
        _Py_Dealloc(op);
428
111
    }
429
136
}
gc.c:Py_DECREF
Line
Count
Source
418
3.05M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
3.05M
    if (_Py_IsImmortal(op)) {
422
29.8k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
29.8k
        return;
424
29.8k
    }
425
3.02M
    _Py_DECREF_STAT_INC();
426
3.02M
    if (--op->ob_refcnt == 0) {
427
824k
        _Py_Dealloc(op);
428
824k
    }
429
3.02M
}
Unexecuted instantiation: gc_gil.c:Py_DECREF
getargs.c:Py_DECREF
Line
Count
Source
418
14.4M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
14.4M
    if (_Py_IsImmortal(op)) {
422
13.4M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
13.4M
        return;
424
13.4M
    }
425
936k
    _Py_DECREF_STAT_INC();
426
936k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
936k
}
Unexecuted instantiation: ceval_gil.c:Py_DECREF
Unexecuted instantiation: hamt.c:Py_DECREF
Unexecuted instantiation: hashtable.c:Py_DECREF
import.c:Py_DECREF
Line
Count
Source
418
18.3M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
18.3M
    if (_Py_IsImmortal(op)) {
422
3.11M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
3.11M
        return;
424
3.11M
    }
425
15.1M
    _Py_DECREF_STAT_INC();
426
15.1M
    if (--op->ob_refcnt == 0) {
427
178k
        _Py_Dealloc(op);
428
178k
    }
429
15.1M
}
importdl.c:Py_DECREF
Line
Count
Source
418
4.23k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
4.23k
    if (_Py_IsImmortal(op)) {
422
1.72k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.72k
        return;
424
1.72k
    }
425
2.50k
    _Py_DECREF_STAT_INC();
426
2.50k
    if (--op->ob_refcnt == 0) {
427
1.16k
        _Py_Dealloc(op);
428
1.16k
    }
429
2.50k
}
initconfig.c:Py_DECREF
Line
Count
Source
418
5.32k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
5.32k
    if (_Py_IsImmortal(op)) {
422
4.32k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
4.32k
        return;
424
4.32k
    }
425
999
    _Py_DECREF_STAT_INC();
426
999
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
999
}
instrumentation.c:Py_DECREF
Line
Count
Source
418
888
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
888
    if (_Py_IsImmortal(op)) {
422
555
        _Py_DECREF_IMMORTAL_STAT_INC();
423
555
        return;
424
555
    }
425
333
    _Py_DECREF_STAT_INC();
426
333
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
333
}
instruction_sequence.c:Py_DECREF
Line
Count
Source
418
1
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
1
    _Py_DECREF_STAT_INC();
426
1
    if (--op->ob_refcnt == 0) {
427
1
        _Py_Dealloc(op);
428
1
    }
429
1
}
intrinsics.c:Py_DECREF
Line
Count
Source
418
82.6k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
82.6k
    if (_Py_IsImmortal(op)) {
422
45.3k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
45.3k
        return;
424
45.3k
    }
425
37.2k
    _Py_DECREF_STAT_INC();
426
37.2k
    if (--op->ob_refcnt == 0) {
427
346
        _Py_Dealloc(op);
428
346
    }
429
37.2k
}
Unexecuted instantiation: legacy_tracing.c:Py_DECREF
Unexecuted instantiation: lock.c:Py_DECREF
marshal.c:Py_DECREF
Line
Count
Source
418
1.62M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.62M
    if (_Py_IsImmortal(op)) {
422
749k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
749k
        return;
424
749k
    }
425
879k
    _Py_DECREF_STAT_INC();
426
879k
    if (--op->ob_refcnt == 0) {
427
159k
        _Py_Dealloc(op);
428
159k
    }
429
879k
}
modsupport.c:Py_DECREF
Line
Count
Source
418
72.5k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
72.5k
    if (_Py_IsImmortal(op)) {
422
33.9k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
33.9k
        return;
424
33.9k
    }
425
38.5k
    _Py_DECREF_STAT_INC();
426
38.5k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
38.5k
}
Unexecuted instantiation: mysnprintf.c:Py_DECREF
Unexecuted instantiation: parking_lot.c:Py_DECREF
Unexecuted instantiation: preconfig.c:Py_DECREF
pyarena.c:Py_DECREF
Line
Count
Source
418
1.10M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.10M
    if (_Py_IsImmortal(op)) {
422
645k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
645k
        return;
424
645k
    }
425
457k
    _Py_DECREF_STAT_INC();
426
457k
    if (--op->ob_refcnt == 0) {
427
76.0k
        _Py_Dealloc(op);
428
76.0k
    }
429
457k
}
Unexecuted instantiation: pyctype.c:Py_DECREF
Unexecuted instantiation: pyhash.c:Py_DECREF
pylifecycle.c:Py_DECREF
Line
Count
Source
418
1.33k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.33k
    if (_Py_IsImmortal(op)) {
422
259
        _Py_DECREF_IMMORTAL_STAT_INC();
423
259
        return;
424
259
    }
425
1.07k
    _Py_DECREF_STAT_INC();
426
1.07k
    if (--op->ob_refcnt == 0) {
427
111
        _Py_Dealloc(op);
428
111
    }
429
1.07k
}
Unexecuted instantiation: pymath.c:Py_DECREF
Unexecuted instantiation: pystate.c:Py_DECREF
pythonrun.c:Py_DECREF
Line
Count
Source
418
1.82k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.82k
    if (_Py_IsImmortal(op)) {
422
428
        _Py_DECREF_IMMORTAL_STAT_INC();
423
428
        return;
424
428
    }
425
1.40k
    _Py_DECREF_STAT_INC();
426
1.40k
    if (--op->ob_refcnt == 0) {
427
560
        _Py_Dealloc(op);
428
560
    }
429
1.40k
}
Unexecuted instantiation: pytime.c:Py_DECREF
Unexecuted instantiation: qsbr.c:Py_DECREF
Unexecuted instantiation: bootstrap_hash.c:Py_DECREF
specialize.c:Py_DECREF
Line
Count
Source
418
2.45M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
2.45M
    if (_Py_IsImmortal(op)) {
422
1.31M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.31M
        return;
424
1.31M
    }
425
1.14M
    _Py_DECREF_STAT_INC();
426
1.14M
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
1.14M
}
Unexecuted instantiation: slots.c:Py_DECREF
Unexecuted instantiation: slots_generated.c:Py_DECREF
structmember.c:Py_DECREF
Line
Count
Source
418
1.77k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.77k
    if (_Py_IsImmortal(op)) {
422
1.02k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.02k
        return;
424
1.02k
    }
425
744
    _Py_DECREF_STAT_INC();
426
744
    if (--op->ob_refcnt == 0) {
427
539
        _Py_Dealloc(op);
428
539
    }
429
744
}
symtable.c:Py_DECREF
Line
Count
Source
418
353k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
353k
    if (_Py_IsImmortal(op)) {
422
150k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
150k
        return;
424
150k
    }
425
202k
    _Py_DECREF_STAT_INC();
426
202k
    if (--op->ob_refcnt == 0) {
427
108k
        _Py_Dealloc(op);
428
108k
    }
429
202k
}
sysmodule.c:Py_DECREF
Line
Count
Source
418
2.14M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
2.14M
    if (_Py_IsImmortal(op)) {
422
495k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
495k
        return;
424
495k
    }
425
1.64M
    _Py_DECREF_STAT_INC();
426
1.64M
    if (--op->ob_refcnt == 0) {
427
1.22M
        _Py_Dealloc(op);
428
1.22M
    }
429
1.64M
}
Unexecuted instantiation: thread.c:Py_DECREF
traceback.c:Py_DECREF
Line
Count
Source
418
171M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
171M
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
171M
    _Py_DECREF_STAT_INC();
426
171M
    if (--op->ob_refcnt == 0) {
427
50.5M
        _Py_Dealloc(op);
428
50.5M
    }
429
171M
}
Unexecuted instantiation: tracemalloc.c:Py_DECREF
typecache.c:Py_DECREF
Line
Count
Source
418
3.18M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
3.18M
    if (_Py_IsImmortal(op)) {
422
3.15M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
3.15M
        return;
424
3.15M
    }
425
35.6k
    _Py_DECREF_STAT_INC();
426
35.6k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
35.6k
}
Unexecuted instantiation: getopt.c:Py_DECREF
Unexecuted instantiation: pystrcmp.c:Py_DECREF
Unexecuted instantiation: pystrtod.c:Py_DECREF
Unexecuted instantiation: pystrhex.c:Py_DECREF
Unexecuted instantiation: dtoa.c:Py_DECREF
fileutils.c:Py_DECREF
Line
Count
Source
418
63.6k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
63.6k
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
63.6k
    _Py_DECREF_STAT_INC();
426
63.6k
    if (--op->ob_refcnt == 0) {
427
63.6k
        _Py_Dealloc(op);
428
63.6k
    }
429
63.6k
}
Unexecuted instantiation: suggestions.c:Py_DECREF
Unexecuted instantiation: perf_trampoline.c:Py_DECREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_DECREF
Unexecuted instantiation: jit_unwind.c:Py_DECREF
Unexecuted instantiation: remote_debugging.c:Py_DECREF
Unexecuted instantiation: dynload_shlib.c:Py_DECREF
Unexecuted instantiation: config.c:Py_DECREF
Unexecuted instantiation: gcmodule.c:Py_DECREF
Unexecuted instantiation: _asynciomodule.c:Py_DECREF
atexitmodule.c:Py_DECREF
Line
Count
Source
418
30
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
30
    if (_Py_IsImmortal(op)) {
422
10
        _Py_DECREF_IMMORTAL_STAT_INC();
423
10
        return;
424
10
    }
425
20
    _Py_DECREF_STAT_INC();
426
20
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
20
}
Unexecuted instantiation: faulthandler.c:Py_DECREF
posixmodule.c:Py_DECREF
Line
Count
Source
418
2.52M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
2.52M
    if (_Py_IsImmortal(op)) {
422
930k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
930k
        return;
424
930k
    }
425
1.59M
    _Py_DECREF_STAT_INC();
426
1.59M
    if (--op->ob_refcnt == 0) {
427
657k
        _Py_Dealloc(op);
428
657k
    }
429
1.59M
}
signalmodule.c:Py_DECREF
Line
Count
Source
418
74
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
74
    if (_Py_IsImmortal(op)) {
422
37
        _Py_DECREF_IMMORTAL_STAT_INC();
423
37
        return;
424
37
    }
425
37
    _Py_DECREF_STAT_INC();
426
37
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
37
}
Unexecuted instantiation: _tracemalloc.c:Py_DECREF
Unexecuted instantiation: _suggestions.c:Py_DECREF
_datetimemodule.c:Py_DECREF
Line
Count
Source
418
119k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
119k
    if (_Py_IsImmortal(op)) {
422
17.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
17.2k
        return;
424
17.2k
    }
425
101k
    _Py_DECREF_STAT_INC();
426
101k
    if (--op->ob_refcnt == 0) {
427
47.1k
        _Py_Dealloc(op);
428
47.1k
    }
429
101k
}
Unexecuted instantiation: _codecsmodule.c:Py_DECREF
_collectionsmodule.c:Py_DECREF
Line
Count
Source
418
935k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
935k
    if (_Py_IsImmortal(op)) {
422
583k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
583k
        return;
424
583k
    }
425
351k
    _Py_DECREF_STAT_INC();
426
351k
    if (--op->ob_refcnt == 0) {
427
41.3k
        _Py_Dealloc(op);
428
41.3k
    }
429
351k
}
_iomodule.c:Py_DECREF
Line
Count
Source
418
1.60M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.60M
    if (_Py_IsImmortal(op)) {
422
1.51M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.51M
        return;
424
1.51M
    }
425
93.9k
    _Py_DECREF_STAT_INC();
426
93.9k
    if (--op->ob_refcnt == 0) {
427
46.0k
        _Py_Dealloc(op);
428
46.0k
    }
429
93.9k
}
iobase.c:Py_DECREF
Line
Count
Source
418
1.85M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.85M
    if (_Py_IsImmortal(op)) {
422
1.71M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.71M
        return;
424
1.71M
    }
425
136k
    _Py_DECREF_STAT_INC();
426
136k
    if (--op->ob_refcnt == 0) {
427
92.3k
        _Py_Dealloc(op);
428
92.3k
    }
429
136k
}
fileio.c:Py_DECREF
Line
Count
Source
418
68.6k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
68.6k
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
68.6k
    _Py_DECREF_STAT_INC();
426
68.6k
    if (--op->ob_refcnt == 0) {
427
45.7k
        _Py_Dealloc(op);
428
45.7k
    }
429
68.6k
}
bytesio.c:Py_DECREF
Line
Count
Source
418
328k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
328k
    if (_Py_IsImmortal(op)) {
422
142k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
142k
        return;
424
142k
    }
425
186k
    _Py_DECREF_STAT_INC();
426
186k
    if (--op->ob_refcnt == 0) {
427
12.5k
        _Py_Dealloc(op);
428
12.5k
    }
429
186k
}
bufferedio.c:Py_DECREF
Line
Count
Source
418
7.49M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
7.49M
    if (_Py_IsImmortal(op)) {
422
7.17M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
7.17M
        return;
424
7.17M
    }
425
320k
    _Py_DECREF_STAT_INC();
426
320k
    if (--op->ob_refcnt == 0) {
427
255k
        _Py_Dealloc(op);
428
255k
    }
429
320k
}
textio.c:Py_DECREF
Line
Count
Source
418
942k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
942k
    if (_Py_IsImmortal(op)) {
422
178k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
178k
        return;
424
178k
    }
425
763k
    _Py_DECREF_STAT_INC();
426
763k
    if (--op->ob_refcnt == 0) {
427
144k
        _Py_Dealloc(op);
428
144k
    }
429
763k
}
stringio.c:Py_DECREF
Line
Count
Source
418
322k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
322k
    if (_Py_IsImmortal(op)) {
422
164k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
164k
        return;
424
164k
    }
425
158k
    _Py_DECREF_STAT_INC();
426
158k
    if (--op->ob_refcnt == 0) {
427
25.2k
        _Py_Dealloc(op);
428
25.2k
    }
429
158k
}
itertoolsmodule.c:Py_DECREF
Line
Count
Source
418
94.5k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
94.5k
    if (_Py_IsImmortal(op)) {
422
5.26k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
5.26k
        return;
424
5.26k
    }
425
89.2k
    _Py_DECREF_STAT_INC();
426
89.2k
    if (--op->ob_refcnt == 0) {
427
30.5k
        _Py_Dealloc(op);
428
30.5k
    }
429
89.2k
}
sre.c:Py_DECREF
Line
Count
Source
418
203M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
203M
    if (_Py_IsImmortal(op)) {
422
61.0M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
61.0M
        return;
424
61.0M
    }
425
142M
    _Py_DECREF_STAT_INC();
426
142M
    if (--op->ob_refcnt == 0) {
427
9.88M
        _Py_Dealloc(op);
428
9.88M
    }
429
142M
}
Unexecuted instantiation: _sysconfig.c:Py_DECREF
_threadmodule.c:Py_DECREF
Line
Count
Source
418
8.49M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
8.49M
    if (_Py_IsImmortal(op)) {
422
4
        _Py_DECREF_IMMORTAL_STAT_INC();
423
4
        return;
424
4
    }
425
8.49M
    _Py_DECREF_STAT_INC();
426
8.49M
    if (--op->ob_refcnt == 0) {
427
8
        _Py_Dealloc(op);
428
8
    }
429
8.49M
}
Unexecuted instantiation: timemodule.c:Py_DECREF
Unexecuted instantiation: _typesmodule.c:Py_DECREF
Unexecuted instantiation: _typingmodule.c:Py_DECREF
Unexecuted instantiation: _weakref.c:Py_DECREF
_abc.c:Py_DECREF
Line
Count
Source
418
561k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
561k
    if (_Py_IsImmortal(op)) {
422
91.9k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
91.9k
        return;
424
91.9k
    }
425
469k
    _Py_DECREF_STAT_INC();
426
469k
    if (--op->ob_refcnt == 0) {
427
7.73k
        _Py_Dealloc(op);
428
7.73k
    }
429
469k
}
_functoolsmodule.c:Py_DECREF
Line
Count
Source
418
855k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
855k
    if (_Py_IsImmortal(op)) {
422
170k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
170k
        return;
424
170k
    }
425
684k
    _Py_DECREF_STAT_INC();
426
684k
    if (--op->ob_refcnt == 0) {
427
329k
        _Py_Dealloc(op);
428
329k
    }
429
684k
}
Unexecuted instantiation: _localemodule.c:Py_DECREF
Unexecuted instantiation: _opcode.c:Py_DECREF
_operator.c:Py_DECREF
Line
Count
Source
418
718k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
718k
    if (_Py_IsImmortal(op)) {
422
359k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
359k
        return;
424
359k
    }
425
359k
    _Py_DECREF_STAT_INC();
426
359k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
359k
}
Unexecuted instantiation: symtablemodule.c:Py_DECREF
Unexecuted instantiation: pwdmodule.c:Py_DECREF
getpath.c:Py_DECREF
Line
Count
Source
418
1.51k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.51k
    if (_Py_IsImmortal(op)) {
422
444
        _Py_DECREF_IMMORTAL_STAT_INC();
423
444
        return;
424
444
    }
425
1.07k
    _Py_DECREF_STAT_INC();
426
1.07k
    if (--op->ob_refcnt == 0) {
427
333
        _Py_Dealloc(op);
428
333
    }
429
1.07k
}
Unexecuted instantiation: frozen.c:Py_DECREF
Unexecuted instantiation: getbuildinfo.c:Py_DECREF
Unexecuted instantiation: peg_api.c:Py_DECREF
reader.c:Py_DECREF
Line
Count
Source
418
16
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
16
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
16
    _Py_DECREF_STAT_INC();
426
16
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
16
}
Unexecuted instantiation: source.c:Py_DECREF
helpers.c:Py_DECREF
Line
Count
Source
418
31.3k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
31.3k
    if (_Py_IsImmortal(op)) {
422
2.56k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
2.56k
        return;
424
2.56k
    }
425
28.7k
    _Py_DECREF_STAT_INC();
426
28.7k
    if (--op->ob_refcnt == 0) {
427
16.4k
        _Py_Dealloc(op);
428
16.4k
    }
429
28.7k
}
Unexecuted instantiation: myreadline.c:Py_DECREF
abstract.c:Py_DECREF
Line
Count
Source
418
536M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
536M
    if (_Py_IsImmortal(op)) {
422
353M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
353M
        return;
424
353M
    }
425
182M
    _Py_DECREF_STAT_INC();
426
182M
    if (--op->ob_refcnt == 0) {
427
10.9M
        _Py_Dealloc(op);
428
10.9M
    }
429
182M
}
Unexecuted instantiation: boolobject.c:Py_DECREF
Unexecuted instantiation: bytes_methods.c:Py_DECREF
bytearrayobject.c:Py_DECREF
Line
Count
Source
418
23.9M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
23.9M
    if (_Py_IsImmortal(op)) {
422
6.90M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
6.90M
        return;
424
6.90M
    }
425
17.0M
    _Py_DECREF_STAT_INC();
426
17.0M
    if (--op->ob_refcnt == 0) {
427
17.0M
        _Py_Dealloc(op);
428
17.0M
    }
429
17.0M
}
capsule.c:Py_DECREF
Line
Count
Source
418
20
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
20
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
20
    _Py_DECREF_STAT_INC();
426
20
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
20
}
cellobject.c:Py_DECREF
Line
Count
Source
418
10.6M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
10.6M
    if (_Py_IsImmortal(op)) {
422
888k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
888k
        return;
424
888k
    }
425
9.81M
    _Py_DECREF_STAT_INC();
426
9.81M
    if (--op->ob_refcnt == 0) {
427
6.46M
        _Py_Dealloc(op);
428
6.46M
    }
429
9.81M
}
classobject.c:Py_DECREF
Line
Count
Source
418
85.6M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
85.6M
    if (_Py_IsImmortal(op)) {
422
133
        _Py_DECREF_IMMORTAL_STAT_INC();
423
133
        return;
424
133
    }
425
85.6M
    _Py_DECREF_STAT_INC();
426
85.6M
    if (--op->ob_refcnt == 0) {
427
5.80k
        _Py_Dealloc(op);
428
5.80k
    }
429
85.6M
}
codeobject.c:Py_DECREF
Line
Count
Source
418
717k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
717k
    if (_Py_IsImmortal(op)) {
422
358k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
358k
        return;
424
358k
    }
425
359k
    _Py_DECREF_STAT_INC();
426
359k
    if (--op->ob_refcnt == 0) {
427
292k
        _Py_Dealloc(op);
428
292k
    }
429
359k
}
Unexecuted instantiation: complexobject.c:Py_DECREF
descrobject.c:Py_DECREF
Line
Count
Source
418
52.8M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
52.8M
    if (_Py_IsImmortal(op)) {
422
8.21M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
8.21M
        return;
424
8.21M
    }
425
44.6M
    _Py_DECREF_STAT_INC();
426
44.6M
    if (--op->ob_refcnt == 0) {
427
9.67M
        _Py_Dealloc(op);
428
9.67M
    }
429
44.6M
}
enumobject.c:Py_DECREF
Line
Count
Source
418
170M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
170M
    if (_Py_IsImmortal(op)) {
422
36.8M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
36.8M
        return;
424
36.8M
    }
425
133M
    _Py_DECREF_STAT_INC();
426
133M
    if (--op->ob_refcnt == 0) {
427
65.8M
        _Py_Dealloc(op);
428
65.8M
    }
429
133M
}
genobject.c:Py_DECREF
Line
Count
Source
418
95.0M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
95.0M
    if (_Py_IsImmortal(op)) {
422
94.9M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
94.9M
        return;
424
94.9M
    }
425
80.2k
    _Py_DECREF_STAT_INC();
426
80.2k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
80.2k
}
fileobject.c:Py_DECREF
Line
Count
Source
418
240k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
240k
    if (_Py_IsImmortal(op)) {
422
234k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
234k
        return;
424
234k
    }
425
5.52k
    _Py_DECREF_STAT_INC();
426
5.52k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
5.52k
}
frameobject.c:Py_DECREF
Line
Count
Source
418
38.0M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
38.0M
    if (_Py_IsImmortal(op)) {
422
84
        _Py_DECREF_IMMORTAL_STAT_INC();
423
84
        return;
424
84
    }
425
38.0M
    _Py_DECREF_STAT_INC();
426
38.0M
    if (--op->ob_refcnt == 0) {
427
10.2M
        _Py_Dealloc(op);
428
10.2M
    }
429
38.0M
}
funcobject.c:Py_DECREF
Line
Count
Source
418
161M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
161M
    if (_Py_IsImmortal(op)) {
422
89.2M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
89.2M
        return;
424
89.2M
    }
425
72.2M
    _Py_DECREF_STAT_INC();
426
72.2M
    if (--op->ob_refcnt == 0) {
427
3.58M
        _Py_Dealloc(op);
428
3.58M
    }
429
72.2M
}
interpolationobject.c:Py_DECREF
Line
Count
Source
418
53
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
53
    if (_Py_IsImmortal(op)) {
422
16
        _Py_DECREF_IMMORTAL_STAT_INC();
423
16
        return;
424
16
    }
425
37
    _Py_DECREF_STAT_INC();
426
37
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
37
}
iterobject.c:Py_DECREF
Line
Count
Source
418
3.23M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
3.23M
    if (_Py_IsImmortal(op)) {
422
1.13M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.13M
        return;
424
1.13M
    }
425
2.10M
    _Py_DECREF_STAT_INC();
426
2.10M
    if (--op->ob_refcnt == 0) {
427
376k
        _Py_Dealloc(op);
428
376k
    }
429
2.10M
}
lazyimportobject.c:Py_DECREF
Line
Count
Source
418
332
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
332
    if (_Py_IsImmortal(op)) {
422
59
        _Py_DECREF_IMMORTAL_STAT_INC();
423
59
        return;
424
59
    }
425
273
    _Py_DECREF_STAT_INC();
426
273
    if (--op->ob_refcnt == 0) {
427
20
        _Py_Dealloc(op);
428
20
    }
429
273
}
odictobject.c:Py_DECREF
Line
Count
Source
418
19.3k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
19.3k
    if (_Py_IsImmortal(op)) {
422
10.9k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
10.9k
        return;
424
10.9k
    }
425
8.43k
    _Py_DECREF_STAT_INC();
426
8.43k
    if (--op->ob_refcnt == 0) {
427
2.72k
        _Py_Dealloc(op);
428
2.72k
    }
429
8.43k
}
methodobject.c:Py_DECREF
Line
Count
Source
418
183M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
183M
    if (_Py_IsImmortal(op)) {
422
23.1M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
23.1M
        return;
424
23.1M
    }
425
159M
    _Py_DECREF_STAT_INC();
426
159M
    if (--op->ob_refcnt == 0) {
427
37.7M
        _Py_Dealloc(op);
428
37.7M
    }
429
159M
}
namespaceobject.c:Py_DECREF
Line
Count
Source
418
65
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
65
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
65
    _Py_DECREF_STAT_INC();
426
65
    if (--op->ob_refcnt == 0) {
427
65
        _Py_Dealloc(op);
428
65
    }
429
65
}
Unexecuted instantiation: _contextvars.c:Py_DECREF
Unexecuted instantiation: _strptime.c:Py_DECREF
Python-ast.c:Py_DECREF
Line
Count
Source
418
3.20M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
3.20M
    if (_Py_IsImmortal(op)) {
422
1.92M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.92M
        return;
424
1.92M
    }
425
1.27M
    _Py_DECREF_STAT_INC();
426
1.27M
    if (--op->ob_refcnt == 0) {
427
245
        _Py_Dealloc(op);
428
245
    }
429
1.27M
}
Python-tokenize.c:Py_DECREF
Line
Count
Source
418
492
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
492
    if (_Py_IsImmortal(op)) {
422
192
        _Py_DECREF_IMMORTAL_STAT_INC();
423
192
        return;
424
192
    }
425
300
    _Py_DECREF_STAT_INC();
426
300
    if (--op->ob_refcnt == 0) {
427
16
        _Py_Dealloc(op);
428
16
    }
429
300
}
Unexecuted instantiation: asdl.c:Py_DECREF
assemble.c:Py_DECREF
Line
Count
Source
418
28.0k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
28.0k
    if (_Py_IsImmortal(op)) {
422
6.61k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
6.61k
        return;
424
6.61k
    }
425
21.4k
    _Py_DECREF_STAT_INC();
426
21.4k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
21.4k
}
Unexecuted instantiation: ast.c:Py_DECREF
Unexecuted instantiation: ast_preprocess.c:Py_DECREF
Unexecuted instantiation: ast_unparse.c:Py_DECREF
Unexecuted instantiation: critical_section.c:Py_DECREF
Unexecuted instantiation: crossinterp.c:Py_DECREF
Unexecuted instantiation: getcopyright.c:Py_DECREF
Unexecuted instantiation: getplatform.c:Py_DECREF
Unexecuted instantiation: getversion.c:Py_DECREF
Unexecuted instantiation: optimizer.c:Py_DECREF
Unexecuted instantiation: pathconfig.c:Py_DECREF
pegen.c:Py_DECREF
Line
Count
Source
418
133k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
133k
    if (_Py_IsImmortal(op)) {
422
4.55k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
4.55k
        return;
424
4.55k
    }
425
128k
    _Py_DECREF_STAT_INC();
426
128k
    if (--op->ob_refcnt == 0) {
427
125k
        _Py_Dealloc(op);
428
125k
    }
429
128k
}
pegen_errors.c:Py_DECREF
Line
Count
Source
418
252k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
252k
    if (_Py_IsImmortal(op)) {
422
697
        _Py_DECREF_IMMORTAL_STAT_INC();
423
697
        return;
424
697
    }
425
251k
    _Py_DECREF_STAT_INC();
426
251k
    if (--op->ob_refcnt == 0) {
427
836
        _Py_Dealloc(op);
428
836
    }
429
251k
}
Unexecuted instantiation: parser.c:Py_DECREF
Unexecuted instantiation: parser_invalid.c:Py_DECREF
lexer.c:Py_DECREF
Line
Count
Source
418
15.3k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
15.3k
    if (_Py_IsImmortal(op)) {
422
1.65k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.65k
        return;
424
1.65k
    }
425
13.6k
    _Py_DECREF_STAT_INC();
426
13.6k
    if (--op->ob_refcnt == 0) {
427
13.6k
        _Py_Dealloc(op);
428
13.6k
    }
429
13.6k
}
Unexecuted instantiation: layout.c:Py_DECREF
Unexecuted instantiation: number.c:Py_DECREF
state.c:Py_DECREF
Line
Count
Source
418
74.1k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
74.1k
    if (_Py_IsImmortal(op)) {
422
762
        _Py_DECREF_IMMORTAL_STAT_INC();
423
762
        return;
424
762
    }
425
73.3k
    _Py_DECREF_STAT_INC();
426
73.3k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
73.3k
}
Unexecuted instantiation: string.c:Py_DECREF
decoder.c:Py_DECREF
Line
Count
Source
418
3.50k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
3.50k
    if (_Py_IsImmortal(op)) {
422
44
        _Py_DECREF_IMMORTAL_STAT_INC();
423
44
        return;
424
44
    }
425
3.45k
    _Py_DECREF_STAT_INC();
426
3.45k
    if (--op->ob_refcnt == 0) {
427
3.16k
        _Py_Dealloc(op);
428
3.16k
    }
429
3.45k
}
Unexecuted instantiation: api.c:Py_DECREF
Unexecuted instantiation: getcompiler.c:Py_DECREF
Unexecuted instantiation: mystrtoul.c:Py_DECREF
Unexecuted instantiation: token.c:Py_DECREF
action_helpers.c:Py_DECREF
Line
Count
Source
418
264
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
264
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
264
    _Py_DECREF_STAT_INC();
426
264
    if (--op->ob_refcnt == 0) {
427
264
        _Py_Dealloc(op);
428
264
    }
429
264
}
string_parser.c:Py_DECREF
Line
Count
Source
418
7.57k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
7.57k
    if (_Py_IsImmortal(op)) {
422
364
        _Py_DECREF_IMMORTAL_STAT_INC();
423
364
        return;
424
364
    }
425
7.21k
    _Py_DECREF_STAT_INC();
426
7.21k
    if (--op->ob_refcnt == 0) {
427
7.21k
        _Py_Dealloc(op);
428
7.21k
    }
429
7.21k
}
430
12.9G
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
431
#endif
432
433
434
/* Safely decref `op` and set `op` to NULL, especially useful in tp_clear
435
 * and tp_dealloc implementations.
436
 *
437
 * Note that "the obvious" code can be deadly:
438
 *
439
 *     Py_XDECREF(op);
440
 *     op = NULL;
441
 *
442
 * Typically, `op` is something like self->containee, and `self` is done
443
 * using its `containee` member.  In the code sequence above, suppose
444
 * `containee` is non-NULL with a refcount of 1.  Its refcount falls to
445
 * 0 on the first line, which can trigger an arbitrary amount of code,
446
 * possibly including finalizers (like __del__ methods or weakref callbacks)
447
 * coded in Python, which in turn can release the GIL and allow other threads
448
 * to run, etc.  Such code may even invoke methods of `self` again, or cause
449
 * cyclic gc to trigger, but-- oops! --self->containee still points to the
450
 * object being torn down, and it may be in an insane state while being torn
451
 * down.  This has in fact been a rich historic source of miserable (rare &
452
 * hard-to-diagnose) segfaulting (and other) bugs.
453
 *
454
 * The safe way is:
455
 *
456
 *      Py_CLEAR(op);
457
 *
458
 * That arranges to set `op` to NULL _before_ decref'ing, so that any code
459
 * triggered as a side-effect of `op` getting torn down no longer believes
460
 * `op` points to a valid object.
461
 *
462
 * There are cases where it's safe to use the naive code, but they're brittle.
463
 * For example, if `op` points to a Python integer, you know that destroying
464
 * one of those can't cause problems -- but in part that relies on that
465
 * Python integers aren't currently weakly referencable.  Best practice is
466
 * to use Py_CLEAR() even if you can't think of a reason for why you need to.
467
 *
468
 * gh-98724: Use a temporary variable to only evaluate the macro argument once,
469
 * to avoid the duplication of side effects if the argument has side effects.
470
 *
471
 * gh-99701: If the PyObject* type is used with casting arguments to PyObject*,
472
 * the code can be miscompiled with strict aliasing because of type punning.
473
 * With strict aliasing, a compiler considers that two pointers of different
474
 * types cannot read or write the same memory which enables optimization
475
 * opportunities.
476
 *
477
 * If available, use _Py_TYPEOF() to use the 'op' type for temporary variables,
478
 * and so avoid type punning. Otherwise, use memcpy() which causes type erasure
479
 * and so prevents the compiler to reuse an old cached 'op' value after
480
 * Py_CLEAR().
481
 *
482
 * On C++11 and newer, use "auto". On MSVC, check also _MSVC_LANG since
483
 * __cplusplus is 199711L unless the /Zc:__cplusplus flag is used.
484
 */
485
#ifdef _Py_TYPEOF
486
#define Py_CLEAR(op) \
487
2.35G
    do { \
488
2.35G
        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
489
2.35G
        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
490
2.35G
        if (_tmp_old_op != _Py_NULL) { \
491
418M
            *_tmp_op_ptr = _Py_NULL; \
492
418M
            Py_DECREF(_tmp_old_op); \
493
418M
        } \
494
2.35G
    } while (0)
495
#elif defined(__cplusplus) && (__cplusplus >= 201103L ||  _MSVC_LANG >= 201103L)
496
#define Py_CLEAR(op) \
497
    do { \
498
        auto _tmp_op_ptr = &(op); \
499
        auto _tmp_old_op = (*_tmp_op_ptr); \
500
        if (_tmp_old_op != _Py_NULL) { \
501
            *_tmp_op_ptr = _Py_NULL; \
502
            Py_DECREF(_tmp_old_op); \
503
        } \
504
    } while (0)
505
#else
506
#define Py_CLEAR(op) \
507
    do { \
508
        PyObject **_tmp_op_ptr = _Py_CAST(PyObject**, &(op)); \
509
        PyObject *_tmp_old_op = (*_tmp_op_ptr); \
510
        if (_tmp_old_op != _Py_NULL) { \
511
            PyObject *_null_ptr = _Py_NULL; \
512
            memcpy(_tmp_op_ptr, &_null_ptr, sizeof(PyObject*)); \
513
            Py_DECREF(_tmp_old_op); \
514
        } \
515
    } while (0)
516
#endif
517
518
519
/* Safely decref `dst` and set `dst` to `src`.
520
 *
521
 * As in case of Py_CLEAR "the obvious" code can be deadly:
522
 *
523
 *     Py_DECREF(dst);
524
 *     dst = src;
525
 *
526
 * The safe way is:
527
 *
528
 *      Py_SETREF(dst, src);
529
 *
530
 * That arranges to set `dst` to `src` _before_ decref'ing, so that any code
531
 * triggered as a side-effect of `dst` getting torn down no longer believes
532
 * `dst` points to a valid object.
533
 *
534
 * Temporary variables are used to only evaluate macro arguments once and so
535
 * avoid the duplication of side effects. _Py_TYPEOF(), C++ auto, or memcpy()
536
 * is used to avoid a miscompilation caused by type punning. See Py_CLEAR()
537
 * comment for implementation details about type punning.
538
 *
539
 * The memcpy() implementation does not emit a compiler warning if 'src' has
540
 * not the same type than 'src': any pointer type is accepted for 'src'.
541
 */
542
#ifdef _Py_TYPEOF
543
#define Py_SETREF(dst, src) \
544
159M
    do { \
545
159M
        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
546
159M
        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
547
159M
        *_tmp_dst_ptr = (src); \
548
159M
        Py_DECREF(_tmp_old_dst); \
549
159M
    } while (0)
550
#elif defined(__cplusplus) && (__cplusplus >= 201103L ||  _MSVC_LANG >= 201103L)
551
#define Py_SETREF(dst, src) \
552
    do { \
553
        auto _tmp_dst_ptr = &(dst); \
554
        auto _tmp_old_dst = (*_tmp_dst_ptr); \
555
        *_tmp_dst_ptr = (src); \
556
        Py_DECREF(_tmp_old_dst); \
557
    } while (0)
558
#else
559
#define Py_SETREF(dst, src) \
560
    do { \
561
        PyObject **_tmp_dst_ptr = _Py_CAST(PyObject**, &(dst)); \
562
        PyObject *_tmp_old_dst = (*_tmp_dst_ptr); \
563
        PyObject *_tmp_src = _PyObject_CAST(src); \
564
        memcpy(_tmp_dst_ptr, &_tmp_src, sizeof(PyObject*)); \
565
        Py_DECREF(_tmp_old_dst); \
566
    } while (0)
567
#endif
568
569
/* Py_XSETREF() is a variant of Py_SETREF() that uses Py_XDECREF() instead of
570
 * Py_DECREF().
571
 */
572
#ifdef _Py_TYPEOF
573
#define Py_XSETREF(dst, src) \
574
240M
    do { \
575
240M
        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
576
240M
        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
577
240M
        *_tmp_dst_ptr = (src); \
578
240M
        Py_XDECREF(_tmp_old_dst); \
579
240M
    } while (0)
580
#elif defined(__cplusplus) && (__cplusplus >= 201103L ||  _MSVC_LANG >= 201103L)
581
#define Py_XSETREF(dst, src) \
582
    do { \
583
        auto _tmp_dst_ptr = &(dst); \
584
        auto _tmp_old_dst = (*_tmp_dst_ptr); \
585
        *_tmp_dst_ptr = (src); \
586
        Py_XDECREF(_tmp_old_dst); \
587
    } while (0)
588
#else
589
#define Py_XSETREF(dst, src) \
590
    do { \
591
        PyObject **_tmp_dst_ptr = _Py_CAST(PyObject**, &(dst)); \
592
        PyObject *_tmp_old_dst = (*_tmp_dst_ptr); \
593
        PyObject *_tmp_src = _PyObject_CAST(src); \
594
        memcpy(_tmp_dst_ptr, &_tmp_src, sizeof(PyObject*)); \
595
        Py_XDECREF(_tmp_old_dst); \
596
    } while (0)
597
#endif
598
599
600
/* Function to use in case the object pointer can be NULL: */
601
static inline void Py_XINCREF(PyObject *op)
602
2.32G
{
603
2.32G
    if (op != _Py_NULL) {
604
1.59G
        Py_INCREF(op);
605
1.59G
    }
606
2.32G
}
Unexecuted instantiation: bytesobject.c:Py_XINCREF
Unexecuted instantiation: call.c:Py_XINCREF
exceptions.c:Py_XINCREF
Line
Count
Source
602
113M
{
603
113M
    if (op != _Py_NULL) {
604
23.9M
        Py_INCREF(op);
605
23.9M
    }
606
113M
}
Unexecuted instantiation: genericaliasobject.c:Py_XINCREF
Unexecuted instantiation: floatobject.c:Py_XINCREF
listobject.c:Py_XINCREF
Line
Count
Source
602
240M
{
603
240M
    if (op != _Py_NULL) {
604
240M
        Py_INCREF(op);
605
240M
    }
606
240M
}
Unexecuted instantiation: longobject.c:Py_XINCREF
dictobject.c:Py_XINCREF
Line
Count
Source
602
945M
{
603
945M
    if (op != _Py_NULL) {
604
745M
        Py_INCREF(op);
605
745M
    }
606
945M
}
memoryobject.c:Py_XINCREF
Line
Count
Source
602
108
{
603
108
    if (op != _Py_NULL) {
604
108
        Py_INCREF(op);
605
108
    }
606
108
}
Unexecuted instantiation: moduleobject.c:Py_XINCREF
Unexecuted instantiation: object.c:Py_XINCREF
Unexecuted instantiation: obmalloc.c:Py_XINCREF
Unexecuted instantiation: picklebufobject.c:Py_XINCREF
Unexecuted instantiation: rangeobject.c:Py_XINCREF
sentinelobject.c:Py_XINCREF
Line
Count
Source
602
124
{
603
124
    if (op != _Py_NULL) {
604
4
        Py_INCREF(op);
605
4
    }
606
124
}
Unexecuted instantiation: setobject.c:Py_XINCREF
Unexecuted instantiation: sliceobject.c:Py_XINCREF
Unexecuted instantiation: structseq.c:Py_XINCREF
Unexecuted instantiation: templateobject.c:Py_XINCREF
Unexecuted instantiation: tupleobject.c:Py_XINCREF
typeobject.c:Py_XINCREF
Line
Count
Source
602
547k
{
603
547k
    if (op != _Py_NULL) {
604
270k
        Py_INCREF(op);
605
270k
    }
606
547k
}
typevarobject.c:Py_XINCREF
Line
Count
Source
602
1.22k
{
603
1.22k
    if (op != _Py_NULL) {
604
249
        Py_INCREF(op);
605
249
    }
606
1.22k
}
Unexecuted instantiation: unicode_format.c:Py_XINCREF
Unexecuted instantiation: unicode_formatter.c:Py_XINCREF
Unexecuted instantiation: unicode_writer.c:Py_XINCREF
Unexecuted instantiation: unicodectype.c:Py_XINCREF
Unexecuted instantiation: unicodeobject.c:Py_XINCREF
Unexecuted instantiation: unionobject.c:Py_XINCREF
weakrefobject.c:Py_XINCREF
Line
Count
Source
602
497k
{
603
497k
    if (op != _Py_NULL) {
604
130k
        Py_INCREF(op);
605
130k
    }
606
497k
}
Unexecuted instantiation: _warnings.c:Py_XINCREF
bltinmodule.c:Py_XINCREF
Line
Count
Source
602
1.11k
{
603
1.11k
    if (op != _Py_NULL) {
604
1.11k
        Py_INCREF(op);
605
1.11k
    }
606
1.11k
}
ceval.c:Py_XINCREF
Line
Count
Source
602
368M
{
603
368M
    if (op != _Py_NULL) {
604
166M
        Py_INCREF(op);
605
166M
    }
606
368M
}
Unexecuted instantiation: codecs.c:Py_XINCREF
Unexecuted instantiation: codegen.c:Py_XINCREF
compile.c:Py_XINCREF
Line
Count
Source
602
7.08k
{
603
7.08k
    if (op != _Py_NULL) {
604
2.47k
        Py_INCREF(op);
605
2.47k
    }
606
7.08k
}
context.c:Py_XINCREF
Line
Count
Source
602
164k
{
603
164k
    if (op != _Py_NULL) {
604
0
        Py_INCREF(op);
605
0
    }
606
164k
}
errors.c:Py_XINCREF
Line
Count
Source
602
41.5M
{
603
41.5M
    if (op != _Py_NULL) {
604
41.5M
        Py_INCREF(op);
605
41.5M
    }
606
41.5M
}
Unexecuted instantiation: flowgraph.c:Py_XINCREF
Unexecuted instantiation: frame.c:Py_XINCREF
Unexecuted instantiation: future.c:Py_XINCREF
Unexecuted instantiation: gc.c:Py_XINCREF
Unexecuted instantiation: gc_gil.c:Py_XINCREF
Unexecuted instantiation: getargs.c:Py_XINCREF
Unexecuted instantiation: ceval_gil.c:Py_XINCREF
Unexecuted instantiation: hamt.c:Py_XINCREF
Unexecuted instantiation: hashtable.c:Py_XINCREF
import.c:Py_XINCREF
Line
Count
Source
602
28.3k
{
603
28.3k
    if (op != _Py_NULL) {
604
22.6k
        Py_INCREF(op);
605
22.6k
    }
606
28.3k
}
Unexecuted instantiation: importdl.c:Py_XINCREF
Unexecuted instantiation: initconfig.c:Py_XINCREF
Unexecuted instantiation: instrumentation.c:Py_XINCREF
Unexecuted instantiation: instruction_sequence.c:Py_XINCREF
Unexecuted instantiation: intrinsics.c:Py_XINCREF
Unexecuted instantiation: legacy_tracing.c:Py_XINCREF
Unexecuted instantiation: lock.c:Py_XINCREF
Unexecuted instantiation: marshal.c:Py_XINCREF
Unexecuted instantiation: modsupport.c:Py_XINCREF
Unexecuted instantiation: mysnprintf.c:Py_XINCREF
Unexecuted instantiation: parking_lot.c:Py_XINCREF
Unexecuted instantiation: preconfig.c:Py_XINCREF
Unexecuted instantiation: pyarena.c:Py_XINCREF
Unexecuted instantiation: pyctype.c:Py_XINCREF
Unexecuted instantiation: pyhash.c:Py_XINCREF
Unexecuted instantiation: pylifecycle.c:Py_XINCREF
Unexecuted instantiation: pymath.c:Py_XINCREF
pystate.c:Py_XINCREF
Line
Count
Source
602
710k
{
603
710k
    if (op != _Py_NULL) {
604
710k
        Py_INCREF(op);
605
710k
    }
606
710k
}
Unexecuted instantiation: pythonrun.c:Py_XINCREF
Unexecuted instantiation: pytime.c:Py_XINCREF
Unexecuted instantiation: qsbr.c:Py_XINCREF
Unexecuted instantiation: bootstrap_hash.c:Py_XINCREF
Unexecuted instantiation: specialize.c:Py_XINCREF
Unexecuted instantiation: slots.c:Py_XINCREF
Unexecuted instantiation: slots_generated.c:Py_XINCREF
structmember.c:Py_XINCREF
Line
Count
Source
602
4.08M
{
603
4.08M
    if (op != _Py_NULL) {
604
3.65M
        Py_INCREF(op);
605
3.65M
    }
606
4.08M
}
Unexecuted instantiation: symtable.c:Py_XINCREF
sysmodule.c:Py_XINCREF
Line
Count
Source
602
26.5k
{
603
26.5k
    if (op != _Py_NULL) {
604
26.5k
        Py_INCREF(op);
605
26.5k
    }
606
26.5k
}
Unexecuted instantiation: thread.c:Py_XINCREF
traceback.c:Py_XINCREF
Line
Count
Source
602
126M
{
603
126M
    if (op != _Py_NULL) {
604
85.6M
        Py_INCREF(op);
605
85.6M
    }
606
126M
}
Unexecuted instantiation: tracemalloc.c:Py_XINCREF
Unexecuted instantiation: typecache.c:Py_XINCREF
Unexecuted instantiation: getopt.c:Py_XINCREF
Unexecuted instantiation: pystrcmp.c:Py_XINCREF
Unexecuted instantiation: pystrtod.c:Py_XINCREF
Unexecuted instantiation: pystrhex.c:Py_XINCREF
Unexecuted instantiation: dtoa.c:Py_XINCREF
Unexecuted instantiation: fileutils.c:Py_XINCREF
suggestions.c:Py_XINCREF
Line
Count
Source
602
111
{
603
111
    if (op != _Py_NULL) {
604
25
        Py_INCREF(op);
605
25
    }
606
111
}
Unexecuted instantiation: perf_trampoline.c:Py_XINCREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_XINCREF
Unexecuted instantiation: jit_unwind.c:Py_XINCREF
Unexecuted instantiation: remote_debugging.c:Py_XINCREF
Unexecuted instantiation: dynload_shlib.c:Py_XINCREF
Unexecuted instantiation: config.c:Py_XINCREF
Unexecuted instantiation: gcmodule.c:Py_XINCREF
Unexecuted instantiation: _asynciomodule.c:Py_XINCREF
Unexecuted instantiation: atexitmodule.c:Py_XINCREF
Unexecuted instantiation: faulthandler.c:Py_XINCREF
posixmodule.c:Py_XINCREF
Line
Count
Source
602
84.3k
{
603
84.3k
    if (op != _Py_NULL) {
604
84.3k
        Py_INCREF(op);
605
84.3k
    }
606
84.3k
}
Unexecuted instantiation: signalmodule.c:Py_XINCREF
Unexecuted instantiation: _tracemalloc.c:Py_XINCREF
Unexecuted instantiation: _suggestions.c:Py_XINCREF
_datetimemodule.c:Py_XINCREF
Line
Count
Source
602
163
{
603
163
    if (op != _Py_NULL) {
604
0
        Py_INCREF(op);
605
0
    }
606
163
}
Unexecuted instantiation: _codecsmodule.c:Py_XINCREF
_collectionsmodule.c:Py_XINCREF
Line
Count
Source
602
265k
{
603
265k
    if (op != _Py_NULL) {
604
265k
        Py_INCREF(op);
605
265k
    }
606
265k
}
Unexecuted instantiation: errnomodule.c:Py_XINCREF
Unexecuted instantiation: _iomodule.c:Py_XINCREF
Unexecuted instantiation: iobase.c:Py_XINCREF
Unexecuted instantiation: fileio.c:Py_XINCREF
Unexecuted instantiation: bytesio.c:Py_XINCREF
bufferedio.c:Py_XINCREF
Line
Count
Source
602
5.53k
{
603
5.53k
    if (op != _Py_NULL) {
604
5.53k
        Py_INCREF(op);
605
5.53k
    }
606
5.53k
}
Unexecuted instantiation: textio.c:Py_XINCREF
Unexecuted instantiation: stringio.c:Py_XINCREF
Unexecuted instantiation: itertoolsmodule.c:Py_XINCREF
Unexecuted instantiation: sre.c:Py_XINCREF
Unexecuted instantiation: _sysconfig.c:Py_XINCREF
_threadmodule.c:Py_XINCREF
Line
Count
Source
602
168
{
603
168
    if (op != _Py_NULL) {
604
84
        Py_INCREF(op);
605
84
    }
606
168
}
Unexecuted instantiation: timemodule.c:Py_XINCREF
Unexecuted instantiation: _typesmodule.c:Py_XINCREF
Unexecuted instantiation: _typingmodule.c:Py_XINCREF
Unexecuted instantiation: _weakref.c:Py_XINCREF
_abc.c:Py_XINCREF
Line
Count
Source
602
22.3k
{
603
22.3k
    if (op != _Py_NULL) {
604
22.3k
        Py_INCREF(op);
605
22.3k
    }
606
22.3k
}
_functoolsmodule.c:Py_XINCREF
Line
Count
Source
602
44
{
603
44
    if (op != _Py_NULL) {
604
0
        Py_INCREF(op);
605
0
    }
606
44
}
Unexecuted instantiation: _localemodule.c:Py_XINCREF
Unexecuted instantiation: _opcode.c:Py_XINCREF
Unexecuted instantiation: _operator.c:Py_XINCREF
Unexecuted instantiation: _stat.c:Py_XINCREF
Unexecuted instantiation: symtablemodule.c:Py_XINCREF
Unexecuted instantiation: pwdmodule.c:Py_XINCREF
Unexecuted instantiation: getpath.c:Py_XINCREF
Unexecuted instantiation: frozen.c:Py_XINCREF
Unexecuted instantiation: getbuildinfo.c:Py_XINCREF
Unexecuted instantiation: peg_api.c:Py_XINCREF
Unexecuted instantiation: reader.c:Py_XINCREF
Unexecuted instantiation: source.c:Py_XINCREF
Unexecuted instantiation: helpers.c:Py_XINCREF
Unexecuted instantiation: myreadline.c:Py_XINCREF
abstract.c:Py_XINCREF
Line
Count
Source
602
104M
{
603
104M
    if (op != _Py_NULL) {
604
102M
        Py_INCREF(op);
605
102M
    }
606
104M
}
Unexecuted instantiation: boolobject.c:Py_XINCREF
Unexecuted instantiation: bytes_methods.c:Py_XINCREF
Unexecuted instantiation: bytearrayobject.c:Py_XINCREF
Unexecuted instantiation: capsule.c:Py_XINCREF
cellobject.c:Py_XINCREF
Line
Count
Source
602
17.8M
{
603
17.8M
    if (op != _Py_NULL) {
604
3.66M
        Py_INCREF(op);
605
3.66M
    }
606
17.8M
}
Unexecuted instantiation: classobject.c:Py_XINCREF
codeobject.c:Py_XINCREF
Line
Count
Source
602
3.24k
{
603
3.24k
    if (op != _Py_NULL) {
604
3.24k
        Py_INCREF(op);
605
3.24k
    }
606
3.24k
}
Unexecuted instantiation: complexobject.c:Py_XINCREF
descrobject.c:Py_XINCREF
Line
Count
Source
602
111k
{
603
111k
    if (op != _Py_NULL) {
604
106k
        Py_INCREF(op);
605
106k
    }
606
111k
}
Unexecuted instantiation: enumobject.c:Py_XINCREF
genobject.c:Py_XINCREF
Line
Count
Source
602
76.3k
{
603
76.3k
    if (op != _Py_NULL) {
604
0
        Py_INCREF(op);
605
0
    }
606
76.3k
}
Unexecuted instantiation: fileobject.c:Py_XINCREF
frameobject.c:Py_XINCREF
Line
Count
Source
602
9.93M
{
603
9.93M
    if (op != _Py_NULL) {
604
9.93M
        Py_INCREF(op);
605
9.93M
    }
606
9.93M
}
funcobject.c:Py_XINCREF
Line
Count
Source
602
27.5k
{
603
27.5k
    if (op != _Py_NULL) {
604
4.93k
        Py_INCREF(op);
605
4.93k
    }
606
27.5k
}
Unexecuted instantiation: interpolationobject.c:Py_XINCREF
iterobject.c:Py_XINCREF
Line
Count
Source
602
376k
{
603
376k
    if (op != _Py_NULL) {
604
376k
        Py_INCREF(op);
605
376k
    }
606
376k
}
lazyimportobject.c:Py_XINCREF
Line
Count
Source
602
1.23k
{
603
1.23k
    if (op != _Py_NULL) {
604
782
        Py_INCREF(op);
605
782
    }
606
1.23k
}
Unexecuted instantiation: odictobject.c:Py_XINCREF
methodobject.c:Py_XINCREF
Line
Count
Source
602
344M
{
603
344M
    if (op != _Py_NULL) {
604
172M
        Py_INCREF(op);
605
172M
    }
606
344M
}
Unexecuted instantiation: namespaceobject.c:Py_XINCREF
Unexecuted instantiation: _contextvars.c:Py_XINCREF
Unexecuted instantiation: _strptime.c:Py_XINCREF
Unexecuted instantiation: Python-ast.c:Py_XINCREF
Unexecuted instantiation: Python-tokenize.c:Py_XINCREF
Unexecuted instantiation: asdl.c:Py_XINCREF
Unexecuted instantiation: assemble.c:Py_XINCREF
Unexecuted instantiation: ast.c:Py_XINCREF
Unexecuted instantiation: ast_preprocess.c:Py_XINCREF
Unexecuted instantiation: ast_unparse.c:Py_XINCREF
Unexecuted instantiation: critical_section.c:Py_XINCREF
Unexecuted instantiation: crossinterp.c:Py_XINCREF
Unexecuted instantiation: getcopyright.c:Py_XINCREF
Unexecuted instantiation: getplatform.c:Py_XINCREF
Unexecuted instantiation: getversion.c:Py_XINCREF
Unexecuted instantiation: optimizer.c:Py_XINCREF
Unexecuted instantiation: pathconfig.c:Py_XINCREF
Unexecuted instantiation: pegen.c:Py_XINCREF
Unexecuted instantiation: pegen_errors.c:Py_XINCREF
Unexecuted instantiation: parser.c:Py_XINCREF
Unexecuted instantiation: parser_invalid.c:Py_XINCREF
Unexecuted instantiation: lexer.c:Py_XINCREF
Unexecuted instantiation: layout.c:Py_XINCREF
Unexecuted instantiation: number.c:Py_XINCREF
Unexecuted instantiation: state.c:Py_XINCREF
Unexecuted instantiation: string.c:Py_XINCREF
Unexecuted instantiation: decoder.c:Py_XINCREF
api.c:Py_XINCREF
Line
Count
Source
602
146k
{
603
146k
    if (op != _Py_NULL) {
604
74.1k
        Py_INCREF(op);
605
74.1k
    }
606
146k
}
Unexecuted instantiation: getcompiler.c:Py_XINCREF
Unexecuted instantiation: mystrtoul.c:Py_XINCREF
Unexecuted instantiation: token.c:Py_XINCREF
Unexecuted instantiation: action_helpers.c:Py_XINCREF
Unexecuted instantiation: string_parser.c:Py_XINCREF
607
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
608
2.32G
#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
609
#endif
610
611
static inline void Py_XDECREF(PyObject *op)
612
8.72G
{
613
8.72G
    if (op != _Py_NULL) {
614
7.64G
        Py_DECREF(op);
615
7.64G
    }
616
8.72G
}
bytesobject.c:Py_XDECREF
Line
Count
Source
612
41
{
613
41
    if (op != _Py_NULL) {
614
37
        Py_DECREF(op);
615
37
    }
616
41
}
Unexecuted instantiation: call.c:Py_XDECREF
exceptions.c:Py_XDECREF
Line
Count
Source
612
130M
{
613
130M
    if (op != _Py_NULL) {
614
63.0M
        Py_DECREF(op);
615
63.0M
    }
616
130M
}
genericaliasobject.c:Py_XDECREF
Line
Count
Source
612
556
{
613
556
    if (op != _Py_NULL) {
614
296
        Py_DECREF(op);
615
296
    }
616
556
}
floatobject.c:Py_XDECREF
Line
Count
Source
612
1.24M
{
613
1.24M
    if (op != _Py_NULL) {
614
672k
        Py_DECREF(op);
615
672k
    }
616
1.24M
}
listobject.c:Py_XDECREF
Line
Count
Source
612
2.71G
{
613
2.71G
    if (op != _Py_NULL) {
614
2.67G
        Py_DECREF(op);
615
2.67G
    }
616
2.71G
}
longobject.c:Py_XDECREF
Line
Count
Source
612
22.0M
{
613
22.0M
    if (op != _Py_NULL) {
614
10.2M
        Py_DECREF(op);
615
10.2M
    }
616
22.0M
}
dictobject.c:Py_XDECREF
Line
Count
Source
612
483M
{
613
483M
    if (op != _Py_NULL) {
614
416M
        Py_DECREF(op);
615
416M
    }
616
483M
}
Unexecuted instantiation: memoryobject.c:Py_XDECREF
moduleobject.c:Py_XDECREF
Line
Count
Source
612
16.9k
{
613
16.9k
    if (op != _Py_NULL) {
614
9.17k
        Py_DECREF(op);
615
9.17k
    }
616
16.9k
}
object.c:Py_XDECREF
Line
Count
Source
612
9.14M
{
613
9.14M
    if (op != _Py_NULL) {
614
42.1k
        Py_DECREF(op);
615
42.1k
    }
616
9.14M
}
Unexecuted instantiation: obmalloc.c:Py_XDECREF
Unexecuted instantiation: picklebufobject.c:Py_XDECREF
rangeobject.c:Py_XDECREF
Line
Count
Source
612
111
{
613
111
    if (op != _Py_NULL) {
614
111
        Py_DECREF(op);
615
111
    }
616
111
}
Unexecuted instantiation: sentinelobject.c:Py_XDECREF
setobject.c:Py_XDECREF
Line
Count
Source
612
126k
{
613
126k
    if (op != _Py_NULL) {
614
187
        Py_DECREF(op);
615
187
    }
616
126k
}
Unexecuted instantiation: sliceobject.c:Py_XDECREF
structseq.c:Py_XDECREF
Line
Count
Source
612
4.52M
{
613
4.52M
    if (op != _Py_NULL) {
614
4.52M
        Py_DECREF(op);
615
4.52M
    }
616
4.52M
}
Unexecuted instantiation: templateobject.c:Py_XDECREF
tupleobject.c:Py_XDECREF
Line
Count
Source
612
3.79G
{
613
3.79G
    if (op != _Py_NULL) {
614
3.78G
        Py_DECREF(op);
615
3.78G
    }
616
3.79G
}
typeobject.c:Py_XDECREF
Line
Count
Source
612
26.2M
{
613
26.2M
    if (op != _Py_NULL) {
614
4.33M
        Py_DECREF(op);
615
4.33M
    }
616
26.2M
}
typevarobject.c:Py_XDECREF
Line
Count
Source
612
612
{
613
612
    if (op != _Py_NULL) {
614
436
        Py_DECREF(op);
615
436
    }
616
612
}
unicode_format.c:Py_XDECREF
Line
Count
Source
612
21.1M
{
613
21.1M
    if (op != _Py_NULL) {
614
48.4k
        Py_DECREF(op);
615
48.4k
    }
616
21.1M
}
unicode_formatter.c:Py_XDECREF
Line
Count
Source
612
27.9M
{
613
27.9M
    if (op != _Py_NULL) {
614
22.3M
        Py_DECREF(op);
615
22.3M
    }
616
27.9M
}
unicode_writer.c:Py_XDECREF
Line
Count
Source
612
71.8M
{
613
71.8M
    if (op != _Py_NULL) {
614
23.1M
        Py_DECREF(op);
615
23.1M
    }
616
71.8M
}
Unexecuted instantiation: unicodectype.c:Py_XDECREF
unicodeobject.c:Py_XDECREF
Line
Count
Source
612
108M
{
613
108M
    if (op != _Py_NULL) {
614
54.7M
        Py_DECREF(op);
615
54.7M
    }
616
108M
}
unionobject.c:Py_XDECREF
Line
Count
Source
612
2.14k
{
613
2.14k
    if (op != _Py_NULL) {
614
332
        Py_DECREF(op);
615
332
    }
616
2.14k
}
weakrefobject.c:Py_XDECREF
Line
Count
Source
612
495k
{
613
495k
    if (op != _Py_NULL) {
614
101k
        Py_DECREF(op);
615
101k
    }
616
495k
}
_warnings.c:Py_XDECREF
Line
Count
Source
612
4.33M
{
613
4.33M
    if (op != _Py_NULL) {
614
3.77M
        Py_DECREF(op);
615
3.77M
    }
616
4.33M
}
bltinmodule.c:Py_XDECREF
Line
Count
Source
612
12.3M
{
613
12.3M
    if (op != _Py_NULL) {
614
563k
        Py_DECREF(op);
615
563k
    }
616
12.3M
}
ceval.c:Py_XDECREF
Line
Count
Source
612
7.15M
{
613
7.15M
    if (op != _Py_NULL) {
614
111k
        Py_DECREF(op);
615
111k
    }
616
7.15M
}
codecs.c:Py_XDECREF
Line
Count
Source
612
141k
{
613
141k
    if (op != _Py_NULL) {
614
94.1k
        Py_DECREF(op);
615
94.1k
    }
616
141k
}
Unexecuted instantiation: codegen.c:Py_XDECREF
compile.c:Py_XDECREF
Line
Count
Source
612
10.8k
{
613
10.8k
    if (op != _Py_NULL) {
614
6.81k
        Py_DECREF(op);
615
6.81k
    }
616
10.8k
}
Unexecuted instantiation: context.c:Py_XDECREF
errors.c:Py_XDECREF
Line
Count
Source
612
264M
{
613
264M
    if (op != _Py_NULL) {
614
29.4M
        Py_DECREF(op);
615
29.4M
    }
616
264M
}
Unexecuted instantiation: flowgraph.c:Py_XDECREF
Unexecuted instantiation: frame.c:Py_XDECREF
future.c:Py_XDECREF
Line
Count
Source
612
111
{
613
111
    if (op != _Py_NULL) {
614
111
        Py_DECREF(op);
615
111
    }
616
111
}
gc.c:Py_XDECREF
Line
Count
Source
612
221k
{
613
221k
    if (op != _Py_NULL) {
614
4.08k
        Py_DECREF(op);
615
4.08k
    }
616
221k
}
Unexecuted instantiation: gc_gil.c:Py_XDECREF
Unexecuted instantiation: getargs.c:Py_XDECREF
Unexecuted instantiation: ceval_gil.c:Py_XDECREF
Unexecuted instantiation: hamt.c:Py_XDECREF
Unexecuted instantiation: hashtable.c:Py_XDECREF
import.c:Py_XDECREF
Line
Count
Source
612
6.94M
{
613
6.94M
    if (op != _Py_NULL) {
614
5.59M
        Py_DECREF(op);
615
5.59M
    }
616
6.94M
}
Unexecuted instantiation: importdl.c:Py_XDECREF
Unexecuted instantiation: initconfig.c:Py_XDECREF
Unexecuted instantiation: instrumentation.c:Py_XDECREF
instruction_sequence.c:Py_XDECREF
Line
Count
Source
612
8.00k
{
613
8.00k
    if (op != _Py_NULL) {
614
0
        Py_DECREF(op);
615
0
    }
616
8.00k
}
intrinsics.c:Py_XDECREF
Line
Count
Source
612
39.4k
{
613
39.4k
    if (op != _Py_NULL) {
614
39.4k
        Py_DECREF(op);
615
39.4k
    }
616
39.4k
}
Unexecuted instantiation: legacy_tracing.c:Py_XDECREF
Unexecuted instantiation: lock.c:Py_XDECREF
marshal.c:Py_XDECREF
Line
Count
Source
612
1.56M
{
613
1.56M
    if (op != _Py_NULL) {
614
1.56M
        Py_DECREF(op);
615
1.56M
    }
616
1.56M
}
modsupport.c:Py_XDECREF
Line
Count
Source
612
14.5k
{
613
14.5k
    if (op != _Py_NULL) {
614
14.5k
        Py_DECREF(op);
615
14.5k
    }
616
14.5k
}
Unexecuted instantiation: mysnprintf.c:Py_XDECREF
Unexecuted instantiation: parking_lot.c:Py_XDECREF
Unexecuted instantiation: preconfig.c:Py_XDECREF
Unexecuted instantiation: pyarena.c:Py_XDECREF
Unexecuted instantiation: pyctype.c:Py_XDECREF
Unexecuted instantiation: pyhash.c:Py_XDECREF
pylifecycle.c:Py_XDECREF
Line
Count
Source
612
222
{
613
222
    if (op != _Py_NULL) {
614
222
        Py_DECREF(op);
615
222
    }
616
222
}
Unexecuted instantiation: pymath.c:Py_XDECREF
Unexecuted instantiation: pystate.c:Py_XDECREF
pythonrun.c:Py_XDECREF
Line
Count
Source
612
69.6k
{
613
69.6k
    if (op != _Py_NULL) {
614
1.12k
        Py_DECREF(op);
615
1.12k
    }
616
69.6k
}
Unexecuted instantiation: pytime.c:Py_XDECREF
Unexecuted instantiation: qsbr.c:Py_XDECREF
Unexecuted instantiation: bootstrap_hash.c:Py_XDECREF
specialize.c:Py_XDECREF
Line
Count
Source
612
4.39M
{
613
4.39M
    if (op != _Py_NULL) {
614
2.45M
        Py_DECREF(op);
615
2.45M
    }
616
4.39M
}
Unexecuted instantiation: slots.c:Py_XDECREF
Unexecuted instantiation: slots_generated.c:Py_XDECREF
structmember.c:Py_XDECREF
Line
Count
Source
612
3.55M
{
613
3.55M
    if (op != _Py_NULL) {
614
1.77k
        Py_DECREF(op);
615
1.77k
    }
616
3.55M
}
symtable.c:Py_XDECREF
Line
Count
Source
612
99.6k
{
613
99.6k
    if (op != _Py_NULL) {
614
74.3k
        Py_DECREF(op);
615
74.3k
    }
616
99.6k
}
sysmodule.c:Py_XDECREF
Line
Count
Source
612
1.64M
{
613
1.64M
    if (op != _Py_NULL) {
614
1.23M
        Py_DECREF(op);
615
1.23M
    }
616
1.64M
}
Unexecuted instantiation: thread.c:Py_XDECREF
traceback.c:Py_XDECREF
Line
Count
Source
612
252M
{
613
252M
    if (op != _Py_NULL) {
614
171M
        Py_DECREF(op);
615
171M
    }
616
252M
}
Unexecuted instantiation: tracemalloc.c:Py_XDECREF
Unexecuted instantiation: typecache.c:Py_XDECREF
Unexecuted instantiation: getopt.c:Py_XDECREF
Unexecuted instantiation: pystrcmp.c:Py_XDECREF
Unexecuted instantiation: pystrtod.c:Py_XDECREF
Unexecuted instantiation: pystrhex.c:Py_XDECREF
Unexecuted instantiation: dtoa.c:Py_XDECREF
Unexecuted instantiation: fileutils.c:Py_XDECREF
Unexecuted instantiation: suggestions.c:Py_XDECREF
Unexecuted instantiation: perf_trampoline.c:Py_XDECREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_XDECREF
Unexecuted instantiation: jit_unwind.c:Py_XDECREF
Unexecuted instantiation: remote_debugging.c:Py_XDECREF
Unexecuted instantiation: dynload_shlib.c:Py_XDECREF
Unexecuted instantiation: config.c:Py_XDECREF
Unexecuted instantiation: gcmodule.c:Py_XDECREF
Unexecuted instantiation: _asynciomodule.c:Py_XDECREF
atexitmodule.c:Py_XDECREF
Line
Count
Source
612
20
{
613
20
    if (op != _Py_NULL) {
614
20
        Py_DECREF(op);
615
20
    }
616
20
}
Unexecuted instantiation: faulthandler.c:Py_XDECREF
posixmodule.c:Py_XDECREF
Line
Count
Source
612
786k
{
613
786k
    if (op != _Py_NULL) {
614
668k
        Py_DECREF(op);
615
668k
    }
616
786k
}
signalmodule.c:Py_XDECREF
Line
Count
Source
612
2.36k
{
613
2.36k
    if (op != _Py_NULL) {
614
0
        Py_DECREF(op);
615
0
    }
616
2.36k
}
Unexecuted instantiation: _tracemalloc.c:Py_XDECREF
Unexecuted instantiation: _suggestions.c:Py_XDECREF
_datetimemodule.c:Py_XDECREF
Line
Count
Source
612
19.0k
{
613
19.0k
    if (op != _Py_NULL) {
614
18.9k
        Py_DECREF(op);
615
18.9k
    }
616
19.0k
}
Unexecuted instantiation: _codecsmodule.c:Py_XDECREF
_collectionsmodule.c:Py_XDECREF
Line
Count
Source
612
265k
{
613
265k
    if (op != _Py_NULL) {
614
0
        Py_DECREF(op);
615
0
    }
616
265k
}
Unexecuted instantiation: errnomodule.c:Py_XDECREF
_iomodule.c:Py_XDECREF
Line
Count
Source
612
22
{
613
22
    if (op != _Py_NULL) {
614
11
        Py_DECREF(op);
615
11
    }
616
22
}
iobase.c:Py_XDECREF
Line
Count
Source
612
47.9k
{
613
47.9k
    if (op != _Py_NULL) {
614
47.9k
        Py_DECREF(op);
615
47.9k
    }
616
47.9k
}
Unexecuted instantiation: fileio.c:Py_XDECREF
bytesio.c:Py_XDECREF
Line
Count
Source
612
48.9k
{
613
48.9k
    if (op != _Py_NULL) {
614
48.9k
        Py_DECREF(op);
615
48.9k
    }
616
48.9k
}
bufferedio.c:Py_XDECREF
Line
Count
Source
612
44.3k
{
613
44.3k
    if (op != _Py_NULL) {
614
5.53k
        Py_DECREF(op);
615
5.53k
    }
616
44.3k
}
textio.c:Py_XDECREF
Line
Count
Source
612
33.6k
{
613
33.6k
    if (op != _Py_NULL) {
614
223
        Py_DECREF(op);
615
223
    }
616
33.6k
}
Unexecuted instantiation: stringio.c:Py_XDECREF
itertoolsmodule.c:Py_XDECREF
Line
Count
Source
612
32.7k
{
613
32.7k
    if (op != _Py_NULL) {
614
4.99k
        Py_DECREF(op);
615
4.99k
    }
616
32.7k
}
sre.c:Py_XDECREF
Line
Count
Source
612
63.8M
{
613
63.8M
    if (op != _Py_NULL) {
614
63.8M
        Py_DECREF(op);
615
63.8M
    }
616
63.8M
}
Unexecuted instantiation: _sysconfig.c:Py_XDECREF
Unexecuted instantiation: _threadmodule.c:Py_XDECREF
Unexecuted instantiation: timemodule.c:Py_XDECREF
Unexecuted instantiation: _typesmodule.c:Py_XDECREF
Unexecuted instantiation: _typingmodule.c:Py_XDECREF
Unexecuted instantiation: _weakref.c:Py_XDECREF
_abc.c:Py_XDECREF
Line
Count
Source
612
255k
{
613
255k
    if (op != _Py_NULL) {
614
232k
        Py_DECREF(op);
615
232k
    }
616
255k
}
_functoolsmodule.c:Py_XDECREF
Line
Count
Source
612
509
{
613
509
    if (op != _Py_NULL) {
614
0
        Py_DECREF(op);
615
0
    }
616
509
}
Unexecuted instantiation: _localemodule.c:Py_XDECREF
Unexecuted instantiation: _opcode.c:Py_XDECREF
Unexecuted instantiation: _operator.c:Py_XDECREF
Unexecuted instantiation: _stat.c:Py_XDECREF
Unexecuted instantiation: symtablemodule.c:Py_XDECREF
Unexecuted instantiation: pwdmodule.c:Py_XDECREF
getpath.c:Py_XDECREF
Line
Count
Source
612
296
{
613
296
    if (op != _Py_NULL) {
614
296
        Py_DECREF(op);
615
296
    }
616
296
}
Unexecuted instantiation: frozen.c:Py_XDECREF
Unexecuted instantiation: getbuildinfo.c:Py_XDECREF
Unexecuted instantiation: peg_api.c:Py_XDECREF
reader.c:Py_XDECREF
Line
Count
Source
612
152k
{
613
152k
    if (op != _Py_NULL) {
614
16
        Py_DECREF(op);
615
16
    }
616
152k
}
Unexecuted instantiation: source.c:Py_XDECREF
helpers.c:Py_XDECREF
Line
Count
Source
612
13.3k
{
613
13.3k
    if (op != _Py_NULL) {
614
12.4k
        Py_DECREF(op);
615
12.4k
    }
616
13.3k
}
Unexecuted instantiation: myreadline.c:Py_XDECREF
abstract.c:Py_XDECREF
Line
Count
Source
612
5.93M
{
613
5.93M
    if (op != _Py_NULL) {
614
145k
        Py_DECREF(op);
615
145k
    }
616
5.93M
}
Unexecuted instantiation: boolobject.c:Py_XDECREF
Unexecuted instantiation: bytes_methods.c:Py_XDECREF
bytearrayobject.c:Py_XDECREF
Line
Count
Source
612
23.9M
{
613
23.9M
    if (op != _Py_NULL) {
614
23.9M
        Py_DECREF(op);
615
23.9M
    }
616
23.9M
}
capsule.c:Py_XDECREF
Line
Count
Source
612
10
{
613
10
    if (op != _Py_NULL) {
614
10
        Py_DECREF(op);
615
10
    }
616
10
}
cellobject.c:Py_XDECREF
Line
Count
Source
612
17.8M
{
613
17.8M
    if (op != _Py_NULL) {
614
8.65M
        Py_DECREF(op);
615
8.65M
    }
616
17.8M
}
classobject.c:Py_XDECREF
Line
Count
Source
612
42.8M
{
613
42.8M
    if (op != _Py_NULL) {
614
42.8M
        Py_DECREF(op);
615
42.8M
    }
616
42.8M
}
codeobject.c:Py_XDECREF
Line
Count
Source
612
862k
{
613
862k
    if (op != _Py_NULL) {
614
700k
        Py_DECREF(op);
615
700k
    }
616
862k
}
Unexecuted instantiation: complexobject.c:Py_XDECREF
descrobject.c:Py_XDECREF
Line
Count
Source
612
34.4M
{
613
34.4M
    if (op != _Py_NULL) {
614
24.7M
        Py_DECREF(op);
615
24.7M
    }
616
34.4M
}
enumobject.c:Py_XDECREF
Line
Count
Source
612
36.2M
{
613
36.2M
    if (op != _Py_NULL) {
614
24.1M
        Py_DECREF(op);
615
24.1M
    }
616
36.2M
}
genobject.c:Py_XDECREF
Line
Count
Source
612
38.1k
{
613
38.1k
    if (op != _Py_NULL) {
614
0
        Py_DECREF(op);
615
0
    }
616
38.1k
}
Unexecuted instantiation: fileobject.c:Py_XDECREF
Unexecuted instantiation: frameobject.c:Py_XDECREF
funcobject.c:Py_XDECREF
Line
Count
Source
612
15.2k
{
613
15.2k
    if (op != _Py_NULL) {
614
8.84k
        Py_DECREF(op);
615
8.84k
    }
616
15.2k
}
Unexecuted instantiation: interpolationobject.c:Py_XDECREF
iterobject.c:Py_XDECREF
Line
Count
Source
612
3.23M
{
613
3.23M
    if (op != _Py_NULL) {
614
753k
        Py_DECREF(op);
615
753k
    }
616
3.23M
}
lazyimportobject.c:Py_XDECREF
Line
Count
Source
612
499
{
613
499
    if (op != _Py_NULL) {
614
82
        Py_DECREF(op);
615
82
    }
616
499
}
odictobject.c:Py_XDECREF
Line
Count
Source
612
11.3k
{
613
11.3k
    if (op != _Py_NULL) {
614
4.55k
        Py_DECREF(op);
615
4.55k
    }
616
11.3k
}
methodobject.c:Py_XDECREF
Line
Count
Source
612
516M
{
613
516M
    if (op != _Py_NULL) {
614
183M
        Py_DECREF(op);
615
183M
    }
616
516M
}
Unexecuted instantiation: namespaceobject.c:Py_XDECREF
Unexecuted instantiation: _contextvars.c:Py_XDECREF
Unexecuted instantiation: _strptime.c:Py_XDECREF
Python-ast.c:Py_XDECREF
Line
Count
Source
612
735
{
613
735
    if (op != _Py_NULL) {
614
490
        Py_DECREF(op);
615
490
    }
616
735
}
Python-tokenize.c:Py_XDECREF
Line
Count
Source
612
332
{
613
332
    if (op != _Py_NULL) {
614
316
        Py_DECREF(op);
615
316
    }
616
332
}
Unexecuted instantiation: asdl.c:Py_XDECREF
assemble.c:Py_XDECREF
Line
Count
Source
612
28.0k
{
613
28.0k
    if (op != _Py_NULL) {
614
28.0k
        Py_DECREF(op);
615
28.0k
    }
616
28.0k
}
Unexecuted instantiation: ast.c:Py_XDECREF
Unexecuted instantiation: ast_preprocess.c:Py_XDECREF
Unexecuted instantiation: ast_unparse.c:Py_XDECREF
Unexecuted instantiation: critical_section.c:Py_XDECREF
Unexecuted instantiation: crossinterp.c:Py_XDECREF
Unexecuted instantiation: getcopyright.c:Py_XDECREF
Unexecuted instantiation: getplatform.c:Py_XDECREF
Unexecuted instantiation: getversion.c:Py_XDECREF
Unexecuted instantiation: optimizer.c:Py_XDECREF
Unexecuted instantiation: pathconfig.c:Py_XDECREF
pegen.c:Py_XDECREF
Line
Count
Source
612
138k
{
613
138k
    if (op != _Py_NULL) {
614
1.53k
        Py_DECREF(op);
615
1.53k
    }
616
138k
}
pegen_errors.c:Py_XDECREF
Line
Count
Source
612
2.05k
{
613
2.05k
    if (op != _Py_NULL) {
614
1.37k
        Py_DECREF(op);
615
1.37k
    }
616
2.05k
}
Unexecuted instantiation: parser.c:Py_XDECREF
Unexecuted instantiation: parser_invalid.c:Py_XDECREF
Unexecuted instantiation: lexer.c:Py_XDECREF
Unexecuted instantiation: layout.c:Py_XDECREF
Unexecuted instantiation: number.c:Py_XDECREF
state.c:Py_XDECREF
Line
Count
Source
612
152k
{
613
152k
    if (op != _Py_NULL) {
614
74.1k
        Py_DECREF(op);
615
74.1k
    }
616
152k
}
Unexecuted instantiation: string.c:Py_XDECREF
Unexecuted instantiation: decoder.c:Py_XDECREF
api.c:Py_XDECREF
Line
Count
Source
612
146k
{
613
146k
    if (op != _Py_NULL) {
614
0
        Py_DECREF(op);
615
0
    }
616
146k
}
Unexecuted instantiation: getcompiler.c:Py_XDECREF
Unexecuted instantiation: mystrtoul.c:Py_XDECREF
Unexecuted instantiation: token.c:Py_XDECREF
Unexecuted instantiation: action_helpers.c:Py_XDECREF
Unexecuted instantiation: string_parser.c:Py_XDECREF
617
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
618
8.72G
#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
619
#endif
620
621
// Create a new strong reference to an object:
622
// increment the reference count of the object and return the object.
623
PyAPI_FUNC(PyObject*) Py_NewRef(PyObject *obj);
624
625
// Similar to Py_NewRef(), but the object can be NULL.
626
PyAPI_FUNC(PyObject*) Py_XNewRef(PyObject *obj);
627
628
static inline PyObject* _Py_NewRef(PyObject *obj)
629
8.38G
{
630
8.38G
    Py_INCREF(obj);
631
8.38G
    return obj;
632
8.38G
}
bytesobject.c:_Py_NewRef
Line
Count
Source
629
642k
{
630
642k
    Py_INCREF(obj);
631
642k
    return obj;
632
642k
}
call.c:_Py_NewRef
Line
Count
Source
629
28.3M
{
630
28.3M
    Py_INCREF(obj);
631
28.3M
    return obj;
632
28.3M
}
exceptions.c:_Py_NewRef
Line
Count
Source
629
167M
{
630
167M
    Py_INCREF(obj);
631
167M
    return obj;
632
167M
}
genericaliasobject.c:_Py_NewRef
Line
Count
Source
629
1.99k
{
630
1.99k
    Py_INCREF(obj);
631
1.99k
    return obj;
632
1.99k
}
Unexecuted instantiation: floatobject.c:_Py_NewRef
listobject.c:_Py_NewRef
Line
Count
Source
629
1.90G
{
630
1.90G
    Py_INCREF(obj);
631
1.90G
    return obj;
632
1.90G
}
longobject.c:_Py_NewRef
Line
Count
Source
629
20.2M
{
630
20.2M
    Py_INCREF(obj);
631
20.2M
    return obj;
632
20.2M
}
dictobject.c:_Py_NewRef
Line
Count
Source
629
658M
{
630
658M
    Py_INCREF(obj);
631
658M
    return obj;
632
658M
}
memoryobject.c:_Py_NewRef
Line
Count
Source
629
4.93M
{
630
4.93M
    Py_INCREF(obj);
631
4.93M
    return obj;
632
4.93M
}
moduleobject.c:_Py_NewRef
Line
Count
Source
629
7.33k
{
630
7.33k
    Py_INCREF(obj);
631
7.33k
    return obj;
632
7.33k
}
object.c:_Py_NewRef
Line
Count
Source
629
85.3M
{
630
85.3M
    Py_INCREF(obj);
631
85.3M
    return obj;
632
85.3M
}
Unexecuted instantiation: obmalloc.c:_Py_NewRef
Unexecuted instantiation: picklebufobject.c:_Py_NewRef
rangeobject.c:_Py_NewRef
Line
Count
Source
629
2.19M
{
630
2.19M
    Py_INCREF(obj);
631
2.19M
    return obj;
632
2.19M
}
sentinelobject.c:_Py_NewRef
Line
Count
Source
629
372
{
630
372
    Py_INCREF(obj);
631
372
    return obj;
632
372
}
setobject.c:_Py_NewRef
Line
Count
Source
629
19.8M
{
630
19.8M
    Py_INCREF(obj);
631
19.8M
    return obj;
632
19.8M
}
sliceobject.c:_Py_NewRef
Line
Count
Source
629
143M
{
630
143M
    Py_INCREF(obj);
631
143M
    return obj;
632
143M
}
structseq.c:_Py_NewRef
Line
Count
Source
629
96.9k
{
630
96.9k
    Py_INCREF(obj);
631
96.9k
    return obj;
632
96.9k
}
templateobject.c:_Py_NewRef
Line
Count
Source
629
22
{
630
22
    Py_INCREF(obj);
631
22
    return obj;
632
22
}
tupleobject.c:_Py_NewRef
Line
Count
Source
629
3.35G
{
630
3.35G
    Py_INCREF(obj);
631
3.35G
    return obj;
632
3.35G
}
typeobject.c:_Py_NewRef
Line
Count
Source
629
87.4M
{
630
87.4M
    Py_INCREF(obj);
631
87.4M
    return obj;
632
87.4M
}
typevarobject.c:_Py_NewRef
Line
Count
Source
629
1.96k
{
630
1.96k
    Py_INCREF(obj);
631
1.96k
    return obj;
632
1.96k
}
unicode_format.c:_Py_NewRef
Line
Count
Source
629
6.60M
{
630
6.60M
    Py_INCREF(obj);
631
6.60M
    return obj;
632
6.60M
}
Unexecuted instantiation: unicode_formatter.c:_Py_NewRef
unicode_writer.c:_Py_NewRef
Line
Count
Source
629
8.73M
{
630
8.73M
    Py_INCREF(obj);
631
8.73M
    return obj;
632
8.73M
}
Unexecuted instantiation: unicodectype.c:_Py_NewRef
unicodeobject.c:_Py_NewRef
Line
Count
Source
629
131M
{
630
131M
    Py_INCREF(obj);
631
131M
    return obj;
632
131M
}
unionobject.c:_Py_NewRef
Line
Count
Source
629
924
{
630
924
    Py_INCREF(obj);
631
924
    return obj;
632
924
}
Unexecuted instantiation: weakrefobject.c:_Py_NewRef
_warnings.c:_Py_NewRef
Line
Count
Source
629
1.58M
{
630
1.58M
    Py_INCREF(obj);
631
1.58M
    return obj;
632
1.58M
}
bltinmodule.c:_Py_NewRef
Line
Count
Source
629
33.4M
{
630
33.4M
    Py_INCREF(obj);
631
33.4M
    return obj;
632
33.4M
}
ceval.c:_Py_NewRef
Line
Count
Source
629
814M
{
630
814M
    Py_INCREF(obj);
631
814M
    return obj;
632
814M
}
codecs.c:_Py_NewRef
Line
Count
Source
629
12.6M
{
630
12.6M
    Py_INCREF(obj);
631
12.6M
    return obj;
632
12.6M
}
codegen.c:_Py_NewRef
Line
Count
Source
629
2.41k
{
630
2.41k
    Py_INCREF(obj);
631
2.41k
    return obj;
632
2.41k
}
compile.c:_Py_NewRef
Line
Count
Source
629
66.0k
{
630
66.0k
    Py_INCREF(obj);
631
66.0k
    return obj;
632
66.0k
}
context.c:_Py_NewRef
Line
Count
Source
629
66
{
630
66
    Py_INCREF(obj);
631
66
    return obj;
632
66
}
errors.c:_Py_NewRef
Line
Count
Source
629
41.6M
{
630
41.6M
    Py_INCREF(obj);
631
41.6M
    return obj;
632
41.6M
}
flowgraph.c:_Py_NewRef
Line
Count
Source
629
64.8k
{
630
64.8k
    Py_INCREF(obj);
631
64.8k
    return obj;
632
64.8k
}
frame.c:_Py_NewRef
Line
Count
Source
629
38.0M
{
630
38.0M
    Py_INCREF(obj);
631
38.0M
    return obj;
632
38.0M
}
Unexecuted instantiation: future.c:_Py_NewRef
Unexecuted instantiation: gc.c:_Py_NewRef
Unexecuted instantiation: gc_gil.c:_Py_NewRef
getargs.c:_Py_NewRef
Line
Count
Source
629
2.45M
{
630
2.45M
    Py_INCREF(obj);
631
2.45M
    return obj;
632
2.45M
}
Unexecuted instantiation: ceval_gil.c:_Py_NewRef
Unexecuted instantiation: hamt.c:_Py_NewRef
Unexecuted instantiation: hashtable.c:_Py_NewRef
import.c:_Py_NewRef
Line
Count
Source
629
4.91M
{
630
4.91M
    Py_INCREF(obj);
631
4.91M
    return obj;
632
4.91M
}
importdl.c:_Py_NewRef
Line
Count
Source
629
37
{
630
37
    Py_INCREF(obj);
631
37
    return obj;
632
37
}
initconfig.c:_Py_NewRef
Line
Count
Source
629
629
{
630
629
    Py_INCREF(obj);
631
629
    return obj;
632
629
}
Unexecuted instantiation: instrumentation.c:_Py_NewRef
Unexecuted instantiation: instruction_sequence.c:_Py_NewRef
intrinsics.c:_Py_NewRef
Line
Count
Source
629
58.5k
{
630
58.5k
    Py_INCREF(obj);
631
58.5k
    return obj;
632
58.5k
}
Unexecuted instantiation: legacy_tracing.c:_Py_NewRef
Unexecuted instantiation: lock.c:_Py_NewRef
marshal.c:_Py_NewRef
Line
Count
Source
629
1.75M
{
630
1.75M
    Py_INCREF(obj);
631
1.75M
    return obj;
632
1.75M
}
modsupport.c:_Py_NewRef
Line
Count
Source
629
18
{
630
18
    Py_INCREF(obj);
631
18
    return obj;
632
18
}
Unexecuted instantiation: mysnprintf.c:_Py_NewRef
Unexecuted instantiation: parking_lot.c:_Py_NewRef
Unexecuted instantiation: preconfig.c:_Py_NewRef
Unexecuted instantiation: pyarena.c:_Py_NewRef
Unexecuted instantiation: pyctype.c:_Py_NewRef
Unexecuted instantiation: pyhash.c:_Py_NewRef
pylifecycle.c:_Py_NewRef
Line
Count
Source
629
37
{
630
37
    Py_INCREF(obj);
631
37
    return obj;
632
37
}
Unexecuted instantiation: pymath.c:_Py_NewRef
Unexecuted instantiation: pystate.c:_Py_NewRef
Unexecuted instantiation: pythonrun.c:_Py_NewRef
Unexecuted instantiation: pytime.c:_Py_NewRef
Unexecuted instantiation: qsbr.c:_Py_NewRef
Unexecuted instantiation: bootstrap_hash.c:_Py_NewRef
Unexecuted instantiation: specialize.c:_Py_NewRef
Unexecuted instantiation: slots.c:_Py_NewRef
Unexecuted instantiation: slots_generated.c:_Py_NewRef
Unexecuted instantiation: structmember.c:_Py_NewRef
symtable.c:_Py_NewRef
Line
Count
Source
629
111k
{
630
111k
    Py_INCREF(obj);
631
111k
    return obj;
632
111k
}
sysmodule.c:_Py_NewRef
Line
Count
Source
629
1.90k
{
630
1.90k
    Py_INCREF(obj);
631
1.90k
    return obj;
632
1.90k
}
Unexecuted instantiation: thread.c:_Py_NewRef
Unexecuted instantiation: traceback.c:_Py_NewRef
Unexecuted instantiation: tracemalloc.c:_Py_NewRef
Unexecuted instantiation: typecache.c:_Py_NewRef
Unexecuted instantiation: getopt.c:_Py_NewRef
Unexecuted instantiation: pystrcmp.c:_Py_NewRef
Unexecuted instantiation: pystrtod.c:_Py_NewRef
Unexecuted instantiation: pystrhex.c:_Py_NewRef
Unexecuted instantiation: dtoa.c:_Py_NewRef
Unexecuted instantiation: fileutils.c:_Py_NewRef
Unexecuted instantiation: suggestions.c:_Py_NewRef
Unexecuted instantiation: perf_trampoline.c:_Py_NewRef
Unexecuted instantiation: perf_jit_trampoline.c:_Py_NewRef
Unexecuted instantiation: jit_unwind.c:_Py_NewRef
Unexecuted instantiation: remote_debugging.c:_Py_NewRef
Unexecuted instantiation: dynload_shlib.c:_Py_NewRef
Unexecuted instantiation: config.c:_Py_NewRef
Unexecuted instantiation: gcmodule.c:_Py_NewRef
Unexecuted instantiation: _asynciomodule.c:_Py_NewRef
atexitmodule.c:_Py_NewRef
Line
Count
Source
629
10
{
630
10
    Py_INCREF(obj);
631
10
    return obj;
632
10
}
Unexecuted instantiation: faulthandler.c:_Py_NewRef
posixmodule.c:_Py_NewRef
Line
Count
Source
629
1.10M
{
630
1.10M
    Py_INCREF(obj);
631
1.10M
    return obj;
632
1.10M
}
signalmodule.c:_Py_NewRef
Line
Count
Source
629
2.36k
{
630
2.36k
    Py_INCREF(obj);
631
2.36k
    return obj;
632
2.36k
}
Unexecuted instantiation: _tracemalloc.c:_Py_NewRef
Unexecuted instantiation: _suggestions.c:_Py_NewRef
_datetimemodule.c:_Py_NewRef
Line
Count
Source
629
18.9k
{
630
18.9k
    Py_INCREF(obj);
631
18.9k
    return obj;
632
18.9k
}
Unexecuted instantiation: _codecsmodule.c:_Py_NewRef
_collectionsmodule.c:_Py_NewRef
Line
Count
Source
629
24.2M
{
630
24.2M
    Py_INCREF(obj);
631
24.2M
    return obj;
632
24.2M
}
Unexecuted instantiation: errnomodule.c:_Py_NewRef
_iomodule.c:_Py_NewRef
Line
Count
Source
629
278
{
630
278
    Py_INCREF(obj);
631
278
    return obj;
632
278
}
iobase.c:_Py_NewRef
Line
Count
Source
629
93.1k
{
630
93.1k
    Py_INCREF(obj);
631
93.1k
    return obj;
632
93.1k
}
Unexecuted instantiation: fileio.c:_Py_NewRef
bytesio.c:_Py_NewRef
Line
Count
Source
629
75.2k
{
630
75.2k
    Py_INCREF(obj);
631
75.2k
    return obj;
632
75.2k
}
bufferedio.c:_Py_NewRef
Line
Count
Source
629
10.2k
{
630
10.2k
    Py_INCREF(obj);
631
10.2k
    return obj;
632
10.2k
}
textio.c:_Py_NewRef
Line
Count
Source
629
541k
{
630
541k
    Py_INCREF(obj);
631
541k
    return obj;
632
541k
}
stringio.c:_Py_NewRef
Line
Count
Source
629
22.3k
{
630
22.3k
    Py_INCREF(obj);
631
22.3k
    return obj;
632
22.3k
}
itertoolsmodule.c:_Py_NewRef
Line
Count
Source
629
37.9k
{
630
37.9k
    Py_INCREF(obj);
631
37.9k
    return obj;
632
37.9k
}
sre.c:_Py_NewRef
Line
Count
Source
629
111M
{
630
111M
    Py_INCREF(obj);
631
111M
    return obj;
632
111M
}
Unexecuted instantiation: _sysconfig.c:_Py_NewRef
_threadmodule.c:_Py_NewRef
Line
Count
Source
629
84
{
630
84
    Py_INCREF(obj);
631
84
    return obj;
632
84
}
Unexecuted instantiation: timemodule.c:_Py_NewRef
Unexecuted instantiation: _typesmodule.c:_Py_NewRef
Unexecuted instantiation: _typingmodule.c:_Py_NewRef
Unexecuted instantiation: _weakref.c:_Py_NewRef
_abc.c:_Py_NewRef
Line
Count
Source
629
93.8k
{
630
93.8k
    Py_INCREF(obj);
631
93.8k
    return obj;
632
93.8k
}
_functoolsmodule.c:_Py_NewRef
Line
Count
Source
629
480k
{
630
480k
    Py_INCREF(obj);
631
480k
    return obj;
632
480k
}
Unexecuted instantiation: _localemodule.c:_Py_NewRef
Unexecuted instantiation: _opcode.c:_Py_NewRef
_operator.c:_Py_NewRef
Line
Count
Source
629
1.50M
{
630
1.50M
    Py_INCREF(obj);
631
1.50M
    return obj;
632
1.50M
}
Unexecuted instantiation: _stat.c:_Py_NewRef
Unexecuted instantiation: symtablemodule.c:_Py_NewRef
Unexecuted instantiation: pwdmodule.c:_Py_NewRef
getpath.c:_Py_NewRef
Line
Count
Source
629
296
{
630
296
    Py_INCREF(obj);
631
296
    return obj;
632
296
}
Unexecuted instantiation: frozen.c:_Py_NewRef
Unexecuted instantiation: getbuildinfo.c:_Py_NewRef
Unexecuted instantiation: peg_api.c:_Py_NewRef
reader.c:_Py_NewRef
Line
Count
Source
629
16
{
630
16
    Py_INCREF(obj);
631
16
    return obj;
632
16
}
Unexecuted instantiation: source.c:_Py_NewRef
Unexecuted instantiation: helpers.c:_Py_NewRef
Unexecuted instantiation: myreadline.c:_Py_NewRef
abstract.c:_Py_NewRef
Line
Count
Source
629
417M
{
630
417M
    Py_INCREF(obj);
631
417M
    return obj;
632
417M
}
Unexecuted instantiation: boolobject.c:_Py_NewRef
Unexecuted instantiation: bytes_methods.c:_Py_NewRef
bytearrayobject.c:_Py_NewRef
Line
Count
Source
629
14.7M
{
630
14.7M
    Py_INCREF(obj);
631
14.7M
    return obj;
632
14.7M
}
Unexecuted instantiation: capsule.c:_Py_NewRef
Unexecuted instantiation: cellobject.c:_Py_NewRef
classobject.c:_Py_NewRef
Line
Count
Source
629
85.6M
{
630
85.6M
    Py_INCREF(obj);
631
85.6M
    return obj;
632
85.6M
}
codeobject.c:_Py_NewRef
Line
Count
Source
629
1.73M
{
630
1.73M
    Py_INCREF(obj);
631
1.73M
    return obj;
632
1.73M
}
Unexecuted instantiation: complexobject.c:_Py_NewRef
descrobject.c:_Py_NewRef
Line
Count
Source
629
24.8M
{
630
24.8M
    Py_INCREF(obj);
631
24.8M
    return obj;
632
24.8M
}
enumobject.c:_Py_NewRef
Line
Count
Source
629
28
{
630
28
    Py_INCREF(obj);
631
28
    return obj;
632
28
}
genobject.c:_Py_NewRef
Line
Count
Source
629
81.4M
{
630
81.4M
    Py_INCREF(obj);
631
81.4M
    return obj;
632
81.4M
}
Unexecuted instantiation: fileobject.c:_Py_NewRef
frameobject.c:_Py_NewRef
Line
Count
Source
629
10.7M
{
630
10.7M
    Py_INCREF(obj);
631
10.7M
    return obj;
632
10.7M
}
funcobject.c:_Py_NewRef
Line
Count
Source
629
18.1M
{
630
18.1M
    Py_INCREF(obj);
631
18.1M
    return obj;
632
18.1M
}
interpolationobject.c:_Py_NewRef
Line
Count
Source
629
12
{
630
12
    Py_INCREF(obj);
631
12
    return obj;
632
12
}
iterobject.c:_Py_NewRef
Line
Count
Source
629
2.48M
{
630
2.48M
    Py_INCREF(obj);
631
2.48M
    return obj;
632
2.48M
}
lazyimportobject.c:_Py_NewRef
Line
Count
Source
629
1.16k
{
630
1.16k
    Py_INCREF(obj);
631
1.16k
    return obj;
632
1.16k
}
odictobject.c:_Py_NewRef
Line
Count
Source
629
11.3k
{
630
11.3k
    Py_INCREF(obj);
631
11.3k
    return obj;
632
11.3k
}
methodobject.c:_Py_NewRef
Line
Count
Source
629
11.0M
{
630
11.0M
    Py_INCREF(obj);
631
11.0M
    return obj;
632
11.0M
}
Unexecuted instantiation: namespaceobject.c:_Py_NewRef
Unexecuted instantiation: _contextvars.c:_Py_NewRef
Unexecuted instantiation: _strptime.c:_Py_NewRef
Python-ast.c:_Py_NewRef
Line
Count
Source
629
528k
{
630
528k
    Py_INCREF(obj);
631
528k
    return obj;
632
528k
}
Unexecuted instantiation: Python-tokenize.c:_Py_NewRef
Unexecuted instantiation: asdl.c:_Py_NewRef
assemble.c:_Py_NewRef
Line
Count
Source
629
19.9k
{
630
19.9k
    Py_INCREF(obj);
631
19.9k
    return obj;
632
19.9k
}
Unexecuted instantiation: ast.c:_Py_NewRef
Unexecuted instantiation: ast_preprocess.c:_Py_NewRef
Unexecuted instantiation: ast_unparse.c:_Py_NewRef
Unexecuted instantiation: critical_section.c:_Py_NewRef
Unexecuted instantiation: crossinterp.c:_Py_NewRef
Unexecuted instantiation: getcopyright.c:_Py_NewRef
Unexecuted instantiation: getplatform.c:_Py_NewRef
Unexecuted instantiation: getversion.c:_Py_NewRef
Unexecuted instantiation: optimizer.c:_Py_NewRef
Unexecuted instantiation: pathconfig.c:_Py_NewRef
Unexecuted instantiation: pegen.c:_Py_NewRef
pegen_errors.c:_Py_NewRef
Line
Count
Source
629
60.9k
{
630
60.9k
    Py_INCREF(obj);
631
60.9k
    return obj;
632
60.9k
}
Unexecuted instantiation: parser.c:_Py_NewRef
Unexecuted instantiation: parser_invalid.c:_Py_NewRef
Unexecuted instantiation: lexer.c:_Py_NewRef
Unexecuted instantiation: layout.c:_Py_NewRef
Unexecuted instantiation: number.c:_Py_NewRef
Unexecuted instantiation: state.c:_Py_NewRef
Unexecuted instantiation: string.c:_Py_NewRef
Unexecuted instantiation: decoder.c:_Py_NewRef
Unexecuted instantiation: api.c:_Py_NewRef
Unexecuted instantiation: getcompiler.c:_Py_NewRef
Unexecuted instantiation: mystrtoul.c:_Py_NewRef
Unexecuted instantiation: token.c:_Py_NewRef
action_helpers.c:_Py_NewRef
Line
Count
Source
629
5.80k
{
630
5.80k
    Py_INCREF(obj);
631
5.80k
    return obj;
632
5.80k
}
Unexecuted instantiation: string_parser.c:_Py_NewRef
633
634
static inline PyObject* _Py_XNewRef(PyObject *obj)
635
2.04G
{
636
2.04G
    Py_XINCREF(obj);
637
2.04G
    return obj;
638
2.04G
}
Unexecuted instantiation: bytesobject.c:_Py_XNewRef
Unexecuted instantiation: call.c:_Py_XNewRef
exceptions.c:_Py_XNewRef
Line
Count
Source
635
113M
{
636
113M
    Py_XINCREF(obj);
637
113M
    return obj;
638
113M
}
Unexecuted instantiation: genericaliasobject.c:_Py_XNewRef
Unexecuted instantiation: floatobject.c:_Py_XNewRef
listobject.c:_Py_XNewRef
Line
Count
Source
635
240M
{
636
240M
    Py_XINCREF(obj);
637
240M
    return obj;
638
240M
}
Unexecuted instantiation: longobject.c:_Py_XNewRef
dictobject.c:_Py_XNewRef
Line
Count
Source
635
916M
{
636
916M
    Py_XINCREF(obj);
637
916M
    return obj;
638
916M
}
memoryobject.c:_Py_XNewRef
Line
Count
Source
635
108
{
636
108
    Py_XINCREF(obj);
637
108
    return obj;
638
108
}
Unexecuted instantiation: moduleobject.c:_Py_XNewRef
Unexecuted instantiation: object.c:_Py_XNewRef
Unexecuted instantiation: obmalloc.c:_Py_XNewRef
Unexecuted instantiation: picklebufobject.c:_Py_XNewRef
Unexecuted instantiation: rangeobject.c:_Py_XNewRef
sentinelobject.c:_Py_XNewRef
Line
Count
Source
635
124
{
636
124
    Py_XINCREF(obj);
637
124
    return obj;
638
124
}
Unexecuted instantiation: setobject.c:_Py_XNewRef
Unexecuted instantiation: sliceobject.c:_Py_XNewRef
Unexecuted instantiation: structseq.c:_Py_XNewRef
Unexecuted instantiation: templateobject.c:_Py_XNewRef
Unexecuted instantiation: tupleobject.c:_Py_XNewRef
typeobject.c:_Py_XNewRef
Line
Count
Source
635
282k
{
636
282k
    Py_XINCREF(obj);
637
282k
    return obj;
638
282k
}
typevarobject.c:_Py_XNewRef
Line
Count
Source
635
1.22k
{
636
1.22k
    Py_XINCREF(obj);
637
1.22k
    return obj;
638
1.22k
}
Unexecuted instantiation: unicode_format.c:_Py_XNewRef
Unexecuted instantiation: unicode_formatter.c:_Py_XNewRef
Unexecuted instantiation: unicode_writer.c:_Py_XNewRef
Unexecuted instantiation: unicodectype.c:_Py_XNewRef
Unexecuted instantiation: unicodeobject.c:_Py_XNewRef
Unexecuted instantiation: unionobject.c:_Py_XNewRef
weakrefobject.c:_Py_XNewRef
Line
Count
Source
635
497k
{
636
497k
    Py_XINCREF(obj);
637
497k
    return obj;
638
497k
}
Unexecuted instantiation: _warnings.c:_Py_XNewRef
bltinmodule.c:_Py_XNewRef
Line
Count
Source
635
1.11k
{
636
1.11k
    Py_XINCREF(obj);
637
1.11k
    return obj;
638
1.11k
}
ceval.c:_Py_XNewRef
Line
Count
Source
635
166M
{
636
166M
    Py_XINCREF(obj);
637
166M
    return obj;
638
166M
}
Unexecuted instantiation: codecs.c:_Py_XNewRef
Unexecuted instantiation: codegen.c:_Py_XNewRef
compile.c:_Py_XNewRef
Line
Count
Source
635
7.08k
{
636
7.08k
    Py_XINCREF(obj);
637
7.08k
    return obj;
638
7.08k
}
context.c:_Py_XNewRef
Line
Count
Source
635
66
{
636
66
    Py_XINCREF(obj);
637
66
    return obj;
638
66
}
Unexecuted instantiation: errors.c:_Py_XNewRef
Unexecuted instantiation: flowgraph.c:_Py_XNewRef
Unexecuted instantiation: frame.c:_Py_XNewRef
Unexecuted instantiation: future.c:_Py_XNewRef
Unexecuted instantiation: gc.c:_Py_XNewRef
Unexecuted instantiation: gc_gil.c:_Py_XNewRef
Unexecuted instantiation: getargs.c:_Py_XNewRef
Unexecuted instantiation: ceval_gil.c:_Py_XNewRef
Unexecuted instantiation: hamt.c:_Py_XNewRef
Unexecuted instantiation: hashtable.c:_Py_XNewRef
import.c:_Py_XNewRef
Line
Count
Source
635
28.3k
{
636
28.3k
    Py_XINCREF(obj);
637
28.3k
    return obj;
638
28.3k
}
Unexecuted instantiation: importdl.c:_Py_XNewRef
Unexecuted instantiation: initconfig.c:_Py_XNewRef
Unexecuted instantiation: instrumentation.c:_Py_XNewRef
Unexecuted instantiation: instruction_sequence.c:_Py_XNewRef
Unexecuted instantiation: intrinsics.c:_Py_XNewRef
Unexecuted instantiation: legacy_tracing.c:_Py_XNewRef
Unexecuted instantiation: lock.c:_Py_XNewRef
Unexecuted instantiation: marshal.c:_Py_XNewRef
Unexecuted instantiation: modsupport.c:_Py_XNewRef
Unexecuted instantiation: mysnprintf.c:_Py_XNewRef
Unexecuted instantiation: parking_lot.c:_Py_XNewRef
Unexecuted instantiation: preconfig.c:_Py_XNewRef
Unexecuted instantiation: pyarena.c:_Py_XNewRef
Unexecuted instantiation: pyctype.c:_Py_XNewRef
Unexecuted instantiation: pyhash.c:_Py_XNewRef
Unexecuted instantiation: pylifecycle.c:_Py_XNewRef
Unexecuted instantiation: pymath.c:_Py_XNewRef
pystate.c:_Py_XNewRef
Line
Count
Source
635
710k
{
636
710k
    Py_XINCREF(obj);
637
710k
    return obj;
638
710k
}
Unexecuted instantiation: pythonrun.c:_Py_XNewRef
Unexecuted instantiation: pytime.c:_Py_XNewRef
Unexecuted instantiation: qsbr.c:_Py_XNewRef
Unexecuted instantiation: bootstrap_hash.c:_Py_XNewRef
Unexecuted instantiation: specialize.c:_Py_XNewRef
Unexecuted instantiation: slots.c:_Py_XNewRef
Unexecuted instantiation: slots_generated.c:_Py_XNewRef
structmember.c:_Py_XNewRef
Line
Count
Source
635
3.55M
{
636
3.55M
    Py_XINCREF(obj);
637
3.55M
    return obj;
638
3.55M
}
Unexecuted instantiation: symtable.c:_Py_XNewRef
sysmodule.c:_Py_XNewRef
Line
Count
Source
635
26.5k
{
636
26.5k
    Py_XINCREF(obj);
637
26.5k
    return obj;
638
26.5k
}
Unexecuted instantiation: thread.c:_Py_XNewRef
traceback.c:_Py_XNewRef
Line
Count
Source
635
126M
{
636
126M
    Py_XINCREF(obj);
637
126M
    return obj;
638
126M
}
Unexecuted instantiation: tracemalloc.c:_Py_XNewRef
Unexecuted instantiation: typecache.c:_Py_XNewRef
Unexecuted instantiation: getopt.c:_Py_XNewRef
Unexecuted instantiation: pystrcmp.c:_Py_XNewRef
Unexecuted instantiation: pystrtod.c:_Py_XNewRef
Unexecuted instantiation: pystrhex.c:_Py_XNewRef
Unexecuted instantiation: dtoa.c:_Py_XNewRef
Unexecuted instantiation: fileutils.c:_Py_XNewRef
suggestions.c:_Py_XNewRef
Line
Count
Source
635
111
{
636
111
    Py_XINCREF(obj);
637
111
    return obj;
638
111
}
Unexecuted instantiation: perf_trampoline.c:_Py_XNewRef
Unexecuted instantiation: perf_jit_trampoline.c:_Py_XNewRef
Unexecuted instantiation: jit_unwind.c:_Py_XNewRef
Unexecuted instantiation: remote_debugging.c:_Py_XNewRef
Unexecuted instantiation: dynload_shlib.c:_Py_XNewRef
Unexecuted instantiation: config.c:_Py_XNewRef
Unexecuted instantiation: gcmodule.c:_Py_XNewRef
Unexecuted instantiation: _asynciomodule.c:_Py_XNewRef
Unexecuted instantiation: atexitmodule.c:_Py_XNewRef
Unexecuted instantiation: faulthandler.c:_Py_XNewRef
posixmodule.c:_Py_XNewRef
Line
Count
Source
635
84.3k
{
636
84.3k
    Py_XINCREF(obj);
637
84.3k
    return obj;
638
84.3k
}
Unexecuted instantiation: signalmodule.c:_Py_XNewRef
Unexecuted instantiation: _tracemalloc.c:_Py_XNewRef
Unexecuted instantiation: _suggestions.c:_Py_XNewRef
_datetimemodule.c:_Py_XNewRef
Line
Count
Source
635
163
{
636
163
    Py_XINCREF(obj);
637
163
    return obj;
638
163
}
Unexecuted instantiation: _codecsmodule.c:_Py_XNewRef
_collectionsmodule.c:_Py_XNewRef
Line
Count
Source
635
265k
{
636
265k
    Py_XINCREF(obj);
637
265k
    return obj;
638
265k
}
Unexecuted instantiation: errnomodule.c:_Py_XNewRef
Unexecuted instantiation: _iomodule.c:_Py_XNewRef
Unexecuted instantiation: iobase.c:_Py_XNewRef
Unexecuted instantiation: fileio.c:_Py_XNewRef
Unexecuted instantiation: bytesio.c:_Py_XNewRef
Unexecuted instantiation: bufferedio.c:_Py_XNewRef
Unexecuted instantiation: textio.c:_Py_XNewRef
Unexecuted instantiation: stringio.c:_Py_XNewRef
Unexecuted instantiation: itertoolsmodule.c:_Py_XNewRef
Unexecuted instantiation: sre.c:_Py_XNewRef
Unexecuted instantiation: _sysconfig.c:_Py_XNewRef
_threadmodule.c:_Py_XNewRef
Line
Count
Source
635
168
{
636
168
    Py_XINCREF(obj);
637
168
    return obj;
638
168
}
Unexecuted instantiation: timemodule.c:_Py_XNewRef
Unexecuted instantiation: _typesmodule.c:_Py_XNewRef
Unexecuted instantiation: _typingmodule.c:_Py_XNewRef
Unexecuted instantiation: _weakref.c:_Py_XNewRef
_abc.c:_Py_XNewRef
Line
Count
Source
635
22.3k
{
636
22.3k
    Py_XINCREF(obj);
637
22.3k
    return obj;
638
22.3k
}
_functoolsmodule.c:_Py_XNewRef
Line
Count
Source
635
44
{
636
44
    Py_XINCREF(obj);
637
44
    return obj;
638
44
}
Unexecuted instantiation: _localemodule.c:_Py_XNewRef
Unexecuted instantiation: _opcode.c:_Py_XNewRef
Unexecuted instantiation: _operator.c:_Py_XNewRef
Unexecuted instantiation: _stat.c:_Py_XNewRef
Unexecuted instantiation: symtablemodule.c:_Py_XNewRef
Unexecuted instantiation: pwdmodule.c:_Py_XNewRef
Unexecuted instantiation: getpath.c:_Py_XNewRef
Unexecuted instantiation: frozen.c:_Py_XNewRef
Unexecuted instantiation: getbuildinfo.c:_Py_XNewRef
Unexecuted instantiation: peg_api.c:_Py_XNewRef
Unexecuted instantiation: reader.c:_Py_XNewRef
Unexecuted instantiation: source.c:_Py_XNewRef
Unexecuted instantiation: helpers.c:_Py_XNewRef
Unexecuted instantiation: myreadline.c:_Py_XNewRef
abstract.c:_Py_XNewRef
Line
Count
Source
635
104M
{
636
104M
    Py_XINCREF(obj);
637
104M
    return obj;
638
104M
}
Unexecuted instantiation: boolobject.c:_Py_XNewRef
Unexecuted instantiation: bytes_methods.c:_Py_XNewRef
Unexecuted instantiation: bytearrayobject.c:_Py_XNewRef
Unexecuted instantiation: capsule.c:_Py_XNewRef
cellobject.c:_Py_XNewRef
Line
Count
Source
635
17.8M
{
636
17.8M
    Py_XINCREF(obj);
637
17.8M
    return obj;
638
17.8M
}
Unexecuted instantiation: classobject.c:_Py_XNewRef
codeobject.c:_Py_XNewRef
Line
Count
Source
635
3.24k
{
636
3.24k
    Py_XINCREF(obj);
637
3.24k
    return obj;
638
3.24k
}
Unexecuted instantiation: complexobject.c:_Py_XNewRef
descrobject.c:_Py_XNewRef
Line
Count
Source
635
111k
{
636
111k
    Py_XINCREF(obj);
637
111k
    return obj;
638
111k
}
Unexecuted instantiation: enumobject.c:_Py_XNewRef
Unexecuted instantiation: genobject.c:_Py_XNewRef
Unexecuted instantiation: fileobject.c:_Py_XNewRef
frameobject.c:_Py_XNewRef
Line
Count
Source
635
9.93M
{
636
9.93M
    Py_XINCREF(obj);
637
9.93M
    return obj;
638
9.93M
}
funcobject.c:_Py_XNewRef
Line
Count
Source
635
27.5k
{
636
27.5k
    Py_XINCREF(obj);
637
27.5k
    return obj;
638
27.5k
}
Unexecuted instantiation: interpolationobject.c:_Py_XNewRef
iterobject.c:_Py_XNewRef
Line
Count
Source
635
376k
{
636
376k
    Py_XINCREF(obj);
637
376k
    return obj;
638
376k
}
lazyimportobject.c:_Py_XNewRef
Line
Count
Source
635
1.23k
{
636
1.23k
    Py_XINCREF(obj);
637
1.23k
    return obj;
638
1.23k
}
Unexecuted instantiation: odictobject.c:_Py_XNewRef
methodobject.c:_Py_XNewRef
Line
Count
Source
635
344M
{
636
344M
    Py_XINCREF(obj);
637
344M
    return obj;
638
344M
}
Unexecuted instantiation: namespaceobject.c:_Py_XNewRef
Unexecuted instantiation: _contextvars.c:_Py_XNewRef
Unexecuted instantiation: _strptime.c:_Py_XNewRef
Unexecuted instantiation: Python-ast.c:_Py_XNewRef
Unexecuted instantiation: Python-tokenize.c:_Py_XNewRef
Unexecuted instantiation: asdl.c:_Py_XNewRef
Unexecuted instantiation: assemble.c:_Py_XNewRef
Unexecuted instantiation: ast.c:_Py_XNewRef
Unexecuted instantiation: ast_preprocess.c:_Py_XNewRef
Unexecuted instantiation: ast_unparse.c:_Py_XNewRef
Unexecuted instantiation: critical_section.c:_Py_XNewRef
Unexecuted instantiation: crossinterp.c:_Py_XNewRef
Unexecuted instantiation: getcopyright.c:_Py_XNewRef
Unexecuted instantiation: getplatform.c:_Py_XNewRef
Unexecuted instantiation: getversion.c:_Py_XNewRef
Unexecuted instantiation: optimizer.c:_Py_XNewRef
Unexecuted instantiation: pathconfig.c:_Py_XNewRef
Unexecuted instantiation: pegen.c:_Py_XNewRef
Unexecuted instantiation: pegen_errors.c:_Py_XNewRef
Unexecuted instantiation: parser.c:_Py_XNewRef
Unexecuted instantiation: parser_invalid.c:_Py_XNewRef
Unexecuted instantiation: lexer.c:_Py_XNewRef
Unexecuted instantiation: layout.c:_Py_XNewRef
Unexecuted instantiation: number.c:_Py_XNewRef
Unexecuted instantiation: state.c:_Py_XNewRef
Unexecuted instantiation: string.c:_Py_XNewRef
Unexecuted instantiation: decoder.c:_Py_XNewRef
Unexecuted instantiation: api.c:_Py_XNewRef
Unexecuted instantiation: getcompiler.c:_Py_XNewRef
Unexecuted instantiation: mystrtoul.c:_Py_XNewRef
Unexecuted instantiation: token.c:_Py_XNewRef
Unexecuted instantiation: action_helpers.c:_Py_XNewRef
Unexecuted instantiation: string_parser.c:_Py_XNewRef
639
640
// Py_NewRef() and Py_XNewRef() are exported as functions for the stable ABI.
641
// Names overridden with macros by static inline functions for best
642
// performances.
643
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
644
8.20G
#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
645
1.78G
#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
646
#else
647
#  define Py_NewRef(obj) _Py_NewRef(obj)
648
#  define Py_XNewRef(obj) _Py_XNewRef(obj)
649
#endif
650
651
652
#ifdef __cplusplus
653
}
654
#endif
655
#endif   // !_Py_REFCOUNT_H