Coverage Report

Created: 2026-04-20 06:11

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
18.1G
#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
48
394
#define _Py_IMMORTAL_MINIMUM_REFCNT (1ULL << 31)
49
257M
#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
50
257M
#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
641M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
641M
    #if !defined(Py_GIL_DISABLED)
107
641M
        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
641M
    }
bytesobject.c:_Py_REFCNT
Line
Count
Source
105
4.27M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
4.27M
    #if !defined(Py_GIL_DISABLED)
107
4.27M
        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.27M
    }
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
394
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
394
    #if !defined(Py_GIL_DISABLED)
107
394
        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
394
    }
longobject.c:_Py_REFCNT
Line
Count
Source
105
23.8k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
23.8k
    #if !defined(Py_GIL_DISABLED)
107
23.8k
        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
23.8k
    }
dictobject.c:_Py_REFCNT
Line
Count
Source
105
239M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
239M
    #if !defined(Py_GIL_DISABLED)
107
239M
        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
239M
    }
Unexecuted instantiation: memoryobject.c:_Py_REFCNT
Unexecuted instantiation: moduleobject.c:_Py_REFCNT
object.c:_Py_REFCNT
Line
Count
Source
105
70.5M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
70.5M
    #if !defined(Py_GIL_DISABLED)
107
70.5M
        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
70.5M
    }
Unexecuted instantiation: obmalloc.c:_Py_REFCNT
Unexecuted instantiation: picklebufobject.c:_Py_REFCNT
Unexecuted instantiation: rangeobject.c:_Py_REFCNT
setobject.c:_Py_REFCNT
Line
Count
Source
105
4.62k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
4.62k
    #if !defined(Py_GIL_DISABLED)
107
4.62k
        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.62k
    }
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
142k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
142k
    #if !defined(Py_GIL_DISABLED)
107
142k
        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
142k
    }
typeobject.c:_Py_REFCNT
Line
Count
Source
105
514
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
514
    #if !defined(Py_GIL_DISABLED)
107
514
        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
514
    }
Unexecuted instantiation: typevarobject.c:_Py_REFCNT
unicode_format.c:_Py_REFCNT
Line
Count
Source
105
5.38M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
5.38M
    #if !defined(Py_GIL_DISABLED)
107
5.38M
        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
5.38M
    }
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
69.2M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
69.2M
    #if !defined(Py_GIL_DISABLED)
107
69.2M
        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
69.2M
    }
Unexecuted instantiation: unionobject.c:_Py_REFCNT
weakrefobject.c:_Py_REFCNT
Line
Count
Source
105
51.8M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
51.8M
    #if !defined(Py_GIL_DISABLED)
107
51.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
51.8M
    }
Unexecuted instantiation: _warnings.c:_Py_REFCNT
bltinmodule.c:_Py_REFCNT
Line
Count
Source
105
1.80M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
1.80M
    #if !defined(Py_GIL_DISABLED)
107
1.80M
        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.80M
    }
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
58.6M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
58.6M
    #if !defined(Py_GIL_DISABLED)
107
58.6M
        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
58.6M
    }
Unexecuted instantiation: future.c:_Py_REFCNT
gc.c:_Py_REFCNT
Line
Count
Source
105
85.5M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
85.5M
    #if !defined(Py_GIL_DISABLED)
107
85.5M
        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
85.5M
    }
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
36
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
36
    #if !defined(Py_GIL_DISABLED)
107
36
        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
36
    }
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
78.8k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
78.8k
    #if !defined(Py_GIL_DISABLED)
107
78.8k
        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
78.8k
    }
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: 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: 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: 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
119k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
119k
    #if !defined(Py_GIL_DISABLED)
107
119k
        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
119k
    }
Unexecuted instantiation: fileio.c:_Py_REFCNT
bytesio.c:_Py_REFCNT
Line
Count
Source
105
63.6k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
63.6k
    #if !defined(Py_GIL_DISABLED)
107
63.6k
        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.6k
    }
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
241k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
241k
    #if !defined(Py_GIL_DISABLED)
107
241k
        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
241k
    }
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: file_tokenizer.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
190k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
190k
    #if !defined(Py_GIL_DISABLED)
107
190k
        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
190k
    }
Unexecuted instantiation: complexobject.c:_Py_REFCNT
Unexecuted instantiation: descrobject.c:_Py_REFCNT
enumobject.c:_Py_REFCNT
Line
Count
Source
105
17.3M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
17.3M
    #if !defined(Py_GIL_DISABLED)
107
17.3M
        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
17.3M
    }
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
36.4M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
36.4M
    #if !defined(Py_GIL_DISABLED)
107
36.4M
        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
36.4M
    }
Unexecuted instantiation: interpolationobject.c:_Py_REFCNT
Unexecuted instantiation: iterobject.c:_Py_REFCNT
Unexecuted instantiation: lazyimportobject.c:_Py_REFCNT
odictobject.c:_Py_REFCNT
Line
Count
Source
105
24
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
24
    #if !defined(Py_GIL_DISABLED)
107
24
        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
24
    }
Unexecuted instantiation: methodobject.c:_Py_REFCNT
Unexecuted instantiation: namespaceobject.c:_Py_REFCNT
Unexecuted instantiation: _contextvars.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: buffer.c:_Py_REFCNT
Unexecuted instantiation: lexer.c:_Py_REFCNT
Unexecuted instantiation: state.c:_Py_REFCNT
Unexecuted instantiation: readline_tokenizer.c:_Py_REFCNT
Unexecuted instantiation: string_tokenizer.c:_Py_REFCNT
Unexecuted instantiation: utf8_tokenizer.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
481M
    #  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
29.6G
{
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
29.6G
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
29.6G
}
bytesobject.c:_Py_IsImmortal
Line
Count
Source
127
24.5M
{
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.5M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
24.5M
}
call.c:_Py_IsImmortal
Line
Count
Source
127
220M
{
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
220M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
220M
}
exceptions.c:_Py_IsImmortal
Line
Count
Source
127
207M
{
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
207M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
207M
}
genericaliasobject.c:_Py_IsImmortal
Line
Count
Source
127
548
{
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
548
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
548
}
floatobject.c:_Py_IsImmortal
Line
Count
Source
127
502k
{
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
502k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
502k
}
listobject.c:_Py_IsImmortal
Line
Count
Source
127
1.63G
{
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.63G
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.63G
}
longobject.c:_Py_IsImmortal
Line
Count
Source
127
72.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
72.3M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
72.3M
}
dictobject.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
}
memoryobject.c:_Py_IsImmortal
Line
Count
Source
127
3.47M
{
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.47M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
3.47M
}
moduleobject.c:_Py_IsImmortal
Line
Count
Source
127
4.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
4.49M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
4.49M
}
object.c:_Py_IsImmortal
Line
Count
Source
127
835M
{
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
835M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
835M
}
Unexecuted instantiation: obmalloc.c:_Py_IsImmortal
Unexecuted instantiation: picklebufobject.c:_Py_IsImmortal
rangeobject.c:_Py_IsImmortal
Line
Count
Source
127
48.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
48.4M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
48.4M
}
setobject.c:_Py_IsImmortal
Line
Count
Source
127
15.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
15.6M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
15.6M
}
sliceobject.c:_Py_IsImmortal
Line
Count
Source
127
174M
{
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
174M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
174M
}
structseq.c:_Py_IsImmortal
Line
Count
Source
127
9.51M
{
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
9.51M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
9.51M
}
templateobject.c:_Py_IsImmortal
Line
Count
Source
127
24
{
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
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
24
}
tupleobject.c:_Py_IsImmortal
Line
Count
Source
127
9.40G
{
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
9.40G
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
9.40G
}
typeobject.c:_Py_IsImmortal
Line
Count
Source
127
1.15G
{
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.15G
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.15G
}
typevarobject.c:_Py_IsImmortal
Line
Count
Source
127
258k
{
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
258k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
258k
}
unicode_format.c:_Py_IsImmortal
Line
Count
Source
127
33.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
33.2M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
33.2M
}
unicode_formatter.c:_Py_IsImmortal
Line
Count
Source
127
14.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
14.6M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
14.6M
}
unicode_writer.c:_Py_IsImmortal
Line
Count
Source
127
31.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
31.0M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
31.0M
}
Unexecuted instantiation: unicodectype.c:_Py_IsImmortal
unicodeobject.c:_Py_IsImmortal
Line
Count
Source
127
173M
{
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
173M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
173M
}
unionobject.c:_Py_IsImmortal
Line
Count
Source
127
4.34k
{
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.34k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
4.34k
}
weakrefobject.c:_Py_IsImmortal
Line
Count
Source
127
2.59M
{
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.59M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
2.59M
}
_warnings.c:_Py_IsImmortal
Line
Count
Source
127
54.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
54.9M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
54.9M
}
bltinmodule.c:_Py_IsImmortal
Line
Count
Source
127
2.11G
{
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.11G
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
2.11G
}
ceval.c:_Py_IsImmortal
Line
Count
Source
127
9.45G
{
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
9.45G
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
9.45G
}
codecs.c:_Py_IsImmortal
Line
Count
Source
127
14.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
14.1M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
14.1M
}
codegen.c:_Py_IsImmortal
Line
Count
Source
127
92.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
92.6k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
92.6k
}
compile.c:_Py_IsImmortal
Line
Count
Source
127
422k
{
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
422k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
422k
}
context.c:_Py_IsImmortal
Line
Count
Source
127
72
{
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
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
72
}
errors.c:_Py_IsImmortal
Line
Count
Source
127
92.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
92.2M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
92.2M
}
flowgraph.c:_Py_IsImmortal
Line
Count
Source
127
44.7k
{
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
44.7k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
44.7k
}
frame.c:_Py_IsImmortal
Line
Count
Source
127
129M
{
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
129M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
129M
}
Unexecuted instantiation: future.c:_Py_IsImmortal
gc.c:_Py_IsImmortal
Line
Count
Source
127
717M
{
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
717M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
717M
}
Unexecuted instantiation: gc_gil.c:_Py_IsImmortal
getargs.c:_Py_IsImmortal
Line
Count
Source
127
10.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
10.0M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
10.0M
}
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
28.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
28.4M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
28.4M
}
importdl.c:_Py_IsImmortal
Line
Count
Source
127
3.17k
{
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.17k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
3.17k
}
initconfig.c:_Py_IsImmortal
Line
Count
Source
127
5.11k
{
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.11k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
5.11k
}
instrumentation.c:_Py_IsImmortal
Line
Count
Source
127
864
{
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
864
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
864
}
Unexecuted instantiation: instruction_sequence.c:_Py_IsImmortal
intrinsics.c:_Py_IsImmortal
Line
Count
Source
127
73.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
73.0k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
73.0k
}
Unexecuted instantiation: legacy_tracing.c:_Py_IsImmortal
Unexecuted instantiation: lock.c:_Py_IsImmortal
marshal.c:_Py_IsImmortal
Line
Count
Source
127
1.75M
{
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.75M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.75M
}
modsupport.c:_Py_IsImmortal
Line
Count
Source
127
98.7k
{
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
98.7k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
98.7k
}
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
14.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
14.1M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
14.1M
}
Unexecuted instantiation: pyctype.c:_Py_IsImmortal
Unexecuted instantiation: pyhash.c:_Py_IsImmortal
pylifecycle.c:_Py_IsImmortal
Line
Count
Source
127
1.29k
{
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.29k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.29k
}
Unexecuted instantiation: pymath.c:_Py_IsImmortal
Unexecuted instantiation: pystate.c:_Py_IsImmortal
pythonrun.c:_Py_IsImmortal
Line
Count
Source
127
2.11k
{
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.11k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
2.11k
}
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.16M
{
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.16M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
2.16M
}
structmember.c:_Py_IsImmortal
Line
Count
Source
127
17.7k
{
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
17.7k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
17.7k
}
symtable.c:_Py_IsImmortal
Line
Count
Source
127
539k
{
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
539k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
539k
}
sysmodule.c:_Py_IsImmortal
Line
Count
Source
127
4.59M
{
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.59M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
4.59M
}
Unexecuted instantiation: thread.c:_Py_IsImmortal
traceback.c:_Py_IsImmortal
Line
Count
Source
127
181M
{
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
181M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
181M
}
Unexecuted instantiation: tracemalloc.c:_Py_IsImmortal
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
87.9k
{
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.9k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
87.9k
}
Unexecuted instantiation: suggestions.c:_Py_IsImmortal
Unexecuted instantiation: perf_trampoline.c:_Py_IsImmortal
Unexecuted instantiation: perf_jit_trampoline.c:_Py_IsImmortal
Unexecuted instantiation: remote_debugging.c:_Py_IsImmortal
dynload_shlib.c:_Py_IsImmortal
Line
Count
Source
127
12
{
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
12
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
12
}
Unexecuted instantiation: config.c:_Py_IsImmortal
Unexecuted instantiation: gcmodule.c:_Py_IsImmortal
_asynciomodule.c:_Py_IsImmortal
Line
Count
Source
127
32
{
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
32
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
32
}
atexitmodule.c:_Py_IsImmortal
Line
Count
Source
127
12
{
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
12
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
12
}
Unexecuted instantiation: faulthandler.c:_Py_IsImmortal
posixmodule.c:_Py_IsImmortal
Line
Count
Source
127
5.04M
{
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.04M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
5.04M
}
signalmodule.c:_Py_IsImmortal
Line
Count
Source
127
72
{
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
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
72
}
Unexecuted instantiation: _tracemalloc.c:_Py_IsImmortal
Unexecuted instantiation: _suggestions.c:_Py_IsImmortal
_datetimemodule.c:_Py_IsImmortal
Line
Count
Source
127
129k
{
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
129k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
129k
}
Unexecuted instantiation: _codecsmodule.c:_Py_IsImmortal
_collectionsmodule.c:_Py_IsImmortal
Line
Count
Source
127
186k
{
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
186k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
186k
}
Unexecuted instantiation: errnomodule.c:_Py_IsImmortal
_iomodule.c:_Py_IsImmortal
Line
Count
Source
127
2.51M
{
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.51M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
2.51M
}
iobase.c:_Py_IsImmortal
Line
Count
Source
127
2.73M
{
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.73M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
2.73M
}
fileio.c:_Py_IsImmortal
Line
Count
Source
127
91.7k
{
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
91.7k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
91.7k
}
bytesio.c:_Py_IsImmortal
Line
Count
Source
127
360k
{
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
360k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
360k
}
bufferedio.c:_Py_IsImmortal
Line
Count
Source
127
9.83M
{
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
9.83M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
9.83M
}
textio.c:_Py_IsImmortal
Line
Count
Source
127
1.05M
{
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.05M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.05M
}
stringio.c:_Py_IsImmortal
Line
Count
Source
127
305k
{
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
305k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
305k
}
itertoolsmodule.c:_Py_IsImmortal
Line
Count
Source
127
97.4k
{
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
97.4k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
97.4k
}
sre.c:_Py_IsImmortal
Line
Count
Source
127
418M
{
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
418M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
418M
}
Unexecuted instantiation: _sysconfig.c:_Py_IsImmortal
_threadmodule.c:_Py_IsImmortal
Line
Count
Source
127
13.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
13.6M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
13.6M
}
timemodule.c:_Py_IsImmortal
Line
Count
Source
127
192
{
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
192
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
192
}
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
458k
{
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
458k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
458k
}
_functoolsmodule.c:_Py_IsImmortal
Line
Count
Source
127
1.09M
{
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.09M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.09M
}
Unexecuted instantiation: _localemodule.c:_Py_IsImmortal
Unexecuted instantiation: _opcode.c:_Py_IsImmortal
_operator.c:_Py_IsImmortal
Line
Count
Source
127
555k
{
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
555k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
555k
}
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.18k
{
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.18k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.18k
}
Unexecuted instantiation: frozen.c:_Py_IsImmortal
Unexecuted instantiation: getbuildinfo.c:_Py_IsImmortal
Unexecuted instantiation: peg_api.c:_Py_IsImmortal
Unexecuted instantiation: file_tokenizer.c:_Py_IsImmortal
helpers.c:_Py_IsImmortal
Line
Count
Source
127
21.9k
{
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.9k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
21.9k
}
Unexecuted instantiation: myreadline.c:_Py_IsImmortal
abstract.c:_Py_IsImmortal
Line
Count
Source
127
550M
{
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
550M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
550M
}
Unexecuted instantiation: boolobject.c:_Py_IsImmortal
Unexecuted instantiation: bytes_methods.c:_Py_IsImmortal
bytearrayobject.c:_Py_IsImmortal
Line
Count
Source
127
19.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
19.9M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
19.9M
}
capsule.c:_Py_IsImmortal
Line
Count
Source
127
28
{
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
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
28
}
cellobject.c:_Py_IsImmortal
Line
Count
Source
127
9.86M
{
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
9.86M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
9.86M
}
classobject.c:_Py_IsImmortal
Line
Count
Source
127
87.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
87.3M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
87.3M
}
codeobject.c:_Py_IsImmortal
Line
Count
Source
127
1.11M
{
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.11M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.11M
}
Unexecuted instantiation: complexobject.c:_Py_IsImmortal
descrobject.c:_Py_IsImmortal
Line
Count
Source
127
72.7M
{
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.7M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
72.7M
}
enumobject.c:_Py_IsImmortal
Line
Count
Source
127
94.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
94.3M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
94.3M
}
genobject.c:_Py_IsImmortal
Line
Count
Source
127
109M
{
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
109M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
109M
}
fileobject.c:_Py_IsImmortal
Line
Count
Source
127
367k
{
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
367k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
367k
}
frameobject.c:_Py_IsImmortal
Line
Count
Source
127
42.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
42.1M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
42.1M
}
funcobject.c:_Py_IsImmortal
Line
Count
Source
127
207M
{
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
207M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
207M
}
interpolationobject.c:_Py_IsImmortal
Line
Count
Source
127
52
{
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
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
52
}
iterobject.c:_Py_IsImmortal
Line
Count
Source
127
3.24M
{
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.24M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
3.24M
}
lazyimportobject.c:_Py_IsImmortal
Line
Count
Source
127
284
{
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
284
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
284
}
odictobject.c:_Py_IsImmortal
Line
Count
Source
127
369k
{
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
369k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
369k
}
methodobject.c:_Py_IsImmortal
Line
Count
Source
127
150M
{
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
150M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
150M
}
namespaceobject.c:_Py_IsImmortal
Line
Count
Source
127
52
{
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
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
52
}
Unexecuted instantiation: _contextvars.c:_Py_IsImmortal
Python-ast.c:_Py_IsImmortal
Line
Count
Source
127
3.88M
{
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.88M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
3.88M
}
Python-tokenize.c:_Py_IsImmortal
Line
Count
Source
127
504
{
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
504
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
504
}
Unexecuted instantiation: asdl.c:_Py_IsImmortal
assemble.c:_Py_IsImmortal
Line
Count
Source
127
39.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
39.5k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
39.5k
}
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
301k
{
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
301k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
301k
}
pegen_errors.c:_Py_IsImmortal
Line
Count
Source
127
275k
{
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
275k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
275k
}
Unexecuted instantiation: parser.c:_Py_IsImmortal
Unexecuted instantiation: buffer.c:_Py_IsImmortal
lexer.c:_Py_IsImmortal
Line
Count
Source
127
12.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
12.5k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
12.5k
}
state.c:_Py_IsImmortal
Line
Count
Source
127
98.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
98.0k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
98.0k
}
readline_tokenizer.c:_Py_IsImmortal
Line
Count
Source
127
348
{
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
348
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
348
}
string_tokenizer.c:_Py_IsImmortal
Line
Count
Source
127
2.08k
{
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.08k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
2.08k
}
Unexecuted instantiation: utf8_tokenizer.c:_Py_IsImmortal
Unexecuted instantiation: getcompiler.c:_Py_IsImmortal
Unexecuted instantiation: mystrtoul.c:_Py_IsImmortal
Unexecuted instantiation: token.c:_Py_IsImmortal
Unexecuted instantiation: action_helpers.c:_Py_IsImmortal
string_parser.c:_Py_IsImmortal
Line
Count
Source
127
41.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
41.5k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
41.5k
}
137
32.0G
#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
0
#else
145
0
    return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT;
