Coverage Report

Created: 2026-06-21 06:15

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
10.6G
#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
48
440
#define _Py_IMMORTAL_MINIMUM_REFCNT (1ULL << 31)
49
247M
#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
50
247M
#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
903M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
903M
    #if !defined(Py_GIL_DISABLED)
107
903M
        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
903M
    }
bytesobject.c:_Py_REFCNT
Line
Count
Source
105
4.00M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
4.00M
    #if !defined(Py_GIL_DISABLED)
107
4.00M
        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.00M
    }
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
440
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
440
    #if !defined(Py_GIL_DISABLED)
107
440
        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
440
    }
longobject.c:_Py_REFCNT
Line
Count
Source
105
16.1k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
16.1k
    #if !defined(Py_GIL_DISABLED)
107
16.1k
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
16.1k
    }
dictobject.c:_Py_REFCNT
Line
Count
Source
105
219M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
219M
    #if !defined(Py_GIL_DISABLED)
107
219M
        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
219M
    }
Unexecuted instantiation: memoryobject.c:_Py_REFCNT
Unexecuted instantiation: moduleobject.c:_Py_REFCNT
object.c:_Py_REFCNT
Line
Count
Source
105
74.3M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
74.3M
    #if !defined(Py_GIL_DISABLED)
107
74.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
74.3M
    }
Unexecuted instantiation: obmalloc.c:_Py_REFCNT
Unexecuted instantiation: picklebufobject.c:_Py_REFCNT
Unexecuted instantiation: rangeobject.c:_Py_REFCNT
Unexecuted instantiation: sentinelobject.c:_Py_REFCNT
setobject.c:_Py_REFCNT
Line
Count
Source
105
4.61k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
4.61k
    #if !defined(Py_GIL_DISABLED)
107
4.61k
        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.61k
    }
Unexecuted instantiation: sliceobject.c:_Py_REFCNT
Unexecuted instantiation: structseq.c:_Py_REFCNT
Unexecuted instantiation: templateobject.c:_Py_REFCNT
tupleobject.c:_Py_REFCNT
Line
Count
Source
105
140k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
140k
    #if !defined(Py_GIL_DISABLED)
107
140k
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
140k
    }
typeobject.c:_Py_REFCNT
Line
Count
Source
105
367
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
367
    #if !defined(Py_GIL_DISABLED)
107
367
        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
367
    }
Unexecuted instantiation: typevarobject.c:_Py_REFCNT
unicode_format.c:_Py_REFCNT
Line
Count
Source
105
6.15M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
6.15M
    #if !defined(Py_GIL_DISABLED)
107
6.15M
        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
6.15M
    }
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
66.8M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
66.8M
    #if !defined(Py_GIL_DISABLED)
107
66.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
66.8M
    }
Unexecuted instantiation: unionobject.c:_Py_REFCNT
weakrefobject.c:_Py_REFCNT
Line
Count
Source
105
51.0M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
51.0M
    #if !defined(Py_GIL_DISABLED)
107
51.0M
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
51.0M
    }
Unexecuted instantiation: _warnings.c:_Py_REFCNT
bltinmodule.c:_Py_REFCNT
Line
Count
Source
105
1.63M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
1.63M
    #if !defined(Py_GIL_DISABLED)
107
1.63M
        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.63M
    }
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
63.2M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
63.2M
    #if !defined(Py_GIL_DISABLED)
107
63.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
63.2M
    }
Unexecuted instantiation: future.c:_Py_REFCNT
gc.c:_Py_REFCNT
Line
Count
Source
105
363M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
363M
    #if !defined(Py_GIL_DISABLED)
107
363M
        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
363M
    }
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
56.6k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
56.6k
    #if !defined(Py_GIL_DISABLED)
107
56.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
56.6k
    }
Unexecuted instantiation: modsupport.c:_Py_REFCNT
Unexecuted instantiation: mysnprintf.c:_Py_REFCNT
Unexecuted instantiation: parking_lot.c:_Py_REFCNT
Unexecuted instantiation: preconfig.c:_Py_REFCNT
Unexecuted instantiation: pyarena.c:_Py_REFCNT
Unexecuted instantiation: pyctype.c:_Py_REFCNT
Unexecuted instantiation: pyhash.c:_Py_REFCNT
Unexecuted instantiation: pylifecycle.c:_Py_REFCNT
Unexecuted instantiation: pymath.c:_Py_REFCNT
Unexecuted instantiation: pystate.c:_Py_REFCNT
Unexecuted instantiation: pythonrun.c:_Py_REFCNT
Unexecuted instantiation: pytime.c:_Py_REFCNT
Unexecuted instantiation: qsbr.c:_Py_REFCNT
Unexecuted instantiation: bootstrap_hash.c:_Py_REFCNT
Unexecuted instantiation: specialize.c:_Py_REFCNT
Unexecuted instantiation: slots.c:_Py_REFCNT
Unexecuted instantiation: slots_generated.c:_Py_REFCNT
Unexecuted instantiation: structmember.c:_Py_REFCNT
Unexecuted instantiation: symtable.c:_Py_REFCNT
sysmodule.c:_Py_REFCNT
Line
Count
Source
105
4
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
4
    #if !defined(Py_GIL_DISABLED)
107
4
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
4
    }
Unexecuted instantiation: thread.c:_Py_REFCNT
Unexecuted instantiation: traceback.c:_Py_REFCNT
Unexecuted instantiation: tracemalloc.c:_Py_REFCNT
Unexecuted instantiation: getopt.c:_Py_REFCNT
Unexecuted instantiation: pystrcmp.c:_Py_REFCNT
Unexecuted instantiation: pystrtod.c:_Py_REFCNT
Unexecuted instantiation: pystrhex.c:_Py_REFCNT
Unexecuted instantiation: dtoa.c:_Py_REFCNT
Unexecuted instantiation: fileutils.c:_Py_REFCNT
Unexecuted instantiation: suggestions.c:_Py_REFCNT
Unexecuted instantiation: perf_trampoline.c:_Py_REFCNT
Unexecuted instantiation: perf_jit_trampoline.c:_Py_REFCNT
Unexecuted instantiation: jit_unwind.c:_Py_REFCNT
Unexecuted instantiation: remote_debugging.c:_Py_REFCNT
Unexecuted instantiation: dynload_shlib.c:_Py_REFCNT
Unexecuted instantiation: config.c:_Py_REFCNT
Unexecuted instantiation: gcmodule.c:_Py_REFCNT
Unexecuted instantiation: _asynciomodule.c:_Py_REFCNT
Unexecuted instantiation: atexitmodule.c:_Py_REFCNT
Unexecuted instantiation: faulthandler.c:_Py_REFCNT
Unexecuted instantiation: posixmodule.c:_Py_REFCNT
Unexecuted instantiation: signalmodule.c:_Py_REFCNT
Unexecuted instantiation: _tracemalloc.c:_Py_REFCNT
Unexecuted instantiation: _suggestions.c:_Py_REFCNT
Unexecuted instantiation: _datetimemodule.c:_Py_REFCNT
Unexecuted instantiation: _codecsmodule.c:_Py_REFCNT
Unexecuted instantiation: _collectionsmodule.c:_Py_REFCNT
Unexecuted instantiation: errnomodule.c:_Py_REFCNT
Unexecuted instantiation: _iomodule.c:_Py_REFCNT
iobase.c:_Py_REFCNT
Line
Count
Source
105
116k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
116k
    #if !defined(Py_GIL_DISABLED)
107
116k
        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
116k
    }
Unexecuted instantiation: fileio.c:_Py_REFCNT
bytesio.c:_Py_REFCNT
Line
Count
Source
105
78.6k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
78.6k
    #if !defined(Py_GIL_DISABLED)
107
78.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
78.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
25.1k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
25.1k
    #if !defined(Py_GIL_DISABLED)
107
25.1k
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
25.1k
    }
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
217k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
217k
    #if !defined(Py_GIL_DISABLED)
107
217k
        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
217k
    }
Unexecuted instantiation: complexobject.c:_Py_REFCNT
Unexecuted instantiation: descrobject.c:_Py_REFCNT
enumobject.c:_Py_REFCNT
Line
Count
Source
105
12.1M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
12.1M
    #if !defined(Py_GIL_DISABLED)
107
12.1M
        return ob->ob_refcnt;
108
    #else
109
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
110
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
111
            return _Py_IMMORTAL_INITIAL_REFCNT;
112
        }
113
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
114
        return _Py_STATIC_CAST(Py_ssize_t, local) +
115
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
116
    #endif
117
12.1M
    }
Unexecuted instantiation: genobject.c:_Py_REFCNT
Unexecuted instantiation: fileobject.c:_Py_REFCNT
Unexecuted instantiation: frameobject.c:_Py_REFCNT
funcobject.c:_Py_REFCNT
Line
Count
Source
105
40.4M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
106
40.4M
    #if !defined(Py_GIL_DISABLED)
107
40.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
40.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
749M
    #  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
21.7G
{
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.7G
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
21.7G
}
bytesobject.c:_Py_IsImmortal
Line
Count
Source
127
30.8M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
30.8M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
30.8M
}
call.c:_Py_IsImmortal
Line
Count
Source
127
227M
{
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
227M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
227M
}
exceptions.c:_Py_IsImmortal
Line
Count
Source
127
217M
{
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
217M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
217M
}
genericaliasobject.c:_Py_IsImmortal
Line
Count
Source
127
290
{
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
290
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
290
}
floatobject.c:_Py_IsImmortal
Line
Count
Source
127
510k
{
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
510k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
510k
}
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
76.8M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
76.8M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
76.8M
}
dictobject.c:_Py_IsImmortal
Line
Count
Source
127
834M
{
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
834M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
834M
}
memoryobject.c:_Py_IsImmortal
Line
Count
Source
127
3.61M
{
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.61M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
3.61M
}
moduleobject.c:_Py_IsImmortal
Line
Count
Source
127
6.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
6.04M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
6.04M
}
object.c:_Py_IsImmortal
Line
Count
Source
127
624M
{
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
624M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
624M
}
Unexecuted instantiation: obmalloc.c:_Py_IsImmortal
Unexecuted instantiation: picklebufobject.c:_Py_IsImmortal
rangeobject.c:_Py_IsImmortal
Line
Count
Source
127
44.8M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
44.8M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
44.8M
}
sentinelobject.c:_Py_IsImmortal
Line
Count
Source
127
54
{
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
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
54
}
setobject.c:_Py_IsImmortal
Line
Count
Source
127
8.02M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
8.02M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
8.02M
}
sliceobject.c:_Py_IsImmortal
Line
Count
Source
127
183M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
183M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
183M
}
structseq.c:_Py_IsImmortal
Line
Count
Source
127
6.15M
{
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
6.15M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
6.15M
}
templateobject.c:_Py_IsImmortal
Line
Count
Source
127
22
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
22
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
22
}
tupleobject.c:_Py_IsImmortal
Line
Count
Source
127
3.04G
{
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.04G
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
3.04G
}
typeobject.c:_Py_IsImmortal
Line
Count
Source
127
954M
{
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
954M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
954M
}
typevarobject.c:_Py_IsImmortal
Line
Count
Source
127
295k
{
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
295k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
295k
}
unicode_format.c:_Py_IsImmortal
Line
Count
Source
127
37.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
37.4M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
37.4M
}
unicode_formatter.c:_Py_IsImmortal
Line
Count
Source
127
1.42k
{
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.42k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.42k
}
unicode_writer.c:_Py_IsImmortal
Line
Count
Source
127
27.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
27.3M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
27.3M
}
Unexecuted instantiation: unicodectype.c:_Py_IsImmortal
unicodeobject.c:_Py_IsImmortal
Line
Count
Source
127
163M
{
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
163M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
163M
}
unionobject.c:_Py_IsImmortal
Line
Count
Source
127
4.42k
{
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.42k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
4.42k
}
weakrefobject.c:_Py_IsImmortal
Line
Count
Source
127
2.92M
{
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.92M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
2.92M
}
_warnings.c:_Py_IsImmortal
Line
Count
Source
127
56.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
56.1M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
56.1M
}
bltinmodule.c:_Py_IsImmortal
Line
Count
Source
127
2.05G
{
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.05G
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
2.05G
}
ceval.c:_Py_IsImmortal
Line
Count
Source
127
8.93G
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
8.93G
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
8.93G
}
codecs.c:_Py_IsImmortal
Line
Count
Source
127
12.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
12.9M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
12.9M
}
codegen.c:_Py_IsImmortal
Line
Count
Source
127
62.3k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
62.3k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
62.3k
}
compile.c:_Py_IsImmortal
Line
Count
Source
127
323k
{
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
323k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
323k
}
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
99.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
99.5M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
99.5M
}
flowgraph.c:_Py_IsImmortal
Line
Count
Source
127
60.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
60.6k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
60.6k
}
frame.c:_Py_IsImmortal
Line
Count
Source
127
142M
{
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
142M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
142M
}
Unexecuted instantiation: future.c:_Py_IsImmortal
gc.c:_Py_IsImmortal
Line
Count
Source
127
367M
{
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
367M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
367M
}
Unexecuted instantiation: gc_gil.c:_Py_IsImmortal
getargs.c:_Py_IsImmortal
Line
Count
Source
127
11.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
11.3M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
11.3M
}
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
29.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
29.6M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
29.6M
}
importdl.c:_Py_IsImmortal
Line
Count
Source
127
3.10k
{
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.10k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
3.10k
}
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
}
instruction_sequence.c:_Py_IsImmortal
Line
Count
Source
127
1
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
1
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1
}
intrinsics.c:_Py_IsImmortal
Line
Count
Source
127
70.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
70.6k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
70.6k
}
Unexecuted instantiation: legacy_tracing.c:_Py_IsImmortal
Unexecuted instantiation: lock.c:_Py_IsImmortal
marshal.c:_Py_IsImmortal
Line
Count
Source
127
1.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
1.83M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.83M
}
modsupport.c:_Py_IsImmortal
Line
Count
Source
127
97.1k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
97.1k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
97.1k
}
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
15.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
15.1M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
15.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
1.87k
{
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.87k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.87k
}
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
1.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
1.24M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.24M
}
Unexecuted instantiation: slots.c:_Py_IsImmortal
Unexecuted instantiation: slots_generated.c:_Py_IsImmortal
structmember.c:_Py_IsImmortal
Line
Count
Source
127
19.8k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
19.8k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
19.8k
}
symtable.c:_Py_IsImmortal
Line
Count
Source
127
375k
{
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
375k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
375k
}
sysmodule.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
}
Unexecuted instantiation: thread.c:_Py_IsImmortal
traceback.c:_Py_IsImmortal
Line
Count
Source
127
205M
{
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
205M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
205M
}
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
98.2k
{
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.2k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
98.2k
}
Unexecuted instantiation: suggestions.c:_Py_IsImmortal
Unexecuted instantiation: perf_trampoline.c:_Py_IsImmortal
Unexecuted instantiation: perf_jit_trampoline.c:_Py_IsImmortal
Unexecuted instantiation: jit_unwind.c:_Py_IsImmortal
Unexecuted instantiation: remote_debugging.c:_Py_IsImmortal
Unexecuted instantiation: dynload_shlib.c:_Py_IsImmortal
Unexecuted instantiation: config.c:_Py_IsImmortal
Unexecuted instantiation: gcmodule.c:_Py_IsImmortal
Unexecuted instantiation: _asynciomodule.c:_Py_IsImmortal
atexitmodule.c:_Py_IsImmortal
Line
Count
Source
127
4
{
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
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
4
}
Unexecuted instantiation: faulthandler.c:_Py_IsImmortal
posixmodule.c:_Py_IsImmortal
Line
Count
Source
127
3.23M
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
3.23M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
3.23M
}
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
162k
{
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
162k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
162k
}
Unexecuted instantiation: _codecsmodule.c:_Py_IsImmortal
_collectionsmodule.c:_Py_IsImmortal
Line
Count
Source
127
208k
{
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
208k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
208k
}
Unexecuted instantiation: errnomodule.c:_Py_IsImmortal
_iomodule.c:_Py_IsImmortal
Line
Count
Source
127
2.12M
{
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.12M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
2.12M
}
iobase.c:_Py_IsImmortal
Line
Count
Source
127
2.33M
{
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.33M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
2.33M
}
fileio.c:_Py_IsImmortal
Line
Count
Source
127
85.2k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
85.2k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
85.2k
}
bytesio.c:_Py_IsImmortal
Line
Count
Source
127
373k
{
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
373k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
373k
}
bufferedio.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
}
textio.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
}
stringio.c:_Py_IsImmortal
Line
Count
Source
127
283k
{
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
283k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
283k
}
itertoolsmodule.c:_Py_IsImmortal
Line
Count
Source
127
14.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
14.5k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
14.5k
}
sre.c:_Py_IsImmortal
Line
Count
Source
127
253M
{
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
253M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
253M
}
Unexecuted instantiation: _sysconfig.c:_Py_IsImmortal
_threadmodule.c:_Py_IsImmortal
Line
Count
Source
127
18.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
18.0M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
18.0M
}
Unexecuted instantiation: timemodule.c:_Py_IsImmortal
Unexecuted instantiation: _typesmodule.c:_Py_IsImmortal
Unexecuted instantiation: _typingmodule.c:_Py_IsImmortal
Unexecuted instantiation: _weakref.c:_Py_IsImmortal
_abc.c:_Py_IsImmortal
Line
Count
Source
127
503k
{
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
503k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
503k
}
_functoolsmodule.c:_Py_IsImmortal
Line
Count
Source
127
260k
{
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
260k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
260k
}
Unexecuted instantiation: _localemodule.c:_Py_IsImmortal
Unexecuted instantiation: _opcode.c:_Py_IsImmortal
_operator.c:_Py_IsImmortal
Line
Count
Source
127
561k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
561k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
561k
}
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
32.2k
{
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.2k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
32.2k
}
Unexecuted instantiation: myreadline.c:_Py_IsImmortal
abstract.c:_Py_IsImmortal
Line
Count
Source
127
583M
{
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
583M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
583M
}
Unexecuted instantiation: boolobject.c:_Py_IsImmortal
Unexecuted instantiation: bytes_methods.c:_Py_IsImmortal
bytearrayobject.c:_Py_IsImmortal
Line
Count
Source
127
24.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
24.4M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
24.4M
}
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
12.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
12.2M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
12.2M
}
classobject.c:_Py_IsImmortal
Line
Count
Source
127
91.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
91.2M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
91.2M
}
codeobject.c:_Py_IsImmortal
Line
Count
Source
127
1.26M
{
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.26M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
1.26M
}
Unexecuted instantiation: complexobject.c:_Py_IsImmortal
descrobject.c:_Py_IsImmortal
Line
Count
Source
127
65.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
65.0M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
65.0M
}
enumobject.c:_Py_IsImmortal
Line
Count
Source
127
84.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
84.2M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
84.2M
}
genobject.c:_Py_IsImmortal
Line
Count
Source
127
112M
{
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
112M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
112M
}
fileobject.c:_Py_IsImmortal
Line
Count
Source
127
377k
{
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
377k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
377k
}
frameobject.c:_Py_IsImmortal
Line
Count
Source
127
46.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
46.2M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
46.2M
}
funcobject.c:_Py_IsImmortal
Line
Count
Source
127
230M
{
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
230M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
230M
}
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.44M
{
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.44M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
3.44M
}
lazyimportobject.c:_Py_IsImmortal
Line
Count
Source
127
408
{
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
408
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
408
}
odictobject.c:_Py_IsImmortal
Line
Count
Source
127
406k
{
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
406k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
406k
}
methodobject.c:_Py_IsImmortal
Line
Count
Source
127
152M
{
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
152M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
152M
}
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.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
3.75M
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
3.75M
}
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
29.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
29.5k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
29.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
298k
{
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
298k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
298k
}
pegen_errors.c:_Py_IsImmortal
Line
Count
Source
127
296k
{
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
296k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
296k
}
Unexecuted instantiation: parser.c:_Py_IsImmortal
Unexecuted instantiation: buffer.c:_Py_IsImmortal
lexer.c:_Py_IsImmortal
Line
Count
Source
127
11.1k
{
128
#if defined(Py_GIL_DISABLED)
129
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
130
            _Py_IMMORTAL_REFCNT_LOCAL);
