Coverage Report

Created: 2025-11-24 06:11

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/cpython/Include/refcount.h
Line
Count
Source
1
#ifndef _Py_REFCOUNT_H
2
#define _Py_REFCOUNT_H
3
#ifdef __cplusplus
4
extern "C" {
5
#endif
6
7
8
/*
9
Immortalization:
10
11
The following indicates the immortalization strategy depending on the amount
12
of available bits in the reference count field. All strategies are backwards
13
compatible but the specific reference count value or immortalization check
14
might change depending on the specializations for the underlying system.
15
16
Proper deallocation of immortal instances requires distinguishing between
17
statically allocated immortal instances vs those promoted by the runtime to be
18
immortal. The latter should be the only instances that require
19
cleanup during runtime finalization.
20
*/
21
22
#if SIZEOF_VOID_P > 4
23
/*
24
In 64+ bit systems, any object whose 32 bit reference count is >= 2**31
25
will be treated as immortal.
26
27
Using the lower 32 bits makes the value backwards compatible by allowing
28
C-Extensions without the updated checks in Py_INCREF and Py_DECREF to safely
29
increase and decrease the objects reference count.
30
31
In order to offer sufficient resilience to C extensions using the stable ABI
32
compiled against 3.11 or earlier, we set the initial value near the
33
middle of the range (2**31, 2**32). That way the refcount can be
34
off by ~1 billion without affecting immortality.
35
36
Reference count increases will use saturated arithmetic, taking advantage of
37
having all the lower 32 bits set, which will avoid the reference count to go
38
beyond the refcount limit. Immortality checks for reference count decreases will
39
be done by checking the bit sign flag in the lower 32 bits.
40
41
To ensure that once an object becomes immortal, it remains immortal, the threshold
42
for omitting increfs is much higher than for omitting decrefs. Consequently, once
43
the refcount for an object exceeds _Py_IMMORTAL_MINIMUM_REFCNT it will gradually
44
increase over time until it reaches _Py_IMMORTAL_INITIAL_REFCNT.
45
*/
46
15.7G
#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
47
234
#define _Py_IMMORTAL_MINIMUM_REFCNT (1ULL << 31)
48
271M
#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
49
271M
#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
50
51
#else
52
/*
53
In 32 bit systems, an object will be treated as immortal if its reference
54
count equals or exceeds _Py_IMMORTAL_MINIMUM_REFCNT (2**30).
55
56
Using the lower 30 bits makes the value backwards compatible by allowing
57
C-Extensions without the updated checks in Py_INCREF and Py_DECREF to safely
58
increase and decrease the objects reference count. The object would lose its
59
immortality, but the execution would still be correct.
60
61
Reference count increases and decreases will first go through an immortality
62
check by comparing the reference count field to the minimum immortality refcount.
63
*/
64
#define _Py_IMMORTAL_INITIAL_REFCNT ((Py_ssize_t)(5L << 28))
65
#define _Py_IMMORTAL_MINIMUM_REFCNT ((Py_ssize_t)(1L << 30))
66
#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT ((Py_ssize_t)(7L << 28))
67
#define _Py_STATIC_IMMORTAL_MINIMUM_REFCNT ((Py_ssize_t)(6L << 28))
68
#endif
69
70
// Py_GIL_DISABLED builds indicate immortal objects using `ob_ref_local`, which is
71
// always 32-bits.
72
#ifdef Py_GIL_DISABLED
73
#define _Py_IMMORTAL_REFCNT_LOCAL UINT32_MAX
74
#endif
75
76
77
#ifdef Py_GIL_DISABLED
78
   // The shared reference count uses the two least-significant bits to store
79
   // flags. The remaining bits are used to store the reference count.
80
#  define _Py_REF_SHARED_SHIFT        2
81
#  define _Py_REF_SHARED_FLAG_MASK    0x3
82
83
   // The shared flags are initialized to zero.
84
#  define _Py_REF_SHARED_INIT         0x0
85
#  define _Py_REF_MAYBE_WEAKREF       0x1
86
#  define _Py_REF_QUEUED              0x2
87
#  define _Py_REF_MERGED              0x3
88
89
   // Create a shared field from a refcnt and desired flags
90
#  define _Py_REF_SHARED(refcnt, flags) \
91
              (((refcnt) << _Py_REF_SHARED_SHIFT) + (flags))
92
#endif  // Py_GIL_DISABLED
93
94
95
// Py_REFCNT() implementation for the stable ABI
96
PyAPI_FUNC(Py_ssize_t) Py_REFCNT(PyObject *ob);
97
98
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030e0000
99
    // Stable ABI implements Py_REFCNT() as a function call
100
    // on limited C API version 3.14 and newer.
101
#else
102
1.12G
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
1.12G
    #if !defined(Py_GIL_DISABLED)
104
1.12G
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
1.12G
    }
bytesobject.c:_Py_REFCNT
Line
Count
Source
102
1.91M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
1.91M
    #if !defined(Py_GIL_DISABLED)
104
1.91M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
1.91M
    }
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
102
234
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
234
    #if !defined(Py_GIL_DISABLED)
104
234
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
234
    }
longobject.c:_Py_REFCNT
Line
Count
Source
102
118
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
118
    #if !defined(Py_GIL_DISABLED)
104
118
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
118
    }
dictobject.c:_Py_REFCNT
Line
Count
Source
102
650M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
650M
    #if !defined(Py_GIL_DISABLED)
104
650M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
650M
    }
Unexecuted instantiation: memoryobject.c:_Py_REFCNT
Unexecuted instantiation: moduleobject.c:_Py_REFCNT
object.c:_Py_REFCNT
Line
Count
Source
102
67.7M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
67.7M
    #if !defined(Py_GIL_DISABLED)
104
67.7M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
67.7M
    }
Unexecuted instantiation: obmalloc.c:_Py_REFCNT
Unexecuted instantiation: picklebufobject.c:_Py_REFCNT
Unexecuted instantiation: rangeobject.c:_Py_REFCNT
setobject.c:_Py_REFCNT
Line
Count
Source
102
2.56k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
2.56k
    #if !defined(Py_GIL_DISABLED)
104
2.56k
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
2.56k
    }
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
102
96.9k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
96.9k
    #if !defined(Py_GIL_DISABLED)
104
96.9k
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
96.9k
    }
typeobject.c:_Py_REFCNT
Line
Count
Source
102
78
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
78
    #if !defined(Py_GIL_DISABLED)
104
78
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
78
    }
Unexecuted instantiation: typevarobject.c:_Py_REFCNT
unicode_format.c:_Py_REFCNT
Line
Count
Source
102
8.88M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
8.88M
    #if !defined(Py_GIL_DISABLED)
104
8.88M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
8.88M
    }
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
102
75.9M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
75.9M
    #if !defined(Py_GIL_DISABLED)
104
75.9M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
75.9M
    }
Unexecuted instantiation: unionobject.c:_Py_REFCNT
weakrefobject.c:_Py_REFCNT
Line
Count
Source
102
49.7M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
49.7M
    #if !defined(Py_GIL_DISABLED)
104
49.7M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
49.7M
    }
Unexecuted instantiation: _warnings.c:_Py_REFCNT
bltinmodule.c:_Py_REFCNT
Line
Count
Source
102
25.5M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
25.5M
    #if !defined(Py_GIL_DISABLED)
104
25.5M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
25.5M
    }
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
102
46.3M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
46.3M
    #if !defined(Py_GIL_DISABLED)
104
46.3M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
46.3M
    }
Unexecuted instantiation: future.c:_Py_REFCNT
gc.c:_Py_REFCNT
Line
Count
Source
102
66.5M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
66.5M
    #if !defined(Py_GIL_DISABLED)
104
66.5M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
66.5M
    }
Unexecuted instantiation: gc_gil.c:_Py_REFCNT
Unexecuted instantiation: getargs.c:_Py_REFCNT
Unexecuted instantiation: ceval_gil.c:_Py_REFCNT
Unexecuted instantiation: hamt.c:_Py_REFCNT
Unexecuted instantiation: hashtable.c:_Py_REFCNT
import.c:_Py_REFCNT
Line
Count
Source
102
28
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
28
    #if !defined(Py_GIL_DISABLED)
104
28
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
28
    }
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
102
199k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
199k
    #if !defined(Py_GIL_DISABLED)
104
199k
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
199k
    }
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: symtable.c:_Py_REFCNT
Unexecuted instantiation: sysmodule.c:_Py_REFCNT
Unexecuted instantiation: thread.c:_Py_REFCNT
Unexecuted instantiation: traceback.c:_Py_REFCNT
Unexecuted instantiation: tracemalloc.c:_Py_REFCNT
Unexecuted instantiation: getopt.c:_Py_REFCNT
Unexecuted instantiation: pystrcmp.c:_Py_REFCNT
Unexecuted instantiation: pystrtod.c:_Py_REFCNT
Unexecuted instantiation: pystrhex.c:_Py_REFCNT
Unexecuted instantiation: dtoa.c:_Py_REFCNT
Unexecuted instantiation: fileutils.c:_Py_REFCNT
Unexecuted instantiation: suggestions.c:_Py_REFCNT
Unexecuted instantiation: perf_trampoline.c:_Py_REFCNT
Unexecuted instantiation: perf_jit_trampoline.c:_Py_REFCNT
Unexecuted instantiation: remote_debugging.c:_Py_REFCNT
Unexecuted instantiation: dynload_shlib.c:_Py_REFCNT
Unexecuted instantiation: config.c:_Py_REFCNT
Unexecuted instantiation: gcmodule.c:_Py_REFCNT
Unexecuted instantiation: _asynciomodule.c:_Py_REFCNT
Unexecuted instantiation: atexitmodule.c:_Py_REFCNT
Unexecuted instantiation: faulthandler.c:_Py_REFCNT
Unexecuted instantiation: posixmodule.c:_Py_REFCNT
Unexecuted instantiation: signalmodule.c:_Py_REFCNT
Unexecuted instantiation: _tracemalloc.c:_Py_REFCNT
Unexecuted instantiation: _suggestions.c:_Py_REFCNT
Unexecuted instantiation: _datetimemodule.c:_Py_REFCNT
Unexecuted instantiation: _codecsmodule.c:_Py_REFCNT
Unexecuted instantiation: _collectionsmodule.c:_Py_REFCNT
Unexecuted instantiation: errnomodule.c:_Py_REFCNT
Unexecuted instantiation: _iomodule.c:_Py_REFCNT
iobase.c:_Py_REFCNT
Line
Count
Source
102
45.1k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
45.1k
    #if !defined(Py_GIL_DISABLED)
104
45.1k
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
45.1k
    }
Unexecuted instantiation: fileio.c:_Py_REFCNT
bytesio.c:_Py_REFCNT
Line
Count
Source
102
1.22k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
1.22k
    #if !defined(Py_GIL_DISABLED)
104
1.22k
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
1.22k
    }
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
102
405
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
405
    #if !defined(Py_GIL_DISABLED)
104
405
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
405
    }
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
102
108k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
108k
    #if !defined(Py_GIL_DISABLED)
104
108k
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
108k
    }
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
102
230k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
230k
    #if !defined(Py_GIL_DISABLED)
104
230k
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
230k
    }
Unexecuted instantiation: complexobject.c:_Py_REFCNT
Unexecuted instantiation: descrobject.c:_Py_REFCNT
enumobject.c:_Py_REFCNT
Line
Count
Source
102
104M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
104M
    #if !defined(Py_GIL_DISABLED)
104
104M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
104M
    }
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
102
27.8M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
27.8M
    #if !defined(Py_GIL_DISABLED)
104
27.8M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
27.8M
    }
Unexecuted instantiation: interpolationobject.c:_Py_REFCNT
Unexecuted instantiation: iterobject.c:_Py_REFCNT
Unexecuted instantiation: odictobject.c:_Py_REFCNT
Unexecuted instantiation: methodobject.c:_Py_REFCNT
Unexecuted instantiation: namespaceobject.c:_Py_REFCNT
Unexecuted instantiation: _contextvars.c:_Py_REFCNT
Unexecuted instantiation: 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: structmember.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
115
    #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
116
765M
    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
117
    #else
118
    #  define Py_REFCNT(ob) _Py_REFCNT(ob)
119
    #endif
120
#endif
121
122
#ifndef _Py_OPAQUE_PYOBJECT
123
static inline Py_ALWAYS_INLINE int _Py_IsImmortal(PyObject *op)
124
26.9G
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
26.9G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
26.9G
}
bytesobject.c:_Py_IsImmortal
Line
Count
Source
124
5.66M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
5.66M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
5.66M
}
call.c:_Py_IsImmortal
Line
Count
Source
124
184M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
184M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
184M
}
exceptions.c:_Py_IsImmortal
Line
Count
Source
124
182M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
182M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
182M
}
genericaliasobject.c:_Py_IsImmortal
Line
Count
Source
124
202
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
202
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
202
}
floatobject.c:_Py_IsImmortal
Line
Count
Source
124
21.3k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
21.3k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
21.3k
}
listobject.c:_Py_IsImmortal
Line
Count
Source
124
1.68G
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
1.68G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
1.68G
}
longobject.c:_Py_IsImmortal
Line
Count
Source
124
39.7M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
39.7M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
39.7M
}
dictobject.c:_Py_IsImmortal
Line
Count
Source
124
1.95G
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
1.95G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
1.95G
}
memoryobject.c:_Py_IsImmortal
Line
Count
Source
124
1.37M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
1.37M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
1.37M
}
moduleobject.c:_Py_IsImmortal
Line
Count
Source
124
2.18M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
2.18M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
2.18M
}
object.c:_Py_IsImmortal
Line
Count
Source
124
910M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
910M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
910M
}
Unexecuted instantiation: obmalloc.c:_Py_IsImmortal
Unexecuted instantiation: picklebufobject.c:_Py_IsImmortal
rangeobject.c:_Py_IsImmortal
Line
Count
Source
124
56.6M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
56.6M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
56.6M
}
setobject.c:_Py_IsImmortal
Line
Count
Source
124
13.5M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
13.5M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
13.5M
}
sliceobject.c:_Py_IsImmortal
Line
Count
Source
124
164M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
164M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
164M
}
structseq.c:_Py_IsImmortal
Line
Count
Source
124
6.39M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
6.39M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
6.39M
}
templateobject.c:_Py_IsImmortal
Line
Count
Source
124
4
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
4
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
4
}
tupleobject.c:_Py_IsImmortal
Line
Count
Source
124
5.58G
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
5.58G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
5.58G
}
typeobject.c:_Py_IsImmortal
Line
Count
Source
124
1.20G
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
1.20G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
1.20G
}
typevarobject.c:_Py_IsImmortal
Line
Count
Source
124
300
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
300
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
300
}
unicode_format.c:_Py_IsImmortal
Line
Count
Source
124
73.2M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
73.2M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
73.2M
}
unicode_formatter.c:_Py_IsImmortal
Line
Count
Source
124
256
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
256
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
256
}
unicode_writer.c:_Py_IsImmortal
Line
Count
Source
124
15.4M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
15.4M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
15.4M
}
Unexecuted instantiation: unicodectype.c:_Py_IsImmortal
unicodeobject.c:_Py_IsImmortal
Line
Count
Source
124
204M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
204M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
204M
}
unionobject.c:_Py_IsImmortal
Line
Count
Source
124
1.57k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
1.57k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
1.57k
}
weakrefobject.c:_Py_IsImmortal
Line
Count
Source
124
84.8k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
84.8k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
84.8k
}
_warnings.c:_Py_IsImmortal
Line
Count
Source
124
26.8M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
26.8M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
26.8M
}
bltinmodule.c:_Py_IsImmortal
Line
Count
Source
124
1.43G
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
1.43G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
1.43G
}
ceval.c:_Py_IsImmortal
Line
Count
Source
124
10.0G
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
10.0G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
10.0G
}
codecs.c:_Py_IsImmortal
Line
Count
Source
124
6.08M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
6.08M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
6.08M
}
codegen.c:_Py_IsImmortal
Line
Count
Source
124
193k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
193k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
193k
}
compile.c:_Py_IsImmortal
Line
Count
Source
124
741k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
741k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
741k
}
context.c:_Py_IsImmortal
Line
Count
Source
124
56
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
56
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
56
}
errors.c:_Py_IsImmortal
Line
Count
Source
124
101M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
101M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
101M
}
flowgraph.c:_Py_IsImmortal
Line
Count
Source
124
84.8k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
84.8k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
84.8k
}
frame.c:_Py_IsImmortal
Line
Count
Source
124
88.5M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
88.5M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
88.5M
}
Unexecuted instantiation: future.c:_Py_IsImmortal
gc.c:_Py_IsImmortal
Line
Count
Source
124
538M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
538M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
538M
}
Unexecuted instantiation: gc_gil.c:_Py_IsImmortal
getargs.c:_Py_IsImmortal
Line
Count
Source
124
4.69M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
4.69M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
4.69M
}
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
124
9.34M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
9.34M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
9.34M
}
importdl.c:_Py_IsImmortal
Line
Count
Source
124
2.11k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
2.11k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
2.11k
}
initconfig.c:_Py_IsImmortal
Line
Count
Source
124
3.86k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
3.86k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
3.86k
}
instrumentation.c:_Py_IsImmortal
Line
Count
Source
124
672
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
672
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
672
}
instruction_sequence.c:_Py_IsImmortal
Line
Count
Source
124
1
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
1
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
1
}
intrinsics.c:_Py_IsImmortal
Line
Count
Source
124
51.9k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
51.9k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
51.9k
}
Unexecuted instantiation: legacy_tracing.c:_Py_IsImmortal
Unexecuted instantiation: lock.c:_Py_IsImmortal
marshal.c:_Py_IsImmortal
Line
Count
Source
124
1.58M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
1.58M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
1.58M
}
modsupport.c:_Py_IsImmortal
Line
Count
Source
124
29.3k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
29.3k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
29.3k
}
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
124
4.40M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
4.40M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
4.40M
}
Unexecuted instantiation: pyctype.c:_Py_IsImmortal
Unexecuted instantiation: pyhash.c:_Py_IsImmortal
pylifecycle.c:_Py_IsImmortal
Line
Count
Source
124
1.00k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
1.00k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
1.00k
}
Unexecuted instantiation: pymath.c:_Py_IsImmortal
Unexecuted instantiation: pystate.c:_Py_IsImmortal
pythonrun.c:_Py_IsImmortal
Line
Count
Source
124
655
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
655
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
655
}
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
124
1.88M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
1.88M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
1.88M
}
symtable.c:_Py_IsImmortal
Line
Count
Source
124
1.00M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
1.00M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
1.00M
}
sysmodule.c:_Py_IsImmortal
Line
Count
Source
124
3.15M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
3.15M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
3.15M
}
Unexecuted instantiation: thread.c:_Py_IsImmortal
traceback.c:_Py_IsImmortal
Line
Count
Source
124
144M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
144M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
144M
}
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
124
10.2k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
10.2k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
10.2k
}
Unexecuted instantiation: suggestions.c:_Py_IsImmortal
Unexecuted instantiation: perf_trampoline.c:_Py_IsImmortal
Unexecuted instantiation: perf_jit_trampoline.c:_Py_IsImmortal
Unexecuted instantiation: remote_debugging.c:_Py_IsImmortal
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
124
2
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
2
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
2
}
Unexecuted instantiation: faulthandler.c:_Py_IsImmortal
posixmodule.c:_Py_IsImmortal
Line
Count
Source
124
3.36M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
3.36M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
3.36M
}
signalmodule.c:_Py_IsImmortal
Line
Count
Source
124
56
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
56
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
56
}
Unexecuted instantiation: _tracemalloc.c:_Py_IsImmortal
Unexecuted instantiation: _suggestions.c:_Py_IsImmortal
_datetimemodule.c:_Py_IsImmortal
Line
Count
Source
124
551
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
551
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
551
}
Unexecuted instantiation: _codecsmodule.c:_Py_IsImmortal
_collectionsmodule.c:_Py_IsImmortal
Line
Count
Source
124
117k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
117k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
117k
}
Unexecuted instantiation: errnomodule.c:_Py_IsImmortal
_iomodule.c:_Py_IsImmortal
Line
Count
Source
124
107k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
107k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
107k
}
iobase.c:_Py_IsImmortal
Line
Count
Source
124
250k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
250k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
250k
}
fileio.c:_Py_IsImmortal
Line
Count
Source
124
23.3k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
23.3k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
23.3k
}
bytesio.c:_Py_IsImmortal
Line
Count
Source
124
157k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
157k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
157k
}
bufferedio.c:_Py_IsImmortal
Line
Count
Source
124
5.44M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
5.44M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
5.44M
}
textio.c:_Py_IsImmortal
Line
Count
Source
124
695k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
695k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
695k
}
stringio.c:_Py_IsImmortal
Line
Count
Source
124
317k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
317k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
317k
}
itertoolsmodule.c:_Py_IsImmortal
Line
Count
Source
124
78.5k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
78.5k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
78.5k
}
sre.c:_Py_IsImmortal
Line
Count
Source
124
484M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
484M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
484M
}
Unexecuted instantiation: _sysconfig.c:_Py_IsImmortal
_threadmodule.c:_Py_IsImmortal
Line
Count
Source
124
35.9k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
35.9k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
35.9k
}
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
124
96.5k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
96.5k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
96.5k
}
_functoolsmodule.c:_Py_IsImmortal
Line
Count
Source
124
428k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
428k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
428k
}
Unexecuted instantiation: _localemodule.c:_Py_IsImmortal
Unexecuted instantiation: _opcode.c:_Py_IsImmortal
_operator.c:_Py_IsImmortal
Line
Count
Source
124
617k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
617k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
617k
}
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
124
924
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
924
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
924
}
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
124
21.8k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
21.8k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
21.8k
}
Unexecuted instantiation: myreadline.c:_Py_IsImmortal
abstract.c:_Py_IsImmortal
Line
Count
Source
124
619M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
619M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
619M
}
Unexecuted instantiation: boolobject.c:_Py_IsImmortal
Unexecuted instantiation: bytes_methods.c:_Py_IsImmortal
bytearrayobject.c:_Py_IsImmortal
Line
Count
Source
124
2.98M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
2.98M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
2.98M
}
capsule.c:_Py_IsImmortal
Line
Count
Source
124
10
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
10
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
10
}
cellobject.c:_Py_IsImmortal
Line
Count
Source
124
434k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
434k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
434k
}
classobject.c:_Py_IsImmortal
Line
Count
Source
124
79.5M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
79.5M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
79.5M
}
codeobject.c:_Py_IsImmortal
Line
Count
Source
124
1.30M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
1.30M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
1.30M
}
Unexecuted instantiation: complexobject.c:_Py_IsImmortal
descrobject.c:_Py_IsImmortal
Line
Count
Source
124
91.9M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
91.9M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
91.9M
}
enumobject.c:_Py_IsImmortal
Line
Count
Source
124
271M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
271M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
271M
}
genobject.c:_Py_IsImmortal
Line
Count
Source
124
145M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
145M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
145M
}
fileobject.c:_Py_IsImmortal
Line
Count
Source
124
207k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
207k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
207k
}
frameobject.c:_Py_IsImmortal
Line
Count
Source
124
31.0M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
31.0M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
31.0M
}
funcobject.c:_Py_IsImmortal
Line
Count
Source
124
153M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
153M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
153M
}
interpolationobject.c:_Py_IsImmortal
Line
Count
Source
124
28
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
28
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
28
}
iterobject.c:_Py_IsImmortal
Line
Count
Source
124
2.05M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
2.05M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
2.05M
}
odictobject.c:_Py_IsImmortal
Line
Count
Source
124
768
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
768
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
768
}
methodobject.c:_Py_IsImmortal
Line
Count
Source
124
334M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
334M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
334M
}
namespaceobject.c:_Py_IsImmortal
Line
Count
Source
124
28
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
28
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
28
}
Unexecuted instantiation: _contextvars.c:_Py_IsImmortal
Python-ast.c:_Py_IsImmortal
Line
Count
Source
124
2.72M
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
2.72M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
2.72M
}
Unexecuted instantiation: Python-tokenize.c:_Py_IsImmortal
Unexecuted instantiation: asdl.c:_Py_IsImmortal
assemble.c:_Py_IsImmortal
Line
Count
Source
124
59.6k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
59.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
59.6k
}
Unexecuted instantiation: ast.c:_Py_IsImmortal
ast_preprocess.c:_Py_IsImmortal
Line
Count
Source
124
3
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
3
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
3
}
ast_unparse.c:_Py_IsImmortal
Line
Count
Source
124
8
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
8
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
8
}
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
structmember.c:_Py_IsImmortal
Line
Count
Source
124
1.68k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
1.68k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
1.68k
}
pegen.c:_Py_IsImmortal
Line
Count
Source
124
129k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
129k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
129k
}
pegen_errors.c:_Py_IsImmortal
Line
Count
Source
124
39.9k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
39.9k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
39.9k
}
Unexecuted instantiation: parser.c:_Py_IsImmortal
Unexecuted instantiation: buffer.c:_Py_IsImmortal
lexer.c:_Py_IsImmortal
Line
Count
Source
124
12.3k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
12.3k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
12.3k
}
state.c:_Py_IsImmortal
Line
Count
Source
124
21.3k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
21.3k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
21.3k
}
Unexecuted instantiation: readline_tokenizer.c:_Py_IsImmortal
Unexecuted instantiation: string_tokenizer.c:_Py_IsImmortal
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
124
39.3k
{
125
#if defined(Py_GIL_DISABLED)
126
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
127
            _Py_IMMORTAL_REFCNT_LOCAL);