146
0
#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: 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: 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: 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: 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: file_tokenizer.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: 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: buffer.c:_Py_IsStaticImmortal
Unexecuted instantiation: lexer.c:_Py_IsStaticImmortal
Unexecuted instantiation: state.c:_Py_IsStaticImmortal
Unexecuted instantiation: readline_tokenizer.c:_Py_IsStaticImmortal
Unexecuted instantiation: string_tokenizer.c:_Py_IsStaticImmortal
Unexecuted instantiation: utf8_tokenizer.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
#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
320M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
320M
    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
320M
    if (_Py_IsImmortal(ob)) {
167
1.10k
        return;
168
1.10k
    }
169
320M
#ifndef Py_GIL_DISABLED
170
320M
#if SIZEOF_VOID_P > 4
171
320M
    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
320M
#endif  // Py_LIMITED_API
199
320M
}
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
236M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
236M
    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
236M
    if (_Py_IsImmortal(ob)) {
167
0
        return;
168
0
    }
169
236M
#ifndef Py_GIL_DISABLED
170
236M
#if SIZEOF_VOID_P > 4
171
236M
    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
236M
#endif  // Py_LIMITED_API
199
236M
}
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
47.0M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
47.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
47.0M
    if (_Py_IsImmortal(ob)) {
167
0
        return;
168
0
    }
169
47.0M
#ifndef Py_GIL_DISABLED
170
47.0M
#if SIZEOF_VOID_P > 4
171
47.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
47.0M
#endif  // Py_LIMITED_API
199
47.0M
}
Unexecuted instantiation: obmalloc.c:Py_SET_REFCNT
Unexecuted instantiation: picklebufobject.c:Py_SET_REFCNT
Unexecuted instantiation: rangeobject.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
912k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
912k
    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
912k
    if (_Py_IsImmortal(ob)) {
167
0
        return;
168
0
    }
169
912k
#ifndef Py_GIL_DISABLED
170
912k
#if SIZEOF_VOID_P > 4
171
912k
    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
912k
#endif  // Py_LIMITED_API
199
912k
}
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: 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: 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: 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: file_tokenizer.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
190k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
190k
    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
190k
    if (_Py_IsImmortal(ob)) {
167
0
        return;
168
0
    }
169
190k
#ifndef Py_GIL_DISABLED
170
190k
#if SIZEOF_VOID_P > 4
171
190k
    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
190k
#endif  // Py_LIMITED_API
199
190k
}
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
36.4M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
36.4M
    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
36.4M
    if (_Py_IsImmortal(ob)) {
167
0
        return;
168
0
    }
169
36.4M
#ifndef Py_GIL_DISABLED
170
36.4M
#if SIZEOF_VOID_P > 4
171
36.4M
    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
36.4M
#endif  // Py_LIMITED_API
199
36.4M
}
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: 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: buffer.c:Py_SET_REFCNT
Unexecuted instantiation: lexer.c:Py_SET_REFCNT
Unexecuted instantiation: state.c:Py_SET_REFCNT
Unexecuted instantiation: readline_tokenizer.c:Py_SET_REFCNT
Unexecuted instantiation: string_tokenizer.c:Py_SET_REFCNT
Unexecuted instantiation: utf8_tokenizer.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
320M
#  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
17.8G
{
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
17.8G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
8.78G
        _Py_INCREF_IMMORTAL_STAT_INC();
290
8.78G
        return;
291
8.78G
    }
292
9.06G
    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
9.06G
    _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
9.06G
#endif
308
9.06G
}
bytesobject.c:Py_INCREF
Line
Count
Source
256
159M
{
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
159M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
157M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
157M
        return;
291
157M
    }
292
2.63M
    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.63M
    _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.63M
#endif
308
2.63M
}
call.c:Py_INCREF
Line
Count
Source
256
30.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
30.4M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
17.2M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
17.2M
        return;
291
17.2M
    }
292
13.2M
    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
13.2M
    _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
13.2M
#endif
308
13.2M
}
exceptions.c:Py_INCREF
Line
Count
Source
256
191M
{
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
191M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
46.8M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
46.8M
        return;
291
46.8M
    }
292
144M
    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
144M
    _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
144M
#endif
308
144M
}
genericaliasobject.c:Py_INCREF
Line
Count
Source
256
2.37k
{
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.37k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.63k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.63k
        return;
291
1.63k
    }
292
740
    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
740
    _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
740
#endif
308
740
}
floatobject.c:Py_INCREF
Line
Count
Source
256
1.44M
{
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.44M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.44M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.44M
        return;
291
1.44M
    }
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
1.38G
{
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.38G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
320M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
320M
        return;
291
320M
    }
292
1.06G
    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.06G
    _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.06G
#endif
308
1.06G
}
longobject.c:Py_INCREF
Line
Count
Source
256
98.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
98.5M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
98.5M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
98.5M
        return;
291
98.5M
    }
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.55G
{
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.55G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
298M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
298M
        return;
291
298M
    }
292
1.25G
    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.25G
    _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.25G
#endif
308
1.25G
}
memoryobject.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
162
        _Py_INCREF_IMMORTAL_STAT_INC();
290
162
        return;
291
162
    }
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
}
moduleobject.c:Py_INCREF
Line
Count
Source
256
8.04k
{
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.04k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
6.49k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
6.49k
        return;
291
6.49k
    }
292
1.55k
    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.55k
    _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.55k
#endif
308
1.55k
}
object.c:Py_INCREF
Line
Count
Source
256
851M
{
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
851M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
573M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
573M
        return;
291
573M
    }
292
277M
    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
277M
    _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
277M
#endif
308
277M
}
Unexecuted instantiation: obmalloc.c:Py_INCREF
Unexecuted instantiation: picklebufobject.c:Py_INCREF
rangeobject.c:Py_INCREF
Line
Count
Source
256
144
{
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
144
    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
36
    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
36
    _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
36
#endif
308
36
}
setobject.c:Py_INCREF
Line
Count
Source
256
13.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
13.6M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.20M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.20M
        return;
291
1.20M
    }
292
12.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
12.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
12.4M
#endif
308
12.4M
}
sliceobject.c:Py_INCREF
Line
Count
Source
256
174M
{
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
174M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
101M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
101M
        return;
291
101M
    }
292
72.5M
    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
72.5M
    _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
72.5M
#endif
308
72.5M
}
structseq.c:Py_INCREF
Line
Count
Source
256
118k
{
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
118k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
107k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
107k
        return;
291
107k
    }
292
10.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
10.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
10.7k
#endif
308
10.7k
}
templateobject.c:Py_INCREF
Line
Count
Source
256
24
{
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
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
8
        _Py_INCREF_IMMORTAL_STAT_INC();
290
8
        return;
291
8
    }
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
}
tupleobject.c:Py_INCREF
Line
Count
Source
256
9.07G
{
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
9.07G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
4.70G
        _Py_INCREF_IMMORTAL_STAT_INC();
290
4.70G
        return;
291
4.70G
    }
292
4.36G
    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.36G
    _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.36G
#endif
308
4.36G
}
typeobject.c:Py_INCREF
Line
Count
Source
256
383M
{
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
383M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
198M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
198M
        return;
291
198M
    }
292
185M
    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
185M
    _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
185M
#endif
308
185M
}
typevarobject.c:Py_INCREF
Line
Count
Source
256
2.12k
{
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.12k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
720
        _Py_INCREF_IMMORTAL_STAT_INC();
290
720
        return;
291
720
    }
292
1.40k
    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.40k
    _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.40k
#endif
308
1.40k
}
unicode_format.c:Py_INCREF
Line
Count
Source
256
17.0M
{
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
17.0M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
6.75M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
6.75M
        return;
291
6.75M
    }
292
10.2M
    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.2M
    _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.2M
#endif
308
10.2M
}
Unexecuted instantiation: unicode_formatter.c:Py_INCREF
unicode_writer.c:Py_INCREF
Line
Count
Source
256
5.54k
{
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.54k
    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
5.54k
    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.54k
    _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.54k
#endif
308
5.54k
}
Unexecuted instantiation: unicodectype.c:Py_INCREF
unicodeobject.c:Py_INCREF
Line
Count
Source
256
712M
{
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
712M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
635M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
635M
        return;
291
635M
    }
292
77.3M
    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
77.3M
    _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
77.3M
#endif
308
77.3M
}
unionobject.c:Py_INCREF
Line
Count
Source
256
920
{
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
920
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
596
        _Py_INCREF_IMMORTAL_STAT_INC();
290
596
        return;
291
596
    }
292
324
    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
324
    _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
324
#endif
308
324
}
weakrefobject.c:Py_INCREF
Line
Count
Source
256
3.36M
{
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.36M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
117k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
117k
        return;
291
117k
    }
292
3.24M
    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.24M
    _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.24M
#endif
308
3.24M
}
_warnings.c:Py_INCREF
Line
Count
Source
256
4.83M
{
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.83M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.46M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.46M
        return;
291
2.46M
    }
292
2.36M
    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.36M
    _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.36M
#endif
308
2.36M
}
bltinmodule.c:Py_INCREF
Line
Count
Source
256
75.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
75.3M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
42.1M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
42.1M
        return;
291
42.1M
    }
292
33.2M
    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.2M
    _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.2M
#endif
308
33.2M
}
ceval.c:Py_INCREF
Line
Count
Source
256
1.03G
{
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.03G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
574M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
574M
        return;
291
574M
    }
292
458M
    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
458M
    _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
458M
#endif
308
458M
}
codecs.c:Py_INCREF
Line
Count
Source
256
6.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
6.72M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
529k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
529k
        return;
291
529k
    }
292
6.20M
    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.20M
    _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.20M
#endif
308
6.20M
}
codegen.c:Py_INCREF
Line
Count
Source
256
2.24k
{
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.24k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.24k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.24k
        return;
291
2.24k
    }
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
80.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
80.8k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
39.4k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
39.4k
        return;
291
39.4k
    }
292
41.4k
    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
41.4k
    _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
41.4k
#endif
308
41.4k
}
context.c:Py_INCREF
Line
Count
Source
256
61
{
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
61
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
25
        _Py_INCREF_IMMORTAL_STAT_INC();
290
25
        return;
291
25
    }
292
36
    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
36
    _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
36
#endif
308
36
}
errors.c:Py_INCREF
Line
Count
Source
256
89.0M
{
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
89.0M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
38.1M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
38.1M
        return;
291
38.1M
    }
292
50.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
50.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
50.9M
#endif
308
50.9M
}
flowgraph.c:Py_INCREF
Line
Count
Source
256
55.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
55.0k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
34.2k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
34.2k
        return;
291
34.2k
    }
292
20.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
20.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
20.8k
#endif
308
20.8k
}
frame.c:Py_INCREF
Line
Count
Source
256
63.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
63.3M
    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
63.3M
    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
63.3M
    _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
63.3M
#endif
308
63.3M
}
Unexecuted instantiation: future.c:Py_INCREF
gc.c:Py_INCREF
Line
Count
Source
256
512M
{
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
512M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
431M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
431M
        return;
291
431M
    }
292
81.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
81.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
81.1M
#endif
308
81.1M
}
Unexecuted instantiation: gc_gil.c:Py_INCREF
getargs.c:Py_INCREF
Line
Count
Source
256
3.39M
{
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.39M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.69M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.69M
        return;
291
2.69M
    }
292
698k
    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
698k
    _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
698k
#endif
308
698k
}
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
17.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
17.8M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
3.91M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
3.91M
        return;
291
3.91M
    }
292
13.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
13.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
13.9M
#endif
308
13.9M
}
importdl.c:Py_INCREF
Line
Count
Source
256
1.38k
{
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.38k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.06k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.06k
        return;
291
1.06k
    }
292
311
    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
311
    _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
311
#endif
308
311
}
initconfig.c:Py_INCREF
Line
Count
Source
256
612
{
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
612
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
612
        _Py_INCREF_IMMORTAL_STAT_INC();
290
612
        return;
291
612
    }
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
64.7k
{
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.7k
    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
64.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
64.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
64.7k
#endif
308
64.7k
}
Unexecuted instantiation: legacy_tracing.c:Py_INCREF
Unexecuted instantiation: lock.c:Py_INCREF
marshal.c:Py_INCREF
Line
Count
Source
256
1.90M
{
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.90M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.74M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.74M
        return;
291
1.74M
    }
292
161k
    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
161k
    _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
161k
#endif
308
161k
}
modsupport.c:Py_INCREF
Line
Count
Source
256
3.89M
{
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.89M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
865k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
865k
        return;
291
865k
    }
292
3.03M
    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.03M
    _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.03M
#endif
308
3.03M
}
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
36
{
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
36
    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
36
    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
36
    _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
36
#endif
308
36
}
Unexecuted instantiation: pymath.c:Py_INCREF
pystate.c:Py_INCREF
Line
Count
Source
256
1.10M
{
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.10M
    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
1.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
1.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
1.10M
#endif
308
1.10M
}
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
structmember.c:Py_INCREF
Line
Count
Source
256
6.89M
{
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.89M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.36M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.36M
        return;
291
1.36M
    }
292
5.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
5.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
5.53M
#endif
308
5.53M
}
symtable.c:Py_INCREF
Line
Count
Source
256
172k
{
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
172k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
172k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
172k
        return;
291
172k
    }
292
324
    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
324
    _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
324
#endif
308
324
}
sysmodule.c:Py_INCREF
Line
Count
Source
256
4.31k
{
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.31k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.39k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.39k
        return;
291
2.39k
    }
292
1.92k
    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.92k
    _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.92k
#endif
308
1.92k
}
Unexecuted instantiation: thread.c:Py_INCREF
traceback.c:Py_INCREF
Line
Count
Source
256
90.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
90.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
90.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
90.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
90.8M
#endif
308
90.8M
}
Unexecuted instantiation: tracemalloc.c:Py_INCREF
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
Unexecuted instantiation: suggestions.c:Py_INCREF
Unexecuted instantiation: perf_trampoline.c:Py_INCREF
Unexecuted instantiation: perf_jit_trampoline.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
6
{
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
    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
6
    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
    _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
#endif
308
6
}
Unexecuted instantiation: faulthandler.c:Py_INCREF
posixmodule.c:Py_INCREF
Line
Count
Source
256
3.82M
{
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.82M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
743k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
743k
        return;
291
743k
    }
292
3.08M
    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.08M
    _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.08M
#endif
308
3.08M
}
signalmodule.c:Py_INCREF
Line
Count
Source
256
2.30k
{
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.30k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.30k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.30k
        return;
291
2.30k
    }
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
32.6k
{
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
32.6k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
18.1k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
18.1k
        return;
291
18.1k
    }
292
14.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
14.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
14.5k
#endif
308
14.5k
}
Unexecuted instantiation: _codecsmodule.c:Py_INCREF
_collectionsmodule.c:Py_INCREF
Line
Count
Source
256
23.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
23.9M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
21.5M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
21.5M
        return;
291
21.5M
    }
292
2.40M
    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.40M
    _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.40M
#endif
308
2.40M
}
Unexecuted instantiation: errnomodule.c:Py_INCREF
_iomodule.c:Py_INCREF
Line
Count
Source
256
301
{
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
301
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
275
        _Py_INCREF_IMMORTAL_STAT_INC();
290
275
        return;
291
275
    }
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
107k
{
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
107k
    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
107k
    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
107k
    _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
107k
#endif
308
107k
}
Unexecuted instantiation: fileio.c:Py_INCREF
bytesio.c:Py_INCREF
Line
Count
Source
256
68.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
68.5k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.14k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.14k
        return;