131
#elif SIZEOF_VOID_P > 4
132
11.1k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
11.1k
}
state.c:_Py_IsImmortal
Line
Count
Source
127
108k
{
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
108k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
108k
}
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.14k
{
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.14k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
2.14k
}
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
36.2k
{
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
36.2k
    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
133
#else
134
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
135
#endif
136
36.2k
}
137
23.5G
#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
138
139
140
static inline Py_ALWAYS_INLINE int _Py_IsStaticImmortal(PyObject *op)
141
0
{
142
0
#if defined(Py_GIL_DISABLED) || SIZEOF_VOID_P > 4
143
0
    return (op->ob_flags & _Py_STATICALLY_ALLOCATED_FLAG) != 0;
144
#else
145
    return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT;
146
#endif
147
0
}
Unexecuted instantiation: bytesobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: call.c:_Py_IsStaticImmortal
Unexecuted instantiation: exceptions.c:_Py_IsStaticImmortal
Unexecuted instantiation: genericaliasobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: floatobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: listobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: longobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: dictobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: memoryobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: moduleobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: object.c:_Py_IsStaticImmortal
Unexecuted instantiation: obmalloc.c:_Py_IsStaticImmortal
Unexecuted instantiation: picklebufobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: rangeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: sentinelobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: setobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: sliceobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: structseq.c:_Py_IsStaticImmortal
Unexecuted instantiation: templateobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: tupleobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: typeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: typevarobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicode_format.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicode_formatter.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicode_writer.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicodectype.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicodeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: unionobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: weakrefobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: _warnings.c:_Py_IsStaticImmortal
Unexecuted instantiation: bltinmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: ceval.c:_Py_IsStaticImmortal
Unexecuted instantiation: codecs.c:_Py_IsStaticImmortal
Unexecuted instantiation: codegen.c:_Py_IsStaticImmortal
Unexecuted instantiation: compile.c:_Py_IsStaticImmortal
Unexecuted instantiation: context.c:_Py_IsStaticImmortal
Unexecuted instantiation: errors.c:_Py_IsStaticImmortal
Unexecuted instantiation: flowgraph.c:_Py_IsStaticImmortal
Unexecuted instantiation: frame.c:_Py_IsStaticImmortal
Unexecuted instantiation: future.c:_Py_IsStaticImmortal
Unexecuted instantiation: gc.c:_Py_IsStaticImmortal
Unexecuted instantiation: gc_gil.c:_Py_IsStaticImmortal
Unexecuted instantiation: getargs.c:_Py_IsStaticImmortal
Unexecuted instantiation: ceval_gil.c:_Py_IsStaticImmortal
Unexecuted instantiation: hamt.c:_Py_IsStaticImmortal
Unexecuted instantiation: hashtable.c:_Py_IsStaticImmortal
Unexecuted instantiation: import.c:_Py_IsStaticImmortal
Unexecuted instantiation: importdl.c:_Py_IsStaticImmortal
Unexecuted instantiation: initconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: instrumentation.c:_Py_IsStaticImmortal
Unexecuted instantiation: instruction_sequence.c:_Py_IsStaticImmortal
Unexecuted instantiation: intrinsics.c:_Py_IsStaticImmortal
Unexecuted instantiation: legacy_tracing.c:_Py_IsStaticImmortal
Unexecuted instantiation: lock.c:_Py_IsStaticImmortal
Unexecuted instantiation: marshal.c:_Py_IsStaticImmortal
Unexecuted instantiation: modsupport.c:_Py_IsStaticImmortal
Unexecuted instantiation: mysnprintf.c:_Py_IsStaticImmortal
Unexecuted instantiation: parking_lot.c:_Py_IsStaticImmortal
Unexecuted instantiation: preconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: pyarena.c:_Py_IsStaticImmortal
Unexecuted instantiation: pyctype.c:_Py_IsStaticImmortal
Unexecuted instantiation: pyhash.c:_Py_IsStaticImmortal
Unexecuted instantiation: pylifecycle.c:_Py_IsStaticImmortal
Unexecuted instantiation: pymath.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystate.c:_Py_IsStaticImmortal
Unexecuted instantiation: pythonrun.c:_Py_IsStaticImmortal
Unexecuted instantiation: pytime.c:_Py_IsStaticImmortal
Unexecuted instantiation: qsbr.c:_Py_IsStaticImmortal
Unexecuted instantiation: bootstrap_hash.c:_Py_IsStaticImmortal
Unexecuted instantiation: specialize.c:_Py_IsStaticImmortal
Unexecuted instantiation: slots.c:_Py_IsStaticImmortal
Unexecuted instantiation: slots_generated.c:_Py_IsStaticImmortal
Unexecuted instantiation: structmember.c:_Py_IsStaticImmortal
Unexecuted instantiation: symtable.c:_Py_IsStaticImmortal
Unexecuted instantiation: sysmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: thread.c:_Py_IsStaticImmortal
Unexecuted instantiation: traceback.c:_Py_IsStaticImmortal
Unexecuted instantiation: tracemalloc.c:_Py_IsStaticImmortal
Unexecuted instantiation: getopt.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystrcmp.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystrtod.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystrhex.c:_Py_IsStaticImmortal
Unexecuted instantiation: dtoa.c:_Py_IsStaticImmortal
Unexecuted instantiation: fileutils.c:_Py_IsStaticImmortal
Unexecuted instantiation: suggestions.c:_Py_IsStaticImmortal
Unexecuted instantiation: perf_trampoline.c:_Py_IsStaticImmortal
Unexecuted instantiation: perf_jit_trampoline.c:_Py_IsStaticImmortal
Unexecuted instantiation: jit_unwind.c:_Py_IsStaticImmortal
Unexecuted instantiation: remote_debugging.c:_Py_IsStaticImmortal
Unexecuted instantiation: dynload_shlib.c:_Py_IsStaticImmortal
Unexecuted instantiation: config.c:_Py_IsStaticImmortal
Unexecuted instantiation: gcmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _asynciomodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: atexitmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: faulthandler.c:_Py_IsStaticImmortal
Unexecuted instantiation: posixmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: signalmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _tracemalloc.c:_Py_IsStaticImmortal
Unexecuted instantiation: _suggestions.c:_Py_IsStaticImmortal
Unexecuted instantiation: _datetimemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _codecsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _collectionsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: errnomodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _iomodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: iobase.c:_Py_IsStaticImmortal
Unexecuted instantiation: fileio.c:_Py_IsStaticImmortal
Unexecuted instantiation: bytesio.c:_Py_IsStaticImmortal
Unexecuted instantiation: bufferedio.c:_Py_IsStaticImmortal
Unexecuted instantiation: textio.c:_Py_IsStaticImmortal
Unexecuted instantiation: stringio.c:_Py_IsStaticImmortal
Unexecuted instantiation: itertoolsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: sre.c:_Py_IsStaticImmortal
Unexecuted instantiation: _sysconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: _threadmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: timemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _typesmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _typingmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _weakref.c:_Py_IsStaticImmortal
Unexecuted instantiation: _abc.c:_Py_IsStaticImmortal
Unexecuted instantiation: _functoolsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _localemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _opcode.c:_Py_IsStaticImmortal
Unexecuted instantiation: _operator.c:_Py_IsStaticImmortal
Unexecuted instantiation: _stat.c:_Py_IsStaticImmortal
Unexecuted instantiation: symtablemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: pwdmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: getpath.c:_Py_IsStaticImmortal
Unexecuted instantiation: frozen.c:_Py_IsStaticImmortal
Unexecuted instantiation: getbuildinfo.c:_Py_IsStaticImmortal
Unexecuted instantiation: peg_api.c:_Py_IsStaticImmortal
Unexecuted instantiation: 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
0
#define _Py_IsStaticImmortal(op) _Py_IsStaticImmortal(_PyObject_CAST(op))
149
#endif // !defined(_Py_OPAQUE_PYOBJECT)
150
151
// Py_SET_REFCNT() implementation for stable ABI
152
PyAPI_FUNC(void) _Py_SetRefcnt(PyObject *ob, Py_ssize_t refcnt);
153
154
307M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
307M
    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
307M
    if (_Py_IsImmortal(ob)) {
167
1.08k
        return;
168
1.08k
    }
169
307M
#ifndef Py_GIL_DISABLED
170
307M
#if SIZEOF_VOID_P > 4
171
307M
    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
307M
#endif  // Py_LIMITED_API
199
307M
}
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
217M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
217M
    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
217M
    if (_Py_IsImmortal(ob)) {
167
0
        return;
168
0
    }
169
217M
#ifndef Py_GIL_DISABLED
170
217M
#if SIZEOF_VOID_P > 4
171
217M
    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
217M
#endif  // Py_LIMITED_API
199
217M
}
Unexecuted instantiation: memoryobject.c:Py_SET_REFCNT
moduleobject.c:Py_SET_REFCNT
Line
Count
Source
154
1.08k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
1.08k
    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.08k
    if (_Py_IsImmortal(ob)) {
167
1.08k
        return;
168
1.08k
    }
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
49.5M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
49.5M
    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
49.5M
    if (_Py_IsImmortal(ob)) {
167
0
        return;
168
0
    }
169
49.5M
#ifndef Py_GIL_DISABLED
170
49.5M
#if SIZEOF_VOID_P > 4
171
49.5M
    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
49.5M
#endif  // Py_LIMITED_API
199
49.5M
}
Unexecuted instantiation: obmalloc.c:Py_SET_REFCNT
Unexecuted instantiation: picklebufobject.c:Py_SET_REFCNT
Unexecuted instantiation: rangeobject.c:Py_SET_REFCNT
Unexecuted instantiation: sentinelobject.c:Py_SET_REFCNT
Unexecuted instantiation: setobject.c:Py_SET_REFCNT
Unexecuted instantiation: sliceobject.c:Py_SET_REFCNT
Unexecuted instantiation: structseq.c:Py_SET_REFCNT
Unexecuted instantiation: templateobject.c:Py_SET_REFCNT
Unexecuted instantiation: tupleobject.c:Py_SET_REFCNT
Unexecuted instantiation: typeobject.c:Py_SET_REFCNT
Unexecuted instantiation: typevarobject.c:Py_SET_REFCNT
Unexecuted instantiation: unicode_format.c:Py_SET_REFCNT
Unexecuted instantiation: unicode_formatter.c:Py_SET_REFCNT
Unexecuted instantiation: unicode_writer.c:Py_SET_REFCNT
Unexecuted instantiation: unicodectype.c:Py_SET_REFCNT
unicodeobject.c:Py_SET_REFCNT
Line
Count
Source
154
415k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
415k
    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
415k
    if (_Py_IsImmortal(ob)) {
167
0
        return;
168
0
    }
169
415k
#ifndef Py_GIL_DISABLED
170
415k
#if SIZEOF_VOID_P > 4
171
415k
    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
415k
#endif  // Py_LIMITED_API
199
415k
}
Unexecuted instantiation: unionobject.c:Py_SET_REFCNT
Unexecuted instantiation: weakrefobject.c:Py_SET_REFCNT
Unexecuted instantiation: _warnings.c:Py_SET_REFCNT
Unexecuted instantiation: bltinmodule.c:Py_SET_REFCNT
Unexecuted instantiation: ceval.c:Py_SET_REFCNT
Unexecuted instantiation: codecs.c:Py_SET_REFCNT
Unexecuted instantiation: codegen.c:Py_SET_REFCNT
Unexecuted instantiation: compile.c:Py_SET_REFCNT
Unexecuted instantiation: context.c:Py_SET_REFCNT
Unexecuted instantiation: errors.c:Py_SET_REFCNT
Unexecuted instantiation: flowgraph.c:Py_SET_REFCNT
Unexecuted instantiation: frame.c:Py_SET_REFCNT
Unexecuted instantiation: future.c:Py_SET_REFCNT
Unexecuted instantiation: gc.c:Py_SET_REFCNT
Unexecuted instantiation: gc_gil.c:Py_SET_REFCNT
Unexecuted instantiation: getargs.c:Py_SET_REFCNT
Unexecuted instantiation: ceval_gil.c:Py_SET_REFCNT
Unexecuted instantiation: hamt.c:Py_SET_REFCNT
Unexecuted instantiation: hashtable.c:Py_SET_REFCNT
Unexecuted instantiation: import.c:Py_SET_REFCNT
Unexecuted instantiation: importdl.c:Py_SET_REFCNT
Unexecuted instantiation: initconfig.c:Py_SET_REFCNT
Unexecuted instantiation: instrumentation.c:Py_SET_REFCNT
Unexecuted instantiation: instruction_sequence.c:Py_SET_REFCNT
Unexecuted instantiation: intrinsics.c:Py_SET_REFCNT
Unexecuted instantiation: legacy_tracing.c:Py_SET_REFCNT
Unexecuted instantiation: lock.c:Py_SET_REFCNT
Unexecuted instantiation: marshal.c:Py_SET_REFCNT
Unexecuted instantiation: modsupport.c:Py_SET_REFCNT
Unexecuted instantiation: mysnprintf.c:Py_SET_REFCNT
Unexecuted instantiation: parking_lot.c:Py_SET_REFCNT
Unexecuted instantiation: preconfig.c:Py_SET_REFCNT
Unexecuted instantiation: pyarena.c:Py_SET_REFCNT
Unexecuted instantiation: pyctype.c:Py_SET_REFCNT
Unexecuted instantiation: pyhash.c:Py_SET_REFCNT
Unexecuted instantiation: pylifecycle.c:Py_SET_REFCNT
Unexecuted instantiation: pymath.c:Py_SET_REFCNT
Unexecuted instantiation: pystate.c:Py_SET_REFCNT
Unexecuted instantiation: pythonrun.c:Py_SET_REFCNT
Unexecuted instantiation: pytime.c:Py_SET_REFCNT
Unexecuted instantiation: qsbr.c:Py_SET_REFCNT
Unexecuted instantiation: bootstrap_hash.c:Py_SET_REFCNT
Unexecuted instantiation: specialize.c:Py_SET_REFCNT
Unexecuted instantiation: slots.c:Py_SET_REFCNT
Unexecuted instantiation: slots_generated.c:Py_SET_REFCNT
Unexecuted instantiation: structmember.c:Py_SET_REFCNT
Unexecuted instantiation: symtable.c:Py_SET_REFCNT
Unexecuted instantiation: sysmodule.c:Py_SET_REFCNT
Unexecuted instantiation: thread.c:Py_SET_REFCNT
Unexecuted instantiation: traceback.c:Py_SET_REFCNT
Unexecuted instantiation: tracemalloc.c:Py_SET_REFCNT
Unexecuted instantiation: getopt.c:Py_SET_REFCNT
Unexecuted instantiation: pystrcmp.c:Py_SET_REFCNT
Unexecuted instantiation: pystrtod.c:Py_SET_REFCNT
Unexecuted instantiation: pystrhex.c:Py_SET_REFCNT
Unexecuted instantiation: dtoa.c:Py_SET_REFCNT
Unexecuted instantiation: fileutils.c:Py_SET_REFCNT
Unexecuted instantiation: suggestions.c:Py_SET_REFCNT
Unexecuted instantiation: perf_trampoline.c:Py_SET_REFCNT
Unexecuted instantiation: perf_jit_trampoline.c:Py_SET_REFCNT
Unexecuted instantiation: jit_unwind.c:Py_SET_REFCNT
Unexecuted instantiation: remote_debugging.c:Py_SET_REFCNT
Unexecuted instantiation: dynload_shlib.c:Py_SET_REFCNT
Unexecuted instantiation: config.c:Py_SET_REFCNT
Unexecuted instantiation: gcmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _asynciomodule.c:Py_SET_REFCNT
Unexecuted instantiation: atexitmodule.c:Py_SET_REFCNT
Unexecuted instantiation: faulthandler.c:Py_SET_REFCNT
Unexecuted instantiation: posixmodule.c:Py_SET_REFCNT
Unexecuted instantiation: signalmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _tracemalloc.c:Py_SET_REFCNT
Unexecuted instantiation: _suggestions.c:Py_SET_REFCNT
Unexecuted instantiation: _datetimemodule.c:Py_SET_REFCNT
Unexecuted instantiation: _codecsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _collectionsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: errnomodule.c:Py_SET_REFCNT
Unexecuted instantiation: _iomodule.c:Py_SET_REFCNT
Unexecuted instantiation: iobase.c:Py_SET_REFCNT
Unexecuted instantiation: fileio.c:Py_SET_REFCNT
Unexecuted instantiation: bytesio.c:Py_SET_REFCNT
Unexecuted instantiation: bufferedio.c:Py_SET_REFCNT
Unexecuted instantiation: textio.c:Py_SET_REFCNT
Unexecuted instantiation: stringio.c:Py_SET_REFCNT
Unexecuted instantiation: itertoolsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: sre.c:Py_SET_REFCNT
Unexecuted instantiation: _sysconfig.c:Py_SET_REFCNT
Unexecuted instantiation: _threadmodule.c:Py_SET_REFCNT
Unexecuted instantiation: timemodule.c:Py_SET_REFCNT
Unexecuted instantiation: _typesmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _typingmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _weakref.c:Py_SET_REFCNT
Unexecuted instantiation: _abc.c:Py_SET_REFCNT
Unexecuted instantiation: _functoolsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _localemodule.c:Py_SET_REFCNT
Unexecuted instantiation: _opcode.c:Py_SET_REFCNT
Unexecuted instantiation: _operator.c:Py_SET_REFCNT
Unexecuted instantiation: _stat.c:Py_SET_REFCNT
Unexecuted instantiation: symtablemodule.c:Py_SET_REFCNT
Unexecuted instantiation: pwdmodule.c:Py_SET_REFCNT
Unexecuted instantiation: getpath.c:Py_SET_REFCNT
Unexecuted instantiation: frozen.c:Py_SET_REFCNT
Unexecuted instantiation: getbuildinfo.c:Py_SET_REFCNT
Unexecuted instantiation: peg_api.c:Py_SET_REFCNT
Unexecuted instantiation: 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
217k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
217k
    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