128
#elif SIZEOF_VOID_P > 4
129
39.3k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
39.3k
}
134
29.0G
#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
135
136
137
static inline Py_ALWAYS_INLINE int _Py_IsStaticImmortal(PyObject *op)
138
0
{
139
0
#if defined(Py_GIL_DISABLED) || SIZEOF_VOID_P > 4
140
0
    return (op->ob_flags & _Py_STATICALLY_ALLOCATED_FLAG) != 0;
141
0
#else
142
0
    return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT;
143
0
#endif
144
0
}
Unexecuted instantiation: bytesobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: call.c:_Py_IsStaticImmortal
Unexecuted instantiation: exceptions.c:_Py_IsStaticImmortal
Unexecuted instantiation: genericaliasobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: floatobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: listobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: longobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: dictobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: memoryobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: moduleobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: object.c:_Py_IsStaticImmortal
Unexecuted instantiation: obmalloc.c:_Py_IsStaticImmortal
Unexecuted instantiation: picklebufobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: rangeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: setobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: sliceobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: structseq.c:_Py_IsStaticImmortal
Unexecuted instantiation: templateobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: tupleobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: typeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: typevarobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicode_format.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicode_formatter.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicode_writer.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicodectype.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicodeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: unionobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: weakrefobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: _warnings.c:_Py_IsStaticImmortal
Unexecuted instantiation: bltinmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: ceval.c:_Py_IsStaticImmortal
Unexecuted instantiation: codecs.c:_Py_IsStaticImmortal
Unexecuted instantiation: codegen.c:_Py_IsStaticImmortal
Unexecuted instantiation: compile.c:_Py_IsStaticImmortal
Unexecuted instantiation: context.c:_Py_IsStaticImmortal
Unexecuted instantiation: errors.c:_Py_IsStaticImmortal
Unexecuted instantiation: flowgraph.c:_Py_IsStaticImmortal
Unexecuted instantiation: frame.c:_Py_IsStaticImmortal
Unexecuted instantiation: future.c:_Py_IsStaticImmortal
Unexecuted instantiation: gc.c:_Py_IsStaticImmortal
Unexecuted instantiation: gc_gil.c:_Py_IsStaticImmortal
Unexecuted instantiation: getargs.c:_Py_IsStaticImmortal
Unexecuted instantiation: ceval_gil.c:_Py_IsStaticImmortal
Unexecuted instantiation: hamt.c:_Py_IsStaticImmortal
Unexecuted instantiation: hashtable.c:_Py_IsStaticImmortal
Unexecuted instantiation: import.c:_Py_IsStaticImmortal
Unexecuted instantiation: importdl.c:_Py_IsStaticImmortal
Unexecuted instantiation: initconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: instrumentation.c:_Py_IsStaticImmortal
Unexecuted instantiation: instruction_sequence.c:_Py_IsStaticImmortal
Unexecuted instantiation: intrinsics.c:_Py_IsStaticImmortal
Unexecuted instantiation: legacy_tracing.c:_Py_IsStaticImmortal
Unexecuted instantiation: lock.c:_Py_IsStaticImmortal
Unexecuted instantiation: marshal.c:_Py_IsStaticImmortal
Unexecuted instantiation: modsupport.c:_Py_IsStaticImmortal
Unexecuted instantiation: mysnprintf.c:_Py_IsStaticImmortal
Unexecuted instantiation: parking_lot.c:_Py_IsStaticImmortal
Unexecuted instantiation: preconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: pyarena.c:_Py_IsStaticImmortal
Unexecuted instantiation: pyctype.c:_Py_IsStaticImmortal
Unexecuted instantiation: pyhash.c:_Py_IsStaticImmortal
Unexecuted instantiation: pylifecycle.c:_Py_IsStaticImmortal
Unexecuted instantiation: pymath.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystate.c:_Py_IsStaticImmortal
Unexecuted instantiation: pythonrun.c:_Py_IsStaticImmortal
Unexecuted instantiation: pytime.c:_Py_IsStaticImmortal
Unexecuted instantiation: qsbr.c:_Py_IsStaticImmortal
Unexecuted instantiation: bootstrap_hash.c:_Py_IsStaticImmortal
Unexecuted instantiation: specialize.c:_Py_IsStaticImmortal
Unexecuted instantiation: symtable.c:_Py_IsStaticImmortal
Unexecuted instantiation: sysmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: thread.c:_Py_IsStaticImmortal
Unexecuted instantiation: traceback.c:_Py_IsStaticImmortal
Unexecuted instantiation: tracemalloc.c:_Py_IsStaticImmortal
Unexecuted instantiation: getopt.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystrcmp.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystrtod.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystrhex.c:_Py_IsStaticImmortal
Unexecuted instantiation: dtoa.c:_Py_IsStaticImmortal
Unexecuted instantiation: fileutils.c:_Py_IsStaticImmortal
Unexecuted instantiation: suggestions.c:_Py_IsStaticImmortal
Unexecuted instantiation: perf_trampoline.c:_Py_IsStaticImmortal
Unexecuted instantiation: perf_jit_trampoline.c:_Py_IsStaticImmortal
Unexecuted instantiation: remote_debugging.c:_Py_IsStaticImmortal
Unexecuted instantiation: dynload_shlib.c:_Py_IsStaticImmortal
Unexecuted instantiation: config.c:_Py_IsStaticImmortal
Unexecuted instantiation: gcmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _asynciomodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: atexitmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: faulthandler.c:_Py_IsStaticImmortal
Unexecuted instantiation: posixmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: signalmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _tracemalloc.c:_Py_IsStaticImmortal
Unexecuted instantiation: _suggestions.c:_Py_IsStaticImmortal
Unexecuted instantiation: _datetimemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _codecsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _collectionsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: errnomodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _iomodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: iobase.c:_Py_IsStaticImmortal
Unexecuted instantiation: fileio.c:_Py_IsStaticImmortal
Unexecuted instantiation: bytesio.c:_Py_IsStaticImmortal
Unexecuted instantiation: bufferedio.c:_Py_IsStaticImmortal
Unexecuted instantiation: textio.c:_Py_IsStaticImmortal
Unexecuted instantiation: stringio.c:_Py_IsStaticImmortal
Unexecuted instantiation: itertoolsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: sre.c:_Py_IsStaticImmortal
Unexecuted instantiation: _sysconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: _threadmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: timemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _typesmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _typingmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _weakref.c:_Py_IsStaticImmortal
Unexecuted instantiation: _abc.c:_Py_IsStaticImmortal
Unexecuted instantiation: _functoolsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _localemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _opcode.c:_Py_IsStaticImmortal
Unexecuted instantiation: _operator.c:_Py_IsStaticImmortal
Unexecuted instantiation: _stat.c:_Py_IsStaticImmortal
Unexecuted instantiation: symtablemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: pwdmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: getpath.c:_Py_IsStaticImmortal
Unexecuted instantiation: frozen.c:_Py_IsStaticImmortal
Unexecuted instantiation: getbuildinfo.c:_Py_IsStaticImmortal
Unexecuted instantiation: peg_api.c:_Py_IsStaticImmortal
Unexecuted instantiation: file_tokenizer.c:_Py_IsStaticImmortal
Unexecuted instantiation: helpers.c:_Py_IsStaticImmortal
Unexecuted instantiation: myreadline.c:_Py_IsStaticImmortal
Unexecuted instantiation: abstract.c:_Py_IsStaticImmortal
Unexecuted instantiation: boolobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: bytes_methods.c:_Py_IsStaticImmortal
Unexecuted instantiation: bytearrayobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: capsule.c:_Py_IsStaticImmortal
Unexecuted instantiation: cellobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: classobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: codeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: complexobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: descrobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: enumobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: genobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: fileobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: frameobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: funcobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: interpolationobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: iterobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: 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: structmember.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
145
#define _Py_IsStaticImmortal(op) _Py_IsStaticImmortal(_PyObject_CAST(op))
146
#endif // !defined(_Py_OPAQUE_PYOBJECT)
147
148
// Py_SET_REFCNT() implementation for stable ABI
149
PyAPI_FUNC(void) _Py_SetRefcnt(PyObject *ob, Py_ssize_t refcnt);
150
151
721M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
152
721M
    assert(refcnt >= 0);
153
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
154
    // Stable ABI implements Py_SET_REFCNT() as a function call
155
    // on limited C API version 3.13 and newer.
156
    _Py_SetRefcnt(ob, refcnt);
157
#else
158
    // This immortal check is for code that is unaware of immortal objects.
159
    // The runtime tracks these objects and we should avoid as much
160
    // as possible having extensions inadvertently change the refcnt
161
    // of an immortalized object.
162
721M
    if (_Py_IsImmortal(ob)) {
163
795
        return;
164
795
    }
165
721M
#ifndef Py_GIL_DISABLED
166
721M
#if SIZEOF_VOID_P > 4
167
721M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
168
#else
169
    ob->ob_refcnt = refcnt;
170
#endif
171
#else
172
    if (_Py_IsOwnedByCurrentThread(ob)) {
173
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
174
            // On overflow, make the object immortal
175
            ob->ob_tid = _Py_UNOWNED_TID;
176
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
177
            ob->ob_ref_shared = 0;
178
        }
179
        else {
180
            // Set local refcount to desired refcount and shared refcount
181
            // to zero, but preserve the shared refcount flags.
182
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
183
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
184
        }
185
    }
186
    else {
187
        // Set local refcount to zero and shared refcount to desired refcount.
188
        // Mark the object as merged.
189
        ob->ob_tid = _Py_UNOWNED_TID;
190
        ob->ob_ref_local = 0;
191
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
192
    }
193
#endif  // Py_GIL_DISABLED
194
721M
#endif  // Py_LIMITED_API+0 < 0x030d0000
195
721M
}
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
151
647M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
152
647M
    assert(refcnt >= 0);
153
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
154
    // Stable ABI implements Py_SET_REFCNT() as a function call
155
    // on limited C API version 3.13 and newer.
156
    _Py_SetRefcnt(ob, refcnt);
157
#else
158
    // This immortal check is for code that is unaware of immortal objects.
159
    // The runtime tracks these objects and we should avoid as much
160
    // as possible having extensions inadvertently change the refcnt
161
    // of an immortalized object.
162
647M
    if (_Py_IsImmortal(ob)) {
163
0
        return;
164
0
    }
165
647M
#ifndef Py_GIL_DISABLED
166
647M
#if SIZEOF_VOID_P > 4
167
647M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
168
#else
169
    ob->ob_refcnt = refcnt;
170
#endif
171
#else
172
    if (_Py_IsOwnedByCurrentThread(ob)) {
173
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
174
            // On overflow, make the object immortal
175
            ob->ob_tid = _Py_UNOWNED_TID;
176
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
177
            ob->ob_ref_shared = 0;
178
        }
179
        else {
180
            // Set local refcount to desired refcount and shared refcount
181
            // to zero, but preserve the shared refcount flags.
182
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
183
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
184
        }
185
    }
186
    else {
187
        // Set local refcount to zero and shared refcount to desired refcount.
188
        // Mark the object as merged.
189
        ob->ob_tid = _Py_UNOWNED_TID;
190
        ob->ob_ref_local = 0;
191
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
192
    }
193
#endif  // Py_GIL_DISABLED
194
647M
#endif  // Py_LIMITED_API+0 < 0x030d0000
195
647M
}
Unexecuted instantiation: memoryobject.c:Py_SET_REFCNT
moduleobject.c:Py_SET_REFCNT
Line
Count
Source
151
795
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
152
795
    assert(refcnt >= 0);
153
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
154
    // Stable ABI implements Py_SET_REFCNT() as a function call
155
    // on limited C API version 3.13 and newer.
156
    _Py_SetRefcnt(ob, refcnt);
157
#else
158
    // This immortal check is for code that is unaware of immortal objects.
159
    // The runtime tracks these objects and we should avoid as much
160
    // as possible having extensions inadvertently change the refcnt
161
    // of an immortalized object.
162
795
    if (_Py_IsImmortal(ob)) {
163
795
        return;
164
795
    }
165
0
#ifndef Py_GIL_DISABLED
166
0
#if SIZEOF_VOID_P > 4
167
0
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
168
#else
169
    ob->ob_refcnt = refcnt;
170
#endif
171
#else
172
    if (_Py_IsOwnedByCurrentThread(ob)) {
173
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
174
            // On overflow, make the object immortal
175
            ob->ob_tid = _Py_UNOWNED_TID;
176
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
177
            ob->ob_ref_shared = 0;
178
        }
179
        else {
180
            // Set local refcount to desired refcount and shared refcount
181
            // to zero, but preserve the shared refcount flags.
182
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
183
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
184
        }
185
    }
186
    else {
187
        // Set local refcount to zero and shared refcount to desired refcount.
188
        // Mark the object as merged.
189
        ob->ob_tid = _Py_UNOWNED_TID;
190
        ob->ob_ref_local = 0;
191
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
192
    }
193
#endif  // Py_GIL_DISABLED
194
0
#endif  // Py_LIMITED_API+0 < 0x030d0000
195
0
}
object.c:Py_SET_REFCNT
Line
Count
Source
151
45.1M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
152
45.1M
    assert(refcnt >= 0);
153
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
154
    // Stable ABI implements Py_SET_REFCNT() as a function call
155
    // on limited C API version 3.13 and newer.
156
    _Py_SetRefcnt(ob, refcnt);
157
#else
158
    // This immortal check is for code that is unaware of immortal objects.
159
    // The runtime tracks these objects and we should avoid as much
160
    // as possible having extensions inadvertently change the refcnt
161
    // of an immortalized object.
162
45.1M
    if (_Py_IsImmortal(ob)) {
163
0
        return;
164
0
    }
165
45.1M
#ifndef Py_GIL_DISABLED
166
45.1M
#if SIZEOF_VOID_P > 4
167
45.1M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
168
#else
169
    ob->ob_refcnt = refcnt;
170
#endif
171
#else
172
    if (_Py_IsOwnedByCurrentThread(ob)) {
173
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
174
            // On overflow, make the object immortal
175
            ob->ob_tid = _Py_UNOWNED_TID;
176
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
177
            ob->ob_ref_shared = 0;
178
        }
179
        else {
180
            // Set local refcount to desired refcount and shared refcount
181
            // to zero, but preserve the shared refcount flags.
182
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
183
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
184
        }
185
    }
186
    else {
187
        // Set local refcount to zero and shared refcount to desired refcount.
188
        // Mark the object as merged.
189
        ob->ob_tid = _Py_UNOWNED_TID;
190
        ob->ob_ref_local = 0;
191
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
192
    }
193
#endif  // Py_GIL_DISABLED
194
45.1M
#endif  // Py_LIMITED_API+0 < 0x030d0000
195
45.1M
}
Unexecuted instantiation: obmalloc.c:Py_SET_REFCNT
Unexecuted instantiation: picklebufobject.c:Py_SET_REFCNT
Unexecuted instantiation: rangeobject.c:Py_SET_REFCNT
Unexecuted instantiation: setobject.c:Py_SET_REFCNT
Unexecuted instantiation: sliceobject.c:Py_SET_REFCNT
Unexecuted instantiation: structseq.c:Py_SET_REFCNT
Unexecuted instantiation: templateobject.c:Py_SET_REFCNT
Unexecuted instantiation: tupleobject.c:Py_SET_REFCNT
Unexecuted instantiation: typeobject.c:Py_SET_REFCNT
Unexecuted instantiation: typevarobject.c:Py_SET_REFCNT
Unexecuted instantiation: unicode_format.c:Py_SET_REFCNT
Unexecuted instantiation: unicode_formatter.c:Py_SET_REFCNT
Unexecuted instantiation: unicode_writer.c:Py_SET_REFCNT
Unexecuted instantiation: unicodectype.c:Py_SET_REFCNT
unicodeobject.c:Py_SET_REFCNT
Line
Count
Source
151
953k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
152
953k
    assert(refcnt >= 0);
153
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
154
    // Stable ABI implements Py_SET_REFCNT() as a function call
155
    // on limited C API version 3.13 and newer.
156
    _Py_SetRefcnt(ob, refcnt);
157
#else
158
    // This immortal check is for code that is unaware of immortal objects.
159
    // The runtime tracks these objects and we should avoid as much
160
    // as possible having extensions inadvertently change the refcnt
161
    // of an immortalized object.
162
953k
    if (_Py_IsImmortal(ob)) {
163
0
        return;
164
0
    }
165
953k
#ifndef Py_GIL_DISABLED
166
953k
#if SIZEOF_VOID_P > 4
167
953k
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
168
#else
169
    ob->ob_refcnt = refcnt;
170
#endif
171
#else
172
    if (_Py_IsOwnedByCurrentThread(ob)) {
173
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
174
            // On overflow, make the object immortal
175
            ob->ob_tid = _Py_UNOWNED_TID;
176
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
177
            ob->ob_ref_shared = 0;
178
        }
179
        else {
180
            // Set local refcount to desired refcount and shared refcount
181
            // to zero, but preserve the shared refcount flags.
182
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
183
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
184
        }
185
    }
186
    else {
187
        // Set local refcount to zero and shared refcount to desired refcount.
188
        // Mark the object as merged.
189
        ob->ob_tid = _Py_UNOWNED_TID;
190
        ob->ob_ref_local = 0;
191
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
192
    }