291
2.14k
    }
292
66.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
66.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
66.3k
#endif
308
66.3k
}
bufferedio.c:Py_INCREF
Line
Count
Source
256
41.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
41.8k
    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
41.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
41.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
41.8k
#endif
308
41.8k
}
textio.c:Py_INCREF
Line
Count
Source
256
590k
{
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
590k
    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
570k
    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
570k
    _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
570k
#endif
308
570k
}
stringio.c:Py_INCREF
Line
Count
Source
256
22.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
22.0k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
99
        _Py_INCREF_IMMORTAL_STAT_INC();
290
99
        return;
291
99
    }
292
21.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
21.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
21.9k
#endif
308
21.9k
}
itertoolsmodule.c:Py_INCREF
Line
Count
Source
256
43.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
43.0k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
41.6k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
41.6k
        return;
291
41.6k
    }
292
1.33k
    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.33k
    _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.33k
#endif
308
1.33k
}
sre.c:Py_INCREF
Line
Count
Source
256
216M
{
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
216M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
60.3M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
60.3M
        return;
291
60.3M
    }
292
155M
    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
155M
    _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
155M
#endif
308
155M
}
Unexecuted instantiation: _sysconfig.c:Py_INCREF
_threadmodule.c:Py_INCREF
Line
Count
Source
256
152
{
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
152
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
76
        _Py_INCREF_IMMORTAL_STAT_INC();
290
76
        return;
291
76
    }
292
76
    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
76
    _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
76
#endif
308
76
}
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
109k
{
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
109k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
109k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
109k
        return;
291
109k
    }
292
415
    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
415
    _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
415
#endif
308
415
}
_functoolsmodule.c:Py_INCREF
Line
Count
Source
256
644k
{
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
644k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
25.7k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
25.7k
        return;
291
25.7k
    }
292
619k
    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
619k
    _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
619k
#endif
308
619k
}
Unexecuted instantiation: _localemodule.c:Py_INCREF
Unexecuted instantiation: _opcode.c:Py_INCREF
_operator.c:Py_INCREF
Line
Count
Source
256
1.23M
{
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.23M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.20M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.20M
        return;
291
1.20M
    }
292
29.0k
    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
29.0k
    _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
29.0k
#endif
308
29.0k
}
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
504
{
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
504
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
504
        _Py_INCREF_IMMORTAL_STAT_INC();
290
504
        return;
291
504
    }
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
Unexecuted instantiation: file_tokenizer.c:Py_INCREF
Unexecuted instantiation: helpers.c:Py_INCREF
Unexecuted instantiation: myreadline.c:Py_INCREF
abstract.c:Py_INCREF
Line
Count
Source
256
558M
{
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
558M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
306M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
306M
        return;
291
306M
    }
292
251M
    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
251M
    _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
251M
#endif
308
251M
}
Unexecuted instantiation: boolobject.c:Py_INCREF
Unexecuted instantiation: bytes_methods.c:Py_INCREF
bytearrayobject.c:Py_INCREF
Line
Count
Source
256
15.0M
{
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
15.0M
    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
15.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
15.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
15.0M
#endif
308
15.0M
}
Unexecuted instantiation: capsule.c:Py_INCREF
cellobject.c:Py_INCREF
Line
Count
Source
256
4.42M
{
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.42M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
993k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
993k
        return;
291
993k
    }
292
3.43M
    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.43M
    _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.43M
#endif
308
3.43M
}
classobject.c:Py_INCREF
Line
Count
Source
256
87.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
87.3M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
160
        _Py_INCREF_IMMORTAL_STAT_INC();
290
160
        return;
291
160
    }
292
87.3M
    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
87.3M
    _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
87.3M
#endif
308
87.3M
}
codeobject.c:Py_INCREF
Line
Count
Source
256
2.13M
{
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.13M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
875k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
875k
        return;
291
875k
    }
292
1.26M
    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.26M
    _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.26M
#endif
308
1.26M
}
complexobject.c:Py_INCREF
Line
Count
Source
256
2.42k
{
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.42k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.42k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.42k
        return;
291
2.42k
    }
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
20.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
20.5M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
70.7k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
70.7k
        return;
291
70.7k
    }
292
20.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
20.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
20.4M
#endif
308
20.4M
}
enumobject.c:Py_INCREF
Line
Count
Source
256
17.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
17.3M
    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
17.3M
    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.3M
    _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.3M
#endif
308
17.3M
}
genobject.c:Py_INCREF
Line
Count
Source
256
46.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
46.3M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
46.1M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
46.1M
        return;
291
46.1M
    }
292
169k
    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
169k
    _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
169k
#endif
308
169k
}
Unexecuted instantiation: fileobject.c:Py_INCREF
frameobject.c:Py_INCREF
Line
Count
Source
256
39.0M
{
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.0M
    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
39.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
39.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
39.0M
#endif
308
39.0M
}
funcobject.c:Py_INCREF
Line
Count
Source
256
92.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
92.1M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
54.9M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
54.9M
        return;
291
54.9M
    }
292
37.2M
    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.2M
    _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.2M
#endif
308
37.2M
}
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.86M
{
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.86M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
380k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
380k
        return;
291
380k
    }
292
2.47M
    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.47M
    _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.47M
#endif
308
2.47M
}
lazyimportobject.c:Py_INCREF
Line
Count
Source
256
580
{
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
580
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
214
        _Py_INCREF_IMMORTAL_STAT_INC();
290
214
        return;
291
214
    }
292
366
    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
366
    _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
366
#endif
308
366
}
odictobject.c:Py_INCREF
Line
Count
Source
256
253k
{
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
253k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
142k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
142k
        return;
291
142k
    }
292
111k
    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
111k
    _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
111k
#endif
308
111k
}
methodobject.c:Py_INCREF
Line
Count
Source
256
150M
{
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
150M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
24.0M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
24.0M
        return;
291
24.0M
    }
292
126M
    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
126M
    _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
126M
#endif
308
126M
}
Unexecuted instantiation: namespaceobject.c:Py_INCREF
Unexecuted instantiation: _contextvars.c:Py_INCREF
Python-ast.c:Py_INCREF
Line
Count
Source
256
551k
{
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
551k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
238k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
238k
        return;
291
238k
    }
292
312k
    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
312k
    _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
312k
#endif
308
312k
}
Unexecuted instantiation: Python-tokenize.c:Py_INCREF
Unexecuted instantiation: asdl.c:Py_INCREF
assemble.c:Py_INCREF
Line
Count
Source
256
29.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
29.4k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
29.4k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
29.4k
        return;
291
29.4k
    }
292
47
    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
47
    _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
47
#endif
308
47
}
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
98.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
98.5k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.49k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.49k
        return;
291
1.49k
    }
292
97.0k
    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
97.0k
    _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
97.0k
#endif
308
97.0k
}
Unexecuted instantiation: pegen_errors.c:Py_INCREF
Unexecuted instantiation: parser.c:Py_INCREF
Unexecuted instantiation: buffer.c:Py_INCREF
Unexecuted instantiation: lexer.c:Py_INCREF
Unexecuted instantiation: state.c:Py_INCREF
readline_tokenizer.c:Py_INCREF
Line
Count
Source
256
20
{
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
    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
20
    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
    _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
#endif
308
20
}
Unexecuted instantiation: string_tokenizer.c:Py_INCREF
Unexecuted instantiation: utf8_tokenizer.c:Py_INCREF
Unexecuted instantiation: getcompiler.c:Py_INCREF
Unexecuted instantiation: mystrtoul.c:Py_INCREF
Unexecuted instantiation: token.c:Py_INCREF
Unexecuted instantiation: action_helpers.c:Py_INCREF
Unexecuted instantiation: string_parser.c:Py_INCREF
309
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
310
17.8G
#  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
9.90k
static inline void Py_DECREF(PyObject *op) {
334
9.90k
#  if Py_LIMITED_API+0 >= 0x030a00A7
335
9.90k
    _Py_DecRef(op);
336
#  else
337
    Py_DecRef(op);
338
#  endif
339
9.90k
}
errnomodule.c:Py_DECREF
Line
Count
Source
333
9.90k
static inline void Py_DECREF(PyObject *op) {
334
9.90k
#  if Py_LIMITED_API+0 >= 0x030a00A7
335
9.90k
    _Py_DecRef(op);
336
#  else
337
    Py_DecRef(op);
338
#  endif
339
9.90k
}
Unexecuted instantiation: _stat.c:Py_DECREF
340
9.90k
#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
18.2G
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
18.2G
    if (_Py_IsImmortal(op)) {
422
9.37G
        _Py_DECREF_IMMORTAL_STAT_INC();
423
9.37G
        return;
424
9.37G
    }
425
8.84G
    _Py_DECREF_STAT_INC();
426
8.84G
    if (--op->ob_refcnt == 0) {
427
1.21G
        _Py_Dealloc(op);
428
1.21G
    }
429
8.84G
}
bytesobject.c:Py_DECREF
Line
Count
Source
418
24.5M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
24.5M
    if (_Py_IsImmortal(op)) {
422
22.2M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
22.2M
        return;
424
22.2M
    }
425
2.28M
    _Py_DECREF_STAT_INC();
426
2.28M
    if (--op->ob_refcnt == 0) {
427
156k
        _Py_Dealloc(op);
428
156k
    }
429
2.28M
}
call.c:Py_DECREF
Line
Count
Source
418
220M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
220M
    if (_Py_IsImmortal(op)) {
422
82.9M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
82.9M
        return;
424
82.9M
    }
425
137M
    _Py_DECREF_STAT_INC();
426
137M
    if (--op->ob_refcnt == 0) {
427
101M
        _Py_Dealloc(op);
428
101M
    }
429
137M
}
exceptions.c:Py_DECREF
Line
Count
Source
418
207M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
207M
    if (_Py_IsImmortal(op)) {
422
51.2M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
51.2M
        return;
424
51.2M
    }
425
156M
    _Py_DECREF_STAT_INC();
426
156M
    if (--op->ob_refcnt == 0) {
427
93.0M
        _Py_Dealloc(op);
428
93.0M
    }
429
156M
}
genericaliasobject.c:Py_DECREF
Line
Count
Source
418
548
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
548
    if (_Py_IsImmortal(op)) {
422
210
        _Py_DECREF_IMMORTAL_STAT_INC();
423
210
        return;
424
210
    }
425
338
    _Py_DECREF_STAT_INC();
426
338
    if (--op->ob_refcnt == 0) {
427
254
        _Py_Dealloc(op);
428
254
    }
429
338
}
floatobject.c:Py_DECREF
Line
Count
Source
418
502k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
502k
    if (_Py_IsImmortal(op)) {
422
54.0k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
54.0k
        return;
424
54.0k
    }
425
448k
    _Py_DECREF_STAT_INC();
426
448k
    if (--op->ob_refcnt == 0) {
427
4
        _Py_Dealloc(op);
428
4
    }
429
448k
}
listobject.c:Py_DECREF
Line
Count
Source
418
1.63G
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.63G
    if (_Py_IsImmortal(op)) {
422
428M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
428M
        return;
424
428M
    }
425
1.20G
    _Py_DECREF_STAT_INC();
426
1.20G
    if (--op->ob_refcnt == 0) {
427
254M
        _Py_Dealloc(op);
428
254M
    }
429
1.20G
}
longobject.c:Py_DECREF
Line
Count
Source
418
38.3M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
38.3M
    if (_Py_IsImmortal(op)) {
422
25.6M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
25.6M
        return;
424
25.6M
    }
425
12.7M
    _Py_DECREF_STAT_INC();
426
12.7M
    if (--op->ob_refcnt == 0) {
427
3.53M
        _Py_Dealloc(op);
428
3.53M
    }
429
12.7M
}
dictobject.c:Py_DECREF
Line
Count
Source
418
667M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
667M
    if (_Py_IsImmortal(op)) {
422
294M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
294M
        return;
424
294M
    }
425
373M
    _Py_DECREF_STAT_INC();
426
373M
    if (--op->ob_refcnt == 0) {
427
96.6M
        _Py_Dealloc(op);
428
96.6M
    }
429
373M
}
memoryobject.c:Py_DECREF
Line
Count
Source
418
3.47M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
3.47M
    if (_Py_IsImmortal(op)) {
422
118k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
118k
        return;
424
118k
    }
425
3.35M
    _Py_DECREF_STAT_INC();
426
3.35M
    if (--op->ob_refcnt == 0) {
427
1.59M
        _Py_Dealloc(op);
428
1.59M
    }
429
3.35M
}
moduleobject.c:Py_DECREF
Line
Count
Source
418
4.49M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
4.49M
    if (_Py_IsImmortal(op)) {
422
4.45M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
4.45M
        return;
424
4.45M
    }
425
35.4k
    _Py_DECREF_STAT_INC();
426
35.4k
    if (--op->ob_refcnt == 0) {
427
4.02k
        _Py_Dealloc(op);
428
4.02k
    }
429
35.4k
}
object.c:Py_DECREF
Line
Count
Source
418
786M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
786M
    if (_Py_IsImmortal(op)) {
422
550M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
550M
        return;
424
550M
    }
425
236M
    _Py_DECREF_STAT_INC();
426
236M
    if (--op->ob_refcnt == 0) {
427
12.8k
        _Py_Dealloc(op);
428
12.8k
    }
429
236M
}
Unexecuted instantiation: obmalloc.c:Py_DECREF
Unexecuted instantiation: picklebufobject.c:Py_DECREF
rangeobject.c:Py_DECREF
Line
Count
Source
418
48.4M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
48.4M
    if (_Py_IsImmortal(op)) {
422
48.1M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
48.1M
        return;
424
48.1M
    }
425
358k
    _Py_DECREF_STAT_INC();
426
358k
    if (--op->ob_refcnt == 0) {
427
224k
        _Py_Dealloc(op);
428
224k
    }
429
358k
}
setobject.c:Py_DECREF
Line
Count
Source
418
15.6M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
15.6M
    if (_Py_IsImmortal(op)) {
422
4.18M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
4.18M
        return;
424
4.18M
    }
425
11.4M
    _Py_DECREF_STAT_INC();
426
11.4M
    if (--op->ob_refcnt == 0) {
427
2.49M
        _Py_Dealloc(op);
428
2.49M
    }
429
11.4M
}
sliceobject.c:Py_DECREF
Line
Count
Source
418
174M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
174M
    if (_Py_IsImmortal(op)) {
422
101M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
101M
        return;
424
101M
    }
425
72.5M
    _Py_DECREF_STAT_INC();
426
72.5M
    if (--op->ob_refcnt == 0) {
427
26.7k
        _Py_Dealloc(op);
428
26.7k
    }
429
72.5M
}
structseq.c:Py_DECREF
Line
Count
Source
418
9.51M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
9.51M
    if (_Py_IsImmortal(op)) {
422
2.88M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
2.88M
        return;
424
2.88M
    }
425
6.63M
    _Py_DECREF_STAT_INC();
426
6.63M
    if (--op->ob_refcnt == 0) {
427
6.09M
        _Py_Dealloc(op);
428
6.09M
    }
429
6.63M
}
templateobject.c:Py_DECREF
Line
Count
Source
418
24
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
24
    if (_Py_IsImmortal(op)) {
422
8
        _Py_DECREF_IMMORTAL_STAT_INC();
423
8
        return;
424
8
    }
425
16
    _Py_DECREF_STAT_INC();
426
16
    if (--op->ob_refcnt == 0) {
427
4
        _Py_Dealloc(op);
428
4
    }
429
16
}
tupleobject.c:Py_DECREF
Line
Count
Source
418
9.40G
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
9.40G
    if (_Py_IsImmortal(op)) {
422
4.80G
        _Py_DECREF_IMMORTAL_STAT_INC();
423
4.80G
        return;
424
4.80G
    }
425
4.60G
    _Py_DECREF_STAT_INC();
426
4.60G
    if (--op->ob_refcnt == 0) {
427
122M
        _Py_Dealloc(op);
428
122M
    }
429
4.60G
}
typeobject.c:Py_DECREF
Line
Count
Source
418
415M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
415M
    if (_Py_IsImmortal(op)) {
422
105M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
105M
        return;
424
105M
    }
425
309M
    _Py_DECREF_STAT_INC();
426
309M
    if (--op->ob_refcnt == 0) {
427
45.7M
        _Py_Dealloc(op);
428
45.7M
    }
429
309M
}
typevarobject.c:Py_DECREF
Line
Count
Source
418
258k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
258k
    if (_Py_IsImmortal(op)) {
422
548
        _Py_DECREF_IMMORTAL_STAT_INC();
423
548
        return;
424
548
    }
425
257k
    _Py_DECREF_STAT_INC();
426
257k
    if (--op->ob_refcnt == 0) {
427
1.04k
        _Py_Dealloc(op);
428
1.04k
    }
429
257k
}
unicode_format.c:Py_DECREF
Line
Count
Source
418
33.2M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
33.2M
    if (_Py_IsImmortal(op)) {
422
6.80M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
6.80M
        return;
424
6.80M
    }
425
26.4M
    _Py_DECREF_STAT_INC();
426
26.4M
    if (--op->ob_refcnt == 0) {
427
10.7M
        _Py_Dealloc(op);
428
10.7M
    }
429
26.4M
}
unicode_formatter.c:Py_DECREF
Line
Count
Source
418
14.6M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
14.6M
    if (_Py_IsImmortal(op)) {
422
10.9M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
10.9M
        return;
424
10.9M
    }
425
3.66M
    _Py_DECREF_STAT_INC();
426
3.66M
    if (--op->ob_refcnt == 0) {
427
3.66M
        _Py_Dealloc(op);
428
3.66M
    }
429
3.66M
}
unicode_writer.c:Py_DECREF
Line
Count
Source
418
31.0M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
31.0M
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
31.0M
    _Py_DECREF_STAT_INC();