217k
    if (_Py_IsImmortal(ob)) {
167
0
        return;
168
0
    }
169
217k
#ifndef Py_GIL_DISABLED
170
217k
#if SIZEOF_VOID_P > 4
171
217k
    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
217k
#endif  // Py_LIMITED_API
199
217k
}
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
40.4M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
155
40.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
40.4M
    if (_Py_IsImmortal(ob)) {
167
0
        return;
168
0
    }
169
40.4M
#ifndef Py_GIL_DISABLED
170
40.4M
#if SIZEOF_VOID_P > 4
171
40.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
40.4M
#endif  // Py_LIMITED_API
199
40.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
307M
#  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
10.3G
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
10.3G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
6.04G
        _Py_INCREF_IMMORTAL_STAT_INC();
290
6.04G
        return;
291
6.04G
    }
292
4.32G
    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.32G
    _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.32G
#endif
308
4.32G
}
bytesobject.c:Py_INCREF
Line
Count
Source
256
160M
{
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
160M
    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.55M
    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.55M
    _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.55M
#endif
308
2.55M
}
call.c:Py_INCREF
Line
Count
Source
256
34.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
34.1M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
19.3M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
19.3M
        return;
291
19.3M
    }
292
14.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
14.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
14.8M
#endif
308
14.8M
}
exceptions.c:Py_INCREF
Line
Count
Source
256
204M
{
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
204M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
45.8M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
45.8M
        return;
291
45.8M
    }
292
158M
    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
158M
    _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
158M
#endif
308
158M
}
genericaliasobject.c:Py_INCREF
Line
Count
Source
256
2.20k
{
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.20k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.64k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.64k
        return;
291
1.64k
    }
292
554
    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
554
    _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
554
#endif
308
554
}
floatobject.c:Py_INCREF
Line
Count
Source
256
980k
{
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
980k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
980k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
980k
        return;
291
980k
    }
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.25G
{
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.25G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
246M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
246M
        return;
291
246M
    }
292
1.00G
    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.00G
    _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.00G
#endif
308
1.00G
}
longobject.c:Py_INCREF
Line
Count
Source
256
103M
{
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
103M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
103M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
103M
        return;
291
103M
    }
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
846M
{
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
846M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
240M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
240M
        return;
291
240M
    }
292
606M
    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
606M
    _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
606M
#endif
308
606M
}
memoryobject.c:Py_INCREF
Line
Count
Source
256
3.41M
{
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.41M
    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.41M
    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.41M
    _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.41M
#endif
308
3.41M
}
moduleobject.c:Py_INCREF
Line
Count
Source
256
8.69k
{
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.69k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
7.26k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
7.26k
        return;
291
7.26k
    }
292
1.42k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
1.42k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
1.42k
#endif
308
1.42k
}
object.c:Py_INCREF
Line
Count
Source
256
633M
{
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
633M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
454M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
454M
        return;
291
454M
    }
292
178M
    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
178M
    _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
178M
#endif
308
178M
}
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
}
sentinelobject.c:Py_INCREF
Line
Count
Source
256
170
{
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
170
    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
8
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
8
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
8
#endif
308
8
}
setobject.c:Py_INCREF
Line
Count
Source
256
5.66M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
5.66M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
818k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
818k
        return;
291
818k
    }
292
4.85M
    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.85M
    _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.85M
#endif
308
4.85M
}
sliceobject.c:Py_INCREF
Line
Count
Source
256
183M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
183M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
101M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
101M
        return;
291
101M
    }
292
82.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
82.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
82.3M
#endif
308
82.3M
}
structseq.c:Py_INCREF
Line
Count
Source
256
146k
{
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
146k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
133k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
133k
        return;
291
133k
    }
292
13.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
13.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
13.3k
#endif
308
13.3k
}
templateobject.c:Py_INCREF
Line
Count
Source
256
22
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
22
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
7
        _Py_INCREF_IMMORTAL_STAT_INC();
290
7
        return;
291
7
    }
292
15
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
15
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
15
#endif
308
15
}
tupleobject.c:Py_INCREF
Line
Count
Source
256
2.71G
{
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.71G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.22G
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.22G
        return;
291
2.22G
    }
292
484M
    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
484M
    _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
484M
#endif
308
484M
}
typeobject.c:Py_INCREF
Line
Count
Source
256
320M
{
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
320M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
202M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
202M
        return;
291
202M
    }
292
118M
    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
118M
    _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
118M
#endif
308
118M
}
typevarobject.c:Py_INCREF
Line
Count
Source
256
2.20k
{
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.20k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
780
        _Py_INCREF_IMMORTAL_STAT_INC();
290
780
        return;
291
780
    }
292
1.42k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
1.42k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
1.42k
#endif
308
1.42k
}
unicode_format.c:Py_INCREF
Line
Count
Source
256
18.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
18.9M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
7.79M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
7.79M
        return;
291
7.79M
    }
292
11.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
11.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
11.1M
#endif
308
11.1M
}
Unexecuted instantiation: unicode_formatter.c:Py_INCREF
unicode_writer.c:Py_INCREF
Line
Count
Source
256
7.40k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
7.40k
    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
7.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
7.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
7.40k
#endif
308
7.40k
}
Unexecuted instantiation: unicodectype.c:Py_INCREF
unicodeobject.c:Py_INCREF
Line
Count
Source
256
672M
{
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
672M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
606M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
606M
        return;
291
606M
    }
292
66.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
66.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
66.1M
#endif
308
66.1M
}
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.79M
{
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.79M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
134k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
134k
        return;
291
134k
    }
292
3.66M
    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.66M
    _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.66M
#endif
308
3.66M
}
_warnings.c:Py_INCREF
Line
Count
Source
256
4.80M
{
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.80M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.40M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.40M
        return;
291
2.40M
    }
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
}
bltinmodule.c:Py_INCREF
Line
Count
Source
256
82.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
82.0M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
48.0M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
48.0M
        return;
291
48.0M
    }
292
34.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
34.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
34.0M
#endif
308
34.0M
}
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
571M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
571M
        return;
291
571M
    }
292
460M
    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
460M
    _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
460M
#endif
308
460M
}
codecs.c:Py_INCREF
Line
Count
Source
256
6.14M
{
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.14M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
323k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
323k
        return;
291
323k
    }
292
5.82M
    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.82M
    _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.82M
#endif
308
5.82M
}
codegen.c:Py_INCREF
Line
Count
Source
256
2.02k
{
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.02k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.02k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.02k
        return;
291
2.02k
    }
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
61.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
61.5k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
30.7k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
30.7k
        return;
291
30.7k
    }
292
30.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
30.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
30.8k
#endif
308
30.8k
}
context.c:Py_INCREF
Line
Count
Source
256
65
{
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
65
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
29
        _Py_INCREF_IMMORTAL_STAT_INC();
290
29
        return;
291
29
    }
292
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
97.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
97.4M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
41.4M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
41.4M
        return;
291
41.4M
    }
292
56.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
56.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
56.0M
#endif
308
56.0M
}
flowgraph.c:Py_INCREF
Line
Count
Source
256
64.8k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
64.8k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
36.2k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
36.2k
        return;
291
36.2k
    }
292
28.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
28.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
28.5k
#endif
308
28.5k
}
frame.c:Py_INCREF
Line
Count
Source
256
70.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
70.5M
    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
70.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
70.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
70.5M
#endif
308
70.5M
}
Unexecuted instantiation: future.c:Py_INCREF
gc.c:Py_INCREF
Line
Count
Source
256
499M
{
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
499M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
426M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
426M
        return;
291
426M
    }
292
72.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
72.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
72.4M
#endif
308
72.4M
}
Unexecuted instantiation: gc_gil.c:Py_INCREF
getargs.c:Py_INCREF
Line
Count
Source
256
3.21M
{
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.21M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.51M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.51M
        return;
291
2.51M
    }
292
699k
    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
699k
    _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
699k
#endif
308
699k
}
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
18.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
18.5M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
4.07M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
4.07M
        return;
291
4.07M
    }
292
14.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
14.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
14.4M
#endif
308
14.4M
}
importdl.c:Py_INCREF
Line
Count
Source
256
1.34k
{
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.34k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.04k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.04k
        return;
291
1.04k
    }
292
309
    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
309
    _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
309
#endif
308
309
}
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
69.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
69.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
69.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
69.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
69.8k
#endif
308
69.8k
}
Unexecuted instantiation: legacy_tracing.c:Py_INCREF
Unexecuted instantiation: lock.c:Py_INCREF
marshal.c:Py_INCREF
Line
Count
Source
256
1.95M
{
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.95M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.78M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.78M
        return;
291
1.78M
    }
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
}
modsupport.c:Py_INCREF
Line
Count
Source
256
3.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
3.42M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
649k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
649k
        return;
291
649k
    }
292
2.77M
    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.77M
    _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.77M
#endif
308
2.77M
}
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.06M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
1.06M
    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.06M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
1.06M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
1.06M
#endif
308
1.06M
}
Unexecuted instantiation: pythonrun.c:Py_INCREF
Unexecuted instantiation: pytime.c:Py_INCREF
Unexecuted instantiation: qsbr.c:Py_INCREF
Unexecuted instantiation: bootstrap_hash.c:Py_INCREF
Unexecuted instantiation: specialize.c:Py_INCREF
Unexecuted instantiation: slots.c:Py_INCREF
Unexecuted instantiation: slots_generated.c:Py_INCREF
structmember.c:Py_INCREF
Line
Count
Source
256
7.67M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
7.67M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.02M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.02M
        return;
291
1.02M
    }
292
6.64M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
6.64M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
6.64M
#endif
308
6.64M
}
symtable.c:Py_INCREF
Line
Count
Source
256
116k
{
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
116k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
116k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
116k
        return;
291
116k
    }
292
281
    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
281
    _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
281
#endif
308
281
}
sysmodule.c:Py_INCREF
Line
Count
Source
256
4.00k
{
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.00k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.28k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.28k
        return;
291
2.28k
    }
292
1.71k
    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.71k
    _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.71k
#endif
308
1.71k
}
Unexecuted instantiation: thread.c:Py_INCREF
traceback.c:Py_INCREF
Line
Count
Source
256
102M
{
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
102M
    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
102M
    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
102M
    _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
102M
#endif
308
102M
}
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: jit_unwind.c:Py_INCREF
Unexecuted instantiation: remote_debugging.c:Py_INCREF
Unexecuted instantiation: dynload_shlib.c:Py_INCREF
Unexecuted instantiation: config.c:Py_INCREF
Unexecuted instantiation: gcmodule.c:Py_INCREF
Unexecuted instantiation: _asynciomodule.c:Py_INCREF
atexitmodule.c:Py_INCREF
Line
Count
Source
256
2
{
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
    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
2
    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
    _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
#endif
308
2
}
Unexecuted instantiation: faulthandler.c:Py_INCREF
posixmodule.c:Py_INCREF
Line
Count
Source
256
2.52M
{
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.52M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
453k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
453k
        return;
291
453k
    }
292
2.07M
    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.07M
    _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.07M
#endif
308
2.07M
}
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
40.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
40.8k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
22.5k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
22.5k
        return;
291
22.5k
    }
292
18.2k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
18.2k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
18.2k
#endif
308
18.2k
}
Unexecuted instantiation: _codecsmodule.c:Py_INCREF
_collectionsmodule.c:Py_INCREF
Line
Count
Source
256
23.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
23.3M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
21.0M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
21.0M
        return;
291
21.0M
    }
292
2.29M
    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.29M
    _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.29M
#endif
308
2.29M
}
Unexecuted instantiation: errnomodule.c:Py_INCREF
_iomodule.c:Py_INCREF
Line
Count
Source
256
272
{
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
272
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
246
        _Py_INCREF_IMMORTAL_STAT_INC();
290
246
        return;
291
246
    }
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
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
0
        _Py_INCREF_IMMORTAL_STAT_INC();
290
0
        return;
291
0
    }
292
98.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
98.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
98.5k
#endif
308
98.5k
}
Unexecuted instantiation: fileio.c:Py_INCREF
bytesio.c:Py_INCREF
Line
Count
Source
256
73.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
73.6k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
2.75k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
2.75k
        return;
291
2.75k
    }
292
70.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
70.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
70.8k
#endif
308
70.8k
}
bufferedio.c:Py_INCREF
Line
Count
Source
256
41.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
41.0k
    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.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
41.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
41.0k
#endif
308
41.0k
}
textio.c:Py_INCREF
Line
Count
Source
256
621k
{
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
621k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
19.8k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
19.8k
        return;
291
19.8k
    }
292
601k
    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
601k
    _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
601k
#endif
308
601k
}
stringio.c:Py_INCREF
Line
Count
Source
256
15.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
15.8k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
47
        _Py_INCREF_IMMORTAL_STAT_INC();
290
47
        return;
291
47
    }
292
15.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
15.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
15.8k
#endif
308
15.8k
}
itertoolsmodule.c:Py_INCREF
Line
Count
Source
256
46.1k
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
46.1k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
44.8k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
44.8k
        return;
291
44.8k
    }
292
1.32k
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
1.32k
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
1.32k
#endif
308
1.32k
}
sre.c:Py_INCREF
Line
Count
Source
256
169M
{
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
169M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
40.6M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
40.6M
        return;
291
40.6M
    }
292
129M
    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
129M
    _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
129M
#endif
308
129M
}
Unexecuted instantiation: _sysconfig.c:Py_INCREF
_threadmodule.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
72
        _Py_INCREF_IMMORTAL_STAT_INC();
290
72
        return;
291
72
    }
292
72
    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
    _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
#endif
308
72
}
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
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
118k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
118k
        return;
291
118k
    }
292
384
    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
384
    _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
384
#endif
308
384
}
_functoolsmodule.c:Py_INCREF
Line
Count
Source
256
231k
{
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
231k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
26.7k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
26.7k
        return;
291
26.7k
    }
292
204k
    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
204k
    _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
204k
#endif
308
204k
}
Unexecuted instantiation: _localemodule.c:Py_INCREF
Unexecuted instantiation: _opcode.c:Py_INCREF
_operator.c:Py_INCREF
Line
Count
Source
256
1.29M
{
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.29M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.27M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.27M
        return;
291
1.27M
    }
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
}
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
468
{
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
468
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
468
        _Py_INCREF_IMMORTAL_STAT_INC();
290
468
        return;
291
468
    }
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
583M
{
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
583M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
332M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
332M
        return;
291
332M
    }
292
250M
    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
250M
    _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
250M
#endif
308
250M
}
Unexecuted instantiation: boolobject.c:Py_INCREF
Unexecuted instantiation: bytes_methods.c:Py_INCREF
bytearrayobject.c:Py_INCREF
Line
Count
Source
256
19.7M
{
257
#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
258
    || defined(_Py_OPAQUE_PYOBJECT)
259
    // Stable ABI implements Py_INCREF() as a function call on limited C API
260
    // version 3.12 and newer, abi3t, and on Python built in debug mode.
261
    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
262
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
263
#  if Py_LIMITED_API+0 >= 0x030a00A7
264
    _Py_IncRef(op);
265
#  else
266
    Py_IncRef(op);
267
#  endif
268
#else
269
    // Non-limited C API and limited C API for Python 3.9 and older access
270
    // directly PyObject.ob_refcnt.
271
#if defined(Py_GIL_DISABLED)
272
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
273
    uint32_t new_local = local + 1;
274
    if (new_local == 0) {
275
        _Py_INCREF_IMMORTAL_STAT_INC();
276
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
277
        return;
278
    }
279
    if (_Py_IsOwnedByCurrentThread(op)) {
280
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
281
    }
282
    else {
283
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
284
    }
285
#elif SIZEOF_VOID_P > 4
286
    uint32_t cur_refcnt = op->ob_refcnt;
287
19.7M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
0
        _Py_INCREF_IMMORTAL_STAT_INC();
290
0
        return;
291
0
    }