193
#endif  // Py_GIL_DISABLED
194
953k
#endif  // Py_LIMITED_API+0 < 0x030d0000
195
953k
}
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: symtable.c:Py_SET_REFCNT
Unexecuted instantiation: sysmodule.c:Py_SET_REFCNT
Unexecuted instantiation: thread.c:Py_SET_REFCNT
Unexecuted instantiation: traceback.c:Py_SET_REFCNT
Unexecuted instantiation: tracemalloc.c:Py_SET_REFCNT
Unexecuted instantiation: getopt.c:Py_SET_REFCNT
Unexecuted instantiation: pystrcmp.c:Py_SET_REFCNT
Unexecuted instantiation: pystrtod.c:Py_SET_REFCNT
Unexecuted instantiation: pystrhex.c:Py_SET_REFCNT
Unexecuted instantiation: dtoa.c:Py_SET_REFCNT
Unexecuted instantiation: fileutils.c:Py_SET_REFCNT
Unexecuted instantiation: suggestions.c:Py_SET_REFCNT
Unexecuted instantiation: perf_trampoline.c:Py_SET_REFCNT
Unexecuted instantiation: perf_jit_trampoline.c:Py_SET_REFCNT
Unexecuted instantiation: remote_debugging.c:Py_SET_REFCNT
Unexecuted instantiation: dynload_shlib.c:Py_SET_REFCNT
Unexecuted instantiation: config.c:Py_SET_REFCNT
Unexecuted instantiation: gcmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _asynciomodule.c:Py_SET_REFCNT
Unexecuted instantiation: atexitmodule.c:Py_SET_REFCNT
Unexecuted instantiation: faulthandler.c:Py_SET_REFCNT
Unexecuted instantiation: posixmodule.c:Py_SET_REFCNT
Unexecuted instantiation: signalmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _tracemalloc.c:Py_SET_REFCNT
Unexecuted instantiation: _suggestions.c:Py_SET_REFCNT
Unexecuted instantiation: _datetimemodule.c:Py_SET_REFCNT
Unexecuted instantiation: _codecsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _collectionsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: errnomodule.c:Py_SET_REFCNT
Unexecuted instantiation: _iomodule.c:Py_SET_REFCNT
Unexecuted instantiation: iobase.c:Py_SET_REFCNT
Unexecuted instantiation: fileio.c:Py_SET_REFCNT
Unexecuted instantiation: bytesio.c:Py_SET_REFCNT
Unexecuted instantiation: bufferedio.c:Py_SET_REFCNT
Unexecuted instantiation: textio.c:Py_SET_REFCNT
Unexecuted instantiation: stringio.c:Py_SET_REFCNT
Unexecuted instantiation: itertoolsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: sre.c:Py_SET_REFCNT
Unexecuted instantiation: _sysconfig.c:Py_SET_REFCNT
Unexecuted instantiation: _threadmodule.c:Py_SET_REFCNT
Unexecuted instantiation: timemodule.c:Py_SET_REFCNT
Unexecuted instantiation: _typesmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _typingmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _weakref.c:Py_SET_REFCNT
Unexecuted instantiation: _abc.c:Py_SET_REFCNT
Unexecuted instantiation: _functoolsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _localemodule.c:Py_SET_REFCNT
Unexecuted instantiation: _opcode.c:Py_SET_REFCNT
Unexecuted instantiation: _operator.c:Py_SET_REFCNT
Unexecuted instantiation: _stat.c:Py_SET_REFCNT
Unexecuted instantiation: symtablemodule.c:Py_SET_REFCNT
Unexecuted instantiation: pwdmodule.c:Py_SET_REFCNT
Unexecuted instantiation: getpath.c:Py_SET_REFCNT
Unexecuted instantiation: frozen.c:Py_SET_REFCNT
Unexecuted instantiation: getbuildinfo.c:Py_SET_REFCNT
Unexecuted instantiation: peg_api.c:Py_SET_REFCNT
Unexecuted instantiation: file_tokenizer.c:Py_SET_REFCNT
Unexecuted instantiation: helpers.c:Py_SET_REFCNT
Unexecuted instantiation: myreadline.c:Py_SET_REFCNT
Unexecuted instantiation: abstract.c:Py_SET_REFCNT
Unexecuted instantiation: boolobject.c:Py_SET_REFCNT
Unexecuted instantiation: bytes_methods.c:Py_SET_REFCNT
Unexecuted instantiation: bytearrayobject.c:Py_SET_REFCNT
Unexecuted instantiation: capsule.c:Py_SET_REFCNT
Unexecuted instantiation: cellobject.c:Py_SET_REFCNT
Unexecuted instantiation: classobject.c:Py_SET_REFCNT
codeobject.c:Py_SET_REFCNT
Line
Count
Source
151
230k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
152
230k
    assert(refcnt >= 0);
153
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
154
    // Stable ABI implements Py_SET_REFCNT() as a function call
155
    // on limited C API version 3.13 and newer.
156
    _Py_SetRefcnt(ob, refcnt);
157
#else
158
    // This immortal check is for code that is unaware of immortal objects.
159
    // The runtime tracks these objects and we should avoid as much
160
    // as possible having extensions inadvertently change the refcnt
161
    // of an immortalized object.
162
230k
    if (_Py_IsImmortal(ob)) {
163
0
        return;
164
0
    }
165
230k
#ifndef Py_GIL_DISABLED
166
230k
#if SIZEOF_VOID_P > 4
167
230k
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
168
#else
169
    ob->ob_refcnt = refcnt;
170
#endif
171
#else
172
    if (_Py_IsOwnedByCurrentThread(ob)) {
173
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
174
            // On overflow, make the object immortal
175
            ob->ob_tid = _Py_UNOWNED_TID;
176
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
177
            ob->ob_ref_shared = 0;
178
        }
179
        else {
180
            // Set local refcount to desired refcount and shared refcount
181
            // to zero, but preserve the shared refcount flags.
182
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
183
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
184
        }
185
    }
186
    else {
187
        // Set local refcount to zero and shared refcount to desired refcount.
188
        // Mark the object as merged.
189
        ob->ob_tid = _Py_UNOWNED_TID;
190
        ob->ob_ref_local = 0;
191
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
192
    }
193
#endif  // Py_GIL_DISABLED
194
230k
#endif  // Py_LIMITED_API+0 < 0x030d0000
195
230k
}
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
151
27.8M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
152
27.8M
    assert(refcnt >= 0);
153
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
154
    // Stable ABI implements Py_SET_REFCNT() as a function call
155
    // on limited C API version 3.13 and newer.
156
    _Py_SetRefcnt(ob, refcnt);
157
#else
158
    // This immortal check is for code that is unaware of immortal objects.
159
    // The runtime tracks these objects and we should avoid as much
160
    // as possible having extensions inadvertently change the refcnt
161
    // of an immortalized object.
162
27.8M
    if (_Py_IsImmortal(ob)) {
163
0
        return;
164
0
    }
165
27.8M
#ifndef Py_GIL_DISABLED
166
27.8M
#if SIZEOF_VOID_P > 4
167
27.8M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
168
#else
169
    ob->ob_refcnt = refcnt;
170
#endif
171
#else
172
    if (_Py_IsOwnedByCurrentThread(ob)) {
173
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
174
            // On overflow, make the object immortal
175
            ob->ob_tid = _Py_UNOWNED_TID;
176
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
177
            ob->ob_ref_shared = 0;
178
        }
179
        else {
180
            // Set local refcount to desired refcount and shared refcount
181
            // to zero, but preserve the shared refcount flags.
182
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
183
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
184
        }
185
    }
186
    else {
187
        // Set local refcount to zero and shared refcount to desired refcount.
188
        // Mark the object as merged.
189
        ob->ob_tid = _Py_UNOWNED_TID;
190
        ob->ob_ref_local = 0;
191
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
192
    }
193
#endif  // Py_GIL_DISABLED
194
27.8M
#endif  // Py_LIMITED_API+0 < 0x030d0000
195
27.8M
}
Unexecuted instantiation: interpolationobject.c:Py_SET_REFCNT
Unexecuted instantiation: iterobject.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: structmember.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
196
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
197
721M
#  define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt))
198
#endif
199
200
201
/*
202
The macros Py_INCREF(op) and Py_DECREF(op) are used to increment or decrement
203
reference counts.  Py_DECREF calls the object's deallocator function when
204
the refcount falls to 0; for
205
objects that don't contain references to other objects or heap memory
206
this can be the standard function free().  Both macros can be used
207
wherever a void expression is allowed.  The argument must not be a
208
NULL pointer.  If it may be NULL, use Py_XINCREF/Py_XDECREF instead.
209
The macro _Py_NewReference(op) initialize reference counts to 1, and
210
in special builds (Py_REF_DEBUG, Py_TRACE_REFS) performs additional
211
bookkeeping appropriate to the special build.
212
213
We assume that the reference count field can never overflow; this can
214
be proven when the size of the field is the same as the pointer size, so
215
we ignore the possibility.  Provided a C int is at least 32 bits (which
216
is implicitly assumed in many parts of this code), that's enough for
217
about 2**31 references to an object.
218
219
XXX The following became out of date in Python 2.2, but I'm not sure
220
XXX what the full truth is now.  Certainly, heap-allocated type objects
221
XXX can and should be deallocated.
222
Type objects should never be deallocated; the type pointer in an object
223
is not considered to be a reference to the type object, to save
224
complications in the deallocation function.  (This is actually a
225
decision that's up to the implementer of each new type so if you want,
226
you can count such references to the type object.)
227
*/
228
229
#if defined(Py_REF_DEBUG) && !defined(Py_LIMITED_API)
230
PyAPI_FUNC(void) _Py_NegativeRefcount(const char *filename, int lineno,
231
                                      PyObject *op);
232
PyAPI_FUNC(void) _Py_INCREF_IncRefTotal(void);
233
PyAPI_FUNC(void) _Py_DECREF_DecRefTotal(void);
234
#endif  // Py_REF_DEBUG && !Py_LIMITED_API
235
236
PyAPI_FUNC(void) _Py_Dealloc(PyObject *);
237
238
239
/*
240
These are provided as conveniences to Python runtime embedders, so that
241
they can have object code that is not dependent on Python compilation flags.
242
*/
243
PyAPI_FUNC(void) Py_IncRef(PyObject *);
244
PyAPI_FUNC(void) Py_DecRef(PyObject *);
245
246
// Similar to Py_IncRef() and Py_DecRef() but the argument must be non-NULL.
247
// Private functions used by Py_INCREF() and Py_DECREF().
248
PyAPI_FUNC(void) _Py_IncRef(PyObject *);
249
PyAPI_FUNC(void) _Py_DecRef(PyObject *);
250
251
static inline Py_ALWAYS_INLINE void Py_INCREF(PyObject *op)
252
15.5G
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
15.5G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
15.5G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
6.88G
        _Py_INCREF_IMMORTAL_STAT_INC();
285
6.88G
        return;
286
6.88G
    }
287
8.63G
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
8.63G
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
8.63G
#endif
303
8.63G
}
bytesobject.c:Py_INCREF
Line
Count
Source
252
52.4M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
52.4M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
52.4M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
50.5M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
50.5M
        return;
286
50.5M
    }
287
1.82M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
1.82M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
1.82M
#endif
303
1.82M
}
call.c:Py_INCREF
Line
Count
Source
252
28.6M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
28.6M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
28.6M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
10.1M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
10.1M
        return;
286
10.1M
    }
287
18.4M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
18.4M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
18.4M
#endif
303
18.4M
}
exceptions.c:Py_INCREF
Line
Count
Source
252
156M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
156M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
156M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
44.4M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
44.4M
        return;
286
44.4M
    }
287
112M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
112M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
112M
#endif
303
112M
}
genericaliasobject.c:Py_INCREF
Line
Count
Source
252
1.45k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
1.45k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.45k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
1.41k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
1.41k
        return;
286
1.41k
    }
287
36
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
36
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
36
#endif
303
36
}
floatobject.c:Py_INCREF
Line
Count
Source
252
890k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
890k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
890k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
890k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
890k
        return;
286
890k
    }
287
0
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
0
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
0
#endif
303
0
}
listobject.c:Py_INCREF
Line
Count
Source
252
1.28G
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
1.28G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.28G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
295M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
295M
        return;
286
295M
    }
287
985M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
985M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
985M
#endif
303
985M
}
longobject.c:Py_INCREF
Line
Count
Source
252
157M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
157M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
157M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
157M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
157M
        return;
286
157M
    }
287
44.2k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
44.2k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
44.2k
#endif
303
44.2k
}
dictobject.c:Py_INCREF
Line
Count
Source
252
1.98G
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
1.98G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.98G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
512M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
512M
        return;
286
512M
    }
287
1.47G
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
1.47G
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
1.47G
#endif
303
1.47G
}
memoryobject.c:Py_INCREF
Line
Count
Source
252
1.26M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
1.26M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.26M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
0
        _Py_INCREF_IMMORTAL_STAT_INC();
285
0
        return;
286
0
    }
287
1.26M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
1.26M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
1.26M
#endif
303
1.26M
}
moduleobject.c:Py_INCREF
Line
Count
Source
252
7.70k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
7.70k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
7.70k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
6.84k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
6.84k
        return;
286
6.84k
    }
287
867
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
867
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
867
#endif
303
867
}
object.c:Py_INCREF
Line
Count
Source
252
1.01G
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
1.01G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.01G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
709M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
709M
        return;
286
709M
    }
287
305M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
305M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
305M
#endif
303
305M
}
Unexecuted instantiation: obmalloc.c:Py_INCREF
Unexecuted instantiation: picklebufobject.c:Py_INCREF
rangeobject.c:Py_INCREF
Line
Count
Source
252
112
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
112
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
112
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
84
        _Py_INCREF_IMMORTAL_STAT_INC();
285
84
        return;
286
84
    }
287
28
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
28
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
28
#endif
303
28
}
setobject.c:Py_INCREF
Line
Count
Source
252
10.9M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
10.9M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
10.9M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
978k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
978k
        return;
286
978k
    }
287
10.0M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
10.0M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
10.0M
#endif
303
10.0M
}
sliceobject.c:Py_INCREF
Line
Count
Source
252
59.3M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
59.3M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
59.3M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
59.3M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
59.3M
        return;
286
59.3M
    }
287
1.19k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
1.19k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
1.19k
#endif
303
1.19k
}
Unexecuted instantiation: structseq.c:Py_INCREF
templateobject.c:Py_INCREF
Line
Count
Source
252
4
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
4
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
4
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
2
        _Py_INCREF_IMMORTAL_STAT_INC();
285
2
        return;
286
2
    }
287
2
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
2
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
2
#endif
303
2
}
tupleobject.c:Py_INCREF
Line
Count
Source
252
5.26G
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
5.26G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
5.26G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
2.14G
        _Py_INCREF_IMMORTAL_STAT_INC();
285
2.14G
        return;
286
2.14G
    }
287
3.12G
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
3.12G
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
3.12G
#endif
303
3.12G
}
typeobject.c:Py_INCREF
Line
Count
Source
252
403M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
403M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
403M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
166M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
166M
        return;
286
166M
    }
287
236M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
236M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
236M
#endif
303
236M
}
typevarobject.c:Py_INCREF
Line
Count
Source
252
240
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
240
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
240
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
148
        _Py_INCREF_IMMORTAL_STAT_INC();
285
148
        return;
286
148
    }
287
92
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
92
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
92
#endif
303
92
}
unicode_format.c:Py_INCREF
Line
Count
Source
252
54.3M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
54.3M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
54.3M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
22.6M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
22.6M
        return;
286
22.6M
    }
287
31.7M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
31.7M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
31.7M
#endif
303
31.7M
}
Unexecuted instantiation: unicode_formatter.c:Py_INCREF
unicode_writer.c:Py_INCREF
Line
Count
Source
252
11.5k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
11.5k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
11.5k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
0
        _Py_INCREF_IMMORTAL_STAT_INC();
285
0
        return;
286
0
    }
287
11.5k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
11.5k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
11.5k
#endif
303
11.5k
}
Unexecuted instantiation: unicodectype.c:Py_INCREF
unicodeobject.c:Py_INCREF
Line
Count
Source
252
803M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
803M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
803M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
713M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
713M
        return;
286
713M
    }
287
90.2M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
90.2M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
90.2M
#endif
303
90.2M
}
Unexecuted instantiation: unionobject.c:Py_INCREF
weakrefobject.c:Py_INCREF
Line
Count
Source
252
399k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
399k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
399k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
2.33k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
2.33k
        return;
286
2.33k
    }
287
397k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
397k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
397k
#endif
303
397k
}
_warnings.c:Py_INCREF
Line
Count
Source
252
2.76M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
2.76M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
2.76M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
1.33M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
1.33M
        return;
286
1.33M
    }
287
1.42M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
1.42M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
1.42M
#endif
303
1.42M
}
bltinmodule.c:Py_INCREF
Line
Count
Source
252
79.1M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
79.1M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
79.1M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
35.2M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
35.2M
        return;
286
35.2M
    }
287
43.8M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
43.8M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
43.8M
#endif
303
43.8M
}
ceval.c:Py_INCREF
Line
Count
Source
252
1.77G
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
1.77G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.77G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
969M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
969M
        return;
286
969M
    }
287
804M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
804M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
804M
#endif
303
804M
}
codecs.c:Py_INCREF
Line
Count
Source
252
2.68M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
2.68M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
2.68M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
318k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
318k
        return;
286
318k
    }
287
2.36M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
2.36M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
2.36M
#endif
303
2.36M
}
codegen.c:Py_INCREF
Line
Count
Source
252
3.46k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
3.46k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
3.46k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
3.46k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
3.46k
        return;
286
3.46k
    }
287
6
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
6
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
6
#endif
303
6
}
compile.c:Py_INCREF
Line
Count
Source
252
136k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
136k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
136k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
59.3k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
59.3k
        return;
286
59.3k
    }
287
76.7k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
76.7k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
76.7k
#endif
303
76.7k
}
context.c:Py_INCREF
Line
Count
Source
252
42
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
42
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
42
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
13
        _Py_INCREF_IMMORTAL_STAT_INC();
285
13
        return;
286
13
    }
287
29
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
29
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
29
#endif
303
29
}
errors.c:Py_INCREF
Line
Count
Source
252
90.5M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
90.5M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
90.5M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
38.3M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
38.3M
        return;
286
38.3M
    }
287
52.2M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
52.2M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
52.2M
#endif
303
52.2M
}
flowgraph.c:Py_INCREF
Line
Count
Source
252
113k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
113k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
113k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
55.9k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
55.9k
        return;
286
55.9k
    }
287
57.3k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
57.3k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
57.3k
#endif
303
57.3k
}
frame.c:Py_INCREF
Line
Count
Source
252
42.7M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
42.7M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
42.7M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
0
        _Py_INCREF_IMMORTAL_STAT_INC();
285
0
        return;
286
0
    }
287
42.7M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
42.7M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
42.7M
#endif
303
42.7M
}
Unexecuted instantiation: future.c:Py_INCREF
gc.c:Py_INCREF
Line
Count
Source
252
461M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
461M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
461M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
386M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
386M
        return;
286
386M
    }
287
75.5M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
75.5M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
75.5M
#endif
303
75.5M
}
Unexecuted instantiation: gc_gil.c:Py_INCREF
getargs.c:Py_INCREF
Line
Count
Source
252
2.01M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
2.01M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
2.01M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
1.32M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
1.32M
        return;
286
1.32M
    }
287
685k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
685k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
685k
#endif
303
685k
}
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
252
6.26M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
6.26M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
6.26M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
1.78M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
1.78M
        return;
286
1.78M
    }
287
4.48M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
4.48M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
4.48M
#endif
303
4.48M
}
importdl.c:Py_INCREF
Line
Count
Source
252
931
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
931
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
931
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
729
        _Py_INCREF_IMMORTAL_STAT_INC();
285
729
        return;
286
729
    }
287
202
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
202
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
202
#endif
303
202
}
initconfig.c:Py_INCREF
Line
Count
Source
252
476
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
476
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
476
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
476
        _Py_INCREF_IMMORTAL_STAT_INC();
285
476
        return;
286
476
    }
287
0
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
0
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
0
#endif
303
0
}
Unexecuted instantiation: instrumentation.c:Py_INCREF
Unexecuted instantiation: instruction_sequence.c:Py_INCREF
intrinsics.c:Py_INCREF
Line
Count
Source
252
23.9k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
23.9k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
23.9k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
0
        _Py_INCREF_IMMORTAL_STAT_INC();
285
0
        return;
286
0
    }
287
23.9k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
23.9k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
23.9k
#endif
303
23.9k
}
Unexecuted instantiation: legacy_tracing.c:Py_INCREF
Unexecuted instantiation: lock.c:Py_INCREF
marshal.c:Py_INCREF
Line
Count
Source
252
1.66M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
1.66M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.66M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
1.52M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
1.52M
        return;
286
1.52M
    }
287
138k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
138k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
138k
#endif
303
138k
}
modsupport.c:Py_INCREF
Line
Count
Source
252
2.23M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
2.23M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
2.23M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
552k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
552k
        return;
286
552k
    }
287
1.68M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
1.68M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
1.68M
#endif
303
1.68M
}
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
252
28
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
28
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
28
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
0
        _Py_INCREF_IMMORTAL_STAT_INC();
285
0
        return;
286
0
    }
287
28
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
28
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
28
#endif
303
28
}
Unexecuted instantiation: pymath.c:Py_INCREF
pystate.c:Py_INCREF
Line
Count
Source
252
579k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
579k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
579k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
0
        _Py_INCREF_IMMORTAL_STAT_INC();
285
0
        return;
286
0
    }
287
579k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
579k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
579k
#endif
303
579k
}
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
symtable.c:Py_INCREF
Line
Count
Source
252
346k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
346k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
346k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
345k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
345k
        return;
286
345k
    }
287
837
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
837
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
837
#endif
303
837
}
sysmodule.c:Py_INCREF
Line
Count
Source
252
2.19k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
2.19k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
2.19k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
1.48k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
1.48k
        return;
286
1.48k
    }
287
711
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
711
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
711
#endif
303
711
}
Unexecuted instantiation: thread.c:Py_INCREF
traceback.c:Py_INCREF
Line
Count
Source
252
72.2M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
72.2M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
72.2M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
0
        _Py_INCREF_IMMORTAL_STAT_INC();
285
0
        return;
286
0
    }
287
72.2M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
72.2M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
72.2M
#endif
303
72.2M
}
Unexecuted instantiation: tracemalloc.c:Py_INCREF
Unexecuted instantiation: getopt.c:Py_INCREF
Unexecuted instantiation: pystrcmp.c:Py_INCREF
Unexecuted instantiation: pystrtod.c:Py_INCREF
Unexecuted instantiation: pystrhex.c:Py_INCREF
Unexecuted instantiation: dtoa.c:Py_INCREF
Unexecuted instantiation: fileutils.c:Py_INCREF
Unexecuted instantiation: suggestions.c:Py_INCREF
Unexecuted instantiation: perf_trampoline.c:Py_INCREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_INCREF
Unexecuted instantiation: remote_debugging.c:Py_INCREF
Unexecuted instantiation: dynload_shlib.c:Py_INCREF
Unexecuted instantiation: config.c:Py_INCREF
Unexecuted instantiation: gcmodule.c:Py_INCREF
Unexecuted instantiation: _asynciomodule.c:Py_INCREF
atexitmodule.c:Py_INCREF
Line
Count
Source
252
2
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
2
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
2
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
0
        _Py_INCREF_IMMORTAL_STAT_INC();
285
0
        return;
286
0
    }
287
2
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
2
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
2
#endif
303
2
}
Unexecuted instantiation: faulthandler.c:Py_INCREF
posixmodule.c:Py_INCREF
Line
Count
Source
252
2.41M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
2.41M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
2.41M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
452k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
452k
        return;
286
452k
    }
287
1.96M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
1.96M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
1.96M
#endif
303
1.96M
}
signalmodule.c:Py_INCREF
Line
Count
Source
252
1.79k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
1.79k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.79k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
1.79k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
1.79k
        return;
286
1.79k
    }
287
0
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
0
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
0
#endif
303
0
}
Unexecuted instantiation: _tracemalloc.c:Py_INCREF
Unexecuted instantiation: _suggestions.c:Py_INCREF
_datetimemodule.c:Py_INCREF
Line
Count
Source
252
215
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
215
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
215
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
156
        _Py_INCREF_IMMORTAL_STAT_INC();