426
31.0M
    if (--op->ob_refcnt == 0) {
427
31.0M
        _Py_Dealloc(op);
428
31.0M
    }
429
31.0M
}
Unexecuted instantiation: unicodectype.c:Py_DECREF
unicodeobject.c:Py_DECREF
Line
Count
Source
418
165M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
165M
    if (_Py_IsImmortal(op)) {
422
86.6M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
86.6M
        return;
424
86.6M
    }
425
78.6M
    _Py_DECREF_STAT_INC();
426
78.6M
    if (--op->ob_refcnt == 0) {
427
15.6M
        _Py_Dealloc(op);
428
15.6M
    }
429
78.6M
}
unionobject.c:Py_DECREF
Line
Count
Source
418
4.34k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
4.34k
    if (_Py_IsImmortal(op)) {
422
572
        _Py_DECREF_IMMORTAL_STAT_INC();
423
572
        return;
424
572
    }
425
3.76k
    _Py_DECREF_STAT_INC();
426
3.76k
    if (--op->ob_refcnt == 0) {
427
3.18k
        _Py_Dealloc(op);
428
3.18k
    }
429
3.76k
}
weakrefobject.c:Py_DECREF
Line
Count
Source
418
2.59M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
2.59M
    if (_Py_IsImmortal(op)) {
422
144k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
144k
        return;
424
144k
    }
425
2.44M
    _Py_DECREF_STAT_INC();
426
2.44M
    if (--op->ob_refcnt == 0) {
427
28.0k
        _Py_Dealloc(op);
428
28.0k
    }
429
2.44M
}
_warnings.c:Py_DECREF
Line
Count
Source
418
54.9M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
54.9M
    if (_Py_IsImmortal(op)) {
422
5.77M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
5.77M
        return;
424
5.77M
    }
425
49.1M
    _Py_DECREF_STAT_INC();
426
49.1M
    if (--op->ob_refcnt == 0) {
427
2.23M
        _Py_Dealloc(op);
428
2.23M
    }
429
49.1M
}
bltinmodule.c:Py_DECREF
Line
Count
Source
418
2.11G
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
2.11G
    if (_Py_IsImmortal(op)) {
422
1.92G
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.92G
        return;
424
1.92G
    }
425
192M
    _Py_DECREF_STAT_INC();
426
192M
    if (--op->ob_refcnt == 0) {
427
132M
        _Py_Dealloc(op);
428
132M
    }
429
192M
}
ceval.c:Py_DECREF
Line
Count
Source
418
122k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
122k
    if (_Py_IsImmortal(op)) {
422
684
        _Py_DECREF_IMMORTAL_STAT_INC();
423
684
        return;
424
684
    }
425
121k
    _Py_DECREF_STAT_INC();
426
121k
    if (--op->ob_refcnt == 0) {
427
1.02k
        _Py_Dealloc(op);
428
1.02k
    }
429
121k
}
codecs.c:Py_DECREF
Line
Count
Source
418
14.1M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
14.1M
    if (_Py_IsImmortal(op)) {
422
4.93M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
4.93M
        return;
424
4.93M
    }
425
9.16M
    _Py_DECREF_STAT_INC();
426
9.16M
    if (--op->ob_refcnt == 0) {
427
4.47M
        _Py_Dealloc(op);
428
4.47M
    }
429
9.16M
}
codegen.c:Py_DECREF
Line
Count
Source
418
92.6k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
92.6k
    if (_Py_IsImmortal(op)) {
422
81.8k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
81.8k
        return;
424
81.8k
    }
425
10.7k
    _Py_DECREF_STAT_INC();
426
10.7k
    if (--op->ob_refcnt == 0) {
427
364
        _Py_Dealloc(op);
428
364
    }
429
10.7k
}
compile.c:Py_DECREF
Line
Count
Source
418
422k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
422k
    if (_Py_IsImmortal(op)) {
422
214k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
214k
        return;
424
214k
    }
425
207k
    _Py_DECREF_STAT_INC();
426
207k
    if (--op->ob_refcnt == 0) {
427
77.5k
        _Py_Dealloc(op);
428
77.5k
    }
429
207k
}
context.c:Py_DECREF
Line
Count
Source
418
72
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
72
    if (_Py_IsImmortal(op)) {
422
36
        _Py_DECREF_IMMORTAL_STAT_INC();
423
36
        return;
424
36
    }
425
36
    _Py_DECREF_STAT_INC();
426
36
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
36
}
errors.c:Py_DECREF
Line
Count
Source
418
92.2M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
92.2M
    if (_Py_IsImmortal(op)) {
422
38.1M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
38.1M
        return;
424
38.1M
    }
425
54.1M
    _Py_DECREF_STAT_INC();
426
54.1M
    if (--op->ob_refcnt == 0) {
427
18.9M
        _Py_Dealloc(op);
428
18.9M
    }
429
54.1M
}
flowgraph.c:Py_DECREF
Line
Count
Source
418
44.7k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
44.7k
    if (_Py_IsImmortal(op)) {
422
29.7k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
29.7k
        return;
424
29.7k
    }
425
15.0k
    _Py_DECREF_STAT_INC();
426
15.0k
    if (--op->ob_refcnt == 0) {
427
217
        _Py_Dealloc(op);
428
217
    }
429
15.0k
}
frame.c:Py_DECREF
Line
Count
Source
418
58.7M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
58.7M
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
58.7M
    _Py_DECREF_STAT_INC();
426
58.7M
    if (--op->ob_refcnt == 0) {
427
16.4M
        _Py_Dealloc(op);
428
16.4M
    }
429
58.7M
}
Unexecuted instantiation: future.c:Py_DECREF
gc.c:Py_DECREF
Line
Count
Source
418
3.91M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
3.91M
    if (_Py_IsImmortal(op)) {
422
45.7k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
45.7k
        return;
424
45.7k
    }
425
3.87M
    _Py_DECREF_STAT_INC();
426
3.87M
    if (--op->ob_refcnt == 0) {
427
889k
        _Py_Dealloc(op);
428
889k
    }
429
3.87M
}
Unexecuted instantiation: gc_gil.c:Py_DECREF
getargs.c:Py_DECREF
Line
Count
Source
418
10.0M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
10.0M
    if (_Py_IsImmortal(op)) {
422
9.25M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
9.25M
        return;
424
9.25M
    }
425
814k
    _Py_DECREF_STAT_INC();
426
814k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
814k
}
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
28.4M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
28.4M
    if (_Py_IsImmortal(op)) {
422
3.92M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
3.92M
        return;
424
3.92M
    }
425
24.4M
    _Py_DECREF_STAT_INC();
426
24.4M
    if (--op->ob_refcnt == 0) {
427
294k
        _Py_Dealloc(op);
428
294k
    }
429
24.4M
}
importdl.c:Py_DECREF
Line
Count
Source
418
3.17k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
3.17k
    if (_Py_IsImmortal(op)) {
422
1.26k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.26k
        return;
424
1.26k
    }
425
1.91k
    _Py_DECREF_STAT_INC();
426
1.91k
    if (--op->ob_refcnt == 0) {
427
1.17k
        _Py_Dealloc(op);
428
1.17k
    }
429
1.91k
}
initconfig.c:Py_DECREF
Line
Count
Source
418
5.11k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
5.11k
    if (_Py_IsImmortal(op)) {
422
4.14k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
4.14k
        return;
424
4.14k
    }
425
972
    _Py_DECREF_STAT_INC();
426
972
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
972
}
instrumentation.c:Py_DECREF
Line
Count
Source
418
864
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
864
    if (_Py_IsImmortal(op)) {
422
540
        _Py_DECREF_IMMORTAL_STAT_INC();
423
540
        return;
424
540
    }
425
324
    _Py_DECREF_STAT_INC();
426
324
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
324
}
Unexecuted instantiation: instruction_sequence.c:Py_DECREF
intrinsics.c:Py_DECREF
Line
Count
Source
418
73.0k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
73.0k
    if (_Py_IsImmortal(op)) {
422
41.5k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
41.5k
        return;
424
41.5k
    }
425
31.5k
    _Py_DECREF_STAT_INC();
426
31.5k
    if (--op->ob_refcnt == 0) {
427
325
        _Py_Dealloc(op);
428
325
    }
429
31.5k
}
Unexecuted instantiation: legacy_tracing.c:Py_DECREF
Unexecuted instantiation: lock.c:Py_DECREF
marshal.c:Py_DECREF
Line
Count
Source
418
1.75M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.75M
    if (_Py_IsImmortal(op)) {
422
723k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
723k
        return;
424
723k
    }
425
1.02M
    _Py_DECREF_STAT_INC();
426
1.02M
    if (--op->ob_refcnt == 0) {
427
6.58k
        _Py_Dealloc(op);
428
6.58k
    }
429
1.02M
}
modsupport.c:Py_DECREF
Line
Count
Source
418
98.7k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
98.7k
    if (_Py_IsImmortal(op)) {
422
47.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
47.2k
        return;
424
47.2k
    }
425
51.4k
    _Py_DECREF_STAT_INC();
426
51.4k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
51.4k
}
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
14.1M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
14.1M
    if (_Py_IsImmortal(op)) {
422
13.4M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
13.4M
        return;
424
13.4M
    }
425
705k
    _Py_DECREF_STAT_INC();
426
705k
    if (--op->ob_refcnt == 0) {
427
99.6k
        _Py_Dealloc(op);
428
99.6k
    }
429
705k
}
Unexecuted instantiation: pyctype.c:Py_DECREF
Unexecuted instantiation: pyhash.c:Py_DECREF
pylifecycle.c:Py_DECREF
Line
Count
Source
418
1.29k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.29k
    if (_Py_IsImmortal(op)) {
422
252
        _Py_DECREF_IMMORTAL_STAT_INC();
423
252
        return;
424
252
    }
425
1.04k
    _Py_DECREF_STAT_INC();
426
1.04k
    if (--op->ob_refcnt == 0) {
427
108
        _Py_Dealloc(op);
428
108
    }
429
1.04k
}
Unexecuted instantiation: pymath.c:Py_DECREF
Unexecuted instantiation: pystate.c:Py_DECREF
pythonrun.c:Py_DECREF
Line
Count
Source
418
2.11k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
2.11k
    if (_Py_IsImmortal(op)) {
422
504
        _Py_DECREF_IMMORTAL_STAT_INC();
423
504
        return;
424
504
    }
425
1.61k
    _Py_DECREF_STAT_INC();
426
1.61k
    if (--op->ob_refcnt == 0) {
427
657
        _Py_Dealloc(op);
428
657
    }
429
1.61k
}
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.16M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
2.16M
    if (_Py_IsImmortal(op)) {
422
1.11M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.11M
        return;
424
1.11M
    }
425
1.05M
    _Py_DECREF_STAT_INC();
426
1.05M
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
1.05M
}
structmember.c:Py_DECREF
Line
Count
Source
418
17.7k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
17.7k
    if (_Py_IsImmortal(op)) {
422
9.33k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
9.33k
        return;
424
9.33k
    }
425
8.37k
    _Py_DECREF_STAT_INC();
426
8.37k
    if (--op->ob_refcnt == 0) {
427
171
        _Py_Dealloc(op);
428
171
    }
429
8.37k
}
symtable.c:Py_DECREF
Line
Count
Source
418
539k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
539k
    if (_Py_IsImmortal(op)) {
422
234k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
234k
        return;
424
234k
    }
425
304k
    _Py_DECREF_STAT_INC();
426
304k
    if (--op->ob_refcnt == 0) {
427
159k
        _Py_Dealloc(op);
428
159k
    }
429
304k
}
sysmodule.c:Py_DECREF
Line
Count
Source
418
4.59M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
4.59M
    if (_Py_IsImmortal(op)) {
422
1.07M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.07M
        return;
424
1.07M
    }
425
3.52M
    _Py_DECREF_STAT_INC();
426
3.52M
    if (--op->ob_refcnt == 0) {
427
2.63M
        _Py_Dealloc(op);
428
2.63M
    }
429
3.52M
}
Unexecuted instantiation: thread.c:Py_DECREF
traceback.c:Py_DECREF
Line
Count
Source
418
181M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
181M
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
181M
    _Py_DECREF_STAT_INC();
426
181M
    if (--op->ob_refcnt == 0) {
427
56.1M
        _Py_Dealloc(op);
428
56.1M
    }
429
181M
}
Unexecuted instantiation: tracemalloc.c:Py_DECREF
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
87.9k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
87.9k
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
87.9k
    _Py_DECREF_STAT_INC();
426
87.9k
    if (--op->ob_refcnt == 0) {
427
87.9k
        _Py_Dealloc(op);
428
87.9k
    }
429
87.9k
}
Unexecuted instantiation: suggestions.c:Py_DECREF
Unexecuted instantiation: perf_trampoline.c:Py_DECREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_DECREF
Unexecuted instantiation: remote_debugging.c:Py_DECREF
dynload_shlib.c:Py_DECREF
Line
Count
Source
418
12
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
12
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
12
    _Py_DECREF_STAT_INC();
426
12
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
12
}
Unexecuted instantiation: config.c:Py_DECREF
Unexecuted instantiation: gcmodule.c:Py_DECREF
_asynciomodule.c:Py_DECREF
Line
Count
Source
418
32
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
32
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
32
    _Py_DECREF_STAT_INC();
426
32
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
32
}
atexitmodule.c:Py_DECREF
Line
Count
Source
418
12
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
12
    if (_Py_IsImmortal(op)) {
422
6
        _Py_DECREF_IMMORTAL_STAT_INC();
423
6
        return;
424
6
    }
425
6
    _Py_DECREF_STAT_INC();
426
6
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
6
}
Unexecuted instantiation: faulthandler.c:Py_DECREF
posixmodule.c:Py_DECREF
Line
Count
Source
418
5.04M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
5.04M
    if (_Py_IsImmortal(op)) {
422
1.78M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.78M
        return;
424
1.78M
    }
425
3.26M
    _Py_DECREF_STAT_INC();
426
3.26M
    if (--op->ob_refcnt == 0) {
427
1.42M
        _Py_Dealloc(op);
428
1.42M
    }
429
3.26M
}
signalmodule.c:Py_DECREF
Line
Count
Source
418
72
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
72
    if (_Py_IsImmortal(op)) {
422
36
        _Py_DECREF_IMMORTAL_STAT_INC();
423
36
        return;
424
36
    }
425
36
    _Py_DECREF_STAT_INC();
426
36
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
36
}
Unexecuted instantiation: _tracemalloc.c:Py_DECREF
Unexecuted instantiation: _suggestions.c:Py_DECREF
_datetimemodule.c:Py_DECREF
Line
Count
Source
418
129k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
129k
    if (_Py_IsImmortal(op)) {
422
20.0k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
20.0k
        return;
424
20.0k
    }
425
109k
    _Py_DECREF_STAT_INC();
426
109k
    if (--op->ob_refcnt == 0) {
427
55.2k
        _Py_Dealloc(op);
428
55.2k
    }
429
109k
}
Unexecuted instantiation: _codecsmodule.c:Py_DECREF
_collectionsmodule.c:Py_DECREF
Line
Count
Source
418
186k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
186k
    if (_Py_IsImmortal(op)) {
422
90.6k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
90.6k
        return;
424
90.6k
    }
425
95.9k
    _Py_DECREF_STAT_INC();
426
95.9k
    if (--op->ob_refcnt == 0) {
427
40.5k
        _Py_Dealloc(op);
428
40.5k
    }
429
95.9k
}
_iomodule.c:Py_DECREF
Line
Count
Source
418
2.51M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
2.51M
    if (_Py_IsImmortal(op)) {
422
2.39M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
2.39M
        return;
424
2.39M
    }
425
126k
    _Py_DECREF_STAT_INC();
426
126k
    if (--op->ob_refcnt == 0) {
427
61.5k
        _Py_Dealloc(op);
428
61.5k
    }
429
126k
}
iobase.c:Py_DECREF
Line
Count
Source
418
2.73M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
2.73M
    if (_Py_IsImmortal(op)) {
422
2.62M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
2.62M
        return;
424
2.62M
    }
425
106k
    _Py_DECREF_STAT_INC();
426
106k
    if (--op->ob_refcnt == 0) {
427
53.0k
        _Py_Dealloc(op);
428
53.0k
    }
429
106k
}
fileio.c:Py_DECREF
Line
Count
Source
418
91.7k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
91.7k
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
91.7k
    _Py_DECREF_STAT_INC();
426
91.7k
    if (--op->ob_refcnt == 0) {
427
61.1k
        _Py_Dealloc(op);
428
61.1k
    }
429
91.7k
}
bytesio.c:Py_DECREF
Line
Count
Source
418
360k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
360k
    if (_Py_IsImmortal(op)) {
422
145k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
145k
        return;
424
145k
    }
425
215k
    _Py_DECREF_STAT_INC();
426
215k
    if (--op->ob_refcnt == 0) {
427
14.6k
        _Py_Dealloc(op);
428
14.6k
    }
429
215k
}
bufferedio.c:Py_DECREF
Line
Count
Source
418
9.83M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
9.83M
    if (_Py_IsImmortal(op)) {
422
9.36M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
9.36M
        return;
424
9.36M
    }
425
462k
    _Py_DECREF_STAT_INC();
426
462k
    if (--op->ob_refcnt == 0) {
427
379k
        _Py_Dealloc(op);
428
379k
    }
429
462k
}
textio.c:Py_DECREF
Line
Count
Source
418
1.05M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.05M
    if (_Py_IsImmortal(op)) {
422
279k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
279k
        return;
424
279k
    }
425
777k
    _Py_DECREF_STAT_INC();
426
777k
    if (--op->ob_refcnt == 0) {
427
247k
        _Py_Dealloc(op);
428
247k
    }
429
777k
}
stringio.c:Py_DECREF
Line
Count
Source
418
305k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
305k
    if (_Py_IsImmortal(op)) {
422
157k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
157k
        return;
424
157k
    }