292
19.7M
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
19.7M
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
19.7M
#endif
308
19.7M
}
Unexecuted instantiation: capsule.c:Py_INCREF
cellobject.c:Py_INCREF
Line
Count
Source
256
6.11M
{
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.11M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.12M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.12M
        return;
291
1.12M
    }
292
4.98M
    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.98M
    _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.98M
#endif
308
4.98M
}
classobject.c:Py_INCREF
Line
Count
Source
256
91.2M
{
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
91.2M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
125
        _Py_INCREF_IMMORTAL_STAT_INC();
290
125
        return;
291
125
    }
292
91.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
91.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
91.2M
#endif
308
91.2M
}
codeobject.c:Py_INCREF
Line
Count
Source
256
2.22M
{
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.22M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
888k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
888k
        return;
291
888k
    }
292
1.33M
    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.33M
    _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.33M
#endif
308
1.33M
}
complexobject.c:Py_INCREF
Line
Count
Source
256
4.65k
{
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.65k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
4.65k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
4.65k
        return;
291
4.65k
    }
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.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
20.0M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
71.0k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
71.0k
        return;
291
71.0k
    }
292
19.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
19.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
19.9M
#endif
308
19.9M
}
enumobject.c:Py_INCREF
Line
Count
Source
256
12.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
12.1M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
12
        _Py_INCREF_IMMORTAL_STAT_INC();
290
12
        return;
291
12
    }
292
12.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
12.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
12.1M
#endif
308
12.1M
}
genobject.c:Py_INCREF
Line
Count
Source
256
49.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
49.0M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
48.8M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
48.8M
        return;
291
48.8M
    }
292
176k
    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
176k
    _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
176k
#endif
308
176k
}
Unexecuted instantiation: fileobject.c:Py_INCREF
frameobject.c:Py_INCREF
Line
Count
Source
256
40.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
40.4M
    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
40.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
40.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
40.4M
#endif
308
40.4M
}
funcobject.c:Py_INCREF
Line
Count
Source
256
102M
{
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
102M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
60.8M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
60.8M
        return;
291
60.8M
    }
292
41.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
41.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
41.2M
#endif
308
41.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
3.09M
{
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.09M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
355k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
355k
        return;
291
355k
    }
292
2.73M
    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.73M
    _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.73M
#endif
308
2.73M
}
lazyimportobject.c:Py_INCREF
Line
Count
Source
256
1.48k
{
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.48k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
535
        _Py_INCREF_IMMORTAL_STAT_INC();
290
535
        return;
291
535
    }
292
950
    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
950
    _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
950
#endif
308
950
}
odictobject.c:Py_INCREF
Line
Count
Source
256
280k
{
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
280k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
155k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
155k
        return;
291
155k
    }
292
124k
    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
124k
    _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
124k
#endif
308
124k
}
methodobject.c:Py_INCREF
Line
Count
Source
256
152M
{
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
152M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
27.0M
        _Py_INCREF_IMMORTAL_STAT_INC();
290
27.0M
        return;
291
27.0M
    }
292
125M
    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
125M
    _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
125M
#endif
308
125M
}
Unexecuted instantiation: namespaceobject.c:Py_INCREF
Unexecuted instantiation: _contextvars.c:Py_INCREF
Python-ast.c:Py_INCREF
Line
Count
Source
256
526k
{
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
526k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
225k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
225k
        return;
291
225k
    }
292
301k
    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
301k
    _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
301k
#endif
308
301k
}
Unexecuted instantiation: Python-tokenize.c:Py_INCREF
Unexecuted instantiation: asdl.c:Py_INCREF
assemble.c:Py_INCREF
Line
Count
Source
256
20.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
20.4k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
20.4k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
20.4k
        return;
291
20.4k
    }
292
16
    op->ob_refcnt = cur_refcnt + 1;
293
#else
294
    if (_Py_IsImmortal(op)) {
295
        _Py_INCREF_IMMORTAL_STAT_INC();
296
        return;
297
    }
298
    op->ob_refcnt++;
299
#endif
300
16
    _Py_INCREF_STAT_INC();
301
#ifdef Py_REF_DEBUG
302
    // Don't count the incref if the object is immortal.
303
    if (!_Py_IsImmortal(op)) {
304
        _Py_INCREF_IncRefTotal();
305
    }
306
#endif
307
16
#endif
308
16
}
Unexecuted instantiation: 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
108k
{
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
108k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
288
        // the object is immortal
289
1.31k
        _Py_INCREF_IMMORTAL_STAT_INC();
290
1.31k
        return;
291
1.31k
    }
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: 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
10.3G
#  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
11.3G
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
11.3G
    if (_Py_IsImmortal(op)) {
422
6.65G
        _Py_DECREF_IMMORTAL_STAT_INC();
423
6.65G
        return;
424
6.65G
    }
425
4.67G
    _Py_DECREF_STAT_INC();
426
4.67G
    if (--op->ob_refcnt == 0) {
427
1.17G
        _Py_Dealloc(op);
428
1.17G
    }
429
4.67G
}
bytesobject.c:Py_DECREF
Line
Count
Source
418
30.8M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
30.8M
    if (_Py_IsImmortal(op)) {
422
28.5M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
28.5M
        return;
424
28.5M
    }
425
2.33M
    _Py_DECREF_STAT_INC();
426
2.33M
    if (--op->ob_refcnt == 0) {
427
165k
        _Py_Dealloc(op);
428
165k
    }
429
2.33M
}
call.c:Py_DECREF
Line
Count
Source
418
227M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
227M
    if (_Py_IsImmortal(op)) {
422
82.4M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
82.4M
        return;
424
82.4M
    }
425
144M
    _Py_DECREF_STAT_INC();
426
144M
    if (--op->ob_refcnt == 0) {
427
103M
        _Py_Dealloc(op);
428
103M
    }
429
144M
}
exceptions.c:Py_DECREF
Line
Count
Source
418
217M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
217M
    if (_Py_IsImmortal(op)) {
422
50.2M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
50.2M
        return;
424
50.2M
    }
425
167M
    _Py_DECREF_STAT_INC();
426
167M
    if (--op->ob_refcnt == 0) {
427
96.4M
        _Py_Dealloc(op);
428
96.4M
    }
429
167M
}
genericaliasobject.c:Py_DECREF
Line
Count
Source
418
290
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
290
    if (_Py_IsImmortal(op)) {
422
165
        _Py_DECREF_IMMORTAL_STAT_INC();
423
165
        return;
424
165
    }
425
125
    _Py_DECREF_STAT_INC();
426
125
    if (--op->ob_refcnt == 0) {
427
125
        _Py_Dealloc(op);
428
125
    }
429
125
}
floatobject.c:Py_DECREF
Line
Count
Source
418
510k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
510k
    if (_Py_IsImmortal(op)) {
422
61.3k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
61.3k
        return;
424
61.3k
    }
425
448k
    _Py_DECREF_STAT_INC();
426
448k
    if (--op->ob_refcnt == 0) {
427
16
        _Py_Dealloc(op);
428
16
    }
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
471M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
471M
        return;
424
471M
    }
425
1.15G
    _Py_DECREF_STAT_INC();
426
1.15G
    if (--op->ob_refcnt == 0) {
427
252M
        _Py_Dealloc(op);
428
252M
    }
429
1.15G
}
longobject.c:Py_DECREF
Line
Count
Source
418
45.9M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
45.9M
    if (_Py_IsImmortal(op)) {
422
34.1M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
34.1M
        return;
424
34.1M
    }
425
11.8M
    _Py_DECREF_STAT_INC();
426
11.8M
    if (--op->ob_refcnt == 0) {
427
3.75M
        _Py_Dealloc(op);
428
3.75M
    }
429
11.8M
}
dictobject.c:Py_DECREF
Line
Count
Source
418
577M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
577M
    if (_Py_IsImmortal(op)) {
422
258M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
258M
        return;
424
258M
    }
425
318M
    _Py_DECREF_STAT_INC();
426
318M
    if (--op->ob_refcnt == 0) {
427
72.8M
        _Py_Dealloc(op);
428
72.8M
    }
429
318M
}
memoryobject.c:Py_DECREF
Line
Count
Source
418
3.61M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
3.61M
    if (_Py_IsImmortal(op)) {
422
124k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
124k
        return;
424
124k
    }
425
3.48M
    _Py_DECREF_STAT_INC();
426
3.48M
    if (--op->ob_refcnt == 0) {
427
1.65M
        _Py_Dealloc(op);
428
1.65M
    }
429
3.48M
}
moduleobject.c:Py_DECREF
Line
Count
Source
418
6.04M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
6.04M
    if (_Py_IsImmortal(op)) {
422
6.00M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
6.00M
        return;
424
6.00M
    }
425
43.8k
    _Py_DECREF_STAT_INC();
426
43.8k
    if (--op->ob_refcnt == 0) {
427
4.88k
        _Py_Dealloc(op);
428
4.88k
    }
429
43.8k
}
object.c:Py_DECREF
Line
Count
Source
418
573M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
573M
    if (_Py_IsImmortal(op)) {
422
433M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
433M
        return;
424
433M
    }
425
140M
    _Py_DECREF_STAT_INC();
426
140M
    if (--op->ob_refcnt == 0) {
427
725
        _Py_Dealloc(op);
428
725
    }
429
140M
}
Unexecuted instantiation: obmalloc.c:Py_DECREF
Unexecuted instantiation: picklebufobject.c:Py_DECREF
rangeobject.c:Py_DECREF
Line
Count
Source
418
44.8M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
44.8M
    if (_Py_IsImmortal(op)) {
422
44.5M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
44.5M
        return;
424
44.5M
    }
425
273k
    _Py_DECREF_STAT_INC();
426
273k
    if (--op->ob_refcnt == 0) {
427
143k
        _Py_Dealloc(op);
428
143k
    }
429
273k
}
sentinelobject.c:Py_DECREF
Line
Count
Source
418
54
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
54
    if (_Py_IsImmortal(op)) {
422
54
        _Py_DECREF_IMMORTAL_STAT_INC();
423
54
        return;
424
54
    }
425
0
    _Py_DECREF_STAT_INC();
426
0
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
0
}
setobject.c:Py_DECREF
Line
Count
Source
418
8.02M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
8.02M
    if (_Py_IsImmortal(op)) {
422
3.78M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
3.78M
        return;
424
3.78M
    }
425
4.23M
    _Py_DECREF_STAT_INC();
426
4.23M
    if (--op->ob_refcnt == 0) {
427
826k
        _Py_Dealloc(op);
428
826k
    }
429
4.23M
}
sliceobject.c:Py_DECREF
Line
Count
Source
418
183M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
183M
    if (_Py_IsImmortal(op)) {
422
101M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
101M
        return;
424
101M
    }
425
82.3M
    _Py_DECREF_STAT_INC();
426
82.3M
    if (--op->ob_refcnt == 0) {
427
28.9k
        _Py_Dealloc(op);
428
28.9k
    }
429
82.3M
}
structseq.c:Py_DECREF
Line
Count
Source
418
6.15M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
6.15M
    if (_Py_IsImmortal(op)) {
422
1.88M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.88M
        return;
424
1.88M
    }
425
4.27M
    _Py_DECREF_STAT_INC();
426
4.27M
    if (--op->ob_refcnt == 0) {
427
3.88M
        _Py_Dealloc(op);
428
3.88M
    }
429
4.27M
}
templateobject.c:Py_DECREF
Line
Count
Source
418
22
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
22
    if (_Py_IsImmortal(op)) {
422
7
        _Py_DECREF_IMMORTAL_STAT_INC();
423
7
        return;
424
7
    }
425
15
    _Py_DECREF_STAT_INC();
426
15
    if (--op->ob_refcnt == 0) {
427
4
        _Py_Dealloc(op);
428
4
    }
429
15
}
tupleobject.c:Py_DECREF
Line
Count
Source
418
3.04G
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
3.04G
    if (_Py_IsImmortal(op)) {
422
2.33G
        _Py_DECREF_IMMORTAL_STAT_INC();
423
2.33G
        return;
424
2.33G
    }
425
713M
    _Py_DECREF_STAT_INC();
426
713M
    if (--op->ob_refcnt == 0) {
427
131M
        _Py_Dealloc(op);
428
131M
    }
429
713M
}
typeobject.c:Py_DECREF
Line
Count
Source
418
322M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
322M
    if (_Py_IsImmortal(op)) {
422
88.7M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
88.7M
        return;
424
88.7M
    }
425
233M
    _Py_DECREF_STAT_INC();
426
233M
    if (--op->ob_refcnt == 0) {
427
39.6M
        _Py_Dealloc(op);
428
39.6M
    }
429
233M
}
typevarobject.c:Py_DECREF
Line
Count
Source
418
295k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
295k
    if (_Py_IsImmortal(op)) {
422
368
        _Py_DECREF_IMMORTAL_STAT_INC();
423
368
        return;
424
368
    }
425
295k
    _Py_DECREF_STAT_INC();
426
295k
    if (--op->ob_refcnt == 0) {
427
816
        _Py_Dealloc(op);
428
816
    }
429
295k
}
unicode_format.c:Py_DECREF
Line
Count
Source
418
37.4M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
37.4M
    if (_Py_IsImmortal(op)) {
422
7.84M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
7.84M
        return;
424
7.84M
    }
425
29.5M
    _Py_DECREF_STAT_INC();
426
29.5M
    if (--op->ob_refcnt == 0) {
427
12.3M
        _Py_Dealloc(op);
428
12.3M
    }
429
29.5M
}
unicode_formatter.c:Py_DECREF
Line
Count
Source
418
1.42k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.42k
    if (_Py_IsImmortal(op)) {
422
1.06k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.06k
        return;
424
1.06k
    }
425
356
    _Py_DECREF_STAT_INC();
426
356
    if (--op->ob_refcnt == 0) {
427
356
        _Py_Dealloc(op);
428
356
    }
429
356
}
unicode_writer.c:Py_DECREF
Line
Count
Source
418
27.3M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
27.3M
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
27.3M
    _Py_DECREF_STAT_INC();
426
27.3M
    if (--op->ob_refcnt == 0) {
427
27.3M
        _Py_Dealloc(op);
428
27.3M
    }
429
27.3M
}
Unexecuted instantiation: unicodectype.c:Py_DECREF
unicodeobject.c:Py_DECREF
Line
Count
Source
418
156M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
156M
    if (_Py_IsImmortal(op)) {
422
82.3M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
82.3M
        return;
424
82.3M
    }
425
74.1M
    _Py_DECREF_STAT_INC();
426
74.1M
    if (--op->ob_refcnt == 0) {
427
16.7M
        _Py_Dealloc(op);
428
16.7M
    }
429
74.1M
}
unionobject.c:Py_DECREF
Line
Count
Source
418
4.42k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
4.42k
    if (_Py_IsImmortal(op)) {
422
572
        _Py_DECREF_IMMORTAL_STAT_INC();
423
572
        return;
424
572
    }
425
3.84k
    _Py_DECREF_STAT_INC();
426
3.84k
    if (--op->ob_refcnt == 0) {
427
3.26k
        _Py_Dealloc(op);
428
3.26k
    }
429
3.84k
}
weakrefobject.c:Py_DECREF
Line
Count
Source
418
2.92M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
2.92M
    if (_Py_IsImmortal(op)) {
422
164k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
164k
        return;
424
164k
    }
425
2.76M
    _Py_DECREF_STAT_INC();
426
2.76M
    if (--op->ob_refcnt == 0) {
427
31.9k
        _Py_Dealloc(op);
428
31.9k
    }
429
2.76M
}
_warnings.c:Py_DECREF
Line
Count
Source
418
56.1M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
56.1M
    if (_Py_IsImmortal(op)) {
422
5.60M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
5.60M
        return;
424
5.60M
    }
425
50.5M
    _Py_DECREF_STAT_INC();
426
50.5M
    if (--op->ob_refcnt == 0) {
427
2.15M
        _Py_Dealloc(op);
428
2.15M
    }
429
50.5M
}
bltinmodule.c:Py_DECREF
Line
Count
Source
418
2.05G
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
2.05G
    if (_Py_IsImmortal(op)) {
422
1.87G
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.87G
        return;
424
1.87G
    }
425
184M
    _Py_DECREF_STAT_INC();
426
184M
    if (--op->ob_refcnt == 0) {
427
121M
        _Py_Dealloc(op);
428
121M
    }
429
184M
}
ceval.c:Py_DECREF
Line
Count
Source
418
134k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
134k
    if (_Py_IsImmortal(op)) {
422
581
        _Py_DECREF_IMMORTAL_STAT_INC();
423
581
        return;
424
581
    }
425
133k
    _Py_DECREF_STAT_INC();
426
133k
    if (--op->ob_refcnt == 0) {
427
526
        _Py_Dealloc(op);
428
526
    }
429
133k
}
codecs.c:Py_DECREF
Line
Count
Source
418
12.9M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
12.9M
    if (_Py_IsImmortal(op)) {
422
4.52M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
4.52M
        return;
424
4.52M
    }
425
8.42M
    _Py_DECREF_STAT_INC();
426
8.42M
    if (--op->ob_refcnt == 0) {
427
4.08M
        _Py_Dealloc(op);
428
4.08M
    }