285
156
        return;
286
156
    }
287
59
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
59
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
59
#endif
303
59
}
Unexecuted instantiation: _codecsmodule.c:Py_INCREF
_collectionsmodule.c:Py_INCREF
Line
Count
Source
252
23.0M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
23.0M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
23.0M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
20.3M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
20.3M
        return;
286
20.3M
    }
287
2.71M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
2.71M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
2.71M
#endif
303
2.71M
}
Unexecuted instantiation: errnomodule.c:Py_INCREF
_iomodule.c:Py_INCREF
Line
Count
Source
252
84
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
84
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
84
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
84
        _Py_INCREF_IMMORTAL_STAT_INC();
285
84
        return;
286
84
    }
287
0
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
0
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
0
#endif
303
0
}
iobase.c:Py_INCREF
Line
Count
Source
252
53.3k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
53.3k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
53.3k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
0
        _Py_INCREF_IMMORTAL_STAT_INC();
285
0
        return;
286
0
    }
287
53.3k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
53.3k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
53.3k
#endif
303
53.3k
}
Unexecuted instantiation: fileio.c:Py_INCREF
bytesio.c:Py_INCREF
Line
Count
Source
252
48.0k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
48.0k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
48.0k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
428
        _Py_INCREF_IMMORTAL_STAT_INC();
285
428
        return;
286
428
    }
287
47.6k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
47.6k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
47.6k
#endif
303
47.6k
}
bufferedio.c:Py_INCREF
Line
Count
Source
252
20.8k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
20.8k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
20.8k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
3
        _Py_INCREF_IMMORTAL_STAT_INC();
285
3
        return;
286
3
    }
287
20.8k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
20.8k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
20.8k
#endif
303
20.8k
}
textio.c:Py_INCREF
Line
Count
Source
252
404k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
404k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
404k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
20.7k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
20.7k
        return;
286
20.7k
    }
287
383k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
383k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
383k
#endif
303
383k
}
stringio.c:Py_INCREF
Line
Count
Source
252
21.5k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
21.5k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
21.5k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
93
        _Py_INCREF_IMMORTAL_STAT_INC();
285
93
        return;
286
93
    }
287
21.4k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
21.4k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
21.4k
#endif
303
21.4k
}
itertoolsmodule.c:Py_INCREF
Line
Count
Source
252
37.1k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
37.1k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
37.1k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
36.5k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
36.5k
        return;
286
36.5k
    }
287
612
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
612
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
612
#endif
303
612
}
sre.c:Py_INCREF
Line
Count
Source
252
292M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
292M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
292M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
89.4M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
89.4M
        return;
286
89.4M
    }
287
203M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
203M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
203M
#endif
303
203M
}
Unexecuted instantiation: _sysconfig.c:Py_INCREF
_threadmodule.c:Py_INCREF
Line
Count
Source
252
4
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
4
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
4
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
2
        _Py_INCREF_IMMORTAL_STAT_INC();
285
2
        return;
286
2
    }
287
2
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
2
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
2
#endif
303
2
}
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
252
28.6k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
28.6k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
28.6k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
28.3k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
28.3k
        return;
286
28.3k
    }
287
214
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
214
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
214
#endif
303
214
}
_functoolsmodule.c:Py_INCREF
Line
Count
Source
252
217k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
217k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
217k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
295
        _Py_INCREF_IMMORTAL_STAT_INC();
285
295
        return;
286
295
    }
287
217k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
217k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
217k
#endif
303
217k
}
Unexecuted instantiation: _localemodule.c:Py_INCREF
Unexecuted instantiation: _opcode.c:Py_INCREF
_operator.c:Py_INCREF
Line
Count
Source
252
1.37M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
1.37M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.37M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
1.34M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
1.34M
        return;
286
1.34M
    }
287
30.7k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
30.7k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
30.7k
#endif
303
30.7k
}
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
252
308
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
308
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
308
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
308
        _Py_INCREF_IMMORTAL_STAT_INC();
285
308
        return;
286
308
    }
287
0
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
0
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
0
#endif
303
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
252
688M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
688M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
688M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
358M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
358M
        return;
286
358M
    }
287
329M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
329M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
329M
#endif
303
329M
}
Unexecuted instantiation: boolobject.c:Py_INCREF
Unexecuted instantiation: bytes_methods.c:Py_INCREF
bytearrayobject.c:Py_INCREF
Line
Count
Source
252
219k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
219k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
219k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
0
        _Py_INCREF_IMMORTAL_STAT_INC();
285
0
        return;
286
0
    }
287
219k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
219k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
219k
#endif
303
219k
}
Unexecuted instantiation: capsule.c:Py_INCREF
cellobject.c:Py_INCREF
Line
Count
Source
252
123k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
123k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
123k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
50.1k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
50.1k
        return;
286
50.1k
    }
287
73.0k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
73.0k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
73.0k
#endif
303
73.0k
}
classobject.c:Py_INCREF
Line
Count
Source
252
79.5M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
79.5M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
79.5M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
10
        _Py_INCREF_IMMORTAL_STAT_INC();
285
10
        return;
286
10
    }
287
79.5M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
79.5M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
79.5M
#endif
303
79.5M
}
codeobject.c:Py_INCREF
Line
Count
Source
252
1.67M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
1.67M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.67M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
803k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
803k
        return;
286
803k
    }
287
874k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
874k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
874k
#endif
303
874k
}
complexobject.c:Py_INCREF
Line
Count
Source
252
3.84k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
3.84k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
3.84k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
3.84k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
3.84k
        return;
286
3.84k
    }
287
0
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
0
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
0
#endif
303
0
}
descrobject.c:Py_INCREF
Line
Count
Source
252
23.0M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
23.0M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
23.0M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
53.1k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
53.1k
        return;
286
53.1k
    }
287
23.0M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
23.0M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
23.0M
#endif
303
23.0M
}
enumobject.c:Py_INCREF
Line
Count
Source
252
104M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
104M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
104M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
0
        _Py_INCREF_IMMORTAL_STAT_INC();
285
0
        return;
286
0
    }
287
104M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
104M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
104M
#endif
303
104M
}
genobject.c:Py_INCREF
Line
Count
Source
252
45.1M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
45.1M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
45.1M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
45.1M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
45.1M
        return;
286
45.1M
    }
287
72.4k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
72.4k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
72.4k
#endif
303
72.4k
}
Unexecuted instantiation: fileobject.c:Py_INCREF
frameobject.c:Py_INCREF
Line
Count
Source
252
17.9M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
17.9M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
17.9M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
0
        _Py_INCREF_IMMORTAL_STAT_INC();
285
0
        return;
286
0
    }
287
17.9M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
17.9M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
17.9M
#endif
303
17.9M
}
funcobject.c:Py_INCREF
Line
Count
Source
252
88.4M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
88.4M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
88.4M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
41.8M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
41.8M
        return;
286
41.8M
    }
287
46.5M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
46.5M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
46.5M
#endif
303
46.5M
}
Unexecuted instantiation: interpolationobject.c:Py_INCREF
iterobject.c:Py_INCREF
Line
Count
Source
252
1.65M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
1.65M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.65M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
395k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
395k
        return;
286
395k
    }
287
1.26M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
1.26M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
1.26M
#endif
303
1.26M
}
odictobject.c:Py_INCREF
Line
Count
Source
252
376
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
376
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
376
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
352
        _Py_INCREF_IMMORTAL_STAT_INC();
285
352
        return;
286
352
    }
287
24
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
24
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
24
#endif
303
24
}
methodobject.c:Py_INCREF
Line
Count
Source
252
334M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
334M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
334M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
7.08M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
7.08M
        return;
286
7.08M
    }
287
327M
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
327M
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
327M
#endif
303
327M
}
Unexecuted instantiation: namespaceobject.c:Py_INCREF
Unexecuted instantiation: _contextvars.c:Py_INCREF
Python-ast.c:Py_INCREF
Line
Count
Source
252
397k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
397k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
397k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
210k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
210k
        return;
286
210k
    }
287
186k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
186k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
186k
#endif
303
186k
}
Unexecuted instantiation: Python-tokenize.c:Py_INCREF
Unexecuted instantiation: asdl.c:Py_INCREF
assemble.c:Py_INCREF
Line
Count
Source
252
57.2k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
57.2k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
57.2k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
57.0k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
57.0k
        return;
286
57.0k
    }
287
163
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
163
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
163
#endif
303
163
}
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
structmember.c:Py_INCREF
Line
Count
Source
252
1.25M
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
1.25M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.25M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
617k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
617k
        return;
286
617k
    }
287
637k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
637k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
637k
#endif
303
637k
}
pegen.c:Py_INCREF
Line
Count
Source
252
19.0k
{
253
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
254
    // Stable ABI implements Py_INCREF() as a function call on limited C API
255
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
256
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
257
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
258
#  if Py_LIMITED_API+0 >= 0x030a00A7
259
    _Py_IncRef(op);
260
#  else
261
    Py_IncRef(op);
262
#  endif
263
#else
264
    // Non-limited C API and limited C API for Python 3.9 and older access
265
    // directly PyObject.ob_refcnt.
266
#if defined(Py_GIL_DISABLED)
267
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
268
    uint32_t new_local = local + 1;
269
    if (new_local == 0) {
270
        _Py_INCREF_IMMORTAL_STAT_INC();
271
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
272
        return;
273
    }
274
    if (_Py_IsOwnedByCurrentThread(op)) {
275
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
276
    }
277
    else {
278
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
279
    }
280
#elif SIZEOF_VOID_P > 4
281
19.0k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
19.0k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
356
        _Py_INCREF_IMMORTAL_STAT_INC();
285
356
        return;
286
356
    }
287
18.7k
    op->ob_refcnt = cur_refcnt + 1;
288
#else
289
    if (_Py_IsImmortal(op)) {
290
        _Py_INCREF_IMMORTAL_STAT_INC();
291
        return;
292
    }
293
    op->ob_refcnt++;
294
#endif
295
18.7k
    _Py_INCREF_STAT_INC();
296
#ifdef Py_REF_DEBUG
297
    // Don't count the incref if the object is immortal.
298
    if (!_Py_IsImmortal(op)) {
299
        _Py_INCREF_IncRefTotal();
300
    }
301
#endif
302
18.7k
#endif
303
18.7k
}
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
Unexecuted instantiation: readline_tokenizer.c:Py_INCREF
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
304
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
305
15.5G
#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
306
#endif
307
308
309
#if !defined(Py_LIMITED_API) && defined(Py_GIL_DISABLED)
310
// Implements Py_DECREF on objects not owned by the current thread.
311
PyAPI_FUNC(void) _Py_DecRefShared(PyObject *);
312
PyAPI_FUNC(void) _Py_DecRefSharedDebug(PyObject *, const char *, int);
313
314
// Called from Py_DECREF by the owning thread when the local refcount reaches
315
// zero. The call will deallocate the object if the shared refcount is also
316
// zero. Otherwise, the thread gives up ownership and merges the reference
317
// count fields.
318
PyAPI_FUNC(void) _Py_MergeZeroLocalRefcount(PyObject *);
319
#endif
320
321
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
322
// Stable ABI implements Py_DECREF() as a function call on limited C API
323
// version 3.12 and newer, and on Python built in debug mode. _Py_DecRef() was
324
// added to Python 3.10.0a7, use Py_DecRef() on older Python versions.
325
// Py_DecRef() accepts NULL whereas _Py_DecRef() doesn't.
326
7.70k
static inline void Py_DECREF(PyObject *op) {
327
7.70k
#  if Py_LIMITED_API+0 >= 0x030a00A7
328
7.70k
    _Py_DecRef(op);
329
#  else
330
    Py_DecRef(op);
331
#  endif
332
7.70k
}
errnomodule.c:Py_DECREF
Line
Count
Source
326
7.70k
static inline void Py_DECREF(PyObject *op) {
327
7.70k
#  if Py_LIMITED_API+0 >= 0x030a00A7
328
7.70k
    _Py_DecRef(op);
329
#  else
330
    Py_DecRef(op);
331
#  endif
332
7.70k
}
Unexecuted instantiation: _stat.c:Py_DECREF
333
7.70k
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
334
335
#elif defined(Py_GIL_DISABLED) && defined(Py_REF_DEBUG)
336
static inline void Py_DECREF(const char *filename, int lineno, PyObject *op)
337
{
338
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
339
    if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
340
        _Py_DECREF_IMMORTAL_STAT_INC();
341
        return;
342
    }
343
    _Py_DECREF_STAT_INC();
344
    _Py_DECREF_DecRefTotal();
345
    if (_Py_IsOwnedByCurrentThread(op)) {
346
        if (local == 0) {
347
            _Py_NegativeRefcount(filename, lineno, op);
348
        }
349
        local--;
350
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, local);
351
        if (local == 0) {
352
            _Py_MergeZeroLocalRefcount(op);
353
        }
354
    }
355
    else {
356
        _Py_DecRefSharedDebug(op, filename, lineno);
357
    }
358
}
359
#define Py_DECREF(op) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
360
361
#elif defined(Py_GIL_DISABLED)
362
static inline void Py_DECREF(PyObject *op)
363
{
364
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
365
    if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
366
        _Py_DECREF_IMMORTAL_STAT_INC();
367
        return;
368
    }
369
    _Py_DECREF_STAT_INC();
370
    if (_Py_IsOwnedByCurrentThread(op)) {
371
        local--;
372
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, local);
373
        if (local == 0) {
374
            _Py_MergeZeroLocalRefcount(op);
375
        }
376
    }
377
    else {
378
        _Py_DecRefShared(op);
379
    }
380
}
381
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
382
383
#elif defined(Py_REF_DEBUG)
384
385
static inline void Py_DECREF(const char *filename, int lineno, PyObject *op)
386
{
387
#if SIZEOF_VOID_P > 4
388
    /* If an object has been freed, it will have a negative full refcnt
389
     * If it has not it been freed, will have a very large refcnt */
390
    if (op->ob_refcnt_full <= 0 || op->ob_refcnt > (((PY_UINT32_T)-1) - (1<<20))) {
391
#else
392
    if (op->ob_refcnt <= 0) {
393
#endif
394
        _Py_NegativeRefcount(filename, lineno, op);
395
    }
396
    if (_Py_IsImmortal(op)) {
397
        _Py_DECREF_IMMORTAL_STAT_INC();
398
        return;
399
    }
400
    _Py_DECREF_STAT_INC();
401
    _Py_DECREF_DecRefTotal();
402
    if (--op->ob_refcnt == 0) {
403
        _Py_Dealloc(op);
404
    }
405
}
406
#define Py_DECREF(op) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
407
408
#else
409
410
static inline Py_ALWAYS_INLINE void Py_DECREF(PyObject *op)
411
14.7G
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
14.7G
    if (_Py_IsImmortal(op)) {
415
6.62G
        _Py_DECREF_IMMORTAL_STAT_INC();
416
6.62G
        return;
417
6.62G
    }
418
8.13G
    _Py_DECREF_STAT_INC();
419
8.13G
    if (--op->ob_refcnt == 0) {
420
1.43G
        _Py_Dealloc(op);
421
1.43G
    }
422
8.13G
}
bytesobject.c:Py_DECREF
Line
Count
Source
411
5.66M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
5.66M
    if (_Py_IsImmortal(op)) {
415
5.41M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
5.41M
        return;
417
5.41M
    }
418
248k
    _Py_DECREF_STAT_INC();
419
248k
    if (--op->ob_refcnt == 0) {
420
166k
        _Py_Dealloc(op);
421
166k
    }
422
248k
}
call.c:Py_DECREF
Line
Count
Source
411
184M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
184M
    if (_Py_IsImmortal(op)) {
415
69.6M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
69.6M
        return;
417
69.6M
    }
418
115M
    _Py_DECREF_STAT_INC();
419
115M
    if (--op->ob_refcnt == 0) {
420
85.0M
        _Py_Dealloc(op);
421
85.0M
    }
422
115M
}
exceptions.c:Py_DECREF
Line
Count
Source
411
182M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
182M
    if (_Py_IsImmortal(op)) {
415
45.6M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
45.6M
        return;
417
45.6M
    }
418
136M
    _Py_DECREF_STAT_INC();
419
136M
    if (--op->ob_refcnt == 0) {
420
97.5M
        _Py_Dealloc(op);
421
97.5M
    }
422
136M
}
genericaliasobject.c:Py_DECREF
Line
Count
Source
411
202
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
202
    if (_Py_IsImmortal(op)) {
415
85
        _Py_DECREF_IMMORTAL_STAT_INC();
416
85
        return;
417
85
    }
418
117
    _Py_DECREF_STAT_INC();
419
117
    if (--op->ob_refcnt == 0) {
420
101
        _Py_Dealloc(op);
421
101
    }
422
117
}
floatobject.c:Py_DECREF
Line
Count
Source
411
21.3k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
21.3k
    if (_Py_IsImmortal(op)) {
415
5
        _Py_DECREF_IMMORTAL_STAT_INC();
416
5
        return;
417
5
    }
418
21.3k
    _Py_DECREF_STAT_INC();
419
21.3k
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
21.3k
}
listobject.c:Py_DECREF
Line
Count
Source
411
1.68G
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1.68G
    if (_Py_IsImmortal(op)) {
415
473M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
473M
        return;
417
473M
    }
418
1.21G
    _Py_DECREF_STAT_INC();
419
1.21G
    if (--op->ob_refcnt == 0) {
420
336M
        _Py_Dealloc(op);
421
336M
    }
422
1.21G
}
longobject.c:Py_DECREF
Line
Count
Source
411
18.9M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
18.9M
    if (_Py_IsImmortal(op)) {
415
8.89M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
8.89M
        return;
417
8.89M
    }
418
10.0M
    _Py_DECREF_STAT_INC();
419
10.0M
    if (--op->ob_refcnt == 0) {
420
6.52M
        _Py_Dealloc(op);
421
6.52M
    }
422
10.0M
}
dictobject.c:Py_DECREF
Line
Count
Source
411
1.29G
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1.29G
    if (_Py_IsImmortal(op)) {
415
620M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
620M
        return;
417
620M
    }
418
675M
    _Py_DECREF_STAT_INC();
419
675M
    if (--op->ob_refcnt == 0) {
420
111M
        _Py_Dealloc(op);
421
111M
    }
422
675M
}
memoryobject.c:Py_DECREF
Line
Count
Source
411
1.37M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1.37M
    if (_Py_IsImmortal(op)) {
415
78.1k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
78.1k
        return;
417
78.1k
    }
418
1.30M
    _Py_DECREF_STAT_INC();
419
1.30M
    if (--op->ob_refcnt == 0) {
420
595k
        _Py_Dealloc(op);
421
595k
    }
422
1.30M
}
moduleobject.c:Py_DECREF
Line
Count
Source
411
2.18M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
2.18M
    if (_Py_IsImmortal(op)) {
415
2.14M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
2.14M
        return;
417
2.14M
    }
418
45.5k
    _Py_DECREF_STAT_INC();
419
45.5k
    if (--op->ob_refcnt == 0) {
420
5.40k
        _Py_Dealloc(op);
421
5.40k
    }
422
45.5k
}
object.c:Py_DECREF
Line
Count
Source
411
865M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
865M
    if (_Py_IsImmortal(op)) {
415
678M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
678M
        return;
417
678M
    }
418
186M
    _Py_DECREF_STAT_INC();
419
186M
    if (--op->ob_refcnt == 0) {
420
10.5k
        _Py_Dealloc(op);
421
10.5k
    }
422
186M
}
Unexecuted instantiation: obmalloc.c:Py_DECREF
Unexecuted instantiation: picklebufobject.c:Py_DECREF
rangeobject.c:Py_DECREF
Line
Count
Source
411
56.6M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
56.6M
    if (_Py_IsImmortal(op)) {
415
54.6M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
54.6M
        return;
417
54.6M
    }
418
1.97M
    _Py_DECREF_STAT_INC();
419
1.97M
    if (--op->ob_refcnt == 0) {
420
961k
        _Py_Dealloc(op);
421
961k
    }
422
1.97M
}
setobject.c:Py_DECREF
Line
Count
Source
411
13.5M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
13.5M
    if (_Py_IsImmortal(op)) {
415
3.81M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
3.81M
        return;
417
3.81M
    }
418
9.75M
    _Py_DECREF_STAT_INC();
419
9.75M
    if (--op->ob_refcnt == 0) {
420
1.05M
        _Py_Dealloc(op);
421
1.05M
    }
422
9.75M
}
sliceobject.c:Py_DECREF
Line
Count
Source
411
164M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
164M
    if (_Py_IsImmortal(op)) {
415
104M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
104M
        return;
417
104M
    }
418
59.1M
    _Py_DECREF_STAT_INC();
419
59.1M
    if (--op->ob_refcnt == 0) {
420
15.0M
        _Py_Dealloc(op);
421
15.0M
    }
422
59.1M
}
structseq.c:Py_DECREF
Line
Count
Source
411
6.39M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
6.39M
    if (_Py_IsImmortal(op)) {
415
1.87M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
1.87M
        return;
417
1.87M
    }
418
4.51M
    _Py_DECREF_STAT_INC();
419
4.51M
    if (--op->ob_refcnt == 0) {
420
4.15M
        _Py_Dealloc(op);
421
4.15M
    }
422
4.51M
}
templateobject.c:Py_DECREF
Line
Count
Source
411
4
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
4
    if (_Py_IsImmortal(op)) {
415
2
        _Py_DECREF_IMMORTAL_STAT_INC();
416
2
        return;
417
2
    }
418
2
    _Py_DECREF_STAT_INC();
419
2
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
2
}
tupleobject.c:Py_DECREF
Line
Count
Source
411
5.58G
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
5.58G
    if (_Py_IsImmortal(op)) {
415
2.22G
        _Py_DECREF_IMMORTAL_STAT_INC();
416
2.22G
        return;
417
2.22G
    }
418
3.36G
    _Py_DECREF_STAT_INC();
419
3.36G
    if (--op->ob_refcnt == 0) {
420
136M
        _Py_Dealloc(op);
421
136M
    }
422
3.36G
}
typeobject.c:Py_DECREF
Line
Count
Source
411
489M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
489M
    if (_Py_IsImmortal(op)) {
415
78.1M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
78.1M
        return;
417
78.1M
    }
418
411M
    _Py_DECREF_STAT_INC();
419
411M
    if (--op->ob_refcnt == 0) {
420
29.8M
        _Py_Dealloc(op);
421
29.8M
    }