425
148k
    _Py_DECREF_STAT_INC();
426
148k
    if (--op->ob_refcnt == 0) {
427
32.0k
        _Py_Dealloc(op);
428
32.0k
    }
429
148k
}
itertoolsmodule.c:Py_DECREF
Line
Count
Source
418
97.4k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
97.4k
    if (_Py_IsImmortal(op)) {
422
5.68k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
5.68k
        return;
424
5.68k
    }
425
91.7k
    _Py_DECREF_STAT_INC();
426
91.7k
    if (--op->ob_refcnt == 0) {
427
31.1k
        _Py_Dealloc(op);
428
31.1k
    }
429
91.7k
}
sre.c:Py_DECREF
Line
Count
Source
418
418M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
418M
    if (_Py_IsImmortal(op)) {
422
150M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
150M
        return;
424
150M
    }
425
267M
    _Py_DECREF_STAT_INC();
426
267M
    if (--op->ob_refcnt == 0) {
427
18.2M
        _Py_Dealloc(op);
428
18.2M
    }
429
267M
}
Unexecuted instantiation: _sysconfig.c:Py_DECREF
_threadmodule.c:Py_DECREF
Line
Count
Source
418
13.6M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
13.6M
    if (_Py_IsImmortal(op)) {
422
4
        _Py_DECREF_IMMORTAL_STAT_INC();
423
4
        return;
424
4
    }
425
13.6M
    _Py_DECREF_STAT_INC();
426
13.6M
    if (--op->ob_refcnt == 0) {
427
8
        _Py_Dealloc(op);
428
8
    }
429
13.6M
}
timemodule.c:Py_DECREF
Line
Count
Source
418
192
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
192
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
192
    _Py_DECREF_STAT_INC();
426
192
    if (--op->ob_refcnt == 0) {
427
192
        _Py_Dealloc(op);
428
192
    }
429
192
}
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
458k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
458k
    if (_Py_IsImmortal(op)) {
422
118k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
118k
        return;
424
118k
    }
425
340k
    _Py_DECREF_STAT_INC();
426
340k
    if (--op->ob_refcnt == 0) {
427
7.78k
        _Py_Dealloc(op);
428
7.78k
    }
429
340k
}
_functoolsmodule.c:Py_DECREF
Line
Count
Source
418
1.09M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.09M
    if (_Py_IsImmortal(op)) {
422
239k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
239k
        return;
424
239k
    }
425
857k
    _Py_DECREF_STAT_INC();
426
857k
    if (--op->ob_refcnt == 0) {
427
463k
        _Py_Dealloc(op);
428
463k
    }
429
857k
}
Unexecuted instantiation: _localemodule.c:Py_DECREF
Unexecuted instantiation: _opcode.c:Py_DECREF
_operator.c:Py_DECREF
Line
Count
Source
418
555k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
555k
    if (_Py_IsImmortal(op)) {
422
277k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
277k
        return;
424
277k
    }
425
277k
    _Py_DECREF_STAT_INC();
426
277k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
277k
}
Unexecuted instantiation: symtablemodule.c:Py_DECREF
Unexecuted instantiation: pwdmodule.c:Py_DECREF
getpath.c:Py_DECREF
Line
Count
Source
418
1.18k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.18k
    if (_Py_IsImmortal(op)) {
422
432
        _Py_DECREF_IMMORTAL_STAT_INC();
423
432
        return;
424
432
    }
425
756
    _Py_DECREF_STAT_INC();
426
756
    if (--op->ob_refcnt == 0) {
427
36
        _Py_Dealloc(op);
428
36
    }
429
756
}
Unexecuted instantiation: frozen.c:Py_DECREF
Unexecuted instantiation: getbuildinfo.c:Py_DECREF
Unexecuted instantiation: peg_api.c:Py_DECREF
Unexecuted instantiation: file_tokenizer.c:Py_DECREF
helpers.c:Py_DECREF
Line
Count
Source
418
21.9k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
21.9k
    if (_Py_IsImmortal(op)) {
422
707
        _Py_DECREF_IMMORTAL_STAT_INC();
423
707
        return;
424
707
    }
425
21.2k
    _Py_DECREF_STAT_INC();
426
21.2k
    if (--op->ob_refcnt == 0) {
427
15.0k
        _Py_Dealloc(op);
428
15.0k
    }
429
21.2k
}
Unexecuted instantiation: myreadline.c:Py_DECREF
abstract.c:Py_DECREF
Line
Count
Source
418
550M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
550M
    if (_Py_IsImmortal(op)) {
422
356M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
356M
        return;
424
356M
    }
425
193M
    _Py_DECREF_STAT_INC();
426
193M
    if (--op->ob_refcnt == 0) {
427
8.59M
        _Py_Dealloc(op);
428
8.59M
    }
429
193M
}
Unexecuted instantiation: boolobject.c:Py_DECREF
Unexecuted instantiation: bytes_methods.c:Py_DECREF
bytearrayobject.c:Py_DECREF
Line
Count
Source
418
19.9M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
19.9M
    if (_Py_IsImmortal(op)) {
422
1.91M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.91M
        return;
424
1.91M
    }
425
18.0M
    _Py_DECREF_STAT_INC();
426
18.0M
    if (--op->ob_refcnt == 0) {
427
18.0M
        _Py_Dealloc(op);
428
18.0M
    }
429
18.0M
}
capsule.c:Py_DECREF
Line
Count
Source
418
28
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
28
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
28
    _Py_DECREF_STAT_INC();
426
28
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
28
}
cellobject.c:Py_DECREF
Line
Count
Source
418
9.86M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
9.86M
    if (_Py_IsImmortal(op)) {
422
1.70M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.70M
        return;
424
1.70M
    }
425
8.15M
    _Py_DECREF_STAT_INC();
426
8.15M
    if (--op->ob_refcnt == 0) {
427
3.42M
        _Py_Dealloc(op);
428
3.42M
    }
429
8.15M
}
classobject.c:Py_DECREF
Line
Count
Source
418
87.3M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
87.3M
    if (_Py_IsImmortal(op)) {
422
160
        _Py_DECREF_IMMORTAL_STAT_INC();
423
160
        return;
424
160
    }
425
87.3M
    _Py_DECREF_STAT_INC();
426
87.3M
    if (--op->ob_refcnt == 0) {
427
5.92k
        _Py_Dealloc(op);
428
5.92k
    }
429
87.3M
}
codeobject.c:Py_DECREF
Line
Count
Source
418
927k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
927k
    if (_Py_IsImmortal(op)) {
422
413k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
413k
        return;
424
413k
    }
425
514k
    _Py_DECREF_STAT_INC();
426
514k
    if (--op->ob_refcnt == 0) {
427
398k
        _Py_Dealloc(op);
428
398k
    }
429
514k
}
Unexecuted instantiation: complexobject.c:Py_DECREF
descrobject.c:Py_DECREF
Line
Count
Source
418
72.7M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
72.7M
    if (_Py_IsImmortal(op)) {
422
10.6M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
10.6M
        return;
424
10.6M
    }
425
62.1M
    _Py_DECREF_STAT_INC();
426
62.1M
    if (--op->ob_refcnt == 0) {
427
33.6M
        _Py_Dealloc(op);
428
33.6M
    }
429
62.1M
}
enumobject.c:Py_DECREF
Line
Count
Source
418
94.3M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
94.3M
    if (_Py_IsImmortal(op)) {
422
15.5M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
15.5M
        return;
424
15.5M
    }
425
78.8M
    _Py_DECREF_STAT_INC();
426
78.8M
    if (--op->ob_refcnt == 0) {
427
59.6M
        _Py_Dealloc(op);
428
59.6M
    }
429
78.8M
}
genobject.c:Py_DECREF
Line
Count
Source
418
57.5M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
57.5M
    if (_Py_IsImmortal(op)) {
422
57.4M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
57.4M
        return;
424
57.4M
    }
425
83.2k
    _Py_DECREF_STAT_INC();
426
83.2k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
83.2k
}
fileobject.c:Py_DECREF
Line
Count
Source
418
367k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
367k
    if (_Py_IsImmortal(op)) {
422
360k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
360k
        return;
424
360k
    }
425
6.21k
    _Py_DECREF_STAT_INC();
426
6.21k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
6.21k
}
frameobject.c:Py_DECREF
Line
Count
Source
418
42.1M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
42.1M
    if (_Py_IsImmortal(op)) {
422
84
        _Py_DECREF_IMMORTAL_STAT_INC();
423
84
        return;
424
84
    }
425
42.1M
    _Py_DECREF_STAT_INC();
426
42.1M
    if (--op->ob_refcnt == 0) {
427
11.4M
        _Py_Dealloc(op);
428
11.4M
    }
429
42.1M
}
funcobject.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
95.6M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
95.6M
        return;
424
95.6M
    }
425
75.0M
    _Py_DECREF_STAT_INC();
426
75.0M
    if (--op->ob_refcnt == 0) {
427
6.56M
        _Py_Dealloc(op);
428
6.56M
    }
429
75.0M
}
interpolationobject.c:Py_DECREF
Line
Count
Source
418
52
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
52
    if (_Py_IsImmortal(op)) {
422
16
        _Py_DECREF_IMMORTAL_STAT_INC();
423
16
        return;
424
16
    }
425
36
    _Py_DECREF_STAT_INC();
426
36
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
36
}
iterobject.c:Py_DECREF
Line
Count
Source
418
3.24M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
3.24M
    if (_Py_IsImmortal(op)) {
422
761k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
761k
        return;
424
761k
    }
425
2.47M
    _Py_DECREF_STAT_INC();
426
2.47M
    if (--op->ob_refcnt == 0) {
427
380k
        _Py_Dealloc(op);
428
380k
    }
429
2.47M
}
lazyimportobject.c:Py_DECREF
Line
Count
Source
418
284
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
284
    if (_Py_IsImmortal(op)) {
422
74
        _Py_DECREF_IMMORTAL_STAT_INC();
423
74
        return;
424
74
    }
425
210
    _Py_DECREF_STAT_INC();
426
210
    if (--op->ob_refcnt == 0) {
427
4
        _Py_Dealloc(op);
428
4
    }
429
210
}
odictobject.c:Py_DECREF
Line
Count
Source
418
369k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
369k
    if (_Py_IsImmortal(op)) {
422
172k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
172k
        return;
424
172k
    }
425
196k
    _Py_DECREF_STAT_INC();
426
196k
    if (--op->ob_refcnt == 0) {
427
47.1k
        _Py_Dealloc(op);
428
47.1k
    }
429
196k
}
methodobject.c:Py_DECREF
Line
Count
Source
418
150M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
150M
    if (_Py_IsImmortal(op)) {
422
24.0M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
24.0M
        return;
424
24.0M
    }
425
126M
    _Py_DECREF_STAT_INC();
426
126M
    if (--op->ob_refcnt == 0) {
427
28.9M
        _Py_Dealloc(op);
428
28.9M
    }
429
126M
}
namespaceobject.c:Py_DECREF
Line
Count
Source
418
52
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
52
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
52
    _Py_DECREF_STAT_INC();
426
52
    if (--op->ob_refcnt == 0) {
427
52
        _Py_Dealloc(op);
428
52
    }
429
52
}
Unexecuted instantiation: _contextvars.c:Py_DECREF
Python-ast.c:Py_DECREF
Line
Count
Source
418
3.88M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
3.88M
    if (_Py_IsImmortal(op)) {
422
2.03M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
2.03M
        return;
424
2.03M
    }
425
1.85M
    _Py_DECREF_STAT_INC();
426
1.85M
    if (--op->ob_refcnt == 0) {
427
482k
        _Py_Dealloc(op);
428
482k
    }
429
1.85M
}
Python-tokenize.c:Py_DECREF
Line
Count
Source
418
504
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
504
    if (_Py_IsImmortal(op)) {
422
196
        _Py_DECREF_IMMORTAL_STAT_INC();
423
196
        return;
424
196
    }
425
308
    _Py_DECREF_STAT_INC();
426
308
    if (--op->ob_refcnt == 0) {
427
20
        _Py_Dealloc(op);
428
20
    }
429
308
}
Unexecuted instantiation: asdl.c:Py_DECREF
assemble.c:Py_DECREF
Line
Count
Source
418
39.5k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
39.5k
    if (_Py_IsImmortal(op)) {
422
8.48k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
8.48k
        return;
424
8.48k
    }
425
31.0k
    _Py_DECREF_STAT_INC();
426
31.0k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
31.0k
}
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
301k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
301k
    if (_Py_IsImmortal(op)) {
422
58.5k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
58.5k
        return;
424
58.5k
    }
425
242k
    _Py_DECREF_STAT_INC();
426
242k
    if (--op->ob_refcnt == 0) {
427
214k
        _Py_Dealloc(op);
428
214k
    }
429
242k
}
pegen_errors.c:Py_DECREF
Line
Count
Source
418
275k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
275k
    if (_Py_IsImmortal(op)) {
422
2.42k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
2.42k
        return;
424
2.42k
    }
425
272k
    _Py_DECREF_STAT_INC();
426
272k
    if (--op->ob_refcnt == 0) {
427
3.47k
        _Py_Dealloc(op);
428
3.47k
    }
429
272k
}
Unexecuted instantiation: parser.c:Py_DECREF
Unexecuted instantiation: buffer.c:Py_DECREF
lexer.c:Py_DECREF
Line
Count
Source
418
12.5k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
12.5k
    if (_Py_IsImmortal(op)) {
422
747
        _Py_DECREF_IMMORTAL_STAT_INC();
423
747
        return;
424
747
    }
425
11.8k
    _Py_DECREF_STAT_INC();
426
11.8k
    if (--op->ob_refcnt == 0) {
427
11.8k
        _Py_Dealloc(op);
428
11.8k
    }
429
11.8k
}
state.c:Py_DECREF
Line
Count
Source
418
98.0k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
98.0k
    if (_Py_IsImmortal(op)) {
422
908
        _Py_DECREF_IMMORTAL_STAT_INC();
423
908
        return;
424
908
    }
425
97.1k
    _Py_DECREF_STAT_INC();
426
97.1k
    if (--op->ob_refcnt == 0) {
427
71
        _Py_Dealloc(op);
428
71
    }
429
97.1k
}
readline_tokenizer.c:Py_DECREF
Line
Count
Source
418
348
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
348
    if (_Py_IsImmortal(op)) {
422
44
        _Py_DECREF_IMMORTAL_STAT_INC();
423
44
        return;
424
44
    }
425
304
    _Py_DECREF_STAT_INC();
426
304
    if (--op->ob_refcnt == 0) {
427
68
        _Py_Dealloc(op);
428
68
    }
429
304
}
string_tokenizer.c:Py_DECREF
Line
Count
Source
418
2.08k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
2.08k
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
2.08k
    _Py_DECREF_STAT_INC();
426
2.08k
    if (--op->ob_refcnt == 0) {
427
2.08k
        _Py_Dealloc(op);
428
2.08k
    }
429
2.08k
}
Unexecuted instantiation: utf8_tokenizer.c:Py_DECREF
Unexecuted instantiation: getcompiler.c:Py_DECREF
Unexecuted instantiation: mystrtoul.c:Py_DECREF
Unexecuted instantiation: token.c:Py_DECREF
Unexecuted instantiation: action_helpers.c:Py_DECREF
string_parser.c:Py_DECREF
Line
Count
Source
418
41.5k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
41.5k
    if (_Py_IsImmortal(op)) {
422
3.32k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
3.32k
        return;
424
3.32k
    }
425
38.1k
    _Py_DECREF_STAT_INC();
426
38.1k
    if (--op->ob_refcnt == 0) {
427
38.1k
        _Py_Dealloc(op);
428
38.1k
    }
429
38.1k
}
430
18.2G
#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
#ifdef _Py_TYPEOF
483
#define Py_CLEAR(op) \
484
2.48G
    do { \
485
2.48G
        _Py_TYPEOF(op)* _tmp_op_ptr = &(op); \
486
2.48G
        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
487
2.48G
        if (_tmp_old_op != NULL) { \
488
544M
            *_tmp_op_ptr = _Py_NULL; \
489
544M
            Py_DECREF(_tmp_old_op); \
490
544M
        } \
491
2.48G
    } while (0)
492
#else
493
#define Py_CLEAR(op) \
494
    do { \
495
        PyObject **_tmp_op_ptr = _Py_CAST(PyObject**, &(op)); \
496
        PyObject *_tmp_old_op = (*_tmp_op_ptr); \
497
        if (_tmp_old_op != NULL) { \
498
            PyObject *_null_ptr = _Py_NULL; \
499
            memcpy(_tmp_op_ptr, &_null_ptr, sizeof(PyObject*)); \
500
            Py_DECREF(_tmp_old_op); \
501
        } \
502
    } while (0)