429
8.42M
}
codegen.c:Py_DECREF
Line
Count
Source
418
62.3k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
62.3k
    if (_Py_IsImmortal(op)) {
422
54.7k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
54.7k
        return;
424
54.7k
    }
425
7.63k
    _Py_DECREF_STAT_INC();
426
7.63k
    if (--op->ob_refcnt == 0) {
427
280
        _Py_Dealloc(op);
428
280
    }
429
7.63k
}
compile.c:Py_DECREF
Line
Count
Source
418
323k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
323k
    if (_Py_IsImmortal(op)) {
422
168k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
168k
        return;
424
168k
    }
425
155k
    _Py_DECREF_STAT_INC();
426
155k
    if (--op->ob_refcnt == 0) {
427
58.2k
        _Py_Dealloc(op);
428
58.2k
    }
429
155k
}
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
99.5M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
99.5M
    if (_Py_IsImmortal(op)) {
422
41.4M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
41.4M
        return;
424
41.4M
    }
425
58.1M
    _Py_DECREF_STAT_INC();
426
58.1M
    if (--op->ob_refcnt == 0) {
427
18.9M
        _Py_Dealloc(op);
428
18.9M
    }
429
58.1M
}
flowgraph.c:Py_DECREF
Line
Count
Source
418
60.6k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
60.6k
    if (_Py_IsImmortal(op)) {
422
37.9k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
37.9k
        return;
424
37.9k
    }
425
22.7k
    _Py_DECREF_STAT_INC();
426
22.7k
    if (--op->ob_refcnt == 0) {
427
121
        _Py_Dealloc(op);
428
121
    }
429
22.7k
}
frame.c:Py_DECREF
Line
Count
Source
418
63.2M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
63.2M
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
63.2M
    _Py_DECREF_STAT_INC();
426
63.2M
    if (--op->ob_refcnt == 0) {
427
16.9M
        _Py_Dealloc(op);
428
16.9M
    }
429
63.2M
}
Unexecuted instantiation: future.c:Py_DECREF
gc.c:Py_DECREF
Line
Count
Source
418
4.36M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
4.36M
    if (_Py_IsImmortal(op)) {
422
50.0k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
50.0k
        return;
424
50.0k
    }
425
4.31M
    _Py_DECREF_STAT_INC();
426
4.31M
    if (--op->ob_refcnt == 0) {
427
889k
        _Py_Dealloc(op);
428
889k
    }
429
4.31M
}
Unexecuted instantiation: gc_gil.c:Py_DECREF
getargs.c:Py_DECREF
Line
Count
Source
418
11.3M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
11.3M
    if (_Py_IsImmortal(op)) {
422
10.5M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
10.5M
        return;
424
10.5M
    }
425
828k
    _Py_DECREF_STAT_INC();
426
828k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
828k
}
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
29.6M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
29.6M
    if (_Py_IsImmortal(op)) {
422
4.07M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
4.07M
        return;
424
4.07M
    }
425
25.5M
    _Py_DECREF_STAT_INC();
426
25.5M
    if (--op->ob_refcnt == 0) {
427
313k
        _Py_Dealloc(op);
428
313k
    }
429
25.5M
}
importdl.c:Py_DECREF
Line
Count
Source
418
3.10k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
3.10k
    if (_Py_IsImmortal(op)) {
422
1.22k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.22k
        return;
424
1.22k
    }
425
1.87k
    _Py_DECREF_STAT_INC();
426
1.87k
    if (--op->ob_refcnt == 0) {
427
1.14k
        _Py_Dealloc(op);
428
1.14k
    }
429
1.87k
}
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
}
instruction_sequence.c:Py_DECREF
Line
Count
Source
418
1
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
1
    _Py_DECREF_STAT_INC();
426
1
    if (--op->ob_refcnt == 0) {
427
1
        _Py_Dealloc(op);
428
1
    }
429
1
}
intrinsics.c:Py_DECREF
Line
Count
Source
418
70.6k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
70.6k
    if (_Py_IsImmortal(op)) {
422
40.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
40.2k
        return;
424
40.2k
    }
425
30.3k
    _Py_DECREF_STAT_INC();
426
30.3k
    if (--op->ob_refcnt == 0) {
427
320
        _Py_Dealloc(op);
428
320
    }
429
30.3k
}
Unexecuted instantiation: legacy_tracing.c:Py_DECREF
Unexecuted instantiation: lock.c:Py_DECREF
marshal.c:Py_DECREF
Line
Count
Source
418
1.83M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.83M
    if (_Py_IsImmortal(op)) {
422
756k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
756k
        return;
424
756k
    }
425
1.07M
    _Py_DECREF_STAT_INC();
426
1.07M
    if (--op->ob_refcnt == 0) {
427
7.28k
        _Py_Dealloc(op);
428
7.28k
    }
429
1.07M
}
modsupport.c:Py_DECREF
Line
Count
Source
418
97.1k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
97.1k
    if (_Py_IsImmortal(op)) {
422
41.8k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
41.8k
        return;
424
41.8k
    }
425
55.2k
    _Py_DECREF_STAT_INC();
426
55.2k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
55.2k
}
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
15.1M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
15.1M
    if (_Py_IsImmortal(op)) {
422
14.5M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
14.5M
        return;
424
14.5M
    }
425
669k
    _Py_DECREF_STAT_INC();
426
669k
    if (--op->ob_refcnt == 0) {
427
110k
        _Py_Dealloc(op);
428
110k
    }
429
669k
}
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
1.87k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.87k
    if (_Py_IsImmortal(op)) {
422
414
        _Py_DECREF_IMMORTAL_STAT_INC();
423
414
        return;
424
414
    }
425
1.46k
    _Py_DECREF_STAT_INC();
426
1.46k
    if (--op->ob_refcnt == 0) {
427
577
        _Py_Dealloc(op);
428
577
    }
429
1.46k
}
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
1.24M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.24M
    if (_Py_IsImmortal(op)) {
422
385k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
385k
        return;
424
385k
    }
425
858k
    _Py_DECREF_STAT_INC();
426
858k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
858k
}
Unexecuted instantiation: slots.c:Py_DECREF
Unexecuted instantiation: slots_generated.c:Py_DECREF
structmember.c:Py_DECREF
Line
Count
Source
418
19.8k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
19.8k
    if (_Py_IsImmortal(op)) {
422
10.1k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
10.1k
        return;
424
10.1k
    }
425
9.62k
    _Py_DECREF_STAT_INC();
426
9.62k
    if (--op->ob_refcnt == 0) {
427
519
        _Py_Dealloc(op);
428
519
    }
429
9.62k
}
symtable.c:Py_DECREF
Line
Count
Source
418
375k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
375k
    if (_Py_IsImmortal(op)) {
422
159k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
159k
        return;
424
159k
    }
425
215k
    _Py_DECREF_STAT_INC();
426
215k
    if (--op->ob_refcnt == 0) {
427
114k
        _Py_Dealloc(op);
428
114k
    }
429
215k
}
sysmodule.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
632k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
632k
        return;
424
632k
    }
425
2.09M
    _Py_DECREF_STAT_INC();
426
2.09M
    if (--op->ob_refcnt == 0) {
427
1.56M
        _Py_Dealloc(op);
428
1.56M
    }
429
2.09M
}
Unexecuted instantiation: thread.c:Py_DECREF
traceback.c:Py_DECREF
Line
Count
Source
418
205M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
205M
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
205M
    _Py_DECREF_STAT_INC();
426
205M
    if (--op->ob_refcnt == 0) {
427
61.9M
        _Py_Dealloc(op);
428
61.9M
    }
429
205M
}
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
98.2k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
98.2k
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
98.2k
    _Py_DECREF_STAT_INC();
426
98.2k
    if (--op->ob_refcnt == 0) {
427
98.2k
        _Py_Dealloc(op);
428
98.2k
    }
429
98.2k
}
Unexecuted instantiation: suggestions.c:Py_DECREF
Unexecuted instantiation: perf_trampoline.c:Py_DECREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_DECREF
Unexecuted instantiation: jit_unwind.c:Py_DECREF
Unexecuted instantiation: remote_debugging.c:Py_DECREF
Unexecuted instantiation: dynload_shlib.c:Py_DECREF
Unexecuted instantiation: config.c:Py_DECREF
Unexecuted instantiation: gcmodule.c:Py_DECREF
Unexecuted instantiation: _asynciomodule.c:Py_DECREF
atexitmodule.c:Py_DECREF
Line
Count
Source
418
4
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
4
    if (_Py_IsImmortal(op)) {
422
2
        _Py_DECREF_IMMORTAL_STAT_INC();
423
2
        return;
424
2
    }
425
2
    _Py_DECREF_STAT_INC();
426
2
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
2
}
Unexecuted instantiation: faulthandler.c:Py_DECREF
posixmodule.c:Py_DECREF
Line
Count
Source
418
3.23M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
3.23M
    if (_Py_IsImmortal(op)) {
422
1.12M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.12M
        return;
424
1.12M
    }
425
2.10M
    _Py_DECREF_STAT_INC();
426
2.10M
    if (--op->ob_refcnt == 0) {
427
881k
        _Py_Dealloc(op);
428
881k
    }
429
2.10M
}
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
162k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
162k
    if (_Py_IsImmortal(op)) {
422
24.6k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
24.6k
        return;
424
24.6k
    }
425
137k
    _Py_DECREF_STAT_INC();
426
137k
    if (--op->ob_refcnt == 0) {
427
69.9k
        _Py_Dealloc(op);
428
69.9k
    }
429
137k
}
Unexecuted instantiation: _codecsmodule.c:Py_DECREF
_collectionsmodule.c:Py_DECREF
Line
Count
Source
418
208k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
208k
    if (_Py_IsImmortal(op)) {
422
105k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
105k
        return;
424
105k
    }
425
103k
    _Py_DECREF_STAT_INC();
426
103k
    if (--op->ob_refcnt == 0) {
427
41.2k
        _Py_Dealloc(op);
428
41.2k
    }
429
103k
}
_iomodule.c:Py_DECREF
Line
Count
Source
418
2.12M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
2.12M
    if (_Py_IsImmortal(op)) {
422
2.01M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
2.01M
        return;
424
2.01M
    }
425
116k
    _Py_DECREF_STAT_INC();
426
116k
    if (--op->ob_refcnt == 0) {
427
57.1k
        _Py_Dealloc(op);
428
57.1k
    }
429
116k
}
iobase.c:Py_DECREF
Line
Count
Source
418
2.33M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
2.33M
    if (_Py_IsImmortal(op)) {
422
2.23M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
2.23M
        return;
424
2.23M
    }
425
107k
    _Py_DECREF_STAT_INC();
426
107k
    if (--op->ob_refcnt == 0) {
427
53.6k
        _Py_Dealloc(op);
428
53.6k
    }
429
107k
}
fileio.c:Py_DECREF
Line
Count
Source
418
85.2k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
85.2k
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
85.2k
    _Py_DECREF_STAT_INC();
426
85.2k
    if (--op->ob_refcnt == 0) {
427
56.7k
        _Py_Dealloc(op);
428
56.7k
    }
429
85.2k
}
bytesio.c:Py_DECREF
Line
Count
Source
418
373k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
373k
    if (_Py_IsImmortal(op)) {
422
163k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
163k
        return;
424
163k
    }
425
210k
    _Py_DECREF_STAT_INC();
426
210k
    if (--op->ob_refcnt == 0) {
427
16.0k
        _Py_Dealloc(op);
428
16.0k
    }
429
210k
}
bufferedio.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.55M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
9.55M
        return;
424
9.55M
    }
425
472k
    _Py_DECREF_STAT_INC();
426
472k
    if (--op->ob_refcnt == 0) {
427
392k
        _Py_Dealloc(op);
428
392k
    }
429
472k
}
textio.c:Py_DECREF
Line
Count
Source
418
1.11M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.11M
    if (_Py_IsImmortal(op)) {
422
292k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
292k
        return;
424
292k
    }
425
820k
    _Py_DECREF_STAT_INC();
426
820k
    if (--op->ob_refcnt == 0) {
427
261k
        _Py_Dealloc(op);
428
261k
    }
429
820k
}
stringio.c:Py_DECREF
Line
Count
Source
418
283k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
283k
    if (_Py_IsImmortal(op)) {
422
146k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
146k
        return;
424
146k
    }
425
136k
    _Py_DECREF_STAT_INC();
426
136k
    if (--op->ob_refcnt == 0) {
427
31.6k
        _Py_Dealloc(op);
428
31.6k
    }
429
136k
}
itertoolsmodule.c:Py_DECREF
Line
Count
Source
418
14.5k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
14.5k
    if (_Py_IsImmortal(op)) {
422
6.00k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
6.00k
        return;
424
6.00k
    }
425
8.52k
    _Py_DECREF_STAT_INC();
426
8.52k
    if (--op->ob_refcnt == 0) {
427
1.40k
        _Py_Dealloc(op);
428
1.40k
    }
429
8.52k
}
sre.c:Py_DECREF
Line
Count
Source
418
253M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
253M
    if (_Py_IsImmortal(op)) {
422
40.4M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
40.4M
        return;
424
40.4M
    }
425
212M
    _Py_DECREF_STAT_INC();
426
212M
    if (--op->ob_refcnt == 0) {
427
10.4M
        _Py_Dealloc(op);
428
10.4M
    }
429
212M
}
Unexecuted instantiation: _sysconfig.c:Py_DECREF
_threadmodule.c:Py_DECREF
Line
Count
Source
418
18.0M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
18.0M
    if (_Py_IsImmortal(op)) {
422
4
        _Py_DECREF_IMMORTAL_STAT_INC();
423
4
        return;
424
4
    }
425
18.0M
    _Py_DECREF_STAT_INC();
426
18.0M
    if (--op->ob_refcnt == 0) {
427
8
        _Py_Dealloc(op);
428
8
    }
429
18.0M
}
Unexecuted instantiation: timemodule.c:Py_DECREF
Unexecuted instantiation: _typesmodule.c:Py_DECREF
Unexecuted instantiation: _typingmodule.c:Py_DECREF
Unexecuted instantiation: _weakref.c:Py_DECREF
_abc.c:Py_DECREF
Line
Count
Source
418
503k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
503k
    if (_Py_IsImmortal(op)) {
422
128k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
128k
        return;
424
128k
    }
425
375k
    _Py_DECREF_STAT_INC();
426
375k
    if (--op->ob_refcnt == 0) {
427
7.27k
        _Py_Dealloc(op);
428
7.27k
    }
429
375k
}
_functoolsmodule.c:Py_DECREF
Line
Count
Source
418
260k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
260k
    if (_Py_IsImmortal(op)) {
422
25.1k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
25.1k
        return;
424
25.1k
    }
425
235k
    _Py_DECREF_STAT_INC();
426
235k
    if (--op->ob_refcnt == 0) {
427
33.6k
        _Py_Dealloc(op);
428
33.6k
    }
429
235k
}
Unexecuted instantiation: _localemodule.c:Py_DECREF
Unexecuted instantiation: _opcode.c:Py_DECREF
_operator.c:Py_DECREF
Line
Count
Source
418
561k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
561k
    if (_Py_IsImmortal(op)) {
422
280k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
280k
        return;
424
280k
    }
425
280k
    _Py_DECREF_STAT_INC();
426
280k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
280k
}
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
32.2k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
32.2k
    if (_Py_IsImmortal(op)) {
422
2.65k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
2.65k
        return;
424
2.65k
    }
425
29.6k
    _Py_DECREF_STAT_INC();
426
29.6k
    if (--op->ob_refcnt == 0) {
427
17.6k
        _Py_Dealloc(op);
428
17.6k
    }
429
29.6k
}
Unexecuted instantiation: myreadline.c:Py_DECREF
abstract.c:Py_DECREF
Line
Count
Source
418
583M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
583M
    if (_Py_IsImmortal(op)) {
422
385M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
385M
        return;
424
385M
    }
425
197M
    _Py_DECREF_STAT_INC();
426
197M
    if (--op->ob_refcnt == 0) {
427
5.97M
        _Py_Dealloc(op);
428
5.97M
    }
429
197M
}
Unexecuted instantiation: boolobject.c:Py_DECREF
Unexecuted instantiation: bytes_methods.c:Py_DECREF
bytearrayobject.c:Py_DECREF
Line
Count
Source
418
24.4M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
24.4M
    if (_Py_IsImmortal(op)) {
422
1.91M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.91M
        return;
424
1.91M
    }
425
22.5M
    _Py_DECREF_STAT_INC();
426
22.5M
    if (--op->ob_refcnt == 0) {
427
22.5M
        _Py_Dealloc(op);
428
22.5M
    }
429
22.5M
}
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
12.2M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
12.2M
    if (_Py_IsImmortal(op)) {
422
1.95M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.95M
        return;
424
1.95M
    }
425
10.3M
    _Py_DECREF_STAT_INC();
426
10.3M
    if (--op->ob_refcnt == 0) {
427
3.51M
        _Py_Dealloc(op);
428
3.51M
    }
429
10.3M
}
classobject.c:Py_DECREF
Line
Count
Source
418
91.2M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
91.2M
    if (_Py_IsImmortal(op)) {
422
125
        _Py_DECREF_IMMORTAL_STAT_INC();
423
125
        return;
424
125
    }
425
91.2M
    _Py_DECREF_STAT_INC();
426
91.2M
    if (--op->ob_refcnt == 0) {
427
12
        _Py_Dealloc(op);
428
12
    }
429
91.2M
}
codeobject.c:Py_DECREF
Line
Count
Source
418
1.04M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
1.04M
    if (_Py_IsImmortal(op)) {
422
467k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
467k
        return;
424
467k
    }
425
580k
    _Py_DECREF_STAT_INC();