422
411M
}
typevarobject.c:Py_DECREF
Line
Count
Source
411
300
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
300
    if (_Py_IsImmortal(op)) {
415
72
        _Py_DECREF_IMMORTAL_STAT_INC();
416
72
        return;
417
72
    }
418
228
    _Py_DECREF_STAT_INC();
419
228
    if (--op->ob_refcnt == 0) {
420
64
        _Py_Dealloc(op);
421
64
    }
422
228
}
unicode_format.c:Py_DECREF
Line
Count
Source
411
73.2M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
73.2M
    if (_Py_IsImmortal(op)) {
415
22.6M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
22.6M
        return;
417
22.6M
    }
418
50.6M
    _Py_DECREF_STAT_INC();
419
50.6M
    if (--op->ob_refcnt == 0) {
420
13.8M
        _Py_Dealloc(op);
421
13.8M
    }
422
50.6M
}
unicode_formatter.c:Py_DECREF
Line
Count
Source
411
256
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
256
    if (_Py_IsImmortal(op)) {
415
192
        _Py_DECREF_IMMORTAL_STAT_INC();
416
192
        return;
417
192
    }
418
64
    _Py_DECREF_STAT_INC();
419
64
    if (--op->ob_refcnt == 0) {
420
64
        _Py_Dealloc(op);
421
64
    }
422
64
}
unicode_writer.c:Py_DECREF
Line
Count
Source
411
15.4M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
15.4M
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
15.4M
    _Py_DECREF_STAT_INC();
419
15.4M
    if (--op->ob_refcnt == 0) {
420
15.4M
        _Py_Dealloc(op);
421
15.4M
    }
422
15.4M
}
Unexecuted instantiation: unicodectype.c:Py_DECREF
unicodeobject.c:Py_DECREF
Line
Count
Source
411
198M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
198M
    if (_Py_IsImmortal(op)) {
415
119M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
119M
        return;
417
119M
    }
418
78.4M
    _Py_DECREF_STAT_INC();
419
78.4M
    if (--op->ob_refcnt == 0) {
420
15.2M
        _Py_Dealloc(op);
421
15.2M
    }
422
78.4M
}
unionobject.c:Py_DECREF
Line
Count
Source
411
1.57k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1.57k
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
1.57k
    _Py_DECREF_STAT_INC();
419
1.57k
    if (--op->ob_refcnt == 0) {
420
1.57k
        _Py_Dealloc(op);
421
1.57k
    }
422
1.57k
}
weakrefobject.c:Py_DECREF
Line
Count
Source
411
84.8k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
84.8k
    if (_Py_IsImmortal(op)) {
415
30.9k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
30.9k
        return;
417
30.9k
    }
418
53.8k
    _Py_DECREF_STAT_INC();
419
53.8k
    if (--op->ob_refcnt == 0) {
420
29.3k
        _Py_Dealloc(op);
421
29.3k
    }
422
53.8k
}
_warnings.c:Py_DECREF
Line
Count
Source
411
26.8M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
26.8M
    if (_Py_IsImmortal(op)) {
415
3.08M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
3.08M
        return;
417
3.08M
    }
418
23.7M
    _Py_DECREF_STAT_INC();
419
23.7M
    if (--op->ob_refcnt == 0) {
420
1.18M
        _Py_Dealloc(op);
421
1.18M
    }
422
23.7M
}
bltinmodule.c:Py_DECREF
Line
Count
Source
411
1.43G
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1.43G
    if (_Py_IsImmortal(op)) {
415
1.27G
        _Py_DECREF_IMMORTAL_STAT_INC();
416
1.27G
        return;
417
1.27G
    }
418
160M
    _Py_DECREF_STAT_INC();
419
160M
    if (--op->ob_refcnt == 0) {
420
89.4M
        _Py_Dealloc(op);
421
89.4M
    }
422
160M
}
ceval.c:Py_DECREF
Line
Count
Source
411
6.14k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
6.14k
    if (_Py_IsImmortal(op)) {
415
645
        _Py_DECREF_IMMORTAL_STAT_INC();
416
645
        return;
417
645
    }
418
5.49k
    _Py_DECREF_STAT_INC();
419
5.49k
    if (--op->ob_refcnt == 0) {
420
685
        _Py_Dealloc(op);
421
685
    }
422
5.49k
}
codecs.c:Py_DECREF
Line
Count
Source
411
6.08M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
6.08M
    if (_Py_IsImmortal(op)) {
415
2.25M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
2.25M
        return;
417
2.25M
    }
418
3.82M
    _Py_DECREF_STAT_INC();
419
3.82M
    if (--op->ob_refcnt == 0) {
420
1.77M
        _Py_Dealloc(op);
421
1.77M
    }
422
3.82M
}
codegen.c:Py_DECREF
Line
Count
Source
411
193k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
193k
    if (_Py_IsImmortal(op)) {
415
172k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
172k
        return;
417
172k
    }
418
21.0k
    _Py_DECREF_STAT_INC();
419
21.0k
    if (--op->ob_refcnt == 0) {
420
1.45k
        _Py_Dealloc(op);
421
1.45k
    }
422
21.0k
}
compile.c:Py_DECREF
Line
Count
Source
411
741k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
741k
    if (_Py_IsImmortal(op)) {
415
392k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
392k
        return;
417
392k
    }
418
349k
    _Py_DECREF_STAT_INC();
419
349k
    if (--op->ob_refcnt == 0) {
420
120k
        _Py_Dealloc(op);
421
120k
    }
422
349k
}
context.c:Py_DECREF
Line
Count
Source
411
56
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
56
    if (_Py_IsImmortal(op)) {
415
28
        _Py_DECREF_IMMORTAL_STAT_INC();
416
28
        return;
417
28
    }
418
28
    _Py_DECREF_STAT_INC();
419
28
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
28
}
errors.c:Py_DECREF
Line
Count
Source
411
101M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
101M
    if (_Py_IsImmortal(op)) {
415
38.3M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
38.3M
        return;
417
38.3M
    }
418
62.9M
    _Py_DECREF_STAT_INC();
419
62.9M
    if (--op->ob_refcnt == 0) {
420
18.1M
        _Py_Dealloc(op);
421
18.1M
    }
422
62.9M
}
flowgraph.c:Py_DECREF
Line
Count
Source
411
84.8k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
84.8k
    if (_Py_IsImmortal(op)) {
415
48.0k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
48.0k
        return;
417
48.0k
    }
418
36.7k
    _Py_DECREF_STAT_INC();
419
36.7k
    if (--op->ob_refcnt == 0) {
420
68
        _Py_Dealloc(op);
421
68
    }
422
36.7k
}
frame.c:Py_DECREF
Line
Count
Source
411
46.3M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
46.3M
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
46.3M
    _Py_DECREF_STAT_INC();
419
46.3M
    if (--op->ob_refcnt == 0) {
420
15.2M
        _Py_Dealloc(op);
421
15.2M
    }
422
46.3M
}
Unexecuted instantiation: future.c:Py_DECREF
gc.c:Py_DECREF
Line
Count
Source
411
742k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
742k
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
742k
    _Py_DECREF_STAT_INC();
419
742k
    if (--op->ob_refcnt == 0) {
420
471k
        _Py_Dealloc(op);
421
471k
    }
422
742k
}
Unexecuted instantiation: gc_gil.c:Py_DECREF
getargs.c:Py_DECREF
Line
Count
Source
411
4.69M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
4.69M
    if (_Py_IsImmortal(op)) {
415
3.93M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
3.93M
        return;
417
3.93M
    }
418
762k
    _Py_DECREF_STAT_INC();
419
762k
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
762k
}
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
411
9.34M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
9.34M
    if (_Py_IsImmortal(op)) {
415
1.78M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
1.78M
        return;
417
1.78M
    }
418
7.55M
    _Py_DECREF_STAT_INC();
419
7.55M
    if (--op->ob_refcnt == 0) {
420
184k
        _Py_Dealloc(op);
421
184k
    }
422
7.55M
}
importdl.c:Py_DECREF
Line
Count
Source
411
2.11k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
2.11k
    if (_Py_IsImmortal(op)) {
415
842
        _Py_DECREF_IMMORTAL_STAT_INC();
416
842
        return;
417
842
    }
418
1.26k
    _Py_DECREF_STAT_INC();
419
1.26k
    if (--op->ob_refcnt == 0) {
420
807
        _Py_Dealloc(op);
421
807
    }
422
1.26k
}
initconfig.c:Py_DECREF
Line
Count
Source
411
3.86k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
3.86k
    if (_Py_IsImmortal(op)) {
415
3.10k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
3.10k
        return;
417
3.10k
    }
418
756
    _Py_DECREF_STAT_INC();
419
756
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
756
}
instrumentation.c:Py_DECREF
Line
Count
Source
411
672
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
672
    if (_Py_IsImmortal(op)) {
415
420
        _Py_DECREF_IMMORTAL_STAT_INC();
416
420
        return;
417
420
    }
418
252
    _Py_DECREF_STAT_INC();
419
252
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
252
}
instruction_sequence.c:Py_DECREF
Line
Count
Source
411
1
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
1
    _Py_DECREF_STAT_INC();
419
1
    if (--op->ob_refcnt == 0) {
420
1
        _Py_Dealloc(op);
421
1
    }
422
1
}
intrinsics.c:Py_DECREF
Line
Count
Source
411
51.9k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
51.9k
    if (_Py_IsImmortal(op)) {
415
29.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
29.2k
        return;
417
29.2k
    }
418
22.7k
    _Py_DECREF_STAT_INC();
419
22.7k
    if (--op->ob_refcnt == 0) {
420
232
        _Py_Dealloc(op);
421
232
    }
422
22.7k
}
Unexecuted instantiation: legacy_tracing.c:Py_DECREF
Unexecuted instantiation: lock.c:Py_DECREF
marshal.c:Py_DECREF
Line
Count
Source
411
1.58M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1.58M
    if (_Py_IsImmortal(op)) {
415
657k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
657k
        return;
417
657k
    }
418
928k
    _Py_DECREF_STAT_INC();
419
928k
    if (--op->ob_refcnt == 0) {
420
8.34k
        _Py_Dealloc(op);
421
8.34k
    }
422
928k
}
modsupport.c:Py_DECREF
Line
Count
Source
411
29.3k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
29.3k
    if (_Py_IsImmortal(op)) {
415
19.5k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
19.5k
        return;
417
19.5k
    }
418
9.79k
    _Py_DECREF_STAT_INC();
419
9.79k
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
9.79k
}
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
411
4.40M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
4.40M
    if (_Py_IsImmortal(op)) {
415
3.71M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
3.71M
        return;
417
3.71M
    }
418
696k
    _Py_DECREF_STAT_INC();
419
696k
    if (--op->ob_refcnt == 0) {
420
20.7k
        _Py_Dealloc(op);
421
20.7k
    }
422
696k
}
Unexecuted instantiation: pyctype.c:Py_DECREF
Unexecuted instantiation: pyhash.c:Py_DECREF
pylifecycle.c:Py_DECREF
Line
Count
Source
411
1.00k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1.00k
    if (_Py_IsImmortal(op)) {
415
196
        _Py_DECREF_IMMORTAL_STAT_INC();
416
196
        return;
417
196
    }
418
812
    _Py_DECREF_STAT_INC();
419
812
    if (--op->ob_refcnt == 0) {
420
84
        _Py_Dealloc(op);
421
84
    }
422
812
}
Unexecuted instantiation: pymath.c:Py_DECREF
Unexecuted instantiation: pystate.c:Py_DECREF
pythonrun.c:Py_DECREF
Line
Count
Source
411
655
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
655
    if (_Py_IsImmortal(op)) {
415
192
        _Py_DECREF_IMMORTAL_STAT_INC();
416
192
        return;
417
192
    }
418
463
    _Py_DECREF_STAT_INC();
419
463
    if (--op->ob_refcnt == 0) {
420
181
        _Py_Dealloc(op);
421
181
    }
422
463
}
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
411
1.88M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1.88M
    if (_Py_IsImmortal(op)) {
415
1.07M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
1.07M
        return;
417
1.07M
    }
418
815k
    _Py_DECREF_STAT_INC();
419
815k
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
815k
}
symtable.c:Py_DECREF
Line
Count
Source
411
1.00M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1.00M
    if (_Py_IsImmortal(op)) {
415
467k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
467k
        return;
417
467k
    }
418
538k
    _Py_DECREF_STAT_INC();
419
538k
    if (--op->ob_refcnt == 0) {
420
250k
        _Py_Dealloc(op);
421
250k
    }
422
538k
}
sysmodule.c:Py_DECREF
Line
Count
Source
411
3.15M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
3.15M
    if (_Py_IsImmortal(op)) {
415
735k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
735k
        return;
417
735k
    }
418
2.41M
    _Py_DECREF_STAT_INC();
419
2.41M
    if (--op->ob_refcnt == 0) {
420
1.78M
        _Py_Dealloc(op);
421
1.78M
    }
422
2.41M
}
Unexecuted instantiation: thread.c:Py_DECREF
traceback.c:Py_DECREF
Line
Count
Source
411
144M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
144M
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
144M
    _Py_DECREF_STAT_INC();
419
144M
    if (--op->ob_refcnt == 0) {
420
39.5M
        _Py_Dealloc(op);
421
39.5M
    }
422
144M
}
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
411
10.2k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
10.2k
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
10.2k
    _Py_DECREF_STAT_INC();
419
10.2k
    if (--op->ob_refcnt == 0) {
420
10.2k
        _Py_Dealloc(op);
421
10.2k
    }
422
10.2k
}
Unexecuted instantiation: suggestions.c:Py_DECREF
Unexecuted instantiation: perf_trampoline.c:Py_DECREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_DECREF
Unexecuted instantiation: remote_debugging.c:Py_DECREF
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
411
2
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
2
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
2
    _Py_DECREF_STAT_INC();
419
2
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
2
}
Unexecuted instantiation: faulthandler.c:Py_DECREF
posixmodule.c:Py_DECREF
Line
Count
Source
411
3.36M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
3.36M
    if (_Py_IsImmortal(op)) {
415
1.17M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
1.17M
        return;
417
1.17M
    }
418
2.19M
    _Py_DECREF_STAT_INC();
419
2.19M
    if (--op->ob_refcnt == 0) {
420
946k
        _Py_Dealloc(op);
421
946k
    }
422
2.19M
}
signalmodule.c:Py_DECREF
Line
Count
Source
411
56
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
56
    if (_Py_IsImmortal(op)) {
415
28
        _Py_DECREF_IMMORTAL_STAT_INC();
416
28
        return;
417
28
    }
418
28
    _Py_DECREF_STAT_INC();
419
28
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
28
}
Unexecuted instantiation: _tracemalloc.c:Py_DECREF
Unexecuted instantiation: _suggestions.c:Py_DECREF
_datetimemodule.c:Py_DECREF
Line
Count
Source
411
551
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
551
    if (_Py_IsImmortal(op)) {
415
60
        _Py_DECREF_IMMORTAL_STAT_INC();
416
60
        return;
417
60
    }
418
491
    _Py_DECREF_STAT_INC();
419
491
    if (--op->ob_refcnt == 0) {
420
6
        _Py_Dealloc(op);
421
6
    }
422
491
}
Unexecuted instantiation: _codecsmodule.c:Py_DECREF
_collectionsmodule.c:Py_DECREF
Line
Count
Source
411
117k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
117k
    if (_Py_IsImmortal(op)) {
415
52.4k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
52.4k
        return;
417
52.4k
    }
418
65.2k
    _Py_DECREF_STAT_INC();
419
65.2k
    if (--op->ob_refcnt == 0) {
420
48.8k
        _Py_Dealloc(op);
421
48.8k
    }
422
65.2k
}
_iomodule.c:Py_DECREF
Line
Count
Source
411
107k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
107k
    if (_Py_IsImmortal(op)) {
415
76.4k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
76.4k
        return;
417
76.4k
    }
418
30.8k
    _Py_DECREF_STAT_INC();
419
30.8k
    if (--op->ob_refcnt == 0) {
420
15.3k
        _Py_Dealloc(op);
421
15.3k
    }
422
30.8k
}
iobase.c:Py_DECREF
Line
Count
Source
411
250k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
250k
    if (_Py_IsImmortal(op)) {
415
203k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
203k
        return;
417
203k
    }
418
46.6k
    _Py_DECREF_STAT_INC();
419
46.6k
    if (--op->ob_refcnt == 0) {
420
23.3k
        _Py_Dealloc(op);
421
23.3k
    }
422
46.6k
}
fileio.c:Py_DECREF
Line
Count
Source
411
23.3k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
23.3k
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
23.3k
    _Py_DECREF_STAT_INC();
419
23.3k
    if (--op->ob_refcnt == 0) {
420
15.4k
        _Py_Dealloc(op);
421
15.4k
    }
422
23.3k
}
bytesio.c:Py_DECREF
Line
Count
Source
411
157k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
157k
    if (_Py_IsImmortal(op)) {
415
77.3k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
77.3k
        return;
417
77.3k
    }
418
80.3k
    _Py_DECREF_STAT_INC();
419
80.3k
    if (--op->ob_refcnt == 0) {
420
6.44k
        _Py_Dealloc(op);
421
6.44k
    }
422
80.3k
}
bufferedio.c:Py_DECREF
Line
Count
Source
411
5.44M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
5.44M
    if (_Py_IsImmortal(op)) {
415
5.18M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
5.18M
        return;
417
5.18M
    }
418
259k
    _Py_DECREF_STAT_INC();
419
259k
    if (--op->ob_refcnt == 0) {
420
221k
        _Py_Dealloc(op);
421
221k
    }
422
259k
}
textio.c:Py_DECREF
Line
Count
Source
411
695k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
695k
    if (_Py_IsImmortal(op)) {
415
194k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
194k
        return;
417
194k
    }
418
500k
    _Py_DECREF_STAT_INC();
419
500k
    if (--op->ob_refcnt == 0) {
420
161k
        _Py_Dealloc(op);
421
161k
    }
422
500k
}
stringio.c:Py_DECREF
Line
Count
Source
411
317k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
317k
    if (_Py_IsImmortal(op)) {
415
164k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
164k
        return;
417
164k
    }
418
152k
    _Py_DECREF_STAT_INC();
419
152k
    if (--op->ob_refcnt == 0) {
420
32.8k
        _Py_Dealloc(op);
421
32.8k
    }
422
152k
}
itertoolsmodule.c:Py_DECREF
Line
Count
Source
411
78.5k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
78.5k
    if (_Py_IsImmortal(op)) {
415
4.27k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
4.27k
        return;
417
4.27k
    }
418
74.3k
    _Py_DECREF_STAT_INC();
419
74.3k
    if (--op->ob_refcnt == 0) {
420
24.7k
        _Py_Dealloc(op);
421
24.7k
    }
422
74.3k
}
sre.c:Py_DECREF
Line
Count
Source
411
484M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
484M
    if (_Py_IsImmortal(op)) {
415
139M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
139M
        return;
417
139M
    }
418
344M
    _Py_DECREF_STAT_INC();
419
344M
    if (--op->ob_refcnt == 0) {
420
16.5M
        _Py_Dealloc(op);
421
16.5M
    }
422
344M
}
Unexecuted instantiation: _sysconfig.c:Py_DECREF
_threadmodule.c:Py_DECREF
Line
Count
Source
411
35.9k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
35.9k
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
35.9k
    _Py_DECREF_STAT_INC();
419
35.9k
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
35.9k
}
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
411
96.5k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
96.5k
    if (_Py_IsImmortal(op)) {
415
19.9k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
19.9k
        return;
417
19.9k
    }
418
76.6k
    _Py_DECREF_STAT_INC();
419
76.6k
    if (--op->ob_refcnt == 0) {
420
4.97k
        _Py_Dealloc(op);
421
4.97k
    }
422
76.6k
}
_functoolsmodule.c:Py_DECREF
Line
Count
Source
411
428k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
428k
    if (_Py_IsImmortal(op)) {
415
107k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
107k
        return;
417
107k
    }
418
321k
    _Py_DECREF_STAT_INC();
419
321k
    if (--op->ob_refcnt == 0) {
420
214k
        _Py_Dealloc(op);
421
214k
    }
422
321k
}
Unexecuted instantiation: _localemodule.c:Py_DECREF
Unexecuted instantiation: _opcode.c:Py_DECREF
_operator.c:Py_DECREF
Line
Count
Source
411
617k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
617k
    if (_Py_IsImmortal(op)) {
415
308k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
308k
        return;
417
308k
    }
418
308k
    _Py_DECREF_STAT_INC();
419
308k
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
308k
}
Unexecuted instantiation: symtablemodule.c:Py_DECREF
Unexecuted instantiation: pwdmodule.c:Py_DECREF
getpath.c:Py_DECREF
Line
Count
Source
411
924
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
924
    if (_Py_IsImmortal(op)) {
415
336
        _Py_DECREF_IMMORTAL_STAT_INC();
416
336
        return;
417
336
    }
418
588
    _Py_DECREF_STAT_INC();
419
588
    if (--op->ob_refcnt == 0) {
420
28
        _Py_Dealloc(op);
421
28
    }
422
588
}
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
411
21.8k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
21.8k
    if (_Py_IsImmortal(op)) {
415
737
        _Py_DECREF_IMMORTAL_STAT_INC();
416
737
        return;
417
737
    }
418
21.1k
    _Py_DECREF_STAT_INC();
419
21.1k
    if (--op->ob_refcnt == 0) {
420
15.2k
        _Py_Dealloc(op);
421
15.2k
    }
422
21.1k
}
Unexecuted instantiation: myreadline.c:Py_DECREF
abstract.c:Py_DECREF
Line
Count
Source
411
619M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
619M
    if (_Py_IsImmortal(op)) {
415
379M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
379M
        return;
417
379M
    }
418
240M
    _Py_DECREF_STAT_INC();
419
240M
    if (--op->ob_refcnt == 0) {
420
2.23M
        _Py_Dealloc(op);
421
2.23M
    }
422
240M
}
Unexecuted instantiation: boolobject.c:Py_DECREF
Unexecuted instantiation: bytes_methods.c:Py_DECREF
bytearrayobject.c:Py_DECREF
Line
Count
Source
411
2.98M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
2.98M
    if (_Py_IsImmortal(op)) {
415
12.8k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
12.8k
        return;
417
12.8k
    }
418
2.97M
    _Py_DECREF_STAT_INC();