503
#endif
504
505
506
/* Function to use in case the object pointer can be NULL: */
507
static inline void Py_XINCREF(PyObject *op)
508
1.29G
{
509
1.29G
    if (op != _Py_NULL) {
510
639M
        Py_INCREF(op);
511
639M
    }
512
1.29G
}
Unexecuted instantiation: bytesobject.c:Py_XINCREF
Unexecuted instantiation: call.c:Py_XINCREF
exceptions.c:Py_XINCREF
Line
Count
Source
508
121M
{
509
121M
    if (op != _Py_NULL) {
510
27.5M
        Py_INCREF(op);
511
27.5M
    }
512
121M
}
Unexecuted instantiation: genericaliasobject.c:Py_XINCREF
Unexecuted instantiation: floatobject.c:Py_XINCREF
listobject.c:Py_XINCREF
Line
Count
Source
508
50.1M
{
509
50.1M
    if (op != _Py_NULL) {
510
50.1M
        Py_INCREF(op);
511
50.1M
    }
512
50.1M
}
Unexecuted instantiation: longobject.c:Py_XINCREF
dictobject.c:Py_XINCREF
Line
Count
Source
508
230M
{
509
230M
    if (op != _Py_NULL) {
510
68.6M
        Py_INCREF(op);
511
68.6M
    }
512
230M
}
memoryobject.c:Py_XINCREF
Line
Count
Source
508
162
{
509
162
    if (op != _Py_NULL) {
510
162
        Py_INCREF(op);
511
162
    }
512
162
}
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
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
508
474k
{
509
474k
    if (op != _Py_NULL) {
510
234k
        Py_INCREF(op);
511
234k
    }
512
474k
}
typevarobject.c:Py_XINCREF
Line
Count
Source
508
1.10k
{
509
1.10k
    if (op != _Py_NULL) {
510
224
        Py_INCREF(op);
511
224
    }
512
1.10k
}
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
508
1.30M
{
509
1.30M
    if (op != _Py_NULL) {
510
683k
        Py_INCREF(op);
511
683k
    }
512
1.30M
}
Unexecuted instantiation: _warnings.c:Py_XINCREF
bltinmodule.c:Py_XINCREF
Line
Count
Source
508
1.31k
{
509
1.31k
    if (op != _Py_NULL) {
510
1.31k
        Py_INCREF(op);
511
1.31k
    }
512
1.31k
}
ceval.c:Py_XINCREF
Line
Count
Source
508
293M
{
509
293M
    if (op != _Py_NULL) {
510
92.1M
        Py_INCREF(op);
511
92.1M
    }
512
293M
}
Unexecuted instantiation: codecs.c:Py_XINCREF
Unexecuted instantiation: codegen.c:Py_XINCREF
compile.c:Py_XINCREF
Line
Count
Source
508
9.18k
{
509
9.18k
    if (op != _Py_NULL) {
510
3.49k
        Py_INCREF(op);
511
3.49k
    }
512
9.18k
}
context.c:Py_XINCREF
Line
Count
Source
508
263k
{
509
263k
    if (op != _Py_NULL) {
510
0
        Py_INCREF(op);
511
0
    }
512
263k
}
errors.c:Py_XINCREF
Line
Count
Source
508
41.7M
{
509
41.7M
    if (op != _Py_NULL) {
510
41.6M
        Py_INCREF(op);
511
41.6M
    }
512
41.7M
}
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
508
31.0k
{
509
31.0k
    if (op != _Py_NULL) {
510
25.5k
        Py_INCREF(op);
511
25.5k
    }
512
31.0k
}
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
508
1.10M
{
509
1.10M
    if (op != _Py_NULL) {
510
1.10M
        Py_INCREF(op);
511
1.10M
    }
512
1.10M
}
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
structmember.c:Py_XINCREF
Line
Count
Source
508
7.66M
{
509
7.66M
    if (op != _Py_NULL) {
510
6.73M
        Py_INCREF(op);
511
6.73M
    }
512
7.66M
}
Unexecuted instantiation: symtable.c:Py_XINCREF
sysmodule.c:Py_XINCREF
Line
Count
Source
508
249
{
509
249
    if (op != _Py_NULL) {
510
249
        Py_INCREF(op);
511
249
    }
512
249
}
Unexecuted instantiation: thread.c:Py_XINCREF
traceback.c:Py_XINCREF
Line
Count
Source
508
130M
{
509
130M
    if (op != _Py_NULL) {
510
90.8M
        Py_INCREF(op);
511
90.8M
    }
512
130M
}
Unexecuted instantiation: tracemalloc.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
Unexecuted instantiation: suggestions.c:Py_XINCREF
Unexecuted instantiation: perf_trampoline.c:Py_XINCREF
Unexecuted instantiation: perf_jit_trampoline.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
508
197k
{
509
197k
    if (op != _Py_NULL) {
510
197k
        Py_INCREF(op);
511
197k
    }
512
197k
}
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
508
76
{
509
76
    if (op != _Py_NULL) {
510
0
        Py_INCREF(op);
511
0
    }
512
76
}
Unexecuted instantiation: _codecsmodule.c:Py_XINCREF
_collectionsmodule.c:Py_XINCREF
Line
Count
Source
508
21.5k
{
509
21.5k
    if (op != _Py_NULL) {
510
21.5k
        Py_INCREF(op);
511
21.5k
    }
512
21.5k
}
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
508
6.21k
{
509
6.21k
    if (op != _Py_NULL) {
510
6.21k
        Py_INCREF(op);
511
6.21k
    }
512
6.21k
}
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
508
152
{
509
152
    if (op != _Py_NULL) {
510
76
        Py_INCREF(op);
511
76
    }
512
152
}
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
508
30.7k
{
509
30.7k
    if (op != _Py_NULL) {
510
30.7k
        Py_INCREF(op);
511
30.7k
    }
512
30.7k
}
_functoolsmodule.c:Py_XINCREF
Line
Count
Source
508
36
{
509
36
    if (op != _Py_NULL) {
510
0
        Py_INCREF(op);
511
0
    }
512
36
}
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
getpath.c:Py_XINCREF
Line
Count
Source
508
216
{
509
216
    if (op != _Py_NULL) {
510
216
        Py_INCREF(op);
511
216
    }
512
216
}
Unexecuted instantiation: frozen.c:Py_XINCREF
Unexecuted instantiation: getbuildinfo.c:Py_XINCREF
Unexecuted instantiation: peg_api.c:Py_XINCREF
Unexecuted instantiation: file_tokenizer.c:Py_XINCREF
Unexecuted instantiation: helpers.c:Py_XINCREF
Unexecuted instantiation: myreadline.c:Py_XINCREF
abstract.c:Py_XINCREF
Line
Count
Source
508
96.4M
{
509
96.4M
    if (op != _Py_NULL) {
510
94.9M
        Py_INCREF(op);
511
94.9M
    }
512
96.4M
}
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
508
20.6M
{
509
20.6M
    if (op != _Py_NULL) {
510
4.42M
        Py_INCREF(op);
511
4.42M
    }
512
20.6M
}
Unexecuted instantiation: classobject.c:Py_XINCREF
codeobject.c:Py_XINCREF
Line
Count
Source
508
4.51k
{
509
4.51k
    if (op != _Py_NULL) {
510
4.51k
        Py_INCREF(op);
511
4.51k
    }
512
4.51k
}
Unexecuted instantiation: complexobject.c:Py_XINCREF
descrobject.c:Py_XINCREF
Line
Count
Source
508
110k
{
509
110k
    if (op != _Py_NULL) {
510
104k
        Py_INCREF(op);
511
104k
    }
512
110k
}
Unexecuted instantiation: enumobject.c:Py_XINCREF
genobject.c:Py_XINCREF
Line
Count
Source
508
88.0k
{
509
88.0k
    if (op != _Py_NULL) {
510
0
        Py_INCREF(op);
511
0
    }
512
88.0k
}
Unexecuted instantiation: fileobject.c:Py_XINCREF
frameobject.c:Py_XINCREF
Line
Count
Source
508
18.9M
{
509
18.9M
    if (op != _Py_NULL) {
510
18.9M
        Py_INCREF(op);
511
18.9M
    }
512
18.9M
}
funcobject.c:Py_XINCREF
Line
Count
Source
508
59.9k
{
509
59.9k
    if (op != _Py_NULL) {
510
37.3k
        Py_INCREF(op);
511
37.3k
    }
512
59.9k
}
Unexecuted instantiation: interpolationobject.c:Py_XINCREF
Unexecuted instantiation: iterobject.c:Py_XINCREF
lazyimportobject.c:Py_XINCREF
Line
Count
Source
508
304
{
509
304
    if (op != _Py_NULL) {
510
276
        Py_INCREF(op);
511
276
    }
512
304
}
Unexecuted instantiation: odictobject.c:Py_XINCREF
methodobject.c:Py_XINCREF
Line
Count
Source
508
281M
{
509
281M
    if (op != _Py_NULL) {
510
140M
        Py_INCREF(op);
511
140M
    }
512
281M
}
Unexecuted instantiation: namespaceobject.c:Py_XINCREF
Unexecuted instantiation: _contextvars.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
pegen.c:Py_XINCREF
Line
Count
Source
508
97.1k
{
509
97.1k
    if (op != _Py_NULL) {
510
824
        Py_INCREF(op);
511
824
    }
512
97.1k
}
Unexecuted instantiation: pegen_errors.c:Py_XINCREF
Unexecuted instantiation: parser.c:Py_XINCREF
Unexecuted instantiation: buffer.c:Py_XINCREF
Unexecuted instantiation: lexer.c:Py_XINCREF
Unexecuted instantiation: state.c:Py_XINCREF
Unexecuted instantiation: readline_tokenizer.c:Py_XINCREF
Unexecuted instantiation: string_tokenizer.c:Py_XINCREF
Unexecuted instantiation: utf8_tokenizer.c:Py_XINCREF
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
513
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
514
1.29G
#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
515
#endif
516
517
static inline void Py_XDECREF(PyObject *op)
518
13.0G
{
519
13.0G
    if (op != _Py_NULL) {
520
12.0G
        Py_DECREF(op);
521
12.0G
    }
522
13.0G
}
bytesobject.c:Py_XDECREF
Line
Count
Source
518
26.2M
{
519
26.2M
    if (op != _Py_NULL) {
520
103k
        Py_DECREF(op);
521
103k
    }
522
26.2M
}
Unexecuted instantiation: call.c:Py_XDECREF
exceptions.c:Py_XDECREF
Line
Count
Source
518
126M
{
519
126M
    if (op != _Py_NULL) {
520
63.2M
        Py_DECREF(op);
521
63.2M
    }
522
126M
}
genericaliasobject.c:Py_XDECREF
Line
Count
Source
518
934
{
519
934
    if (op != _Py_NULL) {
520
548
        Py_DECREF(op);
521
548
    }
522
934
}
floatobject.c:Py_XDECREF
Line
Count
Source
518
1.04M
{
519
1.04M
    if (op != _Py_NULL) {
520
502k
        Py_DECREF(op);
521
502k
    }
522
1.04M
}
listobject.c:Py_XDECREF
Line
Count
Source
518
1.59G
{
519
1.59G
    if (op != _Py_NULL) {
520
1.56G
        Py_DECREF(op);
521
1.56G
    }
522
1.59G
}
longobject.c:Py_XDECREF
Line
Count
Source
518
24.8M
{
519
24.8M
    if (op != _Py_NULL) {
520
11.0M
        Py_DECREF(op);
521
11.0M
    }
522
24.8M
}
dictobject.c:Py_XDECREF
Line
Count
Source
518
321M
{
519
321M
    if (op != _Py_NULL) {
520
313M
        Py_DECREF(op);
521
313M
    }
522
321M
}
Unexecuted instantiation: memoryobject.c:Py_XDECREF
moduleobject.c:Py_XDECREF
Line
Count
Source
518
18.5k
{
519
18.5k
    if (op != _Py_NULL) {
520
9.49k
        Py_DECREF(op);
521
9.49k
    }
522
18.5k
}
object.c:Py_XDECREF
Line
Count
Source
518
12.5M
{
519
12.5M
    if (op != _Py_NULL) {
520
52.1k
        Py_DECREF(op);
521
52.1k
    }
522
12.5M
}
Unexecuted instantiation: obmalloc.c:Py_XDECREF
Unexecuted instantiation: picklebufobject.c:Py_XDECREF
rangeobject.c:Py_XDECREF
Line
Count
Source
518
108
{
519
108
    if (op != _Py_NULL) {
520
108
        Py_DECREF(op);
521
108
    }
522
108
}
setobject.c:Py_XDECREF
Line
Count
Source
518
96.6k
{
519
96.6k
    if (op != _Py_NULL) {
520
466
        Py_DECREF(op);
521
466
    }
522
96.6k
}
Unexecuted instantiation: sliceobject.c:Py_XDECREF
structseq.c:Py_XDECREF
Line
Count
Source
518
9.02M
{
519
9.02M
    if (op != _Py_NULL) {
520
9.02M
        Py_DECREF(op);
521
9.02M
    }
522
9.02M
}
Unexecuted instantiation: templateobject.c:Py_XDECREF
tupleobject.c:Py_XDECREF
Line
Count
Source
518
9.40G
{
519
9.40G
    if (op != _Py_NULL) {
520
9.40G
        Py_DECREF(op);
521
9.40G
    }
522
9.40G
}
typeobject.c:Py_XDECREF
Line
Count
Source
518
89.0M
{
519
89.0M
    if (op != _Py_NULL) {
520
70.0M
        Py_DECREF(op);
521
70.0M
    }
522
89.0M
}
typevarobject.c:Py_XDECREF
Line
Count
Source
518
1.00k
{
519
1.00k
    if (op != _Py_NULL) {
520
768
        Py_DECREF(op);
521
768
    }
522
1.00k
}
unicode_format.c:Py_XDECREF
Line
Count
Source
518
23.2M
{
519
23.2M
    if (op != _Py_NULL) {
520
50.5k
        Py_DECREF(op);
521
50.5k
    }
522
23.2M
}
unicode_formatter.c:Py_XDECREF
Line
Count
Source
518
18.3M
{
519
18.3M
    if (op != _Py_NULL) {
520
14.6M
        Py_DECREF(op);
521
14.6M
    }
522
18.3M
}
Unexecuted instantiation: unicode_writer.c:Py_XDECREF
Unexecuted instantiation: unicodectype.c:Py_XDECREF
unicodeobject.c:Py_XDECREF
Line
Count
Source
518
111M
{
519
111M
    if (op != _Py_NULL) {
520
46.2M
        Py_DECREF(op);
521
46.2M
    }
522
111M
}
unionobject.c:Py_XDECREF
Line
Count
Source
518
2.05k
{
519
2.05k
    if (op != _Py_NULL) {
520
338
        Py_DECREF(op);
521
338
    }
522
2.05k
}
weakrefobject.c:Py_XDECREF
Line
Count
Source
518
1.30M
{
519
1.30M
    if (op != _Py_NULL) {
520
653k
        Py_DECREF(op);
521
653k
    }
522
1.30M
}
_warnings.c:Py_XDECREF
Line
Count
Source
518
6.67M
{
519
6.67M
    if (op != _Py_NULL) {
520
5.82M
        Py_DECREF(op);
521
5.82M
    }
522
6.67M
}
bltinmodule.c:Py_XDECREF
Line
Count
Source
518
15.7M
{
519
15.7M
    if (op != _Py_NULL) {
520
484k
        Py_DECREF(op);
521
484k
    }
522
15.7M
}
ceval.c:Py_XDECREF
Line
Count
Source
518
5.58M
{
519
5.58M
    if (op != _Py_NULL) {
520
122k
        Py_DECREF(op);
521
122k
    }
522
5.58M
}
codecs.c:Py_XDECREF
Line
Count
Source
518
165k
{
519
165k
    if (op != _Py_NULL) {
520
110k
        Py_DECREF(op);
521
110k
    }
522
165k
}
Unexecuted instantiation: codegen.c:Py_XDECREF
compile.c:Py_XDECREF
Line
Count
Source
518
21.4k
{
519
21.4k
    if (op != _Py_NULL) {
520
9.04k
        Py_DECREF(op);
521
9.04k
    }
522
21.4k
}
Unexecuted instantiation: context.c:Py_XDECREF
errors.c:Py_XDECREF
Line
Count
Source
518
285M
{
519
285M
    if (op != _Py_NULL) {
520
32.6M
        Py_DECREF(op);
521
32.6M
    }
522
285M
}
Unexecuted instantiation: flowgraph.c:Py_XDECREF
Unexecuted instantiation: frame.c:Py_XDECREF
Unexecuted instantiation: future.c:Py_XDECREF
gc.c:Py_XDECREF
Line
Count
Source
518
190k
{
519
190k
    if (op != _Py_NULL) {
520
6.77k
        Py_DECREF(op);
521
6.77k
    }
522
190k
}
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
518
9.01M
{
519
9.01M
    if (op != _Py_NULL) {
520
8.99M
        Py_DECREF(op);
521
8.99M
    }
522
9.01M
}
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
518
11.2k
{
519
11.2k
    if (op != _Py_NULL) {
520
0
        Py_DECREF(op);
521
0
    }
522
11.2k
}
intrinsics.c:Py_XDECREF
Line
Count
Source
518
34.7k
{
519
34.7k
    if (op != _Py_NULL) {
520
34.7k
        Py_DECREF(op);
521
34.7k
    }
522
34.7k
}
Unexecuted instantiation: legacy_tracing.c:Py_XDECREF
Unexecuted instantiation: lock.c:Py_XDECREF
marshal.c:Py_XDECREF
Line
Count
Source
518
1.73M
{
519
1.73M
    if (op != _Py_NULL) {
520
1.73M
        Py_DECREF(op);
521
1.73M
    }
522
1.73M
}
modsupport.c:Py_XDECREF
Line
Count
Source
518
15.9k
{
519
15.9k
    if (op != _Py_NULL) {
520
15.9k
        Py_DECREF(op);
521
15.9k
    }
522
15.9k
}
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
518
216
{
519
216
    if (op != _Py_NULL) {
520
216
        Py_DECREF(op);
521
216
    }
522
216
}
Unexecuted instantiation: pymath.c:Py_XDECREF
Unexecuted instantiation: pystate.c:Py_XDECREF
pythonrun.c:Py_XDECREF
Line
Count
Source
518
1.97k
{
519
1.97k
    if (op != _Py_NULL) {
520
1.31k
        Py_DECREF(op);
521
1.31k
    }
522
1.97k
}
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
518
4.11M
{
519
4.11M
    if (op != _Py_NULL) {
520
2.16M
        Py_DECREF(op);
521
2.16M
    }
522
4.11M
}
structmember.c:Py_XDECREF
Line
Count
Source
518
6.56M
{
519
6.56M
    if (op != _Py_NULL) {
520
17.7k
        Py_DECREF(op);
521
17.7k
    }
522
6.56M
}
symtable.c:Py_XDECREF
Line
Count
Source
518
146k
{
519
146k
    if (op != _Py_NULL) {
520
108k
        Py_DECREF(op);
521
108k
    }
522
146k
}
sysmodule.c:Py_XDECREF
Line
Count
Source
518
3.52M
{
519
3.52M
    if (op != _Py_NULL) {
520
2.64M
        Py_DECREF(op);
521
2.64M
    }
522
3.52M
}
Unexecuted instantiation: thread.c:Py_XDECREF
traceback.c:Py_XDECREF
Line
Count
Source
518
261M
{
519
261M
    if (op != _Py_NULL) {
520
181M
        Py_DECREF(op);
521
181M
    }
522
261M
}
Unexecuted instantiation: tracemalloc.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: 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
Unexecuted instantiation: atexitmodule.c:Py_XDECREF
Unexecuted instantiation: faulthandler.c:Py_XDECREF
posixmodule.c:Py_XDECREF
Line
Count
Source
518
1.56M
{
519
1.56M
    if (op != _Py_NULL) {
520
1.32M
        Py_DECREF(op);
521
1.32M
    }
522
1.56M
}
signalmodule.c:Py_XDECREF
Line
Count
Source
518
2.30k
{
519
2.30k
    if (op != _Py_NULL) {
520
0
        Py_DECREF(op);
521
0
    }
522
2.30k
}
Unexecuted instantiation: _tracemalloc.c:Py_XDECREF
Unexecuted instantiation: _suggestions.c:Py_XDECREF
_datetimemodule.c:Py_XDECREF
Line
Count
Source
518
22.5k
{
519
22.5k
    if (op != _Py_NULL) {
520
21.6k
        Py_DECREF(op);
521
21.6k
    }
522
22.5k
}
Unexecuted instantiation: _codecsmodule.c:Py_XDECREF
_collectionsmodule.c:Py_XDECREF
Line
Count
Source
518
21.5k
{
519
21.5k
    if (op != _Py_NULL) {
520
0
        Py_DECREF(op);
521
0
    }
522
21.5k
}
Unexecuted instantiation: errnomodule.c:Py_XDECREF
_iomodule.c:Py_XDECREF
Line
Count
Source
518
20
{
519
20
    if (op != _Py_NULL) {
520
10
        Py_DECREF(op);
521
10
    }
522
20
}
Unexecuted instantiation: iobase.c:Py_XDECREF
Unexecuted instantiation: fileio.c:Py_XDECREF
bytesio.c:Py_XDECREF
Line
Count
Source
518
46.8k
{
519
46.8k
    if (op != _Py_NULL) {
520
46.8k
        Py_DECREF(op);
521
46.8k
    }
522
46.8k
}
bufferedio.c:Py_XDECREF
Line
Count
Source
518
54.3k
{
519
54.3k
    if (op != _Py_NULL) {
520
6.23k
        Py_DECREF(op);
521
6.23k
    }
522
54.3k
}
textio.c:Py_XDECREF
Line
Count
Source
518
32.6k
{
519
32.6k
    if (op != _Py_NULL) {
520
207
        Py_DECREF(op);
521
207
    }
522
32.6k
}
Unexecuted instantiation: stringio.c:Py_XDECREF
itertoolsmodule.c:Py_XDECREF
Line
Count
Source
518
33.8k
{
519
33.8k
    if (op != _Py_NULL) {
520
5.39k
        Py_DECREF(op);
521
5.39k
    }
522
33.8k
}
sre.c:Py_XDECREF
Line
Count
Source
518
81.8M
{
519
81.8M
    if (op != _Py_NULL) {
520
81.8M
        Py_DECREF(op);
521
81.8M
    }
522
81.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
518
198k
{
519
198k
    if (op != _Py_NULL) {
520
166k
        Py_DECREF(op);
521
166k
    }
522
198k
}
_functoolsmodule.c:Py_XDECREF
Line
Count
Source
518
7.86k
{
519
7.86k
    if (op != _Py_NULL) {
520
0
        Py_DECREF(op);
521
0
    }
522
7.86k
}
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
Unexecuted instantiation: getpath.c:Py_XDECREF
Unexecuted instantiation: frozen.c:Py_XDECREF
Unexecuted instantiation: getbuildinfo.c:Py_XDECREF
Unexecuted instantiation: peg_api.c:Py_XDECREF
Unexecuted instantiation: file_tokenizer.c:Py_XDECREF
helpers.c:Py_XDECREF
Line
Count
Source
518
3.08k
{
519
3.08k
    if (op != _Py_NULL) {
520
3.08k
        Py_DECREF(op);
521
3.08k
    }
522
3.08k
}
Unexecuted instantiation: myreadline.c:Py_XDECREF
abstract.c:Py_XDECREF
Line
Count
Source
518
4.06M
{
519
4.06M
    if (op != _Py_NULL) {
520
247k
        Py_DECREF(op);
521
247k
    }
522
4.06M
}
Unexecuted instantiation: boolobject.c:Py_XDECREF
Unexecuted instantiation: bytes_methods.c:Py_XDECREF
bytearrayobject.c:Py_XDECREF
Line
Count
Source
518
19.9M
{
519
19.9M
    if (op != _Py_NULL) {
520
19.9M
        Py_DECREF(op);
521
19.9M
    }
522
19.9M
}
capsule.c:Py_XDECREF
Line
Count
Source
518
14
{
519
14
    if (op != _Py_NULL) {
520
14
        Py_DECREF(op);
521
14
    }
522
14
}
cellobject.c:Py_XDECREF
Line
Count
Source
518
20.6M
{
519
20.6M
    if (op != _Py_NULL) {
520
6.98M
        Py_DECREF(op);
521
6.98M
    }
522
20.6M
}
classobject.c:Py_XDECREF
Line
Count
Source
518
43.6M
{
519
43.6M
    if (op != _Py_NULL) {
520
43.6M
        Py_DECREF(op);
521
43.6M
    }
522
43.6M
}
codeobject.c:Py_XDECREF
Line
Count
Source
518
1.09M
{
519
1.09M
    if (op != _Py_NULL) {
520
903k
        Py_DECREF(op);
521
903k
    }
522
1.09M
}
Unexecuted instantiation: complexobject.c:Py_XDECREF
descrobject.c:Py_XDECREF
Line
Count
Source
518
29.1M
{
519
29.1M
    if (op != _Py_NULL) {
520
20.2M
        Py_DECREF(op);
521
20.2M
    }
522
29.1M
}
enumobject.c:Py_XDECREF
Line
Count
Source
518
25.7M
{
519
25.7M
    if (op != _Py_NULL) {
520
17.1M
        Py_DECREF(op);
521
17.1M
    }
522
25.7M
}
genobject.c:Py_XDECREF
Line
Count
Source
518
44.0k
{
519
44.0k
    if (op != _Py_NULL) {
520
0
        Py_DECREF(op);
521
0
    }
522
44.0k
}
Unexecuted instantiation: fileobject.c:Py_XDECREF
Unexecuted instantiation: frameobject.c:Py_XDECREF
funcobject.c:Py_XDECREF
Line
Count
Source
518
70.4k
{
519
70.4k
    if (op != _Py_NULL) {
520
34.2k
        Py_DECREF(op);
521
34.2k
    }
522
70.4k
}
Unexecuted instantiation: interpolationobject.c:Py_XDECREF
iterobject.c:Py_XDECREF
Line
Count
Source
518
3.24M
{
519
3.24M
    if (op != _Py_NULL) {
520
380k
        Py_DECREF(op);
521
380k
    }
522
3.24M
}
Unexecuted instantiation: lazyimportobject.c:Py_XDECREF
odictobject.c:Py_XDECREF
Line
Count
Source
518
285k
{
519
285k
    if (op != _Py_NULL) {
520
85.4k
        Py_DECREF(op);
521
85.4k
    }
522
285k
}
methodobject.c:Py_XDECREF
Line
Count
Source
518
421M
{
519
421M
    if (op != _Py_NULL) {
520
150M
        Py_DECREF(op);
521
150M
    }
522
421M
}
Unexecuted instantiation: namespaceobject.c:Py_XDECREF
Unexecuted instantiation: _contextvars.c:Py_XDECREF
Python-ast.c:Py_XDECREF
Line
Count
Source
518
1.30k
{
519
1.30k
    if (op != _Py_NULL) {
520
872
        Py_DECREF(op);
521
872
    }
522
1.30k
}
Python-tokenize.c:Py_XDECREF
Line
Count
Source
518
340
{
519
340
    if (op != _Py_NULL) {
520
320
        Py_DECREF(op);
521
320
    }
522
340
}
Unexecuted instantiation: asdl.c:Py_XDECREF
assemble.c:Py_XDECREF
Line
Count
Source
518
39.5k
{
519
39.5k
    if (op != _Py_NULL) {
520
39.5k
        Py_DECREF(op);
521
39.5k
    }
522
39.5k
}
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
518
186k
{
519
186k
    if (op != _Py_NULL) {
520
1.53k
        Py_DECREF(op);
521
1.53k
    }
522
186k
}
pegen_errors.c:Py_XDECREF
Line
Count
Source
518
10.9k
{
519
10.9k
    if (op != _Py_NULL) {
520
9.45k
        Py_DECREF(op);
521
9.45k
    }
522
10.9k
}
Unexecuted instantiation: parser.c:Py_XDECREF
Unexecuted instantiation: buffer.c:Py_XDECREF
Unexecuted instantiation: lexer.c:Py_XDECREF
state.c:Py_XDECREF
Line
Count
Source
518
586k
{
519
586k
    if (op != _Py_NULL) {
520
98.0k
        Py_DECREF(op);
521
98.0k
    }
522
586k
}
Unexecuted instantiation: readline_tokenizer.c:Py_XDECREF
Unexecuted instantiation: string_tokenizer.c:Py_XDECREF
Unexecuted instantiation: utf8_tokenizer.c:Py_XDECREF
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
string_parser.c:Py_XDECREF
Line
Count
Source
518
31.4k
{
519
31.4k
    if (op != _Py_NULL) {
520
31.4k
        Py_DECREF(op);
521
31.4k
    }
522
31.4k
}
523
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
524
13.0G
#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
525
#endif
526
527
// Create a new strong reference to an object:
528
// increment the reference count of the object and return the object.
529
PyAPI_FUNC(PyObject*) Py_NewRef(PyObject *obj);
530
531
// Similar to Py_NewRef(), but the object can be NULL.
532
PyAPI_FUNC(PyObject*) Py_XNewRef(PyObject *obj);
533
534
static inline PyObject* _Py_NewRef(PyObject *obj)
535
14.2G
{
536
14.2G
    Py_INCREF(obj);
537
14.2G
    return obj;
538
14.2G
}
bytesobject.c:_Py_NewRef
Line
Count
Source
535
1.15M
{
536
1.15M
    Py_INCREF(obj);
537
1.15M
    return obj;
538
1.15M
}
call.c:_Py_NewRef
Line
Count
Source
535
30.4M
{
536
30.4M
    Py_INCREF(obj);
537
30.4M
    return obj;
538
30.4M
}
exceptions.c:_Py_NewRef
Line
Count
Source
535
160M
{
536
160M
    Py_INCREF(obj);
537
160M
    return obj;
538
160M
}
genericaliasobject.c:_Py_NewRef
Line
Count
Source
535
1.99k
{
536
1.99k
    Py_INCREF(obj);
537
1.99k
    return obj;
538
1.99k
}
Unexecuted instantiation: floatobject.c:_Py_NewRef
listobject.c:_Py_NewRef
Line
Count
Source
535
1.31G
{
536
1.31G
    Py_INCREF(obj);
537
1.31G
    return obj;
538
1.31G
}
longobject.c:_Py_NewRef
Line
Count
Source
535
16.1M
{
536
16.1M
    Py_INCREF(obj);
537
16.1M
    return obj;
538
16.1M
}
dictobject.c:_Py_NewRef
Line
Count
Source
535
1.29G
{
536
1.29G
    Py_INCREF(obj);
537
1.29G
    return obj;
538
1.29G
}
memoryobject.c:_Py_NewRef
Line
Count
Source
535
3.28M
{
536
3.28M
    Py_INCREF(obj);
537
3.28M
    return obj;
538
3.28M
}
moduleobject.c:_Py_NewRef
Line
Count
Source
535
8.04k
{
536
8.04k
    Py_INCREF(obj);
537
8.04k
    return obj;
538
8.04k
}
object.c:_Py_NewRef
Line
Count
Source
535
80.7M
{
536
80.7M
    Py_INCREF(obj);
537
80.7M
    return obj;
538
80.7M
}
Unexecuted instantiation: obmalloc.c:_Py_NewRef
Unexecuted instantiation: picklebufobject.c:_Py_NewRef
rangeobject.c:_Py_NewRef
Line
Count
Source
535
108
{
536
108
    Py_INCREF(obj);
537
108
    return obj;
538
108
}
setobject.c:_Py_NewRef
Line
Count
Source
535
10.4M
{
536
10.4M
    Py_INCREF(obj);
537
10.4M
    return obj;
538
10.4M
}
sliceobject.c:_Py_NewRef
Line
Count
Source
535
174M
{
536
174M
    Py_INCREF(obj);
537
174M
    return obj;
538
174M
}
structseq.c:_Py_NewRef
Line
Count
Source
535
118k
{
536
118k
    Py_INCREF(obj);
537
118k
    return obj;
538
118k
}
templateobject.c:_Py_NewRef
Line
Count
Source
535
24
{
536
24
    Py_INCREF(obj);
537
24
    return obj;
538
24
}
tupleobject.c:_Py_NewRef
Line
Count
Source
535
9.07G
{
536
9.07G
    Py_INCREF(obj);
537
9.07G
    return obj;
538
9.07G
}
typeobject.c:_Py_NewRef
Line
Count
Source
535
208M
{
536
208M
    Py_INCREF(obj);
537
208M
    return obj;
538
208M
}
typevarobject.c:_Py_NewRef
Line
Count
Source
535
1.90k
{
536
1.90k
    Py_INCREF(obj);
537
1.90k
    return obj;
538
1.90k
}
unicode_format.c:_Py_NewRef
Line
Count
Source
535
17.0M
{
536
17.0M
    Py_INCREF(obj);
537
17.0M
    return obj;
538
17.0M
}
Unexecuted instantiation: unicode_formatter.c:_Py_NewRef
unicode_writer.c:_Py_NewRef
Line
Count
Source
535
5.54k
{
536
5.54k
    Py_INCREF(obj);
537
5.54k
    return obj;
538
5.54k
}
Unexecuted instantiation: unicodectype.c:_Py_NewRef
unicodeobject.c:_Py_NewRef
Line
Count
Source
535
128M
{
536
128M
    Py_INCREF(obj);
537
128M
    return obj;
538
128M
}
unionobject.c:_Py_NewRef
Line
Count
Source
535
920
{
536
920
    Py_INCREF(obj);
537
920
    return obj;
538
920
}
Unexecuted instantiation: weakrefobject.c:_Py_NewRef
_warnings.c:_Py_NewRef
Line
Count
Source
535
2.46M
{
536
2.46M
    Py_INCREF(obj);
537
2.46M
    return obj;
538
2.46M
}
bltinmodule.c:_Py_NewRef
Line
Count
Source
535
34.4M
{
536
34.4M
    Py_INCREF(obj);
537
34.4M
    return obj;
538
34.4M
}
ceval.c:_Py_NewRef
Line
Count
Source
535
753M
{
536
753M
    Py_INCREF(obj);
537
753M
    return obj;
538
753M
}
codecs.c:_Py_NewRef
Line
Count
Source
535
6.72M
{
536
6.72M
    Py_INCREF(obj);
537
6.72M
    return obj;
538
6.72M
}
codegen.c:_Py_NewRef
Line
Count
Source
535
2.22k
{
536
2.22k
    Py_INCREF(obj);
537
2.22k
    return obj;
538
2.22k
}
compile.c:_Py_NewRef
Line
Count
Source
535
77.3k
{
536
77.3k
    Py_INCREF(obj);
537
77.3k
    return obj;
538
77.3k
}
context.c:_Py_NewRef
Line
Count
Source
535
61
{
536
61
    Py_INCREF(obj);
537
61
    return obj;
538
61
}
errors.c:_Py_NewRef
Line
Count
Source
535
41.8M
{
536
41.8M
    Py_INCREF(obj);
537
41.8M
    return obj;
538
41.8M
}
flowgraph.c:_Py_NewRef
Line
Count
Source
535
55.0k
{
536
55.0k
    Py_INCREF(obj);
537
55.0k
    return obj;
538
55.0k
}
frame.c:_Py_NewRef
Line
Count
Source
535
42.1M
{
536
42.1M
    Py_INCREF(obj);
537
42.1M
    return obj;
538
42.1M
}
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
535
3.39M
{
536
3.39M
    Py_INCREF(obj);
537
3.39M
    return obj;
538
3.39M
}
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
535
7.86M
{
536
7.86M
    Py_INCREF(obj);
537
7.86M
    return obj;
538
7.86M
}
importdl.c:_Py_NewRef
Line
Count
Source
535
1.17k
{
536
1.17k
    Py_INCREF(obj);
537
1.17k
    return obj;
538
1.17k
}
initconfig.c:_Py_NewRef
Line
Count
Source
535
612
{
536
612
    Py_INCREF(obj);
537
612
    return obj;
538
612
}
Unexecuted instantiation: instrumentation.c:_Py_NewRef
Unexecuted instantiation: instruction_sequence.c:_Py_NewRef
intrinsics.c:_Py_NewRef
Line
Count
Source
535
64.7k
{
536
64.7k
    Py_INCREF(obj);
537
64.7k
    return obj;
538
64.7k
}
Unexecuted instantiation: legacy_tracing.c:_Py_NewRef
Unexecuted instantiation: lock.c:_Py_NewRef
marshal.c:_Py_NewRef
Line
Count
Source
535
1.90M
{
536
1.90M
    Py_INCREF(obj);
537
1.90M
    return obj;
538
1.90M
}
modsupport.c:_Py_NewRef
Line
Count
Source
535
18
{
536
18
    Py_INCREF(obj);
537
18
    return obj;
538
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
535
36
{
536
36
    Py_INCREF(obj);
537
36
    return obj;
538
36
}
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: structmember.c:_Py_NewRef
symtable.c:_Py_NewRef
Line
Count
Source
535
172k
{
536
172k
    Py_INCREF(obj);
537
172k
    return obj;
538
172k
}
sysmodule.c:_Py_NewRef
Line
Count
Source
535
1.91k
{
536
1.91k
    Py_INCREF(obj);
537
1.91k
    return obj;
538
1.91k
}
Unexecuted instantiation: thread.c:_Py_NewRef
Unexecuted instantiation: traceback.c:_Py_NewRef
Unexecuted instantiation: tracemalloc.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: 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
535
6
{
536
6
    Py_INCREF(obj);
537
6
    return obj;
538
6
}
Unexecuted instantiation: faulthandler.c:_Py_NewRef
posixmodule.c:_Py_NewRef
Line
Count
Source
535
2.16M
{
536
2.16M
    Py_INCREF(obj);
537
2.16M
    return obj;
538
2.16M
}
signalmodule.c:_Py_NewRef
Line
Count
Source
535
2.30k
{
536
2.30k
    Py_INCREF(obj);
537
2.30k
    return obj;
538
2.30k
}
Unexecuted instantiation: _tracemalloc.c:_Py_NewRef
Unexecuted instantiation: _suggestions.c:_Py_NewRef
_datetimemodule.c:_Py_NewRef
Line
Count
Source
535
21.6k
{
536
21.6k
    Py_INCREF(obj);
537
21.6k
    return obj;
538
21.6k
}
Unexecuted instantiation: _codecsmodule.c:_Py_NewRef
_collectionsmodule.c:_Py_NewRef
Line
Count
Source
535
23.9M
{
536
23.9M
    Py_INCREF(obj);
537
23.9M
    return obj;
538
23.9M
}
Unexecuted instantiation: errnomodule.c:_Py_NewRef
_iomodule.c:_Py_NewRef
Line
Count
Source
535
301
{
536
301
    Py_INCREF(obj);
537
301
    return obj;
538
301
}
iobase.c:_Py_NewRef
Line
Count
Source
535
107k
{
536
107k
    Py_INCREF(obj);
537
107k
    return obj;
538
107k
}
Unexecuted instantiation: fileio.c:_Py_NewRef
bytesio.c:_Py_NewRef
Line
Count
Source
535
68.5k
{
536
68.5k
    Py_INCREF(obj);
537
68.5k
    return obj;
538
68.5k
}
bufferedio.c:_Py_NewRef
Line
Count
Source
535
11.1k
{
536
11.1k
    Py_INCREF(obj);
537
11.1k
    return obj;
538
11.1k
}
textio.c:_Py_NewRef
Line
Count
Source
535
344k
{
536
344k
    Py_INCREF(obj);
537
344k
    return obj;
538
344k
}
stringio.c:_Py_NewRef
Line
Count
Source
535
22.0k
{
536
22.0k
    Py_INCREF(obj);
537
22.0k
    return obj;
538
22.0k
}
itertoolsmodule.c:_Py_NewRef
Line
Count
Source
535
41.4k
{
536
41.4k
    Py_INCREF(obj);
537
41.4k
    return obj;
538
41.4k
}
sre.c:_Py_NewRef
Line
Count
Source
535
158M
{
536
158M
    Py_INCREF(obj);
537
158M
    return obj;
538
158M
}
Unexecuted instantiation: _sysconfig.c:_Py_NewRef
_threadmodule.c:_Py_NewRef
Line
Count
Source
535
76
{
536
76
    Py_INCREF(obj);
537
76
    return obj;
538
76
}
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
535
52.3k
{
536
52.3k
    Py_INCREF(obj);
537
52.3k
    return obj;
538
52.3k
}
_functoolsmodule.c:_Py_NewRef
Line
Count
Source
535
578k
{
536
578k
    Py_INCREF(obj);
537
578k
    return obj;
538
578k
}
Unexecuted instantiation: _localemodule.c:_Py_NewRef
Unexecuted instantiation: _opcode.c:_Py_NewRef
_operator.c:_Py_NewRef
Line
Count
Source
535
1.23M
{
536
1.23M
    Py_INCREF(obj);
537
1.23M
    return obj;
538
1.23M
}
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
535
288
{
536
288
    Py_INCREF(obj);
537
288
    return obj;
538
288
}
Unexecuted instantiation: frozen.c:_Py_NewRef
Unexecuted instantiation: getbuildinfo.c:_Py_NewRef
Unexecuted instantiation: peg_api.c:_Py_NewRef
Unexecuted instantiation: file_tokenizer.c:_Py_NewRef
Unexecuted instantiation: helpers.c:_Py_NewRef
Unexecuted instantiation: myreadline.c:_Py_NewRef
abstract.c:_Py_NewRef
Line
Count
Source
535
463M
{
536
463M
    Py_INCREF(obj);
537
463M
    return obj;
538
463M
}
Unexecuted instantiation: boolobject.c:_Py_NewRef
Unexecuted instantiation: bytes_methods.c:_Py_NewRef
bytearrayobject.c:_Py_NewRef
Line
Count
Source
535
15.0M
{
536
15.0M
    Py_INCREF(obj);
537
15.0M
    return obj;
538
15.0M
}
Unexecuted instantiation: capsule.c:_Py_NewRef
Unexecuted instantiation: cellobject.c:_Py_NewRef
classobject.c:_Py_NewRef
Line
Count
Source
535
87.3M
{
536
87.3M
    Py_INCREF(obj);
537
87.3M
    return obj;
538
87.3M
}
codeobject.c:_Py_NewRef
Line
Count
Source
535
2.13M
{
536
2.13M
    Py_INCREF(obj);
537
2.13M
    return obj;
538
2.13M
}
Unexecuted instantiation: complexobject.c:_Py_NewRef
descrobject.c:_Py_NewRef
Line
Count
Source
535
20.4M
{
536
20.4M
    Py_INCREF(obj);
537
20.4M
    return obj;
538
20.4M
}
enumobject.c:_Py_NewRef
Line
Count
Source
535
184
{
536
184
    Py_INCREF(obj);
537
184
    return obj;
538
184
}
genobject.c:_Py_NewRef
Line
Count
Source
535
46.3M
{
536
46.3M
    Py_INCREF(obj);
537
46.3M
    return obj;
538
46.3M
}
Unexecuted instantiation: fileobject.c:_Py_NewRef
frameobject.c:_Py_NewRef
Line
Count
Source
535
20.0M
{
536
20.0M
    Py_INCREF(obj);
537
20.0M
    return obj;
538
20.0M
}
funcobject.c:_Py_NewRef
Line
Count
Source
535
18.8M
{
536
18.8M
    Py_INCREF(obj);
537
18.8M
    return obj;
538
18.8M
}
interpolationobject.c:_Py_NewRef
Line
Count
Source
535
12
{
536
12
    Py_INCREF(obj);
537
12
    return obj;
538
12
}
iterobject.c:_Py_NewRef
Line
Count
Source
535
2.86M
{
536
2.86M
    Py_INCREF(obj);
537
2.86M
    return obj;
538
2.86M
}
lazyimportobject.c:_Py_NewRef
Line
Count
Source
535
304
{
536
304
    Py_INCREF(obj);
537
304
    return obj;
538
304
}
odictobject.c:_Py_NewRef
Line
Count
Source
535
206k
{
536
206k
    Py_INCREF(obj);
537
206k
    return obj;
538
206k
}
methodobject.c:_Py_NewRef
Line
Count
Source
535
10.1M
{
536
10.1M
    Py_INCREF(obj);
537
10.1M
    return obj;
538
10.1M
}
Unexecuted instantiation: namespaceobject.c:_Py_NewRef
Unexecuted instantiation: _contextvars.c:_Py_NewRef
Python-ast.c:_Py_NewRef
Line
Count
Source
535
550k
{
536
550k
    Py_INCREF(obj);
537
550k
    return obj;
538
550k
}
Unexecuted instantiation: Python-tokenize.c:_Py_NewRef
Unexecuted instantiation: asdl.c:_Py_NewRef
assemble.c:_Py_NewRef
Line
Count
Source
535
29.4k
{
536
29.4k
    Py_INCREF(obj);
537
29.4k
    return obj;
538
29.4k
}
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
pegen.c:_Py_NewRef
Line
Count
Source
535
97.1k
{
536
97.1k
    Py_INCREF(obj);
537
97.1k
    return obj;
538
97.1k
}
Unexecuted instantiation: pegen_errors.c:_Py_NewRef
Unexecuted instantiation: parser.c:_Py_NewRef
Unexecuted instantiation: buffer.c:_Py_NewRef
Unexecuted instantiation: lexer.c:_Py_NewRef
Unexecuted instantiation: state.c:_Py_NewRef
Unexecuted instantiation: readline_tokenizer.c:_Py_NewRef
Unexecuted instantiation: string_tokenizer.c:_Py_NewRef
Unexecuted instantiation: utf8_tokenizer.c:_Py_NewRef
Unexecuted instantiation: getcompiler.c:_Py_NewRef
Unexecuted instantiation: mystrtoul.c:_Py_NewRef
Unexecuted instantiation: token.c:_Py_NewRef
Unexecuted instantiation: action_helpers.c:_Py_NewRef
Unexecuted instantiation: string_parser.c:_Py_NewRef
539
540
static inline PyObject* _Py_XNewRef(PyObject *obj)
541
1.05G
{
542
1.05G
    Py_XINCREF(obj);
543
1.05G
    return obj;
544
1.05G
}
Unexecuted instantiation: bytesobject.c:_Py_XNewRef
Unexecuted instantiation: call.c:_Py_XNewRef
exceptions.c:_Py_XNewRef
Line
Count
Source
541
121M
{
542
121M
    Py_XINCREF(obj);
543
121M
    return obj;
544
121M
}
Unexecuted instantiation: genericaliasobject.c:_Py_XNewRef
Unexecuted instantiation: floatobject.c:_Py_XNewRef
listobject.c:_Py_XNewRef
Line
Count
Source
541
50.1M
{
542
50.1M
    Py_XINCREF(obj);
543
50.1M
    return obj;
544
50.1M
}
Unexecuted instantiation: longobject.c:_Py_XNewRef
dictobject.c:_Py_XNewRef
Line
Count
Source
541
230M
{
542
230M
    Py_XINCREF(obj);
543
230M
    return obj;
544
230M
}
memoryobject.c:_Py_XNewRef
Line
Count
Source
541
162
{
542
162
    Py_XINCREF(obj);
543
162
    return obj;
544
162
}
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
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
541
245k
{
542
245k
    Py_XINCREF(obj);
543
245k
    return obj;
544
245k
}
typevarobject.c:_Py_XNewRef
Line
Count
Source
541
1.10k
{
542
1.10k
    Py_XINCREF(obj);
543
1.10k
    return obj;
544
1.10k
}
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
541
1.30M
{
542
1.30M
    Py_XINCREF(obj);
543
1.30M
    return obj;
544
1.30M
}
Unexecuted instantiation: _warnings.c:_Py_XNewRef
bltinmodule.c:_Py_XNewRef
Line
Count
Source
541
1.31k
{
542
1.31k
    Py_XINCREF(obj);
543
1.31k
    return obj;
544
1.31k
}
ceval.c:_Py_XNewRef
Line
Count
Source
541
92.1M
{
542
92.1M
    Py_XINCREF(obj);
543
92.1M
    return obj;
544
92.1M
}
Unexecuted instantiation: codecs.c:_Py_XNewRef
Unexecuted instantiation: codegen.c:_Py_XNewRef
compile.c:_Py_XNewRef
Line
Count
Source
541
9.18k
{
542
9.18k
    Py_XINCREF(obj);
543
9.18k
    return obj;
544
9.18k
}
context.c:_Py_XNewRef
Line
Count
Source
541
61
{
542
61
    Py_XINCREF(obj);
543
61
    return obj;
544
61
}
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
541
31.0k
{
542
31.0k
    Py_XINCREF(obj);
543
31.0k
    return obj;
544
31.0k
}
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
541
1.10M
{
542
1.10M
    Py_XINCREF(obj);
543
1.10M
    return obj;
544
1.10M
}
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
structmember.c:_Py_XNewRef
Line
Count
Source
541
6.56M
{
542
6.56M
    Py_XINCREF(obj);
543
6.56M
    return obj;
544
6.56M
}
Unexecuted instantiation: symtable.c:_Py_XNewRef
sysmodule.c:_Py_XNewRef
Line
Count
Source
541
249
{
542
249
    Py_XINCREF(obj);
543
249
    return obj;
544
249
}
Unexecuted instantiation: thread.c:_Py_XNewRef
traceback.c:_Py_XNewRef
Line
Count
Source
541
130M
{
542
130M
    Py_XINCREF(obj);
543
130M
    return obj;
544
130M
}
Unexecuted instantiation: tracemalloc.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
Unexecuted instantiation: suggestions.c:_Py_XNewRef
Unexecuted instantiation: perf_trampoline.c:_Py_XNewRef
Unexecuted instantiation: perf_jit_trampoline.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
541
197k
{
542
197k
    Py_XINCREF(obj);
543
197k
    return obj;
544
197k
}
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
541
76
{
542
76
    Py_XINCREF(obj);
543
76
    return obj;
544
76
}
Unexecuted instantiation: _codecsmodule.c:_Py_XNewRef
_collectionsmodule.c:_Py_XNewRef
Line
Count
Source
541
21.5k
{
542
21.5k
    Py_XINCREF(obj);
543
21.5k
    return obj;
544
21.5k
}
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
541
152
{
542
152
    Py_XINCREF(obj);
543
152
    return obj;
544
152
}
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
541
30.7k
{
542
30.7k
    Py_XINCREF(obj);
543
30.7k
    return obj;
544
30.7k
}
_functoolsmodule.c:_Py_XNewRef
Line
Count
Source
541
36
{
542
36
    Py_XINCREF(obj);
543
36
    return obj;
544
36
}
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
getpath.c:_Py_XNewRef
Line
Count
Source
541
216
{
542
216
    Py_XINCREF(obj);
543
216
    return obj;
544
216
}
Unexecuted instantiation: frozen.c:_Py_XNewRef
Unexecuted instantiation: getbuildinfo.c:_Py_XNewRef
Unexecuted instantiation: peg_api.c:_Py_XNewRef
Unexecuted instantiation: file_tokenizer.c:_Py_XNewRef
Unexecuted instantiation: helpers.c:_Py_XNewRef
Unexecuted instantiation: myreadline.c:_Py_XNewRef
abstract.c:_Py_XNewRef
Line
Count
Source
541
96.4M
{
542
96.4M
    Py_XINCREF(obj);
543
96.4M
    return obj;
544
96.4M
}
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
541
20.6M
{
542
20.6M
    Py_XINCREF(obj);
543
20.6M
    return obj;
544
20.6M
}
Unexecuted instantiation: classobject.c:_Py_XNewRef
codeobject.c:_Py_XNewRef
Line
Count
Source
541
4.51k
{
542
4.51k
    Py_XINCREF(obj);
543
4.51k
    return obj;
544
4.51k
}
Unexecuted instantiation: complexobject.c:_Py_XNewRef
descrobject.c:_Py_XNewRef
Line
Count
Source
541
110k
{
542
110k
    Py_XINCREF(obj);
543
110k
    return obj;
544
110k
}
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
541
18.9M
{
542
18.9M
    Py_XINCREF(obj);
543
18.9M
    return obj;
544
18.9M
}
funcobject.c:_Py_XNewRef
Line
Count
Source
541
59.9k
{
542
59.9k
    Py_XINCREF(obj);
543
59.9k
    return obj;
544
59.9k
}
Unexecuted instantiation: interpolationobject.c:_Py_XNewRef
Unexecuted instantiation: iterobject.c:_Py_XNewRef
lazyimportobject.c:_Py_XNewRef
Line
Count
Source
541
304
{
542
304
    Py_XINCREF(obj);
543
304
    return obj;
544
304
}
Unexecuted instantiation: odictobject.c:_Py_XNewRef
methodobject.c:_Py_XNewRef
Line
Count
Source
541
281M
{
542
281M
    Py_XINCREF(obj);
543
281M
    return obj;
544
281M
}
Unexecuted instantiation: namespaceobject.c:_Py_XNewRef
Unexecuted instantiation: _contextvars.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
pegen.c:_Py_XNewRef
Line
Count
Source
541
97.1k
{
542
97.1k
    Py_XINCREF(obj);
543
97.1k
    return obj;
544
97.1k
}
Unexecuted instantiation: pegen_errors.c:_Py_XNewRef
Unexecuted instantiation: parser.c:_Py_XNewRef
Unexecuted instantiation: buffer.c:_Py_XNewRef
Unexecuted instantiation: lexer.c:_Py_XNewRef
Unexecuted instantiation: state.c:_Py_XNewRef
Unexecuted instantiation: readline_tokenizer.c:_Py_XNewRef
Unexecuted instantiation: string_tokenizer.c:_Py_XNewRef
Unexecuted instantiation: utf8_tokenizer.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
545
546
// Py_NewRef() and Py_XNewRef() are exported as functions for the stable ABI.
547
// Names overridden with macros by static inline functions for best
548
// performances.
549
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
550
14.1G
#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
551
982M
#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
552
#else
553
#  define Py_NewRef(obj) _Py_NewRef(obj)
554
#  define Py_XNewRef(obj) _Py_XNewRef(obj)
555
#endif
556
557
558
#ifdef __cplusplus
559
}
560
#endif
561
#endif   // !_Py_REFCOUNT_H