426
580k
    if (--op->ob_refcnt == 0) {
427
453k
        _Py_Dealloc(op);
428
453k
    }
429
580k
}
Unexecuted instantiation: complexobject.c:Py_DECREF
descrobject.c:Py_DECREF
Line
Count
Source
418
65.0M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
65.0M
    if (_Py_IsImmortal(op)) {
422
10.4M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
10.4M
        return;
424
10.4M
    }
425
54.5M
    _Py_DECREF_STAT_INC();
426
54.5M
    if (--op->ob_refcnt == 0) {
427
28.1M
        _Py_Dealloc(op);
428
28.1M
    }
429
54.5M
}
enumobject.c:Py_DECREF
Line
Count
Source
418
84.2M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
84.2M
    if (_Py_IsImmortal(op)) {
422
14.3M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
14.3M
        return;
424
14.3M
    }
425
69.8M
    _Py_DECREF_STAT_INC();
426
69.8M
    if (--op->ob_refcnt == 0) {
427
60.0M
        _Py_Dealloc(op);
428
60.0M
    }
429
69.8M
}
genobject.c:Py_DECREF
Line
Count
Source
418
60.2M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
60.2M
    if (_Py_IsImmortal(op)) {
422
60.1M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
60.1M
        return;
424
60.1M
    }
425
80.3k
    _Py_DECREF_STAT_INC();
426
80.3k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
80.3k
}
fileobject.c:Py_DECREF
Line
Count
Source
418
377k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
377k
    if (_Py_IsImmortal(op)) {
422
371k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
371k
        return;
424
371k
    }
425
6.84k
    _Py_DECREF_STAT_INC();
426
6.84k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
6.84k
}
frameobject.c:Py_DECREF
Line
Count
Source
418
46.2M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
46.2M
    if (_Py_IsImmortal(op)) {
422
84
        _Py_DECREF_IMMORTAL_STAT_INC();
423
84
        return;
424
84
    }
425
46.2M
    _Py_DECREF_STAT_INC();
426
46.2M
    if (--op->ob_refcnt == 0) {
427
13.7M
        _Py_Dealloc(op);
428
13.7M
    }
429
46.2M
}
funcobject.c:Py_DECREF
Line
Count
Source
418
190M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
190M
    if (_Py_IsImmortal(op)) {
422
107M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
107M
        return;
424
107M
    }
425
83.5M
    _Py_DECREF_STAT_INC();
426
83.5M
    if (--op->ob_refcnt == 0) {
427
8.54M
        _Py_Dealloc(op);
428
8.54M
    }
429
83.5M
}
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.44M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
3.44M
    if (_Py_IsImmortal(op)) {
422
710k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
710k
        return;
424
710k
    }
425
2.73M
    _Py_DECREF_STAT_INC();
426
2.73M
    if (--op->ob_refcnt == 0) {
427
355k
        _Py_Dealloc(op);
428
355k
    }
429
2.73M
}
lazyimportobject.c:Py_DECREF
Line
Count
Source
418
408
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
408
    if (_Py_IsImmortal(op)) {
422
104
        _Py_DECREF_IMMORTAL_STAT_INC();
423
104
        return;
424
104
    }
425
304
    _Py_DECREF_STAT_INC();
426
304
    if (--op->ob_refcnt == 0) {
427
5
        _Py_Dealloc(op);
428
5
    }
429
304
}
odictobject.c:Py_DECREF
Line
Count
Source
418
406k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
406k
    if (_Py_IsImmortal(op)) {
422
188k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
188k
        return;
424
188k
    }
425
217k
    _Py_DECREF_STAT_INC();
426
217k
    if (--op->ob_refcnt == 0) {
427
50.9k
        _Py_Dealloc(op);
428
50.9k
    }
429
217k
}
methodobject.c:Py_DECREF
Line
Count
Source
418
152M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
152M
    if (_Py_IsImmortal(op)) {
422
27.0M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
27.0M
        return;
424
27.0M
    }
425
125M
    _Py_DECREF_STAT_INC();
426
125M
    if (--op->ob_refcnt == 0) {
427
28.7M
        _Py_Dealloc(op);
428
28.7M
    }
429
125M
}
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.75M
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
3.75M
    if (_Py_IsImmortal(op)) {
422
1.93M
        _Py_DECREF_IMMORTAL_STAT_INC();
423
1.93M
        return;
424
1.93M
    }
425
1.81M
    _Py_DECREF_STAT_INC();
426
1.81M
    if (--op->ob_refcnt == 0) {
427
466k
        _Py_Dealloc(op);
428
466k
    }
429
1.81M
}
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
29.5k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
29.5k
    if (_Py_IsImmortal(op)) {
422
6.94k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
6.94k
        return;
424
6.94k
    }
425
22.6k
    _Py_DECREF_STAT_INC();
426
22.6k
    if (--op->ob_refcnt == 0) {
427
0
        _Py_Dealloc(op);
428
0
    }
429
22.6k
}
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
298k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
298k
    if (_Py_IsImmortal(op)) {
422
48.0k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
48.0k
        return;
424
48.0k
    }
425
250k
    _Py_DECREF_STAT_INC();
426
250k
    if (--op->ob_refcnt == 0) {
427
233k
        _Py_Dealloc(op);
428
233k
    }
429
250k
}
pegen_errors.c:Py_DECREF
Line
Count
Source
418
296k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
296k
    if (_Py_IsImmortal(op)) {
422
630
        _Py_DECREF_IMMORTAL_STAT_INC();
423
630
        return;
424
630
    }
425
295k
    _Py_DECREF_STAT_INC();
426
295k
    if (--op->ob_refcnt == 0) {
427
747
        _Py_Dealloc(op);
428
747
    }
429
295k
}
Unexecuted instantiation: parser.c:Py_DECREF
Unexecuted instantiation: buffer.c:Py_DECREF
lexer.c:Py_DECREF
Line
Count
Source
418
11.1k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
11.1k
    if (_Py_IsImmortal(op)) {
422
883
        _Py_DECREF_IMMORTAL_STAT_INC();
423
883
        return;
424
883
    }
425
10.3k
    _Py_DECREF_STAT_INC();
426
10.3k
    if (--op->ob_refcnt == 0) {
427
10.3k
        _Py_Dealloc(op);
428
10.3k
    }
429
10.3k
}
state.c:Py_DECREF
Line
Count
Source
418
108k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
108k
    if (_Py_IsImmortal(op)) {
422
784
        _Py_DECREF_IMMORTAL_STAT_INC();
423
784
        return;
424
784
    }
425
107k
    _Py_DECREF_STAT_INC();
426
107k
    if (--op->ob_refcnt == 0) {
427
71
        _Py_Dealloc(op);
428
71
    }
429
107k
}
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.14k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
2.14k
    if (_Py_IsImmortal(op)) {
422
0
        _Py_DECREF_IMMORTAL_STAT_INC();
423
0
        return;
424
0
    }
425
2.14k
    _Py_DECREF_STAT_INC();
426
2.14k
    if (--op->ob_refcnt == 0) {
427
2.14k
        _Py_Dealloc(op);
428
2.14k
    }