419
2.97M
    if (--op->ob_refcnt == 0) {
420
2.97M
        _Py_Dealloc(op);
421
2.97M
    }
422
2.97M
}
capsule.c:Py_DECREF
Line
Count
Source
411
10
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
10
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
10
    _Py_DECREF_STAT_INC();
419
10
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
10
}
cellobject.c:Py_DECREF
Line
Count
Source
411
434k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
434k
    if (_Py_IsImmortal(op)) {
415
55.0k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
55.0k
        return;
417
55.0k
    }
418
379k
    _Py_DECREF_STAT_INC();
419
379k
    if (--op->ob_refcnt == 0) {
420
262k
        _Py_Dealloc(op);
421
262k
    }
422
379k
}
classobject.c:Py_DECREF
Line
Count
Source
411
79.5M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
79.5M
    if (_Py_IsImmortal(op)) {
415
10
        _Py_DECREF_IMMORTAL_STAT_INC();
416
10
        return;
417
10
    }
418
79.5M
    _Py_DECREF_STAT_INC();
419
79.5M
    if (--op->ob_refcnt == 0) {
420
5.02k
        _Py_Dealloc(op);
421
5.02k
    }
422
79.5M
}
codeobject.c:Py_DECREF
Line
Count
Source
411
1.07M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1.07M
    if (_Py_IsImmortal(op)) {
415
479k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
479k
        return;
417
479k
    }
418
598k
    _Py_DECREF_STAT_INC();
419
598k
    if (--op->ob_refcnt == 0) {
420
500k
        _Py_Dealloc(op);
421
500k
    }
422
598k
}
Unexecuted instantiation: complexobject.c:Py_DECREF
descrobject.c:Py_DECREF
Line
Count
Source
411
91.9M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
91.9M
    if (_Py_IsImmortal(op)) {
415
10.5M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
10.5M
        return;
417
10.5M
    }
418
81.3M
    _Py_DECREF_STAT_INC();
419
81.3M
    if (--op->ob_refcnt == 0) {
420
48.6M
        _Py_Dealloc(op);
421
48.6M
    }
422
81.3M
}
enumobject.c:Py_DECREF
Line
Count
Source
411
271M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
271M
    if (_Py_IsImmortal(op)) {
415
102M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
102M
        return;
417
102M
    }
418
168M
    _Py_DECREF_STAT_INC();
419
168M
    if (--op->ob_refcnt == 0) {
420
61.5M
        _Py_Dealloc(op);
421
61.5M
    }
422
168M
}
genobject.c:Py_DECREF
Line
Count
Source
411
58.2M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
58.2M
    if (_Py_IsImmortal(op)) {
415
58.1M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
58.1M
        return;
417
58.1M
    }
418
71.5k
    _Py_DECREF_STAT_INC();
419
71.5k
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
71.5k
}
fileobject.c:Py_DECREF
Line
Count
Source
411
207k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
207k
    if (_Py_IsImmortal(op)) {
415
200k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
200k
        return;
417
200k
    }
418
6.75k
    _Py_DECREF_STAT_INC();
419
6.75k
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
6.75k
}
frameobject.c:Py_DECREF
Line
Count
Source
411
31.0M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
31.0M
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
31.0M
    _Py_DECREF_STAT_INC();
419
31.0M
    if (--op->ob_refcnt == 0) {
420
7.53M
        _Py_Dealloc(op);
421
7.53M
    }
422
31.0M
}
funcobject.c:Py_DECREF
Line
Count
Source
411
125M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
125M
    if (_Py_IsImmortal(op)) {
415
71.8M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
71.8M
        return;
417
71.8M
    }
418
54.1M
    _Py_DECREF_STAT_INC();
419
54.1M
    if (--op->ob_refcnt == 0) {
420
482k
        _Py_Dealloc(op);
421
482k
    }
422
54.1M
}
interpolationobject.c:Py_DECREF
Line
Count
Source
411
28
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
28
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
28
    _Py_DECREF_STAT_INC();
419
28
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
28
}
iterobject.c:Py_DECREF
Line
Count
Source
411
2.05M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
2.05M
    if (_Py_IsImmortal(op)) {
415
791k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
791k
        return;
417
791k
    }
418
1.26M
    _Py_DECREF_STAT_INC();
419
1.26M
    if (--op->ob_refcnt == 0) {
420
395k
        _Py_Dealloc(op);
421
395k
    }
422
1.26M
}
odictobject.c:Py_DECREF
Line
Count
Source
411
768
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
768
    if (_Py_IsImmortal(op)) {
415
460
        _Py_DECREF_IMMORTAL_STAT_INC();
416
460
        return;
417
460
    }
418
308
    _Py_DECREF_STAT_INC();
419
308
    if (--op->ob_refcnt == 0) {
420
184
        _Py_Dealloc(op);
421
184
    }
422
308
}
methodobject.c:Py_DECREF
Line
Count
Source
411
334M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
334M
    if (_Py_IsImmortal(op)) {
415
7.06M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
7.06M
        return;
417
7.06M
    }
418
327M
    _Py_DECREF_STAT_INC();
419
327M
    if (--op->ob_refcnt == 0) {
420
249M
        _Py_Dealloc(op);
421
249M
    }
422
327M
}
namespaceobject.c:Py_DECREF
Line
Count
Source
411
28
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
28
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
28
    _Py_DECREF_STAT_INC();
419
28
    if (--op->ob_refcnt == 0) {
420
28
        _Py_Dealloc(op);
421
28
    }
422
28
}
Unexecuted instantiation: _contextvars.c:Py_DECREF
Python-ast.c:Py_DECREF
Line
Count
Source
411
2.72M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
2.72M
    if (_Py_IsImmortal(op)) {
415
1.51M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
1.51M
        return;
417
1.51M
    }
418
1.20M
    _Py_DECREF_STAT_INC();
419
1.20M
    if (--op->ob_refcnt == 0) {
420
339k
        _Py_Dealloc(op);
421
339k
    }
422
1.20M
}
Unexecuted instantiation: Python-tokenize.c:Py_DECREF
Unexecuted instantiation: asdl.c:Py_DECREF
assemble.c:Py_DECREF
Line
Count
Source
411
59.6k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
59.6k
    if (_Py_IsImmortal(op)) {
415
9.89k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
9.89k
        return;
417
9.89k
    }
418
49.7k
    _Py_DECREF_STAT_INC();
419
49.7k
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
49.7k
}
Unexecuted instantiation: ast.c:Py_DECREF
ast_preprocess.c:Py_DECREF
Line
Count
Source
411
3
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
3
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
3
    _Py_DECREF_STAT_INC();
419
3
    if (--op->ob_refcnt == 0) {
420
3
        _Py_Dealloc(op);
421
3
    }
422
3
}
ast_unparse.c:Py_DECREF
Line
Count
Source
411
8
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
8
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
8
    _Py_DECREF_STAT_INC();
419
8
    if (--op->ob_refcnt == 0) {
420
8
        _Py_Dealloc(op);
421
8
    }
422
8
}
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
structmember.c:Py_DECREF
Line
Count
Source
411
1.68k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1.68k
    if (_Py_IsImmortal(op)) {
415
1.31k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
1.31k
        return;
417
1.31k
    }
418
370
    _Py_DECREF_STAT_INC();
419
370
    if (--op->ob_refcnt == 0) {
420
30
        _Py_Dealloc(op);
421
30
    }
422
370
}
pegen.c:Py_DECREF
Line
Count
Source
411
129k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
129k
    if (_Py_IsImmortal(op)) {
415
48.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
48.2k
        return;
417
48.2k
    }
418
80.8k
    _Py_DECREF_STAT_INC();
419
80.8k
    if (--op->ob_refcnt == 0) {
420
61.8k
        _Py_Dealloc(op);
421
61.8k
    }
422
80.8k
}
pegen_errors.c:Py_DECREF
Line
Count
Source
411
39.9k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
39.9k
    if (_Py_IsImmortal(op)) {
415
1.98k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
1.98k
        return;
417
1.98k
    }
418
37.9k
    _Py_DECREF_STAT_INC();
419
37.9k
    if (--op->ob_refcnt == 0) {
420
2.77k
        _Py_Dealloc(op);
421
2.77k
    }
422
37.9k
}
Unexecuted instantiation: parser.c:Py_DECREF
Unexecuted instantiation: buffer.c:Py_DECREF
lexer.c:Py_DECREF
Line
Count
Source
411
12.3k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
12.3k
    if (_Py_IsImmortal(op)) {
415
645
        _Py_DECREF_IMMORTAL_STAT_INC();
416
645
        return;
417
645
    }
418
11.6k
    _Py_DECREF_STAT_INC();
419
11.6k
    if (--op->ob_refcnt == 0) {
420
11.6k
        _Py_Dealloc(op);
421
11.6k
    }
422
11.6k
}
state.c:Py_DECREF
Line
Count
Source
411
21.3k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
21.3k
    if (_Py_IsImmortal(op)) {
415
388
        _Py_DECREF_IMMORTAL_STAT_INC();
416
388
        return;
417
388
    }
418
20.9k
    _Py_DECREF_STAT_INC();
419
20.9k
    if (--op->ob_refcnt == 0) {
420
2.24k
        _Py_Dealloc(op);
421
2.24k
    }
422
20.9k
}
Unexecuted instantiation: readline_tokenizer.c:Py_DECREF
Unexecuted instantiation: string_tokenizer.c:Py_DECREF
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
411
39.3k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
39.3k
    if (_Py_IsImmortal(op)) {
415
2.59k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
2.59k
        return;
417
2.59k
    }
418
36.7k
    _Py_DECREF_STAT_INC();
419
36.7k
    if (--op->ob_refcnt == 0) {
420
36.7k
        _Py_Dealloc(op);
421
36.7k
    }
422
36.7k
}
423
14.7G
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
424
#endif
425
426
427
/* Safely decref `op` and set `op` to NULL, especially useful in tp_clear
428
 * and tp_dealloc implementations.
429
 *
430
 * Note that "the obvious" code can be deadly:
431
 *
432
 *     Py_XDECREF(op);
433
 *     op = NULL;
434
 *
435
 * Typically, `op` is something like self->containee, and `self` is done
436
 * using its `containee` member.  In the code sequence above, suppose
437
 * `containee` is non-NULL with a refcount of 1.  Its refcount falls to
438
 * 0 on the first line, which can trigger an arbitrary amount of code,
439
 * possibly including finalizers (like __del__ methods or weakref callbacks)
440
 * coded in Python, which in turn can release the GIL and allow other threads
441
 * to run, etc.  Such code may even invoke methods of `self` again, or cause
442
 * cyclic gc to trigger, but-- oops! --self->containee still points to the
443
 * object being torn down, and it may be in an insane state while being torn
444
 * down.  This has in fact been a rich historic source of miserable (rare &
445
 * hard-to-diagnose) segfaulting (and other) bugs.
446
 *
447
 * The safe way is:
448
 *
449
 *      Py_CLEAR(op);
450
 *
451
 * That arranges to set `op` to NULL _before_ decref'ing, so that any code
452
 * triggered as a side-effect of `op` getting torn down no longer believes
453
 * `op` points to a valid object.
454
 *
455
 * There are cases where it's safe to use the naive code, but they're brittle.
456
 * For example, if `op` points to a Python integer, you know that destroying
457
 * one of those can't cause problems -- but in part that relies on that
458
 * Python integers aren't currently weakly referencable.  Best practice is
459
 * to use Py_CLEAR() even if you can't think of a reason for why you need to.
460
 *
461
 * gh-98724: Use a temporary variable to only evaluate the macro argument once,
462
 * to avoid the duplication of side effects if the argument has side effects.
463
 *
464
 * gh-99701: If the PyObject* type is used with casting arguments to PyObject*,
465
 * the code can be miscompiled with strict aliasing because of type punning.
466
 * With strict aliasing, a compiler considers that two pointers of different
467
 * types cannot read or write the same memory which enables optimization
468
 * opportunities.
469
 *
470
 * If available, use _Py_TYPEOF() to use the 'op' type for temporary variables,
471
 * and so avoid type punning. Otherwise, use memcpy() which causes type erasure
472
 * and so prevents the compiler to reuse an old cached 'op' value after
473
 * Py_CLEAR().
474
 */
475
#ifdef _Py_TYPEOF
476
#define Py_CLEAR(op) \
477
2.25G
    do { \
478
2.25G
        _Py_TYPEOF(op)* _tmp_op_ptr = &(op); \
479
2.25G
        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
480
2.25G
        if (_tmp_old_op != NULL) { \
481
525M
            *_tmp_op_ptr = _Py_NULL; \
482
525M
            Py_DECREF(_tmp_old_op); \
483
525M
        } \
484
2.25G
    } while (0)
485
#else
486
#define Py_CLEAR(op) \
487
    do { \
488
        PyObject **_tmp_op_ptr = _Py_CAST(PyObject**, &(op)); \
489
        PyObject *_tmp_old_op = (*_tmp_op_ptr); \
490
        if (_tmp_old_op != NULL) { \
491
            PyObject *_null_ptr = _Py_NULL; \
492
            memcpy(_tmp_op_ptr, &_null_ptr, sizeof(PyObject*)); \
493
            Py_DECREF(_tmp_old_op); \
494
        } \
495
    } while (0)