429
2.14k
}
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
36.2k
{
419
    // Non-limited C API and limited C API for Python 3.9 and older access
420
    // directly PyObject.ob_refcnt.
421
36.2k
    if (_Py_IsImmortal(op)) {
422
3.24k
        _Py_DECREF_IMMORTAL_STAT_INC();
423
3.24k
        return;
424
3.24k
    }
425
33.0k
    _Py_DECREF_STAT_INC();
426
33.0k
    if (--op->ob_refcnt == 0) {
427
33.0k
        _Py_Dealloc(op);
428
33.0k
    }
429
33.0k
}
430
11.3G
#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.47G
    do { \
485
2.47G
        _Py_TYPEOF(op)* _tmp_op_ptr = &(op); \
486
2.47G
        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
487
2.47G
        if (_tmp_old_op != NULL) { \
488
543M
            *_tmp_op_ptr = _Py_NULL; \
489
543M
            Py_DECREF(_tmp_old_op); \
490
543M
        } \
491
2.47G
    } 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.49G
{
509
1.49G
    if (op != _Py_NULL) {
510
832M
        Py_INCREF(op);
511
832M
    }
512
1.49G
}
Unexecuted instantiation: bytesobject.c:Py_XINCREF
Unexecuted instantiation: call.c:Py_XINCREF
exceptions.c:Py_XINCREF
Line
Count
Source
508
134M
{
509
134M
    if (op != _Py_NULL) {
510
31.2M
        Py_INCREF(op);
511
31.2M
    }
512
134M
}
Unexecuted instantiation: genericaliasobject.c:Py_XINCREF
Unexecuted instantiation: floatobject.c:Py_XINCREF
listobject.c:Py_XINCREF
Line
Count
Source
508
72.1M
{
509
72.1M
    if (op != _Py_NULL) {
510
72.1M
        Py_INCREF(op);
511
72.1M
    }
512
72.1M
}
Unexecuted instantiation: longobject.c:Py_XINCREF
dictobject.c:Py_XINCREF
Line
Count
Source
508
368M
{
509
368M
    if (op != _Py_NULL) {
510
201M
        Py_INCREF(op);
511
201M
    }
512
368M
}
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
sentinelobject.c:Py_XINCREF
Line
Count
Source
508
54
{
509
54
    if (op != _Py_NULL) {
510
8
        Py_INCREF(op);
511
8
    }
512
54
}
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
516k
{
509
516k
    if (op != _Py_NULL) {
510
255k
        Py_INCREF(op);
511
255k
    }
512
516k
}
typevarobject.c:Py_XINCREF
Line
Count
Source
508
1.20k
{
509
1.20k
    if (op != _Py_NULL) {
510
244
        Py_INCREF(op);
511
244
    }
512
1.20k
}
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.46M
{
509
1.46M
    if (op != _Py_NULL) {
510
770k
        Py_INCREF(op);
511
770k
    }
512
1.46M
}
Unexecuted instantiation: _warnings.c:Py_XINCREF
bltinmodule.c:Py_XINCREF
Line
Count
Source
508
1.20k
{
509
1.20k
    if (op != _Py_NULL) {
510
1.20k
        Py_INCREF(op);
511
1.20k
    }
512
1.20k
}
ceval.c:Py_XINCREF
Line
Count
Source
508
274M
{
509
274M
    if (op != _Py_NULL) {
510
89.4M
        Py_INCREF(op);
511
89.4M
    }
512
274M
}
Unexecuted instantiation: codecs.c:Py_XINCREF
Unexecuted instantiation: codegen.c:Py_XINCREF
compile.c:Py_XINCREF
Line
Count
Source
508
7.35k
{
509
7.35k
    if (op != _Py_NULL) {
510
2.62k
        Py_INCREF(op);
511
2.62k
    }
512
7.35k
}
context.c:Py_XINCREF
Line
Count
Source
508
276k
{
509
276k
    if (op != _Py_NULL) {
510
0
        Py_INCREF(op);
511
0
    }
512
276k
}
errors.c:Py_XINCREF
Line
Count
Source
508
45.6M
{
509
45.6M
    if (op != _Py_NULL) {
510
45.5M
        Py_INCREF(op);
511
45.5M
    }
512
45.6M
}
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
37.4k
{
509
37.4k
    if (op != _Py_NULL) {
510
30.7k
        Py_INCREF(op);
511
30.7k
    }
512
37.4k
}
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.06M
{
509
1.06M
    if (op != _Py_NULL) {
510
1.06M
        Py_INCREF(op);
511
1.06M
    }
512
1.06M
}
Unexecuted instantiation: pythonrun.c:Py_XINCREF
Unexecuted instantiation: pytime.c:Py_XINCREF
Unexecuted instantiation: qsbr.c:Py_XINCREF
Unexecuted instantiation: bootstrap_hash.c:Py_XINCREF
Unexecuted instantiation: specialize.c:Py_XINCREF
Unexecuted instantiation: slots.c:Py_XINCREF
Unexecuted instantiation: slots_generated.c:Py_XINCREF
structmember.c:Py_XINCREF
Line
Count
Source
508
8.07M
{
509
8.07M
    if (op != _Py_NULL) {
510
7.50M
        Py_INCREF(op);
511
7.50M
    }
512
8.07M
}
Unexecuted instantiation: symtable.c:Py_XINCREF
sysmodule.c:Py_XINCREF
Line
Count
Source
508
242
{
509
242
    if (op != _Py_NULL) {
510
242
        Py_INCREF(op);
511
242
    }
512
242
}
Unexecuted instantiation: thread.c:Py_XINCREF
traceback.c:Py_XINCREF
Line
Count
Source
508
146M
{
509
146M
    if (op != _Py_NULL) {
510
102M
        Py_INCREF(op);
511
102M
    }
512
146M
}
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: jit_unwind.c:Py_XINCREF
Unexecuted instantiation: remote_debugging.c:Py_XINCREF
Unexecuted instantiation: dynload_shlib.c:Py_XINCREF
Unexecuted instantiation: config.c:Py_XINCREF
Unexecuted instantiation: gcmodule.c:Py_XINCREF
Unexecuted instantiation: _asynciomodule.c:Py_XINCREF
Unexecuted instantiation: atexitmodule.c:Py_XINCREF
Unexecuted instantiation: faulthandler.c:Py_XINCREF
posixmodule.c:Py_XINCREF
Line
Count
Source
508
108k
{
509
108k
    if (op != _Py_NULL) {
510
108k
        Py_INCREF(op);
511
108k
    }
512
108k
}
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
24.3k
{
509
24.3k
    if (op != _Py_NULL) {
510
24.3k
        Py_INCREF(op);
511
24.3k
    }
512
24.3k
}
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.86k
{
509
6.86k
    if (op != _Py_NULL) {
510
6.86k
        Py_INCREF(op);
511
6.86k
    }
512
6.86k
}
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
144
{
509
144
    if (op != _Py_NULL) {
510
72
        Py_INCREF(op);
511
72
    }
512
144
}
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
34.5k
{
509
34.5k
    if (op != _Py_NULL) {
510
34.5k
        Py_INCREF(op);
511
34.5k
    }
512
34.5k
}
_functoolsmodule.c:Py_XINCREF
Line
Count
Source
508
40
{
509
40
    if (op != _Py_NULL) {
510
0
        Py_INCREF(op);
511
0
    }
512
40
}
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
180
{
509
180
    if (op != _Py_NULL) {
510
180
        Py_INCREF(op);
511
180
    }
512
180
}
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
113M
{
509
113M
    if (op != _Py_NULL) {
510
112M
        Py_INCREF(op);
511
112M
    }
512
113M
}
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
23.3M
{
509
23.3M
    if (op != _Py_NULL) {
510
6.11M
        Py_INCREF(op);
511
6.11M
    }
512
23.3M
}
Unexecuted instantiation: classobject.c:Py_XINCREF
codeobject.c:Py_XINCREF
Line
Count
Source
508
3.40k
{
509
3.40k
    if (op != _Py_NULL) {
510
3.40k
        Py_INCREF(op);
511
3.40k
    }
512
3.40k
}
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
97.1k
{
509
97.1k
    if (op != _Py_NULL) {
510
0
        Py_INCREF(op);
511
0
    }
512
97.1k
}
Unexecuted instantiation: fileobject.c:Py_XINCREF
frameobject.c:Py_XINCREF
Line
Count
Source
508
19.6M
{
509
19.6M
    if (op != _Py_NULL) {
510
19.6M
        Py_INCREF(op);
511
19.6M
    }
512
19.6M
}
funcobject.c:Py_XINCREF
Line
Count
Source
508
66.4k
{
509
66.4k
    if (op != _Py_NULL) {
510
41.8k
        Py_INCREF(op);
511
41.8k
    }
512
66.4k
}
Unexecuted instantiation: interpolationobject.c:Py_XINCREF
Unexecuted instantiation: iterobject.c:Py_XINCREF
lazyimportobject.c:Py_XINCREF
Line
Count
Source
508
850
{
509
850
    if (op != _Py_NULL) {
510
635
        Py_INCREF(op);
511
635
    }
512
850
}
Unexecuted instantiation: odictobject.c:Py_XINCREF
methodobject.c:Py_XINCREF
Line
Count
Source
508
284M
{
509
284M
    if (op != _Py_NULL) {
510
142M
        Py_INCREF(op);
511
142M
    }
512
284M
}
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
107k
{
509
107k
    if (op != _Py_NULL) {
510
715
        Py_INCREF(op);
511
715
    }
512
107k
}
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.49G
#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
515
#endif
516
517
static inline void Py_XDECREF(PyObject *op)
518
6.60G
{
519
6.60G
    if (op != _Py_NULL) {
520
5.61G
        Py_DECREF(op);
521
5.61G
    }
522
6.60G
}
bytesobject.c:Py_XDECREF
Line
Count
Source
518
30.2M
{
519
30.2M
    if (op != _Py_NULL) {
520
114k
        Py_DECREF(op);
521
114k
    }
522
30.2M
}
Unexecuted instantiation: call.c:Py_XDECREF
exceptions.c:Py_XDECREF
Line
Count
Source
518
136M
{
519
136M
    if (op != _Py_NULL) {
520
65.2M
        Py_DECREF(op);
521
65.2M
    }
522
136M
}
genericaliasobject.c:Py_XDECREF
Line
Count
Source
518
547
{
519
547
    if (op != _Py_NULL) {
520
290
        Py_DECREF(op);
521
290
    }
522
547
}
floatobject.c:Py_XDECREF
Line
Count
Source
518
867k
{
519
867k
    if (op != _Py_NULL) {
520
510k
        Py_DECREF(op);
521
510k
    }
522
867k
}
listobject.c:Py_XDECREF
Line
Count
Source
518
1.59G
{
519
1.59G
    if (op != _Py_NULL) {
520
1.55G
        Py_DECREF(op);
521
1.55G
    }
522
1.59G
}
longobject.c:Py_XDECREF
Line
Count
Source
518
34.3M
{
519
34.3M
    if (op != _Py_NULL) {
520
15.7M
        Py_DECREF(op);
521
15.7M
    }
522
34.3M
}
dictobject.c:Py_XDECREF
Line
Count
Source
518
280M
{
519
280M
    if (op != _Py_NULL) {
520
273M
        Py_DECREF(op);
521
273M
    }
522
280M
}
Unexecuted instantiation: memoryobject.c:Py_XDECREF
moduleobject.c:Py_XDECREF
Line
Count
Source
518
20.9k
{
519
20.9k
    if (op != _Py_NULL) {
520
11.2k
        Py_DECREF(op);
521
11.2k
    }
522
20.9k
}
object.c:Py_XDECREF
Line
Count
Source
518
12.5M
{
519
12.5M
    if (op != _Py_NULL) {
520
53.6k
        Py_DECREF(op);
521
53.6k
    }
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
}
Unexecuted instantiation: sentinelobject.c:Py_XDECREF
setobject.c:Py_XDECREF
Line
Count
Source
518
97.0k
{
519
97.0k
    if (op != _Py_NULL) {
520
394
        Py_DECREF(op);
521
394
    }
522
97.0k
}
Unexecuted instantiation: sliceobject.c:Py_XDECREF
structseq.c:Py_XDECREF
Line
Count
Source
518
5.82M
{
519
5.82M
    if (op != _Py_NULL) {
520
5.82M
        Py_DECREF(op);
521
5.82M
    }
522
5.82M
}
Unexecuted instantiation: templateobject.c:Py_XDECREF
tupleobject.c:Py_XDECREF
Line
Count
Source
518
3.04G
{
519
3.04G
    if (op != _Py_NULL) {
520
3.03G
        Py_DECREF(op);
521
3.03G
    }
522
3.04G
}
typeobject.c:Py_XDECREF
Line
Count
Source
518
29.4M
{
519
29.4M
    if (op != _Py_NULL) {
520
16.4M
        Py_DECREF(op);
521
16.4M
    }
522
29.4M
}
typevarobject.c:Py_XDECREF
Line
Count
Source
518
604
{
519
604
    if (op != _Py_NULL) {
520
432
        Py_DECREF(op);
521
432
    }
522
604
}
unicode_format.c:Py_XDECREF
Line
Count
Source
518
26.0M
{
519
26.0M
    if (op != _Py_NULL) {
520
50.2k
        Py_DECREF(op);
521
50.2k
    }
522
26.0M
}
unicode_formatter.c:Py_XDECREF
Line
Count
Source
518
2.16k
{
519
2.16k
    if (op != _Py_NULL) {
520
1.42k
        Py_DECREF(op);
521
1.42k
    }
522
2.16k
}
Unexecuted instantiation: unicode_writer.c:Py_XDECREF
Unexecuted instantiation: unicodectype.c:Py_XDECREF
unicodeobject.c:Py_XDECREF
Line
Count
Source
518
101M
{
519
101M
    if (op != _Py_NULL) {
520
44.3M
        Py_DECREF(op);
521
44.3M
    }
522
101M
}
unionobject.c:Py_XDECREF
Line
Count
Source
518
2.08k
{
519
2.08k
    if (op != _Py_NULL) {
520
334
        Py_DECREF(op);
521
334
    }
522
2.08k
}
weakrefobject.c:Py_XDECREF
Line
Count
Source
518
1.47M
{
519
1.47M
    if (op != _Py_NULL) {
520
736k
        Py_DECREF(op);
521
736k
    }
522
1.47M
}
_warnings.c:Py_XDECREF
Line
Count
Source
518
6.45M
{
519
6.45M
    if (op != _Py_NULL) {
520
5.65M
        Py_DECREF(op);
521
5.65M
    }
522
6.45M
}
bltinmodule.c:Py_XDECREF
Line
Count
Source
518
17.8M
{
519
17.8M
    if (op != _Py_NULL) {
520
548k
        Py_DECREF(op);
521
548k
    }
522
17.8M
}
ceval.c:Py_XDECREF
Line
Count
Source
518
6.31M
{
519
6.31M
    if (op != _Py_NULL) {
520
134k
        Py_DECREF(op);
521
134k
    }
522
6.31M
}
codecs.c:Py_XDECREF
Line
Count
Source
518
216k
{
519
216k
    if (op != _Py_NULL) {
520
144k
        Py_DECREF(op);
521
144k
    }
522
216k
}
Unexecuted instantiation: codegen.c:Py_XDECREF
compile.c:Py_XDECREF
Line
Count
Source
518
16.9k
{
519
16.9k
    if (op != _Py_NULL) {
520
7.19k
        Py_DECREF(op);
521
7.19k
    }
522
16.9k
}
Unexecuted instantiation: context.c:Py_XDECREF
errors.c:Py_XDECREF
Line
Count
Source
518
313M
{
519
313M
    if (op != _Py_NULL) {
520
34.2M
        Py_DECREF(op);
521
34.2M
    }
522
313M
}
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
176k
{
519
176k
    if (op != _Py_NULL) {
520
6.50k
        Py_DECREF(op);
521
6.50k
    }
522
176k
}
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.40M
{
519
9.40M
    if (op != _Py_NULL) {
520
9.37M
        Py_DECREF(op);
521
9.37M
    }
522
9.40M
}
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
8.45k
{
519
8.45k
    if (op != _Py_NULL) {
520
0
        Py_DECREF(op);
521
0
    }
522
8.45k
}
intrinsics.c:Py_XDECREF
Line
Count
Source
518
33.6k
{
519
33.6k
    if (op != _Py_NULL) {
520
33.6k
        Py_DECREF(op);
521
33.6k
    }
522
33.6k
}
Unexecuted instantiation: legacy_tracing.c:Py_XDECREF
Unexecuted instantiation: lock.c:Py_XDECREF
marshal.c:Py_XDECREF
Line
Count
Source
518
1.81M
{
519
1.81M
    if (op != _Py_NULL) {
520
1.81M
        Py_DECREF(op);
521
1.81M
    }
522
1.81M
}
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.73k
{
519
1.73k
    if (op != _Py_NULL) {
520
1.15k
        Py_DECREF(op);
521
1.15k
    }
522
1.73k
}
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
2.86M
{
519
2.86M
    if (op != _Py_NULL) {
520
1.24M
        Py_DECREF(op);
521
1.24M
    }
522
2.86M
}
Unexecuted instantiation: slots.c:Py_XDECREF
Unexecuted instantiation: slots_generated.c:Py_XDECREF
structmember.c:Py_XDECREF
Line
Count
Source
518
7.32M
{
519
7.32M
    if (op != _Py_NULL) {
520
19.8k
        Py_DECREF(op);
521
19.8k
    }
522
7.32M
}
symtable.c:Py_XDECREF
Line
Count
Source
518
105k
{
519
105k
    if (op != _Py_NULL) {
520
78.6k
        Py_DECREF(op);
521
78.6k
    }
522
105k
}
sysmodule.c:Py_XDECREF
Line
Count
Source
518
2.09M
{
519
2.09M
    if (op != _Py_NULL) {
520
1.57M
        Py_DECREF(op);
521
1.57M
    }
522
2.09M
}
Unexecuted instantiation: thread.c:Py_XDECREF
traceback.c:Py_XDECREF
Line
Count
Source
518
293M
{
519
293M
    if (op != _Py_NULL) {
520
205M
        Py_DECREF(op);
521
205M
    }
522
293M
}
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: jit_unwind.c:Py_XDECREF
Unexecuted instantiation: remote_debugging.c:Py_XDECREF
Unexecuted instantiation: dynload_shlib.c:Py_XDECREF
Unexecuted instantiation: config.c:Py_XDECREF
Unexecuted instantiation: gcmodule.c:Py_XDECREF
Unexecuted instantiation: _asynciomodule.c:Py_XDECREF
Unexecuted instantiation: atexitmodule.c:Py_XDECREF
Unexecuted instantiation: faulthandler.c:Py_XDECREF
posixmodule.c:Py_XDECREF
Line
Count
Source
518
1.00M
{
519
1.00M
    if (op != _Py_NULL) {
520
853k
        Py_DECREF(op);
521
853k
    }
522
1.00M
}
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
27.1k
{
519
27.1k
    if (op != _Py_NULL) {
520
27.0k
        Py_DECREF(op);
521
27.0k
    }
522
27.1k
}
Unexecuted instantiation: _codecsmodule.c:Py_XDECREF
_collectionsmodule.c:Py_XDECREF
Line
Count
Source
518
24.3k
{
519
24.3k
    if (op != _Py_NULL) {
520
0
        Py_DECREF(op);
521
0
    }
522
24.3k
}
Unexecuted instantiation: errnomodule.c:Py_XDECREF
_iomodule.c:Py_XDECREF
Line
Count
Source
518
22
{
519
22
    if (op != _Py_NULL) {
520
11
        Py_DECREF(op);
521
11
    }
522
22
}
Unexecuted instantiation: iobase.c:Py_XDECREF
Unexecuted instantiation: fileio.c:Py_XDECREF
bytesio.c:Py_XDECREF
Line
Count
Source
518
49.4k
{
519
49.4k
    if (op != _Py_NULL) {
520
49.4k
        Py_DECREF(op);
521
49.4k
    }
522
49.4k
}
bufferedio.c:Py_XDECREF
Line
Count
Source
518
54.8k
{
519
54.8k
    if (op != _Py_NULL) {
520
6.88k
        Py_DECREF(op);
521
6.88k
    }
522
54.8k
}
textio.c:Py_XDECREF
Line
Count
Source
518
32.2k
{
519
32.2k
    if (op != _Py_NULL) {
520
213
        Py_DECREF(op);
521
213
    }
522
32.2k
}
Unexecuted instantiation: stringio.c:Py_XDECREF
itertoolsmodule.c:Py_XDECREF
Line
Count
Source
518
6.32k
{
519
6.32k
    if (op != _Py_NULL) {
520
5.73k
        Py_DECREF(op);
521
5.73k
    }
522
6.32k
}
sre.c:Py_XDECREF
Line
Count
Source
518
63.1M
{
519
63.1M
    if (op != _Py_NULL) {
520
63.1M
        Py_DECREF(op);
521
63.1M
    }
522
63.1M
}
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
223k
{
519
223k
    if (op != _Py_NULL) {
520
188k
        Py_DECREF(op);
521
188k
    }
522
223k
}
_functoolsmodule.c:Py_XDECREF
Line
Count
Source
518
8.53k
{
519
8.53k
    if (op != _Py_NULL) {
520
0
        Py_DECREF(op);
521
0
    }
522
8.53k
}
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
12.7k
{
519
12.7k
    if (op != _Py_NULL) {
520
11.8k
        Py_DECREF(op);
521
11.8k
    }
522
12.7k
}
Unexecuted instantiation: myreadline.c:Py_XDECREF
abstract.c:Py_XDECREF
Line
Count
Source
518
443k
{
519
443k
    if (op != _Py_NULL) {
520
261k
        Py_DECREF(op);
521
261k
    }
522
443k
}
Unexecuted instantiation: boolobject.c:Py_XDECREF
Unexecuted instantiation: bytes_methods.c:Py_XDECREF
bytearrayobject.c:Py_XDECREF
Line
Count
Source
518
24.4M
{
519
24.4M
    if (op != _Py_NULL) {
520
24.4M
        Py_DECREF(op);
521
24.4M
    }
522
24.4M
}
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
23.3M
{
519
23.3M
    if (op != _Py_NULL) {
520
8.94M
        Py_DECREF(op);
521
8.94M
    }
522
23.3M
}
classobject.c:Py_XDECREF
Line
Count
Source
518
45.6M
{
519
45.6M
    if (op != _Py_NULL) {
520
45.6M
        Py_DECREF(op);
521
45.6M
    }
522
45.6M
}
codeobject.c:Py_XDECREF
Line
Count
Source
518
1.22M
{
519
1.22M
    if (op != _Py_NULL) {
520
1.03M
        Py_DECREF(op);
521
1.03M
    }
522
1.22M
}
Unexecuted instantiation: complexobject.c:Py_XDECREF
descrobject.c:Py_XDECREF
Line
Count
Source
518
28.4M
{
519
28.4M
    if (op != _Py_NULL) {
520
19.8M
        Py_DECREF(op);
521
19.8M
    }
522
28.4M
}
enumobject.c:Py_XDECREF
Line
Count
Source
518
25.2M
{
519
25.2M
    if (op != _Py_NULL) {
520
16.8M
        Py_DECREF(op);
521
16.8M
    }
522
25.2M
}
genobject.c:Py_XDECREF
Line
Count
Source
518
48.5k
{
519
48.5k
    if (op != _Py_NULL) {
520
0
        Py_DECREF(op);
521
0
    }
522
48.5k
}
Unexecuted instantiation: fileobject.c:Py_XDECREF
Unexecuted instantiation: frameobject.c:Py_XDECREF
funcobject.c:Py_XDECREF
Line
Count
Source
518
76.3k
{
519
76.3k
    if (op != _Py_NULL) {
520
37.1k
        Py_DECREF(op);
521
37.1k
    }
522
76.3k
}
Unexecuted instantiation: interpolationobject.c:Py_XDECREF
iterobject.c:Py_XDECREF
Line
Count
Source
518
3.44M
{
519
3.44M
    if (op != _Py_NULL) {
520
355k
        Py_DECREF(op);
521
355k
    }
522
3.44M
}
Unexecuted instantiation: lazyimportobject.c:Py_XDECREF
odictobject.c:Py_XDECREF
Line
Count
Source
518
317k
{
519
317k
    if (op != _Py_NULL) {
520
92.9k
        Py_DECREF(op);
521
92.9k
    }
522
317k
}
methodobject.c:Py_XDECREF
Line
Count
Source
518
426M
{
519
426M
    if (op != _Py_NULL) {
520
152M
        Py_DECREF(op);
521
152M
    }
522
426M
}
Unexecuted instantiation: namespaceobject.c:Py_XDECREF
Unexecuted instantiation: _contextvars.c:Py_XDECREF
Python-ast.c:Py_XDECREF
Line
Count
Source
518
750
{
519
750
    if (op != _Py_NULL) {
520
500
        Py_DECREF(op);
521
500
    }
522
750
}
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
29.5k
{
519
29.5k
    if (op != _Py_NULL) {
520
29.5k
        Py_DECREF(op);
521
29.5k
    }
522
29.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
207k
{
519
207k
    if (op != _Py_NULL) {
520
1.56k
        Py_DECREF(op);
521
1.56k
    }
522
207k
}
pegen_errors.c:Py_XDECREF
Line
Count
Source
518
1.89k
{
519
1.89k
    if (op != _Py_NULL) {
520
1.26k
        Py_DECREF(op);
521
1.26k
    }
522
1.89k
}
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
649k
{
519
649k
    if (op != _Py_NULL) {
520
108k
        Py_DECREF(op);
521
108k
    }
522
649k
}
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
28.4k
{
519
28.4k
    if (op != _Py_NULL) {
520
28.4k
        Py_DECREF(op);
521
28.4k
    }
522
28.4k
}
523
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
524
6.60G
#  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
6.87G
{
536
6.87G
    Py_INCREF(obj);
537
6.87G
    return obj;
538
6.87G
}
bytesobject.c:_Py_NewRef
Line
Count
Source
535
1.20M
{
536
1.20M
    Py_INCREF(obj);
537
1.20M
    return obj;
538
1.20M
}
call.c:_Py_NewRef
Line
Count
Source
535
34.1M
{
536
34.1M
    Py_INCREF(obj);
537
34.1M
    return obj;
538
34.1M
}
exceptions.c:_Py_NewRef
Line
Count
Source
535
170M
{
536
170M
    Py_INCREF(obj);
537
170M
    return obj;
538
170M
}
genericaliasobject.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: floatobject.c:_Py_NewRef
listobject.c:_Py_NewRef
Line
Count
Source
535
1.16G
{
536
1.16G
    Py_INCREF(obj);
537
1.16G
    return obj;
538
1.16G
}
longobject.c:_Py_NewRef
Line
Count
Source
535
21.1M
{
536
21.1M
    Py_INCREF(obj);
537
21.1M
    return obj;
538
21.1M
}
dictobject.c:_Py_NewRef
Line
Count
Source
535
467M
{
536
467M
    Py_INCREF(obj);
537
467M
    return obj;
538
467M
}
memoryobject.c:_Py_NewRef
Line
Count
Source
535
3.41M
{
536
3.41M
    Py_INCREF(obj);
537
3.41M
    return obj;
538
3.41M
}
moduleobject.c:_Py_NewRef
Line
Count
Source
535
8.69k
{
536
8.69k
    Py_INCREF(obj);
537
8.69k
    return obj;
538
8.69k
}
object.c:_Py_NewRef
Line
Count
Source
535
79.8M
{
536
79.8M
    Py_INCREF(obj);
537
79.8M
    return obj;
538
79.8M
}
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
}
sentinelobject.c:_Py_NewRef
Line
Count
Source
535
162
{
536
162
    Py_INCREF(obj);
537
162
    return obj;
538
162
}
setobject.c:_Py_NewRef
Line
Count
Source
535
5.18M
{
536
5.18M
    Py_INCREF(obj);
537
5.18M
    return obj;
538
5.18M
}
sliceobject.c:_Py_NewRef
Line
Count
Source
535
183M
{
536
183M
    Py_INCREF(obj);
537
183M
    return obj;
538
183M
}
structseq.c:_Py_NewRef
Line
Count
Source
535
146k
{
536
146k
    Py_INCREF(obj);
537
146k
    return obj;
538
146k
}
templateobject.c:_Py_NewRef
Line
Count
Source
535
22
{
536
22
    Py_INCREF(obj);
537
22
    return obj;
538
22
}
tupleobject.c:_Py_NewRef
Line
Count
Source
535
2.71G
{
536
2.71G
    Py_INCREF(obj);
537
2.71G
    return obj;
538
2.71G
}
typeobject.c:_Py_NewRef
Line
Count
Source
535
147M
{
536
147M
    Py_INCREF(obj);
537
147M
    return obj;
538
147M
}
typevarobject.c:_Py_NewRef
Line
Count
Source
535
1.95k
{
536
1.95k
    Py_INCREF(obj);
537
1.95k
    return obj;
538
1.95k
}
unicode_format.c:_Py_NewRef
Line
Count
Source
535
18.9M
{
536
18.9M
    Py_INCREF(obj);
537
18.9M
    return obj;
538
18.9M
}
Unexecuted instantiation: unicode_formatter.c:_Py_NewRef
unicode_writer.c:_Py_NewRef
Line
Count
Source
535
7.40k
{
536
7.40k
    Py_INCREF(obj);
537
7.40k
    return obj;
538
7.40k
}
Unexecuted instantiation: unicodectype.c:_Py_NewRef
unicodeobject.c:_Py_NewRef
Line
Count
Source
535
105M
{
536
105M
    Py_INCREF(obj);
537
105M
    return obj;
538
105M
}
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.40M
{
536
2.40M
    Py_INCREF(obj);
537
2.40M
    return obj;
538
2.40M
}
bltinmodule.c:_Py_NewRef
Line
Count
Source
535
38.0M
{
536
38.0M
    Py_INCREF(obj);
537
38.0M
    return obj;
538
38.0M
}
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.14M
{
536
6.14M
    Py_INCREF(obj);
537
6.14M
    return obj;
538
6.14M
}
codegen.c:_Py_NewRef
Line
Count
Source
535
1.98k
{
536
1.98k
    Py_INCREF(obj);
537
1.98k
    return obj;
538
1.98k
}
compile.c:_Py_NewRef
Line
Count
Source
535
58.8k
{
536
58.8k
    Py_INCREF(obj);
537
58.8k
    return obj;
538
58.8k
}
context.c:_Py_NewRef
Line
Count
Source
535
65
{
536
65
    Py_INCREF(obj);
537
65
    return obj;
538
65
}
errors.c:_Py_NewRef
Line
Count
Source
535
45.7M
{
536
45.7M
    Py_INCREF(obj);
537
45.7M
    return obj;
538
45.7M
}
flowgraph.c:_Py_NewRef
Line
Count
Source
535
64.8k
{
536
64.8k
    Py_INCREF(obj);
537
64.8k
    return obj;
538
64.8k
}
frame.c:_Py_NewRef
Line
Count
Source
535
46.2M
{
536
46.2M
    Py_INCREF(obj);
537
46.2M
    return obj;
538
46.2M
}
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.21M
{
536
3.21M
    Py_INCREF(obj);
537
3.21M
    return obj;
538
3.21M
}
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
8.16M
{
536
8.16M
    Py_INCREF(obj);
537
8.16M
    return obj;
538
8.16M
}
importdl.c:_Py_NewRef
Line
Count
Source
535
1.14k
{
536
1.14k
    Py_INCREF(obj);
537
1.14k
    return obj;
538
1.14k
}
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
69.8k
{
536
69.8k
    Py_INCREF(obj);
537
69.8k
    return obj;
538
69.8k
}
Unexecuted instantiation: legacy_tracing.c:_Py_NewRef
Unexecuted instantiation: lock.c:_Py_NewRef
marshal.c:_Py_NewRef
Line
Count
Source
535
1.95M
{
536
1.95M
    Py_INCREF(obj);
537
1.95M
    return obj;
538
1.95M
}
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: slots.c:_Py_NewRef
Unexecuted instantiation: slots_generated.c:_Py_NewRef
Unexecuted instantiation: structmember.c:_Py_NewRef
symtable.c:_Py_NewRef
Line
Count
Source
535
116k
{
536
116k
    Py_INCREF(obj);
537
116k
    return obj;
538
116k
}
sysmodule.c:_Py_NewRef
Line
Count
Source
535
1.88k
{
536
1.88k
    Py_INCREF(obj);
537
1.88k
    return obj;
538
1.88k
}
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: jit_unwind.c:_Py_NewRef
Unexecuted instantiation: remote_debugging.c:_Py_NewRef
Unexecuted instantiation: dynload_shlib.c:_Py_NewRef
Unexecuted instantiation: config.c:_Py_NewRef
Unexecuted instantiation: gcmodule.c:_Py_NewRef
Unexecuted instantiation: _asynciomodule.c:_Py_NewRef
atexitmodule.c:_Py_NewRef
Line
Count
Source
535
2
{
536
2
    Py_INCREF(obj);
537
2
    return obj;
538
2
}
Unexecuted instantiation: faulthandler.c:_Py_NewRef
posixmodule.c:_Py_NewRef
Line
Count
Source
535
1.44M
{
536
1.44M
    Py_INCREF(obj);
537
1.44M
    return obj;
538
1.44M
}
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
27.0k
{
536
27.0k
    Py_INCREF(obj);
537
27.0k
    return obj;
538
27.0k
}
Unexecuted instantiation: _codecsmodule.c:_Py_NewRef
_collectionsmodule.c:_Py_NewRef
Line
Count
Source
535
23.3M
{
536
23.3M
    Py_INCREF(obj);
537
23.3M
    return obj;
538
23.3M
}
Unexecuted instantiation: errnomodule.c:_Py_NewRef
_iomodule.c:_Py_NewRef
Line
Count
Source
535
272
{
536
272
    Py_INCREF(obj);
537
272
    return obj;
538
272
}
iobase.c:_Py_NewRef
Line
Count
Source
535
98.5k
{
536
98.5k
    Py_INCREF(obj);
537
98.5k
    return obj;
538
98.5k
}
Unexecuted instantiation: fileio.c:_Py_NewRef
bytesio.c:_Py_NewRef
Line
Count
Source
535
73.6k
{
536
73.6k
    Py_INCREF(obj);
537
73.6k
    return obj;
538
73.6k
}
bufferedio.c:_Py_NewRef
Line
Count
Source
535
12.5k
{
536
12.5k
    Py_INCREF(obj);
537
12.5k
    return obj;
538
12.5k
}
textio.c:_Py_NewRef
Line
Count
Source
535
360k
{
536
360k
    Py_INCREF(obj);
537
360k
    return obj;
538
360k
}
stringio.c:_Py_NewRef
Line
Count
Source
535
15.8k
{
536
15.8k
    Py_INCREF(obj);
537
15.8k
    return obj;
538
15.8k
}
itertoolsmodule.c:_Py_NewRef
Line
Count
Source
535
44.6k
{
536
44.6k
    Py_INCREF(obj);
537
44.6k
    return obj;
538
44.6k
}
sre.c:_Py_NewRef
Line
Count
Source
535
121M
{
536
121M
    Py_INCREF(obj);
537
121M
    return obj;
538
121M
}
Unexecuted instantiation: _sysconfig.c:_Py_NewRef
_threadmodule.c:_Py_NewRef
Line
Count
Source
535
72
{
536
72
    Py_INCREF(obj);
537
72
    return obj;
538
72
}
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
59.4k
{
536
59.4k
    Py_INCREF(obj);
537
59.4k
    return obj;
538
59.4k
}
_functoolsmodule.c:_Py_NewRef
Line
Count
Source
535
156k
{
536
156k
    Py_INCREF(obj);
537
156k
    return obj;
538
156k
}
Unexecuted instantiation: _localemodule.c:_Py_NewRef
Unexecuted instantiation: _opcode.c:_Py_NewRef
_operator.c:_Py_NewRef
Line
Count
Source
535
1.29M
{
536
1.29M
    Py_INCREF(obj);
537
1.29M
    return obj;
538
1.29M
}
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
471M
{
536
471M
    Py_INCREF(obj);
537
471M
    return obj;
538
471M
}
Unexecuted instantiation: boolobject.c:_Py_NewRef
Unexecuted instantiation: bytes_methods.c:_Py_NewRef
bytearrayobject.c:_Py_NewRef
Line
Count
Source
535
19.7M
{
536
19.7M
    Py_INCREF(obj);
537
19.7M
    return obj;
538
19.7M
}
Unexecuted instantiation: capsule.c:_Py_NewRef
Unexecuted instantiation: cellobject.c:_Py_NewRef
classobject.c:_Py_NewRef
Line
Count
Source
535
91.2M
{
536
91.2M
    Py_INCREF(obj);
537
91.2M
    return obj;
538
91.2M
}
codeobject.c:_Py_NewRef
Line
Count
Source
535
2.21M
{
536
2.21M
    Py_INCREF(obj);
537
2.21M
    return obj;
538
2.21M
}
Unexecuted instantiation: complexobject.c:_Py_NewRef
descrobject.c:_Py_NewRef
Line
Count
Source
535
19.9M
{
536
19.9M
    Py_INCREF(obj);
537
19.9M
    return obj;
538
19.9M
}
enumobject.c:_Py_NewRef
Line
Count
Source
535
28
{
536
28
    Py_INCREF(obj);
537
28
    return obj;
538
28
}
genobject.c:_Py_NewRef
Line
Count
Source
535
49.0M
{
536
49.0M
    Py_INCREF(obj);
537
49.0M
    return obj;
538
49.0M
}
Unexecuted instantiation: fileobject.c:_Py_NewRef
frameobject.c:_Py_NewRef
Line
Count
Source
535
20.7M
{
536
20.7M
    Py_INCREF(obj);
537
20.7M
    return obj;
538
20.7M
}
funcobject.c:_Py_NewRef
Line
Count
Source
535
20.9M
{
536
20.9M
    Py_INCREF(obj);
537
20.9M
    return obj;
538
20.9M
}
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
3.09M
{
536
3.09M
    Py_INCREF(obj);
537
3.09M
    return obj;
538
3.09M
}
lazyimportobject.c:_Py_NewRef
Line
Count
Source
535
850
{
536
850
    Py_INCREF(obj);
537
850
    return obj;
538
850
}
odictobject.c:_Py_NewRef
Line
Count
Source
535
229k
{
536
229k
    Py_INCREF(obj);
537
229k
    return obj;
538
229k
}
methodobject.c:_Py_NewRef
Line
Count
Source
535
9.97M
{
536
9.97M
    Py_INCREF(obj);
537
9.97M
    return obj;
538
9.97M
}
Unexecuted instantiation: namespaceobject.c:_Py_NewRef
Unexecuted instantiation: _contextvars.c:_Py_NewRef
Python-ast.c:_Py_NewRef
Line
Count
Source
535
525k
{
536
525k
    Py_INCREF(obj);
537
525k
    return obj;
538
525k
}
Unexecuted instantiation: Python-tokenize.c:_Py_NewRef
Unexecuted instantiation: asdl.c:_Py_NewRef
assemble.c:_Py_NewRef
Line
Count
Source
535
20.4k
{
536
20.4k
    Py_INCREF(obj);
537
20.4k
    return obj;
538
20.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
107k
{
536
107k
    Py_INCREF(obj);
537
107k
    return obj;
538
107k
}
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.26G
{
542
1.26G
    Py_XINCREF(obj);
543
1.26G
    return obj;
544
1.26G
}
Unexecuted instantiation: bytesobject.c:_Py_XNewRef
Unexecuted instantiation: call.c:_Py_XNewRef
exceptions.c:_Py_XNewRef
Line
Count
Source
541
134M
{
542
134M
    Py_XINCREF(obj);
543
134M
    return obj;
544
134M
}
Unexecuted instantiation: genericaliasobject.c:_Py_XNewRef
Unexecuted instantiation: floatobject.c:_Py_XNewRef
listobject.c:_Py_XNewRef
Line
Count
Source
541
72.1M
{
542
72.1M
    Py_XINCREF(obj);
543
72.1M
    return obj;
544
72.1M
}
Unexecuted instantiation: longobject.c:_Py_XNewRef
dictobject.c:_Py_XNewRef
Line
Count
Source
541
368M
{
542
368M
    Py_XINCREF(obj);
543
368M
    return obj;
544
368M
}
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
sentinelobject.c:_Py_XNewRef
Line
Count
Source
541
54
{
542
54
    Py_XINCREF(obj);
543
54
    return obj;
544
54
}
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
266k
{
542
266k
    Py_XINCREF(obj);
543
266k
    return obj;
544
266k
}
typevarobject.c:_Py_XNewRef
Line
Count
Source
541
1.20k
{
542
1.20k
    Py_XINCREF(obj);
543
1.20k
    return obj;
544
1.20k
}
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.46M
{
542
1.46M
    Py_XINCREF(obj);
543
1.46M
    return obj;
544
1.46M
}
Unexecuted instantiation: _warnings.c:_Py_XNewRef
bltinmodule.c:_Py_XNewRef
Line
Count
Source
541
1.20k
{
542
1.20k
    Py_XINCREF(obj);
543
1.20k
    return obj;
544
1.20k
}
ceval.c:_Py_XNewRef
Line
Count
Source
541
89.3M
{
542
89.3M
    Py_XINCREF(obj);
543
89.3M
    return obj;
544
89.3M
}
Unexecuted instantiation: codecs.c:_Py_XNewRef
Unexecuted instantiation: codegen.c:_Py_XNewRef
compile.c:_Py_XNewRef
Line
Count
Source
541
7.35k
{
542
7.35k
    Py_XINCREF(obj);
543
7.35k
    return obj;
544
7.35k
}
context.c:_Py_XNewRef
Line
Count
Source
541
65
{
542
65
    Py_XINCREF(obj);
543
65
    return obj;
544
65
}
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
37.4k
{
542
37.4k
    Py_XINCREF(obj);
543
37.4k
    return obj;
544
37.4k
}
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.06M
{
542
1.06M
    Py_XINCREF(obj);
543
1.06M
    return obj;
544
1.06M
}
Unexecuted instantiation: pythonrun.c:_Py_XNewRef
Unexecuted instantiation: pytime.c:_Py_XNewRef
Unexecuted instantiation: qsbr.c:_Py_XNewRef
Unexecuted instantiation: bootstrap_hash.c:_Py_XNewRef
Unexecuted instantiation: specialize.c:_Py_XNewRef
Unexecuted instantiation: slots.c:_Py_XNewRef
Unexecuted instantiation: slots_generated.c:_Py_XNewRef
structmember.c:_Py_XNewRef
Line
Count
Source
541
7.32M
{
542
7.32M
    Py_XINCREF(obj);
543
7.32M
    return obj;
544
7.32M
}
Unexecuted instantiation: symtable.c:_Py_XNewRef
sysmodule.c:_Py_XNewRef
Line
Count
Source
541
242
{
542
242
    Py_XINCREF(obj);
543
242
    return obj;
544
242
}
Unexecuted instantiation: thread.c:_Py_XNewRef
traceback.c:_Py_XNewRef
Line
Count
Source
541
146M
{
542
146M
    Py_XINCREF(obj);
543
146M
    return obj;
544
146M
}
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: jit_unwind.c:_Py_XNewRef
Unexecuted instantiation: remote_debugging.c:_Py_XNewRef
Unexecuted instantiation: dynload_shlib.c:_Py_XNewRef
Unexecuted instantiation: config.c:_Py_XNewRef
Unexecuted instantiation: gcmodule.c:_Py_XNewRef
Unexecuted instantiation: _asynciomodule.c:_Py_XNewRef
Unexecuted instantiation: atexitmodule.c:_Py_XNewRef
Unexecuted instantiation: faulthandler.c:_Py_XNewRef
posixmodule.c:_Py_XNewRef
Line
Count
Source
541
108k
{
542
108k
    Py_XINCREF(obj);
543
108k
    return obj;
544
108k
}
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
24.3k
{
542
24.3k
    Py_XINCREF(obj);
543
24.3k
    return obj;
544
24.3k
}
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
144
{
542
144
    Py_XINCREF(obj);
543
144
    return obj;
544
144
}
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
34.5k
{
542
34.5k
    Py_XINCREF(obj);
543
34.5k
    return obj;
544
34.5k
}
_functoolsmodule.c:_Py_XNewRef
Line
Count
Source
541
40
{
542
40
    Py_XINCREF(obj);
543
40
    return obj;
544
40
}
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
180
{
542
180
    Py_XINCREF(obj);
543
180
    return obj;
544
180
}
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
113M
{
542
113M
    Py_XINCREF(obj);
543
113M
    return obj;
544
113M
}
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
23.3M
{
542
23.3M
    Py_XINCREF(obj);
543
23.3M
    return obj;
544
23.3M
}
Unexecuted instantiation: classobject.c:_Py_XNewRef
codeobject.c:_Py_XNewRef
Line
Count
Source
541
3.40k
{
542
3.40k
    Py_XINCREF(obj);
543
3.40k
    return obj;
544
3.40k
}
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
19.6M
{
542
19.6M
    Py_XINCREF(obj);
543
19.6M
    return obj;
544
19.6M
}
funcobject.c:_Py_XNewRef
Line
Count
Source
541
66.4k
{
542
66.4k
    Py_XINCREF(obj);
543
66.4k
    return obj;
544
66.4k
}
Unexecuted instantiation: interpolationobject.c:_Py_XNewRef
Unexecuted instantiation: iterobject.c:_Py_XNewRef
lazyimportobject.c:_Py_XNewRef
Line
Count
Source
541
850
{
542
850
    Py_XINCREF(obj);
543
850
    return obj;
544
850
}
Unexecuted instantiation: odictobject.c:_Py_XNewRef
methodobject.c:_Py_XNewRef
Line
Count
Source
541
284M
{
542
284M
    Py_XINCREF(obj);
543
284M
    return obj;
544
284M
}
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
107k
{
542
107k
    Py_XINCREF(obj);
543
107k
    return obj;
544
107k
}
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
6.68G
#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
551
1.17G
#  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