496
#endif
497
498
499
/* Function to use in case the object pointer can be NULL: */
500
static inline void Py_XINCREF(PyObject *op)
501
1.99G
{
502
1.99G
    if (op != _Py_NULL) {
503
867M
        Py_INCREF(op);
504
867M
    }
505
1.99G
}
Unexecuted instantiation: bytesobject.c:Py_XINCREF
Unexecuted instantiation: call.c:Py_XINCREF
exceptions.c:Py_XINCREF
Line
Count
Source
501
106M
{
502
106M
    if (op != _Py_NULL) {
503
17.3M
        Py_INCREF(op);
504
17.3M
    }
505
106M
}
Unexecuted instantiation: genericaliasobject.c:Py_XINCREF
Unexecuted instantiation: floatobject.c:Py_XINCREF
listobject.c:Py_XINCREF
Line
Count
Source
501
4.41M
{
502
4.41M
    if (op != _Py_NULL) {
503
4.41M
        Py_INCREF(op);
504
4.41M
    }
505
4.41M
}
Unexecuted instantiation: longobject.c:Py_XINCREF
dictobject.c:Py_XINCREF
Line
Count
Source
501
698M
{
502
698M
    if (op != _Py_NULL) {
503
228M
        Py_INCREF(op);
504
228M
    }
505
698M
}
Unexecuted instantiation: memoryobject.c:Py_XINCREF
Unexecuted instantiation: moduleobject.c:Py_XINCREF
Unexecuted instantiation: object.c:Py_XINCREF
Unexecuted instantiation: obmalloc.c:Py_XINCREF
Unexecuted instantiation: picklebufobject.c:Py_XINCREF
Unexecuted instantiation: rangeobject.c:Py_XINCREF
Unexecuted instantiation: setobject.c:Py_XINCREF
Unexecuted instantiation: sliceobject.c:Py_XINCREF
Unexecuted instantiation: structseq.c:Py_XINCREF
Unexecuted instantiation: templateobject.c:Py_XINCREF
Unexecuted instantiation: tupleobject.c:Py_XINCREF
typeobject.c:Py_XINCREF
Line
Count
Source
501
55.0M
{
502
55.0M
    if (op != _Py_NULL) {
503
54.7M
        Py_INCREF(op);
504
54.7M
    }
505
55.0M
}
typevarobject.c:Py_XINCREF
Line
Count
Source
501
296
{
502
296
    if (op != _Py_NULL) {
503
52
        Py_INCREF(op);
504
52
    }
505
296
}
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
501
324k
{
502
324k
    if (op != _Py_NULL) {
503
34.8k
        Py_INCREF(op);
504
34.8k
    }
505
324k
}
Unexecuted instantiation: _warnings.c:Py_XINCREF
bltinmodule.c:Py_XINCREF
Line
Count
Source
501
589
{
502
589
    if (op != _Py_NULL) {
503
589
        Py_INCREF(op);
504
589
    }
505
589
}
ceval.c:Py_XINCREF
Line
Count
Source
501
270M
{
502
270M
    if (op != _Py_NULL) {
503
83.6M
        Py_INCREF(op);
504
83.6M
    }
505
270M
}
Unexecuted instantiation: codecs.c:Py_XINCREF
Unexecuted instantiation: codegen.c:Py_XINCREF
compile.c:Py_XINCREF
Line
Count
Source
501
12.2k
{
502
12.2k
    if (op != _Py_NULL) {
503
6.09k
        Py_INCREF(op);
504
6.09k
    }
505
12.2k
}
context.c:Py_XINCREF
Line
Count
Source
501
182k
{
502
182k
    if (op != _Py_NULL) {
503
0
        Py_INCREF(op);
504
0
    }
505
182k
}
errors.c:Py_XINCREF
Line
Count
Source
501
43.0M
{
502
43.0M
    if (op != _Py_NULL) {
503
42.9M
        Py_INCREF(op);
504
42.9M
    }
505
43.0M
}
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
501
40.8k
{
502
40.8k
    if (op != _Py_NULL) {
503
33.9k
        Py_INCREF(op);
504
33.9k
    }
505
40.8k
}
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
501
579k
{
502
579k
    if (op != _Py_NULL) {
503
579k
        Py_INCREF(op);
504
579k
    }
505
579k
}
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: symtable.c:Py_XINCREF
sysmodule.c:Py_XINCREF
Line
Count
Source
501
28
{
502
28
    if (op != _Py_NULL) {
503
28
        Py_INCREF(op);
504
28
    }
505
28
}
Unexecuted instantiation: thread.c:Py_XINCREF
traceback.c:Py_XINCREF
Line
Count
Source
501
112M
{
502
112M
    if (op != _Py_NULL) {
503
72.2M
        Py_INCREF(op);
504
72.2M
    }
505
112M
}
Unexecuted instantiation: tracemalloc.c:Py_XINCREF
Unexecuted instantiation: getopt.c:Py_XINCREF
Unexecuted instantiation: pystrcmp.c:Py_XINCREF
Unexecuted instantiation: pystrtod.c:Py_XINCREF
Unexecuted instantiation: pystrhex.c:Py_XINCREF
Unexecuted instantiation: dtoa.c:Py_XINCREF
Unexecuted instantiation: fileutils.c:Py_XINCREF
Unexecuted instantiation: suggestions.c:Py_XINCREF
Unexecuted instantiation: perf_trampoline.c:Py_XINCREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_XINCREF
Unexecuted instantiation: remote_debugging.c:Py_XINCREF
Unexecuted instantiation: dynload_shlib.c:Py_XINCREF
Unexecuted instantiation: config.c:Py_XINCREF
Unexecuted instantiation: gcmodule.c:Py_XINCREF
Unexecuted instantiation: _asynciomodule.c:Py_XINCREF
Unexecuted instantiation: atexitmodule.c:Py_XINCREF
Unexecuted instantiation: faulthandler.c:Py_XINCREF
posixmodule.c:Py_XINCREF
Line
Count
Source
501
134k
{
502
134k
    if (op != _Py_NULL) {
503
134k
        Py_INCREF(op);
504
134k
    }
505
134k
}
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
501
56
{
502
56
    if (op != _Py_NULL) {
503
0
        Py_INCREF(op);
504
0
    }
505
56
}
Unexecuted instantiation: _codecsmodule.c:Py_XINCREF
_collectionsmodule.c:Py_XINCREF
Line
Count
Source
501
4
{
502
4
    if (op != _Py_NULL) {
503
4
        Py_INCREF(op);
504
4
    }
505
4
}
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
501
6.75k
{
502
6.75k
    if (op != _Py_NULL) {
503
6.75k
        Py_INCREF(op);
504
6.75k
    }
505
6.75k
}
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
501
4
{
502
4
    if (op != _Py_NULL) {
503
2
        Py_INCREF(op);
504
2
    }
505
4
}
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
501
1.13k
{
502
1.13k
    if (op != _Py_NULL) {
503
1.13k
        Py_INCREF(op);
504
1.13k
    }
505
1.13k
}
Unexecuted instantiation: _functoolsmodule.c:Py_XINCREF
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
501
84
{
502
84
    if (op != _Py_NULL) {
503
84
        Py_INCREF(op);
504
84
    }
505
84
}
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
501
27.1M
{
502
27.1M
    if (op != _Py_NULL) {
503
26.6M
        Py_INCREF(op);
504
26.6M
    }
505
27.1M
}
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
501
7.80M
{
502
7.80M
    if (op != _Py_NULL) {
503
123k
        Py_INCREF(op);
504
123k
    }
505
7.80M
}
Unexecuted instantiation: classobject.c:Py_XINCREF
codeobject.c:Py_XINCREF
Line
Count
Source
501
8.01k
{
502
8.01k
    if (op != _Py_NULL) {
503
8.01k
        Py_INCREF(op);
504
8.01k
    }
505
8.01k
}
Unexecuted instantiation: complexobject.c:Py_XINCREF
descrobject.c:Py_XINCREF
Line
Count
Source
501
79.6k
{
502
79.6k
    if (op != _Py_NULL) {
503
76.8k
        Py_INCREF(op);
504
76.8k
    }
505
79.6k
}
Unexecuted instantiation: enumobject.c:Py_XINCREF
genobject.c:Py_XINCREF
Line
Count
Source
501
1.93k
{
502
1.93k
    if (op != _Py_NULL) {
503
0
        Py_INCREF(op);
504
0
    }
505
1.93k
}
Unexecuted instantiation: fileobject.c:Py_XINCREF
frameobject.c:Py_XINCREF
Line
Count
Source
501
8.64M
{
502
8.64M
    if (op != _Py_NULL) {
503
8.64M
        Py_INCREF(op);
504
8.64M
    }
505
8.64M
}
funcobject.c:Py_XINCREF
Line
Count
Source
501
21.2k
{
502
21.2k
    if (op != _Py_NULL) {
503
16
        Py_INCREF(op);
504
16
    }
505
21.2k
}
Unexecuted instantiation: interpolationobject.c:Py_XINCREF
Unexecuted instantiation: iterobject.c:Py_XINCREF
Unexecuted instantiation: odictobject.c:Py_XINCREF
methodobject.c:Py_XINCREF
Line
Count
Source
501
653M
{
502
653M
    if (op != _Py_NULL) {
503
326M
        Py_INCREF(op);
504
326M
    }
505
653M
}
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
structmember.c:Py_XINCREF
Line
Count
Source
501
1.73M
{
502
1.73M
    if (op != _Py_NULL) {
503
1.16M
        Py_INCREF(op);
504
1.16M
    }
505
1.73M
}
pegen.c:Py_XINCREF
Line
Count
Source
501
18.6k
{
502
18.6k
    if (op != _Py_NULL) {
503
446
        Py_INCREF(op);
504
446
    }
505
18.6k
}
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
506
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
507
1.99G
#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
508
#endif
509
510
static inline void Py_XDECREF(PyObject *op)
511
10.0G
{
512
10.0G
    if (op != _Py_NULL) {
513
8.87G
        Py_DECREF(op);
514
8.87G
    }
515
10.0G
}
bytesobject.c:Py_XDECREF
Line
Count
Source
511
8.97M
{
512
8.97M
    if (op != _Py_NULL) {
513
85.5k
        Py_DECREF(op);
514
85.5k
    }
515
8.97M
}
Unexecuted instantiation: call.c:Py_XDECREF
exceptions.c:Py_XDECREF
Line
Count
Source
511
100M
{
512
100M
    if (op != _Py_NULL) {
513
50.4M
        Py_DECREF(op);
514
50.4M
    }
515
100M
}
genericaliasobject.c:Py_XDECREF
Line
Count
Source
511
303
{
512
303
    if (op != _Py_NULL) {
513
202
        Py_DECREF(op);
514
202
    }
515
303
}
floatobject.c:Py_XDECREF
Line
Count
Source
511
595k
{
512
595k
    if (op != _Py_NULL) {
513
21.3k
        Py_DECREF(op);
514
21.3k
    }
515
595k
}
listobject.c:Py_XDECREF
Line
Count
Source
511
1.62G
{
512
1.62G
    if (op != _Py_NULL) {
513
1.58G
        Py_DECREF(op);
514
1.58G
    }
515
1.62G
}
longobject.c:Py_XDECREF
Line
Count
Source
511
14.2M
{
512
14.2M
    if (op != _Py_NULL) {
513
4.83M
        Py_DECREF(op);
514
4.83M
    }
515
14.2M
}
dictobject.c:Py_XDECREF
Line
Count
Source
511
848M
{
512
848M
    if (op != _Py_NULL) {
513
842M
        Py_DECREF(op);
514
842M
    }
515
848M
}
Unexecuted instantiation: memoryobject.c:Py_XDECREF
moduleobject.c:Py_XDECREF
Line
Count
Source
511
24.6k
{
512
24.6k
    if (op != _Py_NULL) {
513
16.5k
        Py_DECREF(op);
514
16.5k
    }
515
24.6k
}
object.c:Py_XDECREF
Line
Count
Source
511
4.94M
{
512
4.94M
    if (op != _Py_NULL) {
513
16.8k
        Py_DECREF(op);
514
16.8k
    }
515
4.94M
}
Unexecuted instantiation: obmalloc.c:Py_XDECREF
Unexecuted instantiation: picklebufobject.c:Py_XDECREF
rangeobject.c:Py_XDECREF
Line
Count
Source
511
84
{
512
84
    if (op != _Py_NULL) {
513
84
        Py_DECREF(op);
514
84
    }
515
84
}
setobject.c:Py_XDECREF
Line
Count
Source
511
285k
{
512
285k
    if (op != _Py_NULL) {
513
28
        Py_DECREF(op);
514
28
    }
515
285k
}
Unexecuted instantiation: sliceobject.c:Py_XDECREF
structseq.c:Py_XDECREF
Line
Count
Source
511
6.06M
{
512
6.06M
    if (op != _Py_NULL) {
513
6.06M
        Py_DECREF(op);
514
6.06M
    }
515
6.06M
}
Unexecuted instantiation: templateobject.c:Py_XDECREF
tupleobject.c:Py_XDECREF
Line
Count
Source
511
5.58G
{
512
5.58G
    if (op != _Py_NULL) {
513
5.58G
        Py_DECREF(op);
514
5.58G
    }
515
5.58G
}
typeobject.c:Py_XDECREF
Line
Count
Source
511
35.4M
{
512
35.4M
    if (op != _Py_NULL) {
513
21.0M
        Py_DECREF(op);
514
21.0M
    }
515
35.4M
}
typevarobject.c:Py_XDECREF
Line
Count
Source
511
108
{
512
108
    if (op != _Py_NULL) {
513
76
        Py_DECREF(op);
514
76
    }
515
108
}
Unexecuted instantiation: unicode_format.c:Py_XDECREF
unicode_formatter.c:Py_XDECREF
Line
Count
Source
511
567
{
512
567
    if (op != _Py_NULL) {
513
256
        Py_DECREF(op);
514
256
    }
515
567
}
Unexecuted instantiation: unicode_writer.c:Py_XDECREF
Unexecuted instantiation: unicodectype.c:Py_XDECREF
unicodeobject.c:Py_XDECREF
Line
Count
Source
511
102M
{
512
102M
    if (op != _Py_NULL) {
513
74.9M
        Py_DECREF(op);
514
74.9M
    }
515
102M
}
unionobject.c:Py_XDECREF
Line
Count
Source
511
858
{
512
858
    if (op != _Py_NULL) {
513
48
        Py_DECREF(op);
514
48
    }
515
858
}
weakrefobject.c:Py_XDECREF
Line
Count
Source
511
333k
{
512
333k
    if (op != _Py_NULL) {
513
4.33k
        Py_DECREF(op);
514
4.33k
    }
515
333k
}
_warnings.c:Py_XDECREF
Line
Count
Source
511
3.55M
{
512
3.55M
    if (op != _Py_NULL) {
513
3.13M
        Py_DECREF(op);
514
3.13M
    }
515
3.55M
}
bltinmodule.c:Py_XDECREF
Line
Count
Source
511
11.1M
{
512
11.1M
    if (op != _Py_NULL) {
513
749k
        Py_DECREF(op);
514
749k
    }
515
11.1M
}
ceval.c:Py_XDECREF
Line
Count
Source
511
319k
{
512
319k
    if (op != _Py_NULL) {
513
6.14k
        Py_DECREF(op);
514
6.14k
    }
515
319k
}
codecs.c:Py_XDECREF
Line
Count
Source
511
238k
{
512
238k
    if (op != _Py_NULL) {
513
158k
        Py_DECREF(op);
514
158k
    }
515
238k
}
Unexecuted instantiation: codegen.c:Py_XDECREF
compile.c:Py_XDECREF
Line
Count
Source
511
34.0k
{
512
34.0k
    if (op != _Py_NULL) {
513
10.3k
        Py_DECREF(op);
514
10.3k
    }
515
34.0k
}
Unexecuted instantiation: context.c:Py_XDECREF
errors.c:Py_XDECREF
Line
Count
Source
511
254M
{
512
254M
    if (op != _Py_NULL) {
513
35.6M
        Py_DECREF(op);
514
35.6M
    }
515
254M
}
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
511
161k
{
512
161k
    if (op != _Py_NULL) {
513
0
        Py_DECREF(op);
514
0
    }
515
161k
}
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
511
6.15M
{
512
6.15M
    if (op != _Py_NULL) {
513
4.32M
        Py_DECREF(op);
514
4.32M
    }
515
6.15M
}
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
511
17.0k
{
512
17.0k
    if (op != _Py_NULL) {
513
0
        Py_DECREF(op);
514
0
    }
515
17.0k
}
intrinsics.c:Py_XDECREF
Line
Count
Source
511
24.7k
{
512
24.7k
    if (op != _Py_NULL) {
513
24.7k
        Py_DECREF(op);
514
24.7k
    }
515
24.7k
}
Unexecuted instantiation: legacy_tracing.c:Py_XDECREF
Unexecuted instantiation: lock.c:Py_XDECREF
marshal.c:Py_XDECREF
Line
Count
Source
511
1.56M
{
512
1.56M
    if (op != _Py_NULL) {
513
1.56M
        Py_DECREF(op);
514
1.56M
    }
515
1.56M
}
modsupport.c:Py_XDECREF
Line
Count
Source
511
11.2k
{
512
11.2k
    if (op != _Py_NULL) {
513
11.2k
        Py_DECREF(op);
514
11.2k
    }
515
11.2k
}
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
511
168
{
512
168
    if (op != _Py_NULL) {
513
168
        Py_DECREF(op);
514
168
    }
515
168
}
Unexecuted instantiation: pymath.c:Py_XDECREF
Unexecuted instantiation: pystate.c:Py_XDECREF
pythonrun.c:Py_XDECREF
Line
Count
Source
511
543
{
512
543
    if (op != _Py_NULL) {
513
362
        Py_DECREF(op);
514
362
    }
515
543
}
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
511
3.16M
{
512
3.16M
    if (op != _Py_NULL) {
513
1.88M
        Py_DECREF(op);
514
1.88M
    }
515
3.16M
}
symtable.c:Py_XDECREF
Line
Count
Source
511
207k
{
512
207k
    if (op != _Py_NULL) {
513
163k
        Py_DECREF(op);
514
163k
    }
515
207k
}
sysmodule.c:Py_XDECREF
Line
Count
Source
511
2.40M
{
512
2.40M
    if (op != _Py_NULL) {
513
1.81M
        Py_DECREF(op);
514
1.81M
    }
515
2.40M
}
Unexecuted instantiation: thread.c:Py_XDECREF
traceback.c:Py_XDECREF
Line
Count
Source
511
224M
{
512
224M
    if (op != _Py_NULL) {
513
144M
        Py_DECREF(op);
514
144M
    }
515
224M
}
Unexecuted instantiation: tracemalloc.c:Py_XDECREF
Unexecuted instantiation: getopt.c:Py_XDECREF
Unexecuted instantiation: pystrcmp.c:Py_XDECREF
Unexecuted instantiation: pystrtod.c:Py_XDECREF
Unexecuted instantiation: pystrhex.c:Py_XDECREF
Unexecuted instantiation: dtoa.c:Py_XDECREF
Unexecuted instantiation: fileutils.c:Py_XDECREF
Unexecuted instantiation: suggestions.c:Py_XDECREF
Unexecuted instantiation: perf_trampoline.c:Py_XDECREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_XDECREF
Unexecuted instantiation: remote_debugging.c:Py_XDECREF
Unexecuted instantiation: dynload_shlib.c:Py_XDECREF
Unexecuted instantiation: config.c:Py_XDECREF
Unexecuted instantiation: gcmodule.c:Py_XDECREF
Unexecuted instantiation: _asynciomodule.c:Py_XDECREF
Unexecuted instantiation: atexitmodule.c:Py_XDECREF
Unexecuted instantiation: faulthandler.c:Py_XDECREF
posixmodule.c:Py_XDECREF
Line
Count
Source
511
965k
{
512
965k
    if (op != _Py_NULL) {
513
829k
        Py_DECREF(op);
514
829k
    }
515
965k
}
signalmodule.c:Py_XDECREF
Line
Count
Source
511
1.79k
{
512
1.79k
    if (op != _Py_NULL) {
513
0
        Py_DECREF(op);
514
0
    }
515
1.79k
}
Unexecuted instantiation: _tracemalloc.c:Py_XDECREF
Unexecuted instantiation: _suggestions.c:Py_XDECREF
_datetimemodule.c:Py_XDECREF
Line
Count
Source
511
25
{
512
25
    if (op != _Py_NULL) {
513
12
        Py_DECREF(op);
514
12
    }
515
25
}
Unexecuted instantiation: _codecsmodule.c:Py_XDECREF
_collectionsmodule.c:Py_XDECREF
Line
Count
Source
511
4
{
512
4
    if (op != _Py_NULL) {
513
0
        Py_DECREF(op);
514
0
    }
515
4
}
Unexecuted instantiation: errnomodule.c:Py_XDECREF
Unexecuted instantiation: _iomodule.c:Py_XDECREF
Unexecuted instantiation: iobase.c:Py_XDECREF
Unexecuted instantiation: fileio.c:Py_XDECREF
bytesio.c:Py_XDECREF
Line
Count
Source
511
32.8k
{
512
32.8k
    if (op != _Py_NULL) {
513
32.8k
        Py_DECREF(op);
514
32.8k
    }
515
32.8k
}
bufferedio.c:Py_XDECREF
Line
Count
Source
511
34.3k
{
512
34.3k
    if (op != _Py_NULL) {
513
6.75k
        Py_DECREF(op);
514
6.75k
    }
515
34.3k
}
textio.c:Py_XDECREF
Line
Count
Source
511
33.0k
{
512
33.0k
    if (op != _Py_NULL) {
513
56
        Py_DECREF(op);
514
56
    }
515
33.0k
}
Unexecuted instantiation: stringio.c:Py_XDECREF
itertoolsmodule.c:Py_XDECREF
Line
Count
Source
511
27.4k
{
512
27.4k
    if (op != _Py_NULL) {
513
4.34k
        Py_DECREF(op);
514
4.34k
    }
515
27.4k
}
sre.c:Py_XDECREF
Line
Count
Source
511
97.8M
{
512
97.8M
    if (op != _Py_NULL) {
513
97.8M
        Py_DECREF(op);
514
97.8M
    }
515
97.8M
}
Unexecuted instantiation: _sysconfig.c:Py_XDECREF
Unexecuted instantiation: _threadmodule.c:Py_XDECREF
Unexecuted instantiation: timemodule.c:Py_XDECREF
Unexecuted instantiation: _typesmodule.c:Py_XDECREF
Unexecuted instantiation: _typingmodule.c:Py_XDECREF
Unexecuted instantiation: _weakref.c:Py_XDECREF
_abc.c:Py_XDECREF
Line
Count
Source
511
26.5k
{
512
26.5k
    if (op != _Py_NULL) {
513
24.7k
        Py_DECREF(op);
514
24.7k
    }
515
26.5k
}
_functoolsmodule.c:Py_XDECREF
Line
Count
Source
511
77
{
512
77
    if (op != _Py_NULL) {
513
0
        Py_DECREF(op);
514
0
    }
515
77
}
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
511
2.90k
{
512
2.90k
    if (op != _Py_NULL) {
513
2.90k
        Py_DECREF(op);
514
2.90k
    }
515
2.90k
}
Unexecuted instantiation: myreadline.c:Py_XDECREF
abstract.c:Py_XDECREF
Line
Count
Source
511
338k
{
512
338k
    if (op != _Py_NULL) {
513
161k
        Py_DECREF(op);
514
161k
    }
515
338k
}
Unexecuted instantiation: boolobject.c:Py_XDECREF
Unexecuted instantiation: bytes_methods.c:Py_XDECREF
bytearrayobject.c:Py_XDECREF
Line
Count
Source
511
2.98M
{
512
2.98M
    if (op != _Py_NULL) {
513
2.98M
        Py_DECREF(op);
514
2.98M
    }
515
2.98M
}
capsule.c:Py_XDECREF
Line
Count
Source
511
5
{
512
5
    if (op != _Py_NULL) {
513
5
        Py_DECREF(op);
514
5
    }
515
5
}
cellobject.c:Py_XDECREF
Line
Count
Source
511
7.80M
{
512
7.80M
    if (op != _Py_NULL) {
513
434k
        Py_DECREF(op);
514
434k
    }
515
7.80M
}
classobject.c:Py_XDECREF
Line
Count
Source
511
39.7M
{
512
39.7M
    if (op != _Py_NULL) {
513
39.7M
        Py_DECREF(op);
514
39.7M
    }
515
39.7M
}
codeobject.c:Py_XDECREF
Line
Count
Source
511
1.20M
{
512
1.20M
    if (op != _Py_NULL) {
513
1.04M
        Py_DECREF(op);
514
1.04M
    }
515
1.20M
}
Unexecuted instantiation: complexobject.c:Py_XDECREF
descrobject.c:Py_XDECREF
Line
Count
Source
511
31.9M
{
512
31.9M
    if (op != _Py_NULL) {
513
22.9M
        Py_DECREF(op);
514
22.9M
    }
515
31.9M
}
enumobject.c:Py_XDECREF
Line
Count
Source
511
23.8M
{
512
23.8M
    if (op != _Py_NULL) {
513
15.9M
        Py_DECREF(op);
514
15.9M
    }
515
23.8M
}
genobject.c:Py_XDECREF
Line
Count
Source
511
969
{
512
969
    if (op != _Py_NULL) {
513
0
        Py_DECREF(op);
514
0
    }
515
969
}
Unexecuted instantiation: fileobject.c:Py_XDECREF
Unexecuted instantiation: frameobject.c:Py_XDECREF
funcobject.c:Py_XDECREF
Line
Count
Source
511
4.83k
{
512
4.83k
    if (op != _Py_NULL) {
513
1.67k
        Py_DECREF(op);
514
1.67k
    }
515
4.83k
}
Unexecuted instantiation: interpolationobject.c:Py_XDECREF
iterobject.c:Py_XDECREF
Line
Count
Source
511
2.05M
{
512
2.05M
    if (op != _Py_NULL) {
513
395k
        Py_DECREF(op);
514
395k
    }
515
2.05M
}
odictobject.c:Py_XDECREF
Line
Count
Source
511
324
{
512
324
    if (op != _Py_NULL) {
513
276
        Py_DECREF(op);
514
276
    }
515
324
}
methodobject.c:Py_XDECREF
Line
Count
Source
511
979M
{
512
979M
    if (op != _Py_NULL) {
513
334M
        Py_DECREF(op);
514
334M
    }
515
979M
}
Unexecuted instantiation: namespaceobject.c:Py_XDECREF
Unexecuted instantiation: _contextvars.c:Py_XDECREF
Python-ast.c:Py_XDECREF
Line
Count
Source
511
282
{
512
282
    if (op != _Py_NULL) {
513
188
        Py_DECREF(op);
514
188
    }
515
282
}
Unexecuted instantiation: Python-tokenize.c:Py_XDECREF
Unexecuted instantiation: asdl.c:Py_XDECREF
assemble.c:Py_XDECREF
Line
Count
Source
511
59.6k
{
512
59.6k
    if (op != _Py_NULL) {
513
59.6k
        Py_DECREF(op);
514
59.6k
    }
515
59.6k
}
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
structmember.c:Py_XDECREF
Line
Count
Source
511
1.16M
{
512
1.16M
    if (op != _Py_NULL) {
513
1.68k
        Py_DECREF(op);
514
1.68k
    }
515
1.16M
}
pegen.c:Py_XDECREF
Line
Count
Source
511
30.6k
{
512
30.6k
    if (op != _Py_NULL) {
513
1.43k
        Py_DECREF(op);
514
1.43k
    }
515
30.6k
}
pegen_errors.c:Py_XDECREF
Line
Count
Source
511
8.98k
{
512
8.98k
    if (op != _Py_NULL) {
513
7.69k
        Py_DECREF(op);
514
7.69k
    }
515
8.98k
}
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
511
111k
{
512
111k
    if (op != _Py_NULL) {
513
21.3k
        Py_DECREF(op);
514
21.3k
    }
515
111k
}
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
511
30.6k
{
512
30.6k
    if (op != _Py_NULL) {
513
30.6k
        Py_DECREF(op);
514
30.6k
    }
515
30.6k
}
516
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
517
10.0G
#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
518
#endif
519
520
// Create a new strong reference to an object:
521
// increment the reference count of the object and return the object.
522
PyAPI_FUNC(PyObject*) Py_NewRef(PyObject *obj);
523
524
// Similar to Py_NewRef(), but the object can be NULL.
525
PyAPI_FUNC(PyObject*) Py_XNewRef(PyObject *obj);
526
527
static inline PyObject* _Py_NewRef(PyObject *obj)
528
11.5G
{
529
11.5G
    Py_INCREF(obj);
530
11.5G
    return obj;
531
11.5G
}
bytesobject.c:_Py_NewRef
Line
Count
Source
528
448k
{
529
448k
    Py_INCREF(obj);
530
448k
    return obj;
531
448k
}
call.c:_Py_NewRef
Line
Count
Source
528
28.6M
{
529
28.6M
    Py_INCREF(obj);
530
28.6M
    return obj;
531
28.6M
}
exceptions.c:_Py_NewRef
Line
Count
Source
528
137M
{
529
137M
    Py_INCREF(obj);
530
137M
    return obj;
531
137M
}
genericaliasobject.c:_Py_NewRef
Line
Count
Source
528
1.43k
{
529
1.43k
    Py_INCREF(obj);
530
1.43k
    return obj;
531
1.43k
}
Unexecuted instantiation: floatobject.c:_Py_NewRef
listobject.c:_Py_NewRef
Line
Count
Source
528
1.25G
{
529
1.25G
    Py_INCREF(obj);
530
1.25G
    return obj;
531
1.25G
}
longobject.c:_Py_NewRef
Line
Count
Source
528
10.1M
{
529
10.1M
    Py_INCREF(obj);
530
10.1M
    return obj;
531
10.1M
}
dictobject.c:_Py_NewRef
Line
Count
Source
528
1.55G
{
529
1.55G
    Py_INCREF(obj);
530
1.55G
    return obj;
531
1.55G
}
memoryobject.c:_Py_NewRef
Line
Count
Source
528
1.26M
{
529
1.26M
    Py_INCREF(obj);
530
1.26M
    return obj;
531
1.26M
}
moduleobject.c:_Py_NewRef
Line
Count
Source
528
7.70k
{
529
7.70k
    Py_INCREF(obj);
530
7.70k
    return obj;
531
7.70k
}
object.c:_Py_NewRef
Line
Count
Source
528
155M
{
529
155M
    Py_INCREF(obj);
530
155M
    return obj;
531
155M
}
Unexecuted instantiation: obmalloc.c:_Py_NewRef
Unexecuted instantiation: picklebufobject.c:_Py_NewRef
rangeobject.c:_Py_NewRef
Line
Count
Source
528
84
{
529
84
    Py_INCREF(obj);
530
84
    return obj;
531
84
}
setobject.c:_Py_NewRef
Line
Count
Source
528
7.09M
{
529
7.09M
    Py_INCREF(obj);
530
7.09M
    return obj;
531
7.09M
}
sliceobject.c:_Py_NewRef
Line
Count
Source
528
59.3M
{
529
59.3M
    Py_INCREF(obj);
530
59.3M
    return obj;
531
59.3M
}
Unexecuted instantiation: structseq.c:_Py_NewRef
templateobject.c:_Py_NewRef
Line
Count
Source
528
4
{
529
4
    Py_INCREF(obj);
530
4
    return obj;
531
4
}
tupleobject.c:_Py_NewRef
Line
Count
Source
528
5.26G
{
529
5.26G
    Py_INCREF(obj);
530
5.26G
    return obj;
531
5.26G
}
typeobject.c:_Py_NewRef
Line
Count
Source
528
137M
{
529
137M
    Py_INCREF(obj);
530
137M
    return obj;
531
137M
}
typevarobject.c:_Py_NewRef
Line
Count
Source
528
188
{
529
188
    Py_INCREF(obj);
530
188
    return obj;
531
188
}
unicode_format.c:_Py_NewRef
Line
Count
Source
528
54.3M
{
529
54.3M
    Py_INCREF(obj);
530
54.3M
    return obj;
531
54.3M
}
Unexecuted instantiation: unicode_formatter.c:_Py_NewRef
unicode_writer.c:_Py_NewRef
Line
Count
Source
528
11.5k
{
529
11.5k
    Py_INCREF(obj);
530
11.5k
    return obj;
531
11.5k
}
Unexecuted instantiation: unicodectype.c:_Py_NewRef
unicodeobject.c:_Py_NewRef
Line
Count
Source
528
184M
{
529
184M
    Py_INCREF(obj);
530
184M
    return obj;
531
184M
}
Unexecuted instantiation: unionobject.c:_Py_NewRef
Unexecuted instantiation: weakrefobject.c:_Py_NewRef
_warnings.c:_Py_NewRef
Line
Count
Source
528
1.33M
{
529
1.33M
    Py_INCREF(obj);
530
1.33M
    return obj;
531
1.33M
}
bltinmodule.c:_Py_NewRef
Line
Count
Source
528
23.1M
{
529
23.1M
    Py_INCREF(obj);
530
23.1M
    return obj;
531
23.1M
}
ceval.c:_Py_NewRef
Line
Count
Source
528
1.51G
{
529
1.51G
    Py_INCREF(obj);
530
1.51G
    return obj;
531
1.51G
}
codecs.c:_Py_NewRef
Line
Count
Source
528
2.68M
{
529
2.68M
    Py_INCREF(obj);
530
2.68M
    return obj;
531
2.68M
}
codegen.c:_Py_NewRef
Line
Count
Source
528
3.39k
{
529
3.39k
    Py_INCREF(obj);
530
3.39k
    return obj;
531
3.39k
}
compile.c:_Py_NewRef
Line
Count
Source
528
129k
{
529
129k
    Py_INCREF(obj);
530
129k
    return obj;
531
129k
}
context.c:_Py_NewRef
Line
Count
Source
528
42
{
529
42
    Py_INCREF(obj);
530
42
    return obj;
531
42
}
errors.c:_Py_NewRef
Line
Count
Source
528
43.0M
{
529
43.0M
    Py_INCREF(obj);
530
43.0M
    return obj;
531
43.0M
}
flowgraph.c:_Py_NewRef
Line
Count
Source
528
113k
{
529
113k
    Py_INCREF(obj);
530
113k
    return obj;
531
113k
}
frame.c:_Py_NewRef
Line
Count
Source
528
31.0M
{
529
31.0M
    Py_INCREF(obj);
530
31.0M
    return obj;
531
31.0M
}
Unexecuted instantiation: future.c:_Py_NewRef
Unexecuted instantiation: gc.c:_Py_NewRef
Unexecuted instantiation: gc_gil.c:_Py_NewRef
getargs.c:_Py_NewRef
Line
Count
Source
528
2.01M
{
529
2.01M
    Py_INCREF(obj);
530
2.01M
    return obj;
531
2.01M
}
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
528
3.57M
{
529
3.57M
    Py_INCREF(obj);
530
3.57M
    return obj;
531
3.57M
}
importdl.c:_Py_NewRef
Line
Count
Source
528
807
{
529
807
    Py_INCREF(obj);
530
807
    return obj;
531
807
}
initconfig.c:_Py_NewRef
Line
Count
Source
528
476
{
529
476
    Py_INCREF(obj);
530
476
    return obj;
531
476
}
Unexecuted instantiation: instrumentation.c:_Py_NewRef
Unexecuted instantiation: instruction_sequence.c:_Py_NewRef
intrinsics.c:_Py_NewRef
Line
Count
Source
528
23.9k
{
529
23.9k
    Py_INCREF(obj);
530
23.9k
    return obj;
531
23.9k
}
Unexecuted instantiation: legacy_tracing.c:_Py_NewRef
Unexecuted instantiation: lock.c:_Py_NewRef
marshal.c:_Py_NewRef
Line
Count
Source
528
1.66M
{
529
1.66M
    Py_INCREF(obj);
530
1.66M
    return obj;
531
1.66M
}
Unexecuted instantiation: modsupport.c:_Py_NewRef
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
528
28
{
529
28
    Py_INCREF(obj);
530
28
    return obj;
531
28
}
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
symtable.c:_Py_NewRef
Line
Count
Source
528
346k
{
529
346k
    Py_INCREF(obj);
530
346k
    return obj;
531
346k
}
sysmodule.c:_Py_NewRef
Line
Count
Source
528
1.34k
{
529
1.34k
    Py_INCREF(obj);
530
1.34k
    return obj;
531
1.34k
}
Unexecuted instantiation: thread.c:_Py_NewRef
Unexecuted instantiation: traceback.c:_Py_NewRef
Unexecuted instantiation: tracemalloc.c:_Py_NewRef
Unexecuted instantiation: getopt.c:_Py_NewRef
Unexecuted instantiation: pystrcmp.c:_Py_NewRef
Unexecuted instantiation: pystrtod.c:_Py_NewRef
Unexecuted instantiation: pystrhex.c:_Py_NewRef
Unexecuted instantiation: dtoa.c:_Py_NewRef
Unexecuted instantiation: fileutils.c:_Py_NewRef
Unexecuted instantiation: suggestions.c:_Py_NewRef
Unexecuted instantiation: perf_trampoline.c:_Py_NewRef
Unexecuted instantiation: perf_jit_trampoline.c:_Py_NewRef
Unexecuted instantiation: remote_debugging.c:_Py_NewRef
Unexecuted instantiation: dynload_shlib.c:_Py_NewRef
Unexecuted instantiation: config.c:_Py_NewRef
Unexecuted instantiation: gcmodule.c:_Py_NewRef
Unexecuted instantiation: _asynciomodule.c:_Py_NewRef
atexitmodule.c:_Py_NewRef
Line
Count
Source
528
2
{
529
2
    Py_INCREF(obj);
530
2
    return obj;
531
2
}
Unexecuted instantiation: faulthandler.c:_Py_NewRef
posixmodule.c:_Py_NewRef
Line
Count
Source
528
1.28M
{
529
1.28M
    Py_INCREF(obj);
530
1.28M
    return obj;
531
1.28M
}
signalmodule.c:_Py_NewRef
Line
Count
Source
528
1.79k
{
529
1.79k
    Py_INCREF(obj);
530
1.79k
    return obj;
531
1.79k
}
Unexecuted instantiation: _tracemalloc.c:_Py_NewRef
Unexecuted instantiation: _suggestions.c:_Py_NewRef
_datetimemodule.c:_Py_NewRef
Line
Count
Source
528
81
{
529
81
    Py_INCREF(obj);
530
81
    return obj;
531
81
}
Unexecuted instantiation: _codecsmodule.c:_Py_NewRef
_collectionsmodule.c:_Py_NewRef
Line
Count
Source
528
23.0M
{
529
23.0M
    Py_INCREF(obj);
530
23.0M
    return obj;
531
23.0M
}
Unexecuted instantiation: errnomodule.c:_Py_NewRef
_iomodule.c:_Py_NewRef
Line
Count
Source
528
84
{
529
84
    Py_INCREF(obj);
530
84
    return obj;
531
84
}
iobase.c:_Py_NewRef
Line
Count
Source
528
53.3k
{
529
53.3k
    Py_INCREF(obj);
530
53.3k
    return obj;
531
53.3k
}
Unexecuted instantiation: fileio.c:_Py_NewRef
bytesio.c:_Py_NewRef
Line
Count
Source
528
48.0k
{
529
48.0k
    Py_INCREF(obj);
530
48.0k
    return obj;
531
48.0k
}
bufferedio.c:_Py_NewRef
Line
Count
Source
528
13.1k
{
529
13.1k
    Py_INCREF(obj);
530
13.1k
    return obj;
531
13.1k
}
textio.c:_Py_NewRef
Line
Count
Source
528
243k
{
529
243k
    Py_INCREF(obj);
530
243k
    return obj;
531
243k
}
stringio.c:_Py_NewRef
Line
Count
Source
528
21.5k
{
529
21.5k
    Py_INCREF(obj);
530
21.5k
    return obj;
531
21.5k
}
itertoolsmodule.c:_Py_NewRef
Line
Count
Source
528
36.4k
{
529
36.4k
    Py_INCREF(obj);
530
36.4k
    return obj;
531
36.4k
}
sre.c:_Py_NewRef
Line
Count
Source
528
218M
{
529
218M
    Py_INCREF(obj);
530
218M
    return obj;
531
218M
}
Unexecuted instantiation: _sysconfig.c:_Py_NewRef
_threadmodule.c:_Py_NewRef
Line
Count
Source
528
2
{
529
2
    Py_INCREF(obj);
530
2
    return obj;
531
2
}
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
528
11.1k
{
529
11.1k
    Py_INCREF(obj);
530
11.1k
    return obj;
531
11.1k
}
_functoolsmodule.c:_Py_NewRef
Line
Count
Source
528
217k
{
529
217k
    Py_INCREF(obj);
530
217k
    return obj;
531
217k
}
Unexecuted instantiation: _localemodule.c:_Py_NewRef
Unexecuted instantiation: _opcode.c:_Py_NewRef
_operator.c:_Py_NewRef
Line
Count
Source
528
1.37M
{
529
1.37M
    Py_INCREF(obj);
530
1.37M
    return obj;
531
1.37M
}
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
528
224
{
529
224
    Py_INCREF(obj);
530
224
    return obj;
531
224
}
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
528
662M
{
529
662M
    Py_INCREF(obj);
530
662M
    return obj;
531
662M
}
Unexecuted instantiation: boolobject.c:_Py_NewRef
Unexecuted instantiation: bytes_methods.c:_Py_NewRef
bytearrayobject.c:_Py_NewRef
Line
Count
Source
528
219k
{
529
219k
    Py_INCREF(obj);
530
219k
    return obj;
531
219k
}
Unexecuted instantiation: capsule.c:_Py_NewRef
Unexecuted instantiation: cellobject.c:_Py_NewRef
classobject.c:_Py_NewRef
Line
Count
Source
528
79.5M
{
529
79.5M
    Py_INCREF(obj);
530
79.5M
    return obj;
531
79.5M
}
codeobject.c:_Py_NewRef
Line
Count
Source
528
1.66M
{
529
1.66M
    Py_INCREF(obj);
530
1.66M
    return obj;
531
1.66M
}
Unexecuted instantiation: complexobject.c:_Py_NewRef
descrobject.c:_Py_NewRef
Line
Count
Source
528
22.9M
{
529
22.9M
    Py_INCREF(obj);
530
22.9M
    return obj;
531
22.9M
}
enumobject.c:_Py_NewRef
Line
Count
Source
528
20
{
529
20
    Py_INCREF(obj);
530
20
    return obj;
531
20
}
genobject.c:_Py_NewRef
Line
Count
Source
528
45.1M
{
529
45.1M
    Py_INCREF(obj);
530
45.1M
    return obj;
531
45.1M
}
Unexecuted instantiation: fileobject.c:_Py_NewRef
frameobject.c:_Py_NewRef
Line
Count
Source
528
9.26M
{
529
9.26M
    Py_INCREF(obj);
530
9.26M
    return obj;
531
9.26M
}
funcobject.c:_Py_NewRef
Line
Count
Source
528
32.4M
{
529
32.4M
    Py_INCREF(obj);
530
32.4M
    return obj;
531
32.4M
}
Unexecuted instantiation: interpolationobject.c:_Py_NewRef
iterobject.c:_Py_NewRef
Line
Count
Source
528
1.65M
{
529
1.65M
    Py_INCREF(obj);
530
1.65M
    return obj;
531
1.65M
}
odictobject.c:_Py_NewRef
Line
Count
Source
528
192
{
529
192
    Py_INCREF(obj);
530
192
    return obj;
531
192
}
methodobject.c:_Py_NewRef
Line
Count
Source
528
8.21M
{
529
8.21M
    Py_INCREF(obj);
530
8.21M
    return obj;
531
8.21M
}
Unexecuted instantiation: namespaceobject.c:_Py_NewRef
Unexecuted instantiation: _contextvars.c:_Py_NewRef
Python-ast.c:_Py_NewRef
Line
Count
Source
528
395k
{
529
395k
    Py_INCREF(obj);
530
395k
    return obj;
531
395k
}
Unexecuted instantiation: Python-tokenize.c:_Py_NewRef
Unexecuted instantiation: asdl.c:_Py_NewRef
assemble.c:_Py_NewRef
Line
Count
Source
528
57.2k
{
529
57.2k
    Py_INCREF(obj);
530
57.2k
    return obj;
531
57.2k
}
Unexecuted instantiation: ast.c:_Py_NewRef
Unexecuted instantiation: ast_preprocess.c:_Py_NewRef
Unexecuted instantiation: ast_unparse.c:_Py_NewRef
Unexecuted instantiation: critical_section.c:_Py_NewRef
Unexecuted instantiation: crossinterp.c:_Py_NewRef
Unexecuted instantiation: getcopyright.c:_Py_NewRef
Unexecuted instantiation: getplatform.c:_Py_NewRef
Unexecuted instantiation: getversion.c:_Py_NewRef
Unexecuted instantiation: optimizer.c:_Py_NewRef
Unexecuted instantiation: pathconfig.c:_Py_NewRef
Unexecuted instantiation: structmember.c:_Py_NewRef
pegen.c:_Py_NewRef
Line
Count
Source
528
18.6k
{
529
18.6k
    Py_INCREF(obj);
530
18.6k
    return obj;
531
18.6k
}
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
532
533
static inline PyObject* _Py_XNewRef(PyObject *obj)
534
1.70G
{
535
1.70G
    Py_XINCREF(obj);
536
1.70G
    return obj;
537
1.70G
}
Unexecuted instantiation: bytesobject.c:_Py_XNewRef
Unexecuted instantiation: call.c:_Py_XNewRef
exceptions.c:_Py_XNewRef
Line
Count
Source
534
106M
{
535
106M
    Py_XINCREF(obj);
536
106M
    return obj;
537
106M
}
Unexecuted instantiation: genericaliasobject.c:_Py_XNewRef
Unexecuted instantiation: floatobject.c:_Py_XNewRef
listobject.c:_Py_XNewRef
Line
Count
Source
534
4.41M
{
535
4.41M
    Py_XINCREF(obj);
536
4.41M
    return obj;
537
4.41M
}
Unexecuted instantiation: longobject.c:_Py_XNewRef
dictobject.c:_Py_XNewRef
Line
Count
Source
534
698M
{
535
698M
    Py_XINCREF(obj);
536
698M
    return obj;
537
698M
}
Unexecuted instantiation: memoryobject.c:_Py_XNewRef
Unexecuted instantiation: moduleobject.c:_Py_XNewRef
Unexecuted instantiation: object.c:_Py_XNewRef
Unexecuted instantiation: obmalloc.c:_Py_XNewRef
Unexecuted instantiation: picklebufobject.c:_Py_XNewRef
Unexecuted instantiation: rangeobject.c:_Py_XNewRef
Unexecuted instantiation: setobject.c:_Py_XNewRef
Unexecuted instantiation: sliceobject.c:_Py_XNewRef
Unexecuted instantiation: structseq.c:_Py_XNewRef
Unexecuted instantiation: templateobject.c:_Py_XNewRef
Unexecuted instantiation: tupleobject.c:_Py_XNewRef
typeobject.c:_Py_XNewRef
Line
Count
Source
534
292k
{
535
292k
    Py_XINCREF(obj);
536
292k
    return obj;
537
292k
}
typevarobject.c:_Py_XNewRef
Line
Count
Source
534
296
{
535
296
    Py_XINCREF(obj);
536
296
    return obj;
537
296
}
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
534
324k
{
535
324k
    Py_XINCREF(obj);
536
324k
    return obj;
537
324k
}
Unexecuted instantiation: _warnings.c:_Py_XNewRef
bltinmodule.c:_Py_XNewRef
Line
Count
Source
534
589
{
535
589
    Py_XINCREF(obj);
536
589
    return obj;
537
589
}
ceval.c:_Py_XNewRef
Line
Count
Source
534
83.6M
{
535
83.6M
    Py_XINCREF(obj);
536
83.6M
    return obj;
537
83.6M
}
Unexecuted instantiation: codecs.c:_Py_XNewRef
Unexecuted instantiation: codegen.c:_Py_XNewRef
compile.c:_Py_XNewRef
Line
Count
Source
534
12.2k
{
535
12.2k
    Py_XINCREF(obj);
536
12.2k
    return obj;
537
12.2k
}
context.c:_Py_XNewRef
Line
Count
Source
534
42
{
535
42
    Py_XINCREF(obj);
536
42
    return obj;
537
42
}
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
534
40.8k
{
535
40.8k
    Py_XINCREF(obj);
536
40.8k
    return obj;
537
40.8k
}
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
534
579k
{
535
579k
    Py_XINCREF(obj);
536
579k
    return obj;
537
579k
}
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: symtable.c:_Py_XNewRef
sysmodule.c:_Py_XNewRef
Line
Count
Source
534
28
{
535
28
    Py_XINCREF(obj);
536
28
    return obj;
537
28
}
Unexecuted instantiation: thread.c:_Py_XNewRef
traceback.c:_Py_XNewRef
Line
Count
Source
534
112M
{
535
112M
    Py_XINCREF(obj);
536
112M
    return obj;
537
112M
}
Unexecuted instantiation: tracemalloc.c:_Py_XNewRef
Unexecuted instantiation: getopt.c:_Py_XNewRef
Unexecuted instantiation: pystrcmp.c:_Py_XNewRef
Unexecuted instantiation: pystrtod.c:_Py_XNewRef
Unexecuted instantiation: pystrhex.c:_Py_XNewRef
Unexecuted instantiation: dtoa.c:_Py_XNewRef
Unexecuted instantiation: fileutils.c:_Py_XNewRef
Unexecuted instantiation: suggestions.c:_Py_XNewRef
Unexecuted instantiation: perf_trampoline.c:_Py_XNewRef
Unexecuted instantiation: perf_jit_trampoline.c:_Py_XNewRef
Unexecuted instantiation: remote_debugging.c:_Py_XNewRef
Unexecuted instantiation: dynload_shlib.c:_Py_XNewRef
Unexecuted instantiation: config.c:_Py_XNewRef
Unexecuted instantiation: gcmodule.c:_Py_XNewRef
Unexecuted instantiation: _asynciomodule.c:_Py_XNewRef
Unexecuted instantiation: atexitmodule.c:_Py_XNewRef
Unexecuted instantiation: faulthandler.c:_Py_XNewRef
posixmodule.c:_Py_XNewRef
Line
Count
Source
534
134k
{
535
134k
    Py_XINCREF(obj);
536
134k
    return obj;
537
134k
}
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
534
56
{
535
56
    Py_XINCREF(obj);
536
56
    return obj;
537
56
}
Unexecuted instantiation: _codecsmodule.c:_Py_XNewRef
_collectionsmodule.c:_Py_XNewRef
Line
Count
Source
534
4
{
535
4
    Py_XINCREF(obj);
536
4
    return obj;
537
4
}
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
534
4
{
535
4
    Py_XINCREF(obj);
536
4
    return obj;
537
4
}
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
534
1.13k
{
535
1.13k
    Py_XINCREF(obj);
536
1.13k
    return obj;
537
1.13k
}
Unexecuted instantiation: _functoolsmodule.c:_Py_XNewRef
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
534
84
{
535
84
    Py_XINCREF(obj);
536
84
    return obj;
537
84
}
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
534
27.1M
{
535
27.1M
    Py_XINCREF(obj);
536
27.1M
    return obj;
537
27.1M
}
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
534
7.80M
{
535
7.80M
    Py_XINCREF(obj);
536
7.80M
    return obj;
537
7.80M
}
Unexecuted instantiation: classobject.c:_Py_XNewRef
codeobject.c:_Py_XNewRef
Line
Count
Source
534
8.01k
{
535
8.01k
    Py_XINCREF(obj);
536
8.01k
    return obj;
537
8.01k
}
Unexecuted instantiation: complexobject.c:_Py_XNewRef
descrobject.c:_Py_XNewRef
Line
Count
Source
534
79.6k
{
535
79.6k
    Py_XINCREF(obj);
536
79.6k
    return obj;
537
79.6k
}
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
534
8.64M
{
535
8.64M
    Py_XINCREF(obj);
536
8.64M
    return obj;
537
8.64M
}
funcobject.c:_Py_XNewRef
Line
Count
Source
534
21.2k
{
535
21.2k
    Py_XINCREF(obj);
536
21.2k
    return obj;
537
21.2k
}
Unexecuted instantiation: interpolationobject.c:_Py_XNewRef
Unexecuted instantiation: iterobject.c:_Py_XNewRef
Unexecuted instantiation: odictobject.c:_Py_XNewRef
methodobject.c:_Py_XNewRef
Line
Count
Source
534
653M
{
535
653M
    Py_XINCREF(obj);
536
653M
    return obj;
537
653M
}
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
structmember.c:_Py_XNewRef
Line
Count
Source
534
1.16M
{
535
1.16M
    Py_XINCREF(obj);
536
1.16M
    return obj;
537
1.16M
}
pegen.c:_Py_XNewRef
Line
Count
Source
534
18.6k
{
535
18.6k
    Py_XINCREF(obj);
536
18.6k
    return obj;
537
18.6k
}
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
538
539
// Py_NewRef() and Py_XNewRef() are exported as functions for the stable ABI.
540
// Names overridden with macros by static inline functions for best
541
// performances.
542
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
543
11.4G
#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
544
1.67G
#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
545
#else
546
#  define Py_NewRef(obj) _Py_NewRef(obj)
547
#  define Py_XNewRef(obj) _Py_XNewRef(obj)
548
#endif
549
550
551
#ifdef __cplusplus
552
}
553
#endif
554
#endif   // !_Py_REFCOUNT_H