Coverage Report

Created: 2025-12-14 07:06

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
16.4G
#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
47
252
#define _Py_IMMORTAL_MINIMUM_REFCNT (1ULL << 31)
48
257M
#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
49
257M
#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.10G
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
1.10G
    #if !defined(Py_GIL_DISABLED)
104
1.10G
        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.10G
    }
bytesobject.c:_Py_REFCNT
Line
Count
Source
102
1.92M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
1.92M
    #if !defined(Py_GIL_DISABLED)
104
1.92M
        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.92M
    }
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
252
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
252
    #if !defined(Py_GIL_DISABLED)
104
252
        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
252
    }
longobject.c:_Py_REFCNT
Line
Count
Source
102
152
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
152
    #if !defined(Py_GIL_DISABLED)
104
152
        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
152
    }
dictobject.c:_Py_REFCNT
Line
Count
Source
102
645M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
645M
    #if !defined(Py_GIL_DISABLED)
104
645M
        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
645M
    }
Unexecuted instantiation: memoryobject.c:_Py_REFCNT
Unexecuted instantiation: moduleobject.c:_Py_REFCNT
object.c:_Py_REFCNT
Line
Count
Source
102
68.4M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
68.4M
    #if !defined(Py_GIL_DISABLED)
104
68.4M
        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
68.4M
    }
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.55k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
2.55k
    #if !defined(Py_GIL_DISABLED)
104
2.55k
        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.55k
    }
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
97.7k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
97.7k
    #if !defined(Py_GIL_DISABLED)
104
97.7k
        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
97.7k
    }
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.61M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
8.61M
    #if !defined(Py_GIL_DISABLED)
104
8.61M
        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.61M
    }
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
74.6M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
74.6M
    #if !defined(Py_GIL_DISABLED)
104
74.6M
        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
74.6M
    }
Unexecuted instantiation: unionobject.c:_Py_REFCNT
weakrefobject.c:_Py_REFCNT
Line
Count
Source
102
49.5M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
49.5M
    #if !defined(Py_GIL_DISABLED)
104
49.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
49.5M
    }
Unexecuted instantiation: _warnings.c:_Py_REFCNT
bltinmodule.c:_Py_REFCNT
Line
Count
Source
102
27.2M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
27.2M
    #if !defined(Py_GIL_DISABLED)
104
27.2M
        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.2M
    }
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
59.9M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
59.9M
    #if !defined(Py_GIL_DISABLED)
104
59.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
59.9M
    }
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
200k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
200k
    #if !defined(Py_GIL_DISABLED)
104
200k
        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
200k
    }
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
60.6k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
60.6k
    #if !defined(Py_GIL_DISABLED)
104
60.6k
        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
60.6k
    }
Unexecuted instantiation: fileio.c:_Py_REFCNT
bytesio.c:_Py_REFCNT
Line
Count
Source
102
1.82k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
1.82k
    #if !defined(Py_GIL_DISABLED)
104
1.82k
        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.82k
    }
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
540
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
540
    #if !defined(Py_GIL_DISABLED)
104
540
        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
540
    }
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
144k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
144k
    #if !defined(Py_GIL_DISABLED)
104
144k
        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
144k
    }
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
203k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
203k
    #if !defined(Py_GIL_DISABLED)
104
203k
        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
203k
    }
Unexecuted instantiation: complexobject.c:_Py_REFCNT
Unexecuted instantiation: descrobject.c:_Py_REFCNT
enumobject.c:_Py_REFCNT
Line
Count
Source
102
97.6M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
97.6M
    #if !defined(Py_GIL_DISABLED)
104
97.6M
        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
97.6M
    }
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.6M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
27.6M
    #if !defined(Py_GIL_DISABLED)
104
27.6M
        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.6M
    }
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
750M
    #  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
27.1G
{
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
27.1G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
27.1G
}
bytesobject.c:_Py_IsImmortal
Line
Count
Source
124
4.79M
{
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.79M
    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.79M
}
call.c:_Py_IsImmortal
Line
Count
Source
124
186M
{
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
186M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
186M
}
exceptions.c:_Py_IsImmortal
Line
Count
Source
124
175M
{
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
175M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
175M
}
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
131k
{
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
131k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
131k
}
listobject.c:_Py_IsImmortal
Line
Count
Source
124
1.61G
{
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.61G
    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.61G
}
longobject.c:_Py_IsImmortal
Line
Count
Source
124
39.1M
{
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.1M
    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.1M
}
dictobject.c:_Py_IsImmortal
Line
Count
Source
124
2.33G
{
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.33G
    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.33G
}
memoryobject.c:_Py_IsImmortal
Line
Count
Source
124
1.35M
{
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.35M
    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.35M
}
moduleobject.c:_Py_IsImmortal
Line
Count
Source
124
2.09M
{
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.09M
    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.09M
}
object.c:_Py_IsImmortal
Line
Count
Source
124
893M
{
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
893M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
893M
}
Unexecuted instantiation: obmalloc.c:_Py_IsImmortal
Unexecuted instantiation: picklebufobject.c:_Py_IsImmortal
rangeobject.c:_Py_IsImmortal
Line
Count
Source
124
60.1M
{
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
60.1M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
60.1M
}
setobject.c:_Py_IsImmortal
Line
Count
Source
124
12.3M
{
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.3M
    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.3M
}
sliceobject.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
}
structseq.c:_Py_IsImmortal
Line
Count
Source
124
8.20M
{
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.20M
    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.20M
}
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.57G
{
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.57G
    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.57G
}
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
72.3M
{
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
72.3M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
72.3M
}
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.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
15.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
15.7M
}
Unexecuted instantiation: unicodectype.c:_Py_IsImmortal
unicodeobject.c:_Py_IsImmortal
Line
Count
Source
124
220M
{
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
220M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
220M
}
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
79.0k
{
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.0k
    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.0k
}
_warnings.c:_Py_IsImmortal
Line
Count
Source
124
27.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
27.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
27.5M
}
bltinmodule.c:_Py_IsImmortal
Line
Count
Source
124
1.40G
{
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.40G
    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.40G
}
ceval.c:_Py_IsImmortal
Line
Count
Source
124
9.70G
{
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.70G
    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.70G
}
codecs.c:_Py_IsImmortal
Line
Count
Source
124
6.29M
{
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.29M
    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.29M
}
codegen.c:_Py_IsImmortal
Line
Count
Source
124
194k
{
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
194k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
194k
}
compile.c:_Py_IsImmortal
Line
Count
Source
124
745k
{
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
745k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
745k
}
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
94.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
94.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
94.6M
}
flowgraph.c:_Py_IsImmortal
Line
Count
Source
124
85.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
85.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
85.2k
}
frame.c:_Py_IsImmortal
Line
Count
Source
124
86.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
86.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
86.5M
}
Unexecuted instantiation: future.c:_Py_IsImmortal
gc.c:_Py_IsImmortal
Line
Count
Source
124
518M
{
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
518M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
518M
}
Unexecuted instantiation: gc_gil.c:_Py_IsImmortal
getargs.c:_Py_IsImmortal
Line
Count
Source
124
5.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
5.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
5.00M
}
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
8.85M
{
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.85M
    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.85M
}
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
52.0k
{
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
52.0k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
52.0k
}
Unexecuted instantiation: legacy_tracing.c:_Py_IsImmortal
Unexecuted instantiation: lock.c:_Py_IsImmortal
marshal.c:_Py_IsImmortal
Line
Count
Source
124
1.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
1.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
1.44M
}
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.47M
{
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.47M
    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.47M
}
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
658
{
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
658
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
658
}
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.83M
{
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.83M
    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.83M
}
symtable.c:_Py_IsImmortal
Line
Count
Source
124
1.01M
{
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.01M
    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.01M
}
sysmodule.c:_Py_IsImmortal
Line
Count
Source
124
4.12M
{
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.12M
    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.12M
}
Unexecuted instantiation: thread.c:_Py_IsImmortal
traceback.c:_Py_IsImmortal
Line
Count
Source
124
132M
{
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
132M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
132M
}
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.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
10.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
10.3k
}
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
4.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
4.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
4.34M
}
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
582
{
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
582
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
582
}
Unexecuted instantiation: _codecsmodule.c:_Py_IsImmortal
_collectionsmodule.c:_Py_IsImmortal
Line
Count
Source
124
111k
{
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
111k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
111k
}
Unexecuted instantiation: errnomodule.c:_Py_IsImmortal
_iomodule.c:_Py_IsImmortal
Line
Count
Source
124
280k
{
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
280k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
280k
}
iobase.c:_Py_IsImmortal
Line
Count
Source
124
431k
{
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
431k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
431k
}
fileio.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
}
bytesio.c:_Py_IsImmortal
Line
Count
Source
124
187k
{
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
187k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
187k
}
bufferedio.c:_Py_IsImmortal
Line
Count
Source
124
4.82M
{
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.82M
    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.82M
}
textio.c:_Py_IsImmortal
Line
Count
Source
124
609k
{
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
609k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
609k
}
stringio.c:_Py_IsImmortal
Line
Count
Source
124
310k
{
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
310k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
310k
}
itertoolsmodule.c:_Py_IsImmortal
Line
Count
Source
124
81.1k
{
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
81.1k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
81.1k
}
sre.c:_Py_IsImmortal
Line
Count
Source
124
419M
{
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
419M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
419M
}
Unexecuted instantiation: _sysconfig.c:_Py_IsImmortal
_threadmodule.c:_Py_IsImmortal
Line
Count
Source
124
33.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
33.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
33.3k
}
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.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
96.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
96.3k
}
_functoolsmodule.c:_Py_IsImmortal
Line
Count
Source
124
574k
{
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
574k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
574k
}
Unexecuted instantiation: _localemodule.c:_Py_IsImmortal
Unexecuted instantiation: _opcode.c:_Py_IsImmortal
_operator.c:_Py_IsImmortal
Line
Count
Source
124
553k
{
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
553k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
553k
}
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.7k
{
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.7k
    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.7k
}
Unexecuted instantiation: myreadline.c:_Py_IsImmortal
abstract.c:_Py_IsImmortal
Line
Count
Source
124
1.05G
{
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.05G
    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.05G
}
Unexecuted instantiation: boolobject.c:_Py_IsImmortal
Unexecuted instantiation: bytes_methods.c:_Py_IsImmortal
bytearrayobject.c:_Py_IsImmortal
Line
Count
Source
124
2.76M
{
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.76M
    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.76M
}
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
463k
{
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
463k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
463k
}
classobject.c:_Py_IsImmortal
Line
Count
Source
124
78.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
78.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
78.5M
}
codeobject.c:_Py_IsImmortal
Line
Count
Source
124
1.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
1.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
1.15M
}
Unexecuted instantiation: complexobject.c:_Py_IsImmortal
descrobject.c:_Py_IsImmortal
Line
Count
Source
124
81.3M
{
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
81.3M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
81.3M
}
enumobject.c:_Py_IsImmortal
Line
Count
Source
124
257M
{
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
257M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
257M
}
genobject.c:_Py_IsImmortal
Line
Count
Source
124
148M
{
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
148M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
148M
}
fileobject.c:_Py_IsImmortal
Line
Count
Source
124
201k
{
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
201k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
201k
}
frameobject.c:_Py_IsImmortal
Line
Count
Source
124
29.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
29.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
29.8M
}
funcobject.c:_Py_IsImmortal
Line
Count
Source
124
152M
{
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
152M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
152M
}
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.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
2.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
2.34M
}
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.76M
{
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.76M
    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.76M
}
Unexecuted instantiation: Python-tokenize.c:_Py_IsImmortal
Unexecuted instantiation: asdl.c:_Py_IsImmortal
assemble.c:_Py_IsImmortal
Line
Count
Source
124
59.7k
{
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.7k
    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.7k
}
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.60k
{
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.60k
    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.60k
}
pegen.c:_Py_IsImmortal
Line
Count
Source
124
133k
{
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
133k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
130
#else
131
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
132
#endif
133
133k
}
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.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
12.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
12.6k
}
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.1k
{
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.1k
    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.1k
}
134
29.1G
#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
716M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
152
716M
    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
716M
    if (_Py_IsImmortal(ob)) {
163
796
        return;
164
796
    }
165
716M
#ifndef Py_GIL_DISABLED
166
716M
#if SIZEOF_VOID_P > 4
167
716M
    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
716M
#endif  // Py_LIMITED_API+0 < 0x030d0000
195
716M
}
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
642M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
152
642M
    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
642M
    if (_Py_IsImmortal(ob)) {
163
0
        return;
164
0
    }
165
642M
#ifndef Py_GIL_DISABLED
166
642M
#if SIZEOF_VOID_P > 4
167
642M
    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
642M
#endif  // Py_LIMITED_API+0 < 0x030d0000
195
642M
}
Unexecuted instantiation: memoryobject.c:Py_SET_REFCNT
moduleobject.c:Py_SET_REFCNT
Line
Count
Source
151
796
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
152
796
    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
796
    if (_Py_IsImmortal(ob)) {
163
796
        return;
164
796
    }
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.6M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
152
45.6M
    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.6M
    if (_Py_IsImmortal(ob)) {
163
0
        return;
164
0
    }
165
45.6M
#ifndef Py_GIL_DISABLED
166
45.6M
#if SIZEOF_VOID_P > 4
167
45.6M
    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.6M
#endif  // Py_LIMITED_API+0 < 0x030d0000
195
45.6M
}
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
919k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
152
919k
    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
919k
    if (_Py_IsImmortal(ob)) {
163
0
        return;
164
0
    }
165
919k
#ifndef Py_GIL_DISABLED
166
919k
#if SIZEOF_VOID_P > 4
167
919k
    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
919k
#endif  // Py_LIMITED_API+0 < 0x030d0000
195
919k
}
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
203k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
152
203k
    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
203k
    if (_Py_IsImmortal(ob)) {
163
0
        return;
164
0
    }
165
203k
#ifndef Py_GIL_DISABLED
166
203k
#if SIZEOF_VOID_P > 4
167
203k
    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
203k
#endif  // Py_LIMITED_API+0 < 0x030d0000
195
203k
}
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.6M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
152
27.6M
    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.6M
    if (_Py_IsImmortal(ob)) {
163
0
        return;
164
0
    }
165
27.6M
#ifndef Py_GIL_DISABLED
166
27.6M
#if SIZEOF_VOID_P > 4
167
27.6M
    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.6M
#endif  // Py_LIMITED_API+0 < 0x030d0000
195
27.6M
}
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
716M
#  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
16.2G
{
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
16.2G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
16.2G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
7.44G
        _Py_INCREF_IMMORTAL_STAT_INC();
285
7.44G
        return;
286
7.44G
    }
287
8.75G
    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.75G
    _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.75G
#endif
303
8.75G
}
bytesobject.c:Py_INCREF
Line
Count
Source
252
53.8M
{
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.8M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
53.8M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
52.0M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
52.0M
        return;
286
52.0M
    }
287
1.84M
    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.84M
    _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.84M
#endif
303
1.84M
}
call.c:Py_INCREF
Line
Count
Source
252
29.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
29.5M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
29.5M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
10.4M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
10.4M
        return;
286
10.4M
    }
287
19.1M
    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
19.1M
    _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
19.1M
#endif
303
19.1M
}
exceptions.c:Py_INCREF
Line
Count
Source
252
150M
{
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
150M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
150M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
46.7M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
46.7M
        return;
286
46.7M
    }
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
}
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
1.11M
{
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.11M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.11M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
1.11M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
1.11M
        return;
286
1.11M
    }
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.25G
{
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.25G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.25G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
298M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
298M
        return;
286
298M
    }
287
955M
    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
955M
    _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
955M
#endif
303
955M
}
longobject.c:Py_INCREF
Line
Count
Source
252
154M
{
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
154M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
154M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
154M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
154M
        return;
286
154M
    }
287
37.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
37.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
37.2k
#endif
303
37.2k
}
dictobject.c:Py_INCREF
Line
Count
Source
252
2.09G
{
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.09G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
2.09G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
663M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
663M
        return;
286
663M
    }
287
1.42G
    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.42G
    _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.42G
#endif
303
1.42G
}
memoryobject.c:Py_INCREF
Line
Count
Source
252
1.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
1.23M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.23M
    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.23M
    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.23M
    _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.23M
#endif
303
1.23M
}
moduleobject.c:Py_INCREF
Line
Count
Source
252
6.99k
{
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.99k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
6.99k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
6.11k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
6.11k
        return;
286
6.11k
    }
287
874
    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
874
    _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
874
#endif
303
874
}
object.c:Py_INCREF
Line
Count
Source
252
996M
{
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
996M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
996M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
696M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
696M
        return;
286
696M
    }
287
300M
    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
300M
    _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
300M
#endif
303
300M
}
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.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
10.5M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
10.5M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
860k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
860k
        return;
286
860k
    }
287
9.72M
    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
9.72M
    _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
9.72M
#endif
303
9.72M
}
sliceobject.c:Py_INCREF
Line
Count
Source
252
55.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
55.9M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
55.9M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
55.9M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
55.9M
        return;
286
55.9M
    }
287
1.10k
    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.10k
    _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.10k
#endif
303
1.10k
}
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.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
5.28G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
5.28G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
2.36G
        _Py_INCREF_IMMORTAL_STAT_INC();
285
2.36G
        return;
286
2.36G
    }
287
2.92G
    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.92G
    _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.92G
#endif
303
2.92G
}
typeobject.c:Py_INCREF
Line
Count
Source
252
398M
{
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
398M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
398M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
163M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
163M
        return;
286
163M
    }
287
234M
    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
234M
    _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
234M
#endif
303
234M
}
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
55.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
55.4M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
55.4M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
22.9M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
22.9M
        return;
286
22.9M
    }
287
32.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
32.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
32.4M
#endif
303
32.4M
}
Unexecuted instantiation: unicode_formatter.c:Py_INCREF
unicode_writer.c:Py_INCREF
Line
Count
Source
252
9.53k
{
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
9.53k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
9.53k
    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
9.53k
    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
9.53k
    _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
9.53k
#endif
303
9.53k
}
Unexecuted instantiation: unicodectype.c:Py_INCREF
unicodeobject.c:Py_INCREF
Line
Count
Source
252
807M
{
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
807M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
807M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
716M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
716M
        return;
286
716M
    }
287
91.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
91.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
91.0M
#endif
303
91.0M
}
Unexecuted instantiation: unionobject.c:Py_INCREF
weakrefobject.c:Py_INCREF
Line
Count
Source
252
383k
{
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
383k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
383k
    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
381k
    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
381k
    _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
381k
#endif
303
381k
}
_warnings.c:Py_INCREF
Line
Count
Source
252
2.74M
{
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.74M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
2.74M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
1.38M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
1.38M
        return;
286
1.38M
    }
287
1.35M
    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.35M
    _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.35M
#endif
303
1.35M
}
bltinmodule.c:Py_INCREF
Line
Count
Source
252
83.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
83.5M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
83.5M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
37.0M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
37.0M
        return;
286
37.0M
    }
287
46.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
46.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
46.4M
#endif
303
46.4M
}
ceval.c:Py_INCREF
Line
Count
Source
252
2.05G
{
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.05G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
2.05G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
1.10G
        _Py_INCREF_IMMORTAL_STAT_INC();
285
1.10G
        return;
286
1.10G
    }
287
949M
    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
949M
    _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
949M
#endif
303
949M
}
codecs.c:Py_INCREF
Line
Count
Source
252
2.80M
{
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.80M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
2.80M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
321k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
321k
        return;
286
321k
    }
287
2.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
2.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
2.48M
#endif
303
2.48M
}
codegen.c:Py_INCREF
Line
Count
Source
252
3.47k
{
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.47k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
3.47k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
3.47k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
3.47k
        return;
286
3.47k
    }
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
77.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
77.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
77.2k
#endif
303
77.2k
}
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
85.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
85.1M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
85.1M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
37.0M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
37.0M
        return;
286
37.0M
    }
287
48.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
48.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
48.0M
#endif
303
48.0M
}
flowgraph.c:Py_INCREF
Line
Count
Source
252
114k
{
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
114k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
114k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
56.0k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
56.0k
        return;
286
56.0k
    }
287
57.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
57.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
57.9k
#endif
303
57.9k
}
frame.c:Py_INCREF
Line
Count
Source
252
40.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
40.0M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
40.0M
    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
40.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
40.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
40.0M
#endif
303
40.0M
}
Unexecuted instantiation: future.c:Py_INCREF
gc.c:Py_INCREF
Line
Count
Source
252
428M
{
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
428M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
428M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
365M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
365M
        return;
286
365M
    }
287
62.6M
    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
62.6M
    _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
62.6M
#endif
303
62.6M
}
Unexecuted instantiation: gc_gil.c:Py_INCREF
getargs.c:Py_INCREF
Line
Count
Source
252
2.20M
{
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.20M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
2.20M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
1.53M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
1.53M
        return;
286
1.53M
    }
287
673k
    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
673k
    _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
673k
#endif
303
673k
}
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
5.99M
{
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.99M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
5.99M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
1.73M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
1.73M
        return;
286
1.73M
    }
287
4.25M
    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.25M
    _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.25M
#endif
303
4.25M
}
importdl.c:Py_INCREF
Line
Count
Source
252
932
{
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
932
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
932
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
730
        _Py_INCREF_IMMORTAL_STAT_INC();
285
730
        return;
286
730
    }
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
22.4k
{
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
22.4k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
22.4k
    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
22.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
22.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
22.4k
#endif
303
22.4k
}
Unexecuted instantiation: legacy_tracing.c:Py_INCREF
Unexecuted instantiation: lock.c:Py_INCREF
marshal.c:Py_INCREF
Line
Count
Source
252
1.51M
{
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.51M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.51M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
1.38M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
1.38M
        return;
286
1.38M
    }
287
129k
    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
129k
    _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
129k
#endif
303
129k
}
modsupport.c:Py_INCREF
Line
Count
Source
252
2.39M
{
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.39M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
2.39M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
659k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
659k
        return;
286
659k
    }
287
1.73M
    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.73M
    _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.73M
#endif
303
1.73M
}
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
616k
{
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
616k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
616k
    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
616k
    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
616k
    _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
616k
#endif
303
616k
}
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
347k
{
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
347k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
347k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
347k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
347k
        return;
286
347k
    }
287
839
    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
839
    _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
839
#endif
303
839
}
sysmodule.c:Py_INCREF
Line
Count
Source
252
2.21k
{
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.21k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
2.21k
    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
721
    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
721
    _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
721
#endif
303
721
}
Unexecuted instantiation: thread.c:Py_INCREF
traceback.c:Py_INCREF
Line
Count
Source
252
66.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
66.0M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
66.0M
    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
66.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
66.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
66.0M
#endif
303
66.0M
}
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
3.08M
{
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.08M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
3.08M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
609k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
609k
        return;
286
609k
    }
287
2.47M
    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.47M
    _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.47M
#endif
303
2.47M
}
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
229
{
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
229
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
229
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
169
        _Py_INCREF_IMMORTAL_STAT_INC();
285
169
        return;
286
169
    }
287
60
    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
60
    _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
60
#endif
303
60
}
Unexecuted instantiation: _codecsmodule.c:Py_INCREF
_collectionsmodule.c:Py_INCREF
Line
Count
Source
252
24.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
24.2M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
24.2M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
21.6M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
21.6M
        return;
286
21.6M
    }
287
2.60M
    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.60M
    _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.60M
#endif
303
2.60M
}
Unexecuted instantiation: errnomodule.c:Py_INCREF
_iomodule.c:Py_INCREF
Line
Count
Source
252
348
{
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
348
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
348
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
348
        _Py_INCREF_IMMORTAL_STAT_INC();
285
348
        return;
286
348
    }
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
64.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
64.3k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
64.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
64.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
64.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
64.3k
#endif
303
64.3k
}
Unexecuted instantiation: fileio.c:Py_INCREF
bytesio.c:Py_INCREF
Line
Count
Source
252
50.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
50.1k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
50.1k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
401
        _Py_INCREF_IMMORTAL_STAT_INC();
285
401
        return;
286
401
    }
287
49.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
49.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
49.7k
#endif
303
49.7k
}
bufferedio.c:Py_INCREF
Line
Count
Source
252
25.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
25.2k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
25.2k
    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
25.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
25.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
25.2k
#endif
303
25.2k
}
textio.c:Py_INCREF
Line
Count
Source
252
360k
{
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
360k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
360k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
19.8k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
19.8k
        return;
286
19.8k
    }
287
341k
    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
341k
    _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
341k
#endif
303
341k
}
stringio.c:Py_INCREF
Line
Count
Source
252
21.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
21.1k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
21.1k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
95
        _Py_INCREF_IMMORTAL_STAT_INC();
285
95
        return;
286
95
    }
287
21.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
21.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
21.0k
#endif
303
21.0k
}
itertoolsmodule.c:Py_INCREF
Line
Count
Source
252
38.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
38.3k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
38.3k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
37.5k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
37.5k
        return;
286
37.5k
    }
287
816
    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
816
    _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
816
#endif
303
816
}
sre.c:Py_INCREF
Line
Count
Source
252
230M
{
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
230M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
230M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
69.0M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
69.0M
        return;
286
69.0M
    }
287
161M
    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
161M
    _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
161M
#endif
303
161M
}
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.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
28.5k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
28.5k
    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
288k
{
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
288k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
288k
    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
288k
    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
288k
    _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
288k
#endif
303
288k
}
Unexecuted instantiation: _localemodule.c:Py_INCREF
Unexecuted instantiation: _opcode.c:Py_INCREF
_operator.c:Py_INCREF
Line
Count
Source
252
1.36M
{
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.36M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.36M
    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
33.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
33.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
33.5k
#endif
303
33.5k
}
Unexecuted instantiation: _stat.c:Py_INCREF
Unexecuted instantiation: symtablemodule.c:Py_INCREF
Unexecuted instantiation: pwdmodule.c:Py_INCREF
getpath.c:Py_INCREF
Line
Count
Source
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
1.12G
{
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.12G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.12G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
460M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
460M
        return;
286
460M
    }
287
664M
    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
664M
    _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
664M
#endif
303
664M
}
Unexecuted instantiation: boolobject.c:Py_INCREF
Unexecuted instantiation: bytes_methods.c:Py_INCREF
bytearrayobject.c:Py_INCREF
Line
Count
Source
252
237k
{
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
237k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
237k
    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
237k
    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
237k
    _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
237k
#endif
303
237k
}
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
51.3k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
51.3k
        return;
286
51.3k
    }
287
72.1k
    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.1k
    _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.1k
#endif
303
72.1k
}
classobject.c:Py_INCREF
Line
Count
Source
252
78.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
78.5M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
78.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
78.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
78.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
78.5M
#endif
303
78.5M
}
codeobject.c:Py_INCREF
Line
Count
Source
252
1.55M
{
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.55M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.55M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
748k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
748k
        return;
286
748k
    }
287
806k
    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
806k
    _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
806k
#endif
303
806k
}
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
22.8M
{
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
22.8M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
22.8M
    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
22.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
22.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
22.7M
#endif
303
22.7M
}
enumobject.c:Py_INCREF
Line
Count
Source
252
97.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
97.6M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
97.6M
    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
97.6M
    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
97.6M
    _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
97.6M
#endif
303
97.6M
}
genobject.c:Py_INCREF
Line
Count
Source
252
45.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
45.4M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
45.4M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
45.3M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
45.3M
        return;
286
45.3M
    }
287
72.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
72.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
72.5k
#endif
303
72.5k
}
Unexecuted instantiation: fileobject.c:Py_INCREF
frameobject.c:Py_INCREF
Line
Count
Source
252
18.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
18.6M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
18.6M
    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
18.6M
    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.6M
    _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.6M
#endif
303
18.6M
}
funcobject.c:Py_INCREF
Line
Count
Source
252
87.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
87.7M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
87.7M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
41.5M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
41.5M
        return;
286
41.5M
    }
287
46.1M
    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.1M
    _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.1M
#endif
303
46.1M
}
Unexecuted instantiation: interpolationobject.c:Py_INCREF
iterobject.c:Py_INCREF
Line
Count
Source
252
1.94M
{
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.94M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
1.94M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
393k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
393k
        return;
286
393k
    }
287
1.55M
    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.55M
    _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.55M
#endif
303
1.55M
}
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.23M
        _Py_INCREF_IMMORTAL_STAT_INC();
285
7.23M
        return;
286
7.23M
    }
287
326M
    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
326M
    _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
326M
#endif
303
326M
}
Unexecuted instantiation: namespaceobject.c:Py_INCREF
Unexecuted instantiation: _contextvars.c:Py_INCREF
Python-ast.c:Py_INCREF
Line
Count
Source
252
403k
{
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
403k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
403k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
212k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
212k
        return;
286
212k
    }
287
191k
    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
191k
    _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
191k
#endif
303
191k
}
Unexecuted instantiation: Python-tokenize.c:Py_INCREF
Unexecuted instantiation: asdl.c:Py_INCREF
assemble.c:Py_INCREF
Line
Count
Source
252
57.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
57.5k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
57.5k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
57.3k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
57.3k
        return;
286
57.3k
    }
287
175
    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
175
    _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
175
#endif
303
175
}
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.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
817k
        _Py_INCREF_IMMORTAL_STAT_INC();
285
817k
        return;
286
817k
    }
287
842k
    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
842k
    _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
842k
#endif
303
842k
}
pegen.c:Py_INCREF
Line
Count
Source
252
19.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
19.1k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
282
19.1k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
283
        // the object is immortal
284
355
        _Py_INCREF_IMMORTAL_STAT_INC();
285
355
        return;
286
355
    }
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
16.2G
#  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
15.3G
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
15.3G
    if (_Py_IsImmortal(op)) {
415
6.99G
        _Py_DECREF_IMMORTAL_STAT_INC();
416
6.99G
        return;
417
6.99G
    }
418
8.34G
    _Py_DECREF_STAT_INC();
419
8.34G
    if (--op->ob_refcnt == 0) {
420
1.41G
        _Py_Dealloc(op);
421
1.41G
    }
422
8.34G
}
bytesobject.c:Py_DECREF
Line
Count
Source
411
4.79M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
4.79M
    if (_Py_IsImmortal(op)) {
415
4.57M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
4.57M
        return;
417
4.57M
    }
418
222k
    _Py_DECREF_STAT_INC();
419
222k
    if (--op->ob_refcnt == 0) {
420
145k
        _Py_Dealloc(op);
421
145k
    }
422
222k
}
call.c:Py_DECREF
Line
Count
Source
411
186M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
186M
    if (_Py_IsImmortal(op)) {
415
72.4M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
72.4M
        return;
417
72.4M
    }
418
113M
    _Py_DECREF_STAT_INC();
419
113M
    if (--op->ob_refcnt == 0) {
420
83.7M
        _Py_Dealloc(op);
421
83.7M
    }
422
113M
}
exceptions.c:Py_DECREF
Line
Count
Source
411
175M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
175M
    if (_Py_IsImmortal(op)) {
415
48.4M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
48.4M
        return;
417
48.4M
    }
418
127M
    _Py_DECREF_STAT_INC();
419
127M
    if (--op->ob_refcnt == 0) {
420
91.1M
        _Py_Dealloc(op);
421
91.1M
    }
422
127M
}
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
131k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
131k
    if (_Py_IsImmortal(op)) {
415
5
        _Py_DECREF_IMMORTAL_STAT_INC();
416
5
        return;
417
5
    }
418
131k
    _Py_DECREF_STAT_INC();
419
131k
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
131k
}
listobject.c:Py_DECREF
Line
Count
Source
411
1.61G
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1.61G
    if (_Py_IsImmortal(op)) {
415
467M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
467M
        return;
417
467M
    }
418
1.15G
    _Py_DECREF_STAT_INC();
419
1.15G
    if (--op->ob_refcnt == 0) {
420
315M
        _Py_Dealloc(op);
421
315M
    }
422
1.15G
}
longobject.c:Py_DECREF
Line
Count
Source
411
16.6M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
16.6M
    if (_Py_IsImmortal(op)) {
415
8.09M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
8.09M
        return;
417
8.09M
    }
418
8.58M
    _Py_DECREF_STAT_INC();
419
8.58M
    if (--op->ob_refcnt == 0) {
420
5.33M
        _Py_Dealloc(op);
421
5.33M
    }
422
8.58M
}
dictobject.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
775M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
775M
        return;
417
775M
    }
418
907M
    _Py_DECREF_STAT_INC();
419
907M
    if (--op->ob_refcnt == 0) {
420
111M
        _Py_Dealloc(op);
421
111M
    }
422
907M
}
memoryobject.c:Py_DECREF
Line
Count
Source
411
1.35M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1.35M
    if (_Py_IsImmortal(op)) {
415
77.9k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
77.9k
        return;
417
77.9k
    }
418
1.27M
    _Py_DECREF_STAT_INC();
419
1.27M
    if (--op->ob_refcnt == 0) {
420
583k
        _Py_Dealloc(op);
421
583k
    }
422
1.27M
}
moduleobject.c:Py_DECREF
Line
Count
Source
411
2.09M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
2.09M
    if (_Py_IsImmortal(op)) {
415
2.04M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
2.04M
        return;
417
2.04M
    }
418
45.0k
    _Py_DECREF_STAT_INC();
419
45.0k
    if (--op->ob_refcnt == 0) {
420
4.68k
        _Py_Dealloc(op);
421
4.68k
    }
422
45.0k
}
object.c:Py_DECREF
Line
Count
Source
411
847M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
847M
    if (_Py_IsImmortal(op)) {
415
666M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
666M
        return;
417
666M
    }
418
181M
    _Py_DECREF_STAT_INC();
419
181M
    if (--op->ob_refcnt == 0) {
420
10.7k
        _Py_Dealloc(op);
421
10.7k
    }
422
181M
}
Unexecuted instantiation: obmalloc.c:Py_DECREF
Unexecuted instantiation: picklebufobject.c:Py_DECREF
rangeobject.c:Py_DECREF
Line
Count
Source
411
60.1M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
60.1M
    if (_Py_IsImmortal(op)) {
415
58.3M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
58.3M
        return;
417
58.3M
    }
418
1.81M
    _Py_DECREF_STAT_INC();
419
1.81M
    if (--op->ob_refcnt == 0) {
420
887k
        _Py_Dealloc(op);
421
887k
    }
422
1.81M
}
setobject.c:Py_DECREF
Line
Count
Source
411
12.3M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
12.3M
    if (_Py_IsImmortal(op)) {
415
2.84M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
2.84M
        return;
417
2.84M
    }
418
9.55M
    _Py_DECREF_STAT_INC();
419
9.55M
    if (--op->ob_refcnt == 0) {
420
1.27M
        _Py_Dealloc(op);
421
1.27M
    }
422
9.55M
}
sliceobject.c:Py_DECREF
Line
Count
Source
411
153M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
153M
    if (_Py_IsImmortal(op)) {
415
101M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
101M
        return;
417
101M
    }
418
51.7M
    _Py_DECREF_STAT_INC();
419
51.7M
    if (--op->ob_refcnt == 0) {
420
15.4M
        _Py_Dealloc(op);
421
15.4M
    }
422
51.7M
}
structseq.c:Py_DECREF
Line
Count
Source
411
8.20M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
8.20M
    if (_Py_IsImmortal(op)) {
415
2.42M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
2.42M
        return;
417
2.42M
    }
418
5.77M
    _Py_DECREF_STAT_INC();
419
5.77M
    if (--op->ob_refcnt == 0) {
420
5.33M
        _Py_Dealloc(op);
421
5.33M
    }
422
5.77M
}
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.57G
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
5.57G
    if (_Py_IsImmortal(op)) {
415
2.41G
        _Py_DECREF_IMMORTAL_STAT_INC();
416
2.41G
        return;
417
2.41G
    }
418
3.15G
    _Py_DECREF_STAT_INC();
419
3.15G
    if (--op->ob_refcnt == 0) {
420
127M
        _Py_Dealloc(op);
421
127M
    }
422
3.15G
}
typeobject.c:Py_DECREF
Line
Count
Source
411
490M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
490M
    if (_Py_IsImmortal(op)) {
415
81.5M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
81.5M
        return;
417
81.5M
    }
418
408M
    _Py_DECREF_STAT_INC();
419
408M
    if (--op->ob_refcnt == 0) {
420
32.9M
        _Py_Dealloc(op);
421
32.9M
    }
422
408M
}
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
72.3M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
72.3M
    if (_Py_IsImmortal(op)) {
415
22.9M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
22.9M
        return;
417
22.9M
    }
418
49.4M
    _Py_DECREF_STAT_INC();
419
49.4M
    if (--op->ob_refcnt == 0) {
420
12.7M
        _Py_Dealloc(op);
421
12.7M
    }
422
49.4M
}
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.7M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
15.7M
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
15.7M
    _Py_DECREF_STAT_INC();
419
15.7M
    if (--op->ob_refcnt == 0) {
420
15.7M
        _Py_Dealloc(op);
421
15.7M
    }
422
15.7M
}
Unexecuted instantiation: unicodectype.c:Py_DECREF
unicodeobject.c:Py_DECREF
Line
Count
Source
411
214M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
214M
    if (_Py_IsImmortal(op)) {
415
130M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
130M
        return;
417
130M
    }
418
84.3M
    _Py_DECREF_STAT_INC();
419
84.3M
    if (--op->ob_refcnt == 0) {
420
13.4M
        _Py_Dealloc(op);
421
13.4M
    }
422
84.3M
}
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
79.0k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
79.0k
    if (_Py_IsImmortal(op)) {
415
28.0k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
28.0k
        return;
417
28.0k
    }
418
50.9k
    _Py_DECREF_STAT_INC();
419
50.9k
    if (--op->ob_refcnt == 0) {
420
26.4k
        _Py_Dealloc(op);
421
26.4k
    }
422
50.9k
}
_warnings.c:Py_DECREF
Line
Count
Source
411
27.5M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
27.5M
    if (_Py_IsImmortal(op)) {
415
3.24M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
3.24M
        return;
417
3.24M
    }
418
24.3M
    _Py_DECREF_STAT_INC();
419
24.3M
    if (--op->ob_refcnt == 0) {
420
1.26M
        _Py_Dealloc(op);
421
1.26M
    }
422
24.3M
}
bltinmodule.c:Py_DECREF
Line
Count
Source
411
1.40G
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1.40G
    if (_Py_IsImmortal(op)) {
415
1.20G
        _Py_DECREF_IMMORTAL_STAT_INC();
416
1.20G
        return;
417
1.20G
    }
418
193M
    _Py_DECREF_STAT_INC();
419
193M
    if (--op->ob_refcnt == 0) {
420
124M
        _Py_Dealloc(op);
421
124M
    }
422
193M
}
ceval.c:Py_DECREF
Line
Count
Source
411
5.85k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
5.85k
    if (_Py_IsImmortal(op)) {
415
594
        _Py_DECREF_IMMORTAL_STAT_INC();
416
594
        return;
417
594
    }
418
5.26k
    _Py_DECREF_STAT_INC();
419
5.26k
    if (--op->ob_refcnt == 0) {
420
680
        _Py_Dealloc(op);
421
680
    }
422
5.26k
}
codecs.c:Py_DECREF
Line
Count
Source
411
6.29M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
6.29M
    if (_Py_IsImmortal(op)) {
415
2.33M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
2.33M
        return;
417
2.33M
    }
418
3.96M
    _Py_DECREF_STAT_INC();
419
3.96M
    if (--op->ob_refcnt == 0) {
420
1.85M
        _Py_Dealloc(op);
421
1.85M
    }
422
3.96M
}
codegen.c:Py_DECREF
Line
Count
Source
411
194k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
194k
    if (_Py_IsImmortal(op)) {
415
173k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
173k
        return;
417
173k
    }
418
21.1k
    _Py_DECREF_STAT_INC();
419
21.1k
    if (--op->ob_refcnt == 0) {
420
1.46k
        _Py_Dealloc(op);
421
1.46k
    }
422
21.1k
}
compile.c:Py_DECREF
Line
Count
Source
411
745k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
745k
    if (_Py_IsImmortal(op)) {
415
394k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
394k
        return;
417
394k
    }
418
350k
    _Py_DECREF_STAT_INC();
419
350k
    if (--op->ob_refcnt == 0) {
420
120k
        _Py_Dealloc(op);
421
120k
    }
422
350k
}
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
94.6M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
94.6M
    if (_Py_IsImmortal(op)) {
415
37.0M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
37.0M
        return;
417
37.0M
    }
418
57.5M
    _Py_DECREF_STAT_INC();
419
57.5M
    if (--op->ob_refcnt == 0) {
420
18.4M
        _Py_Dealloc(op);
421
18.4M
    }
422
57.5M
}
flowgraph.c:Py_DECREF
Line
Count
Source
411
85.2k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
85.2k
    if (_Py_IsImmortal(op)) {
415
48.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
48.2k
        return;
417
48.2k
    }
418
37.0k
    _Py_DECREF_STAT_INC();
419
37.0k
    if (--op->ob_refcnt == 0) {
420
69
        _Py_Dealloc(op);
421
69
    }
422
37.0k
}
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
16.4M
        _Py_Dealloc(op);
421
16.4M
    }
422
46.3M
}
Unexecuted instantiation: future.c:Py_DECREF
gc.c:Py_DECREF
Line
Count
Source
411
734k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
734k
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
734k
    _Py_DECREF_STAT_INC();
419
734k
    if (--op->ob_refcnt == 0) {
420
472k
        _Py_Dealloc(op);
421
472k
    }
422
734k
}
Unexecuted instantiation: gc_gil.c:Py_DECREF
getargs.c:Py_DECREF
Line
Count
Source
411
5.00M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
5.00M
    if (_Py_IsImmortal(op)) {
415
4.25M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
4.25M
        return;
417
4.25M
    }
418
749k
    _Py_DECREF_STAT_INC();
419
749k
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
749k
}
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
8.85M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
8.85M
    if (_Py_IsImmortal(op)) {
415
1.73M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
1.73M
        return;
417
1.73M
    }
418
7.12M
    _Py_DECREF_STAT_INC();
419
7.12M
    if (--op->ob_refcnt == 0) {
420
161k
        _Py_Dealloc(op);
421
161k
    }
422
7.12M
}
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
843
        _Py_DECREF_IMMORTAL_STAT_INC();
416
843
        return;
417
843
    }
418
1.26k
    _Py_DECREF_STAT_INC();
419
1.26k
    if (--op->ob_refcnt == 0) {
420
808
        _Py_Dealloc(op);
421
808
    }
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
52.0k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
52.0k
    if (_Py_IsImmortal(op)) {
415
29.3k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
29.3k
        return;
417
29.3k
    }
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.44M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1.44M
    if (_Py_IsImmortal(op)) {
415
601k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
601k
        return;
417
601k
    }
418
845k
    _Py_DECREF_STAT_INC();
419
845k
    if (--op->ob_refcnt == 0) {
420
7.63k
        _Py_Dealloc(op);
421
7.63k
    }
422
845k
}
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.47M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
4.47M
    if (_Py_IsImmortal(op)) {
415
3.76M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
3.76M
        return;
417
3.76M
    }
418
703k
    _Py_DECREF_STAT_INC();
419
703k
    if (--op->ob_refcnt == 0) {
420
20.7k
        _Py_Dealloc(op);
421
20.7k
    }
422
703k
}
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
658
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
658
    if (_Py_IsImmortal(op)) {
415
192
        _Py_DECREF_IMMORTAL_STAT_INC();
416
192
        return;
417
192
    }
418
466
    _Py_DECREF_STAT_INC();
419
466
    if (--op->ob_refcnt == 0) {
420
182
        _Py_Dealloc(op);
421
182
    }
422
466
}
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.83M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1.83M
    if (_Py_IsImmortal(op)) {
415
997k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
997k
        return;
417
997k
    }
418
833k
    _Py_DECREF_STAT_INC();
419
833k
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
833k
}
symtable.c:Py_DECREF
Line
Count
Source
411
1.01M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1.01M
    if (_Py_IsImmortal(op)) {
415
470k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
470k
        return;
417
470k
    }
418
541k
    _Py_DECREF_STAT_INC();
419
541k
    if (--op->ob_refcnt == 0) {
420
251k
        _Py_Dealloc(op);
421
251k
    }
422
541k
}
sysmodule.c:Py_DECREF
Line
Count
Source
411
4.12M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
4.12M
    if (_Py_IsImmortal(op)) {
415
965k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
965k
        return;
417
965k
    }
418
3.16M
    _Py_DECREF_STAT_INC();
419
3.16M
    if (--op->ob_refcnt == 0) {
420
2.34M
        _Py_Dealloc(op);
421
2.34M
    }
422
3.16M
}
Unexecuted instantiation: thread.c:Py_DECREF
traceback.c:Py_DECREF
Line
Count
Source
411
132M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
132M
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
132M
    _Py_DECREF_STAT_INC();
419
132M
    if (--op->ob_refcnt == 0) {
420
37.4M
        _Py_Dealloc(op);
421
37.4M
    }
422
132M
}
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.3k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
10.3k
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
10.3k
    _Py_DECREF_STAT_INC();
419
10.3k
    if (--op->ob_refcnt == 0) {
420
10.3k
        _Py_Dealloc(op);
421
10.3k
    }
422
10.3k
}
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
4.34M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
4.34M
    if (_Py_IsImmortal(op)) {
415
1.57M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
1.57M
        return;
417
1.57M
    }
418
2.76M
    _Py_DECREF_STAT_INC();
419
2.76M
    if (--op->ob_refcnt == 0) {
420
1.17M
        _Py_Dealloc(op);
421
1.17M
    }
422
2.76M
}
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
582
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
582
    if (_Py_IsImmortal(op)) {
415
80
        _Py_DECREF_IMMORTAL_STAT_INC();
416
80
        return;
417
80
    }
418
502
    _Py_DECREF_STAT_INC();
419
502
    if (--op->ob_refcnt == 0) {
420
8
        _Py_Dealloc(op);
421
8
    }
422
502
}
Unexecuted instantiation: _codecsmodule.c:Py_DECREF
_collectionsmodule.c:Py_DECREF
Line
Count
Source
411
111k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
111k
    if (_Py_IsImmortal(op)) {
415
47.3k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
47.3k
        return;
417
47.3k
    }
418
64.0k
    _Py_DECREF_STAT_INC();
419
64.0k
    if (--op->ob_refcnt == 0) {
420
48.0k
        _Py_Dealloc(op);
421
48.0k
    }
422
64.0k
}
_iomodule.c:Py_DECREF
Line
Count
Source
411
280k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
280k
    if (_Py_IsImmortal(op)) {
415
226k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
226k
        return;
417
226k
    }
418
53.9k
    _Py_DECREF_STAT_INC();
419
53.9k
    if (--op->ob_refcnt == 0) {
420
26.9k
        _Py_Dealloc(op);
421
26.9k
    }
422
53.9k
}
iobase.c:Py_DECREF
Line
Count
Source
411
431k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
431k
    if (_Py_IsImmortal(op)) {
415
374k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
374k
        return;
417
374k
    }
418
56.2k
    _Py_DECREF_STAT_INC();
419
56.2k
    if (--op->ob_refcnt == 0) {
420
28.1k
        _Py_Dealloc(op);
421
28.1k
    }
422
56.2k
}
fileio.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
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
39.9k
    _Py_DECREF_STAT_INC();
419
39.9k
    if (--op->ob_refcnt == 0) {
420
26.5k
        _Py_Dealloc(op);
421
26.5k
    }
422
39.9k
}
bytesio.c:Py_DECREF
Line
Count
Source
411
187k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
187k
    if (_Py_IsImmortal(op)) {
415
79.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
79.2k
        return;
417
79.2k
    }
418
108k
    _Py_DECREF_STAT_INC();
419
108k
    if (--op->ob_refcnt == 0) {
420
6.91k
        _Py_Dealloc(op);
421
6.91k
    }
422
108k
}
bufferedio.c:Py_DECREF
Line
Count
Source
411
4.82M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
4.82M
    if (_Py_IsImmortal(op)) {
415
4.57M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
4.57M
        return;
417
4.57M
    }
418
258k
    _Py_DECREF_STAT_INC();
419
258k
    if (--op->ob_refcnt == 0) {
420
211k
        _Py_Dealloc(op);
421
211k
    }
422
258k
}
textio.c:Py_DECREF
Line
Count
Source
411
609k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
609k
    if (_Py_IsImmortal(op)) {
415
172k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
172k
        return;
417
172k
    }
418
436k
    _Py_DECREF_STAT_INC();
419
436k
    if (--op->ob_refcnt == 0) {
420
140k
        _Py_Dealloc(op);
421
140k
    }
422
436k
}
stringio.c:Py_DECREF
Line
Count
Source
411
310k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
310k
    if (_Py_IsImmortal(op)) {
415
160k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
160k
        return;
417
160k
    }
418
150k
    _Py_DECREF_STAT_INC();
419
150k
    if (--op->ob_refcnt == 0) {
420
31.8k
        _Py_Dealloc(op);
421
31.8k
    }
422
150k
}
itertoolsmodule.c:Py_DECREF
Line
Count
Source
411
81.1k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
81.1k
    if (_Py_IsImmortal(op)) {
415
4.44k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
4.44k
        return;
417
4.44k
    }
418
76.6k
    _Py_DECREF_STAT_INC();
419
76.6k
    if (--op->ob_refcnt == 0) {
420
25.6k
        _Py_Dealloc(op);
421
25.6k
    }
422
76.6k
}
sre.c:Py_DECREF
Line
Count
Source
411
419M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
419M
    if (_Py_IsImmortal(op)) {
415
142M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
142M
        return;
417
142M
    }
418
276M
    _Py_DECREF_STAT_INC();
419
276M
    if (--op->ob_refcnt == 0) {
420
17.7M
        _Py_Dealloc(op);
421
17.7M
    }
422
276M
}
Unexecuted instantiation: _sysconfig.c:Py_DECREF
_threadmodule.c:Py_DECREF
Line
Count
Source
411
33.3k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
33.3k
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
33.3k
    _Py_DECREF_STAT_INC();
419
33.3k
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
33.3k
}
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.3k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
96.3k
    if (_Py_IsImmortal(op)) {
415
19.9k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
19.9k
        return;
417
19.9k
    }
418
76.4k
    _Py_DECREF_STAT_INC();
419
76.4k
    if (--op->ob_refcnt == 0) {
420
4.97k
        _Py_Dealloc(op);
421
4.97k
    }
422
76.4k
}
_functoolsmodule.c:Py_DECREF
Line
Count
Source
411
574k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
574k
    if (_Py_IsImmortal(op)) {
415
143k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
143k
        return;
417
143k
    }
418
431k
    _Py_DECREF_STAT_INC();
419
431k
    if (--op->ob_refcnt == 0) {
420
287k
        _Py_Dealloc(op);
421
287k
    }
422
431k
}
Unexecuted instantiation: _localemodule.c:Py_DECREF
Unexecuted instantiation: _opcode.c:Py_DECREF
_operator.c:Py_DECREF
Line
Count
Source
411
553k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
553k
    if (_Py_IsImmortal(op)) {
415
276k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
276k
        return;
417
276k
    }
418
276k
    _Py_DECREF_STAT_INC();
419
276k
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
276k
}
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.7k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
21.7k
    if (_Py_IsImmortal(op)) {
415
743
        _Py_DECREF_IMMORTAL_STAT_INC();
416
743
        return;
417
743
    }
418
20.9k
    _Py_DECREF_STAT_INC();
419
20.9k
    if (--op->ob_refcnt == 0) {
420
15.2k
        _Py_Dealloc(op);
421
15.2k
    }
422
20.9k
}
Unexecuted instantiation: myreadline.c:Py_DECREF
abstract.c:Py_DECREF
Line
Count
Source
411
1.05G
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1.05G
    if (_Py_IsImmortal(op)) {
415
471M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
471M
        return;
417
471M
    }
418
587M
    _Py_DECREF_STAT_INC();
419
587M
    if (--op->ob_refcnt == 0) {
420
2.11M
        _Py_Dealloc(op);
421
2.11M
    }
422
587M
}
Unexecuted instantiation: boolobject.c:Py_DECREF
Unexecuted instantiation: bytes_methods.c:Py_DECREF
bytearrayobject.c:Py_DECREF
Line
Count
Source
411
2.76M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
2.76M
    if (_Py_IsImmortal(op)) {
415
397k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
397k
        return;
417
397k
    }
418
2.36M
    _Py_DECREF_STAT_INC();
419
2.36M
    if (--op->ob_refcnt == 0) {
420
2.36M
        _Py_Dealloc(op);
421
2.36M
    }
422
2.36M
}
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
463k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
463k
    if (_Py_IsImmortal(op)) {
415
56.1k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
56.1k
        return;
417
56.1k
    }
418
407k
    _Py_DECREF_STAT_INC();
419
407k
    if (--op->ob_refcnt == 0) {
420
291k
        _Py_Dealloc(op);
421
291k
    }
422
407k
}
classobject.c:Py_DECREF
Line
Count
Source
411
78.5M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
78.5M
    if (_Py_IsImmortal(op)) {
415
10
        _Py_DECREF_IMMORTAL_STAT_INC();
416
10
        return;
417
10
    }
418
78.5M
    _Py_DECREF_STAT_INC();
419
78.5M
    if (--op->ob_refcnt == 0) {
420
5.12k
        _Py_Dealloc(op);
421
5.12k
    }
422
78.5M
}
codeobject.c:Py_DECREF
Line
Count
Source
411
955k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
955k
    if (_Py_IsImmortal(op)) {
415
423k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
423k
        return;
417
423k
    }
418
531k
    _Py_DECREF_STAT_INC();
419
531k
    if (--op->ob_refcnt == 0) {
420
439k
        _Py_Dealloc(op);
421
439k
    }
422
531k
}
Unexecuted instantiation: complexobject.c:Py_DECREF
descrobject.c:Py_DECREF
Line
Count
Source
411
81.3M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
81.3M
    if (_Py_IsImmortal(op)) {
415
11.2M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
11.2M
        return;
417
11.2M
    }
418
70.1M
    _Py_DECREF_STAT_INC();
419
70.1M
    if (--op->ob_refcnt == 0) {
420
38.2M
        _Py_Dealloc(op);
421
38.2M
    }
422
70.1M
}
enumobject.c:Py_DECREF
Line
Count
Source
411
257M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
257M
    if (_Py_IsImmortal(op)) {
415
96.3M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
96.3M
        return;
417
96.3M
    }
418
161M
    _Py_DECREF_STAT_INC();
419
161M
    if (--op->ob_refcnt == 0) {
420
62.0M
        _Py_Dealloc(op);
421
62.0M
    }
422
161M
}
genobject.c:Py_DECREF
Line
Count
Source
411
58.3M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
58.3M
    if (_Py_IsImmortal(op)) {
415
58.3M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
58.3M
        return;
417
58.3M
    }
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
201k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
201k
    if (_Py_IsImmortal(op)) {
415
195k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
195k
        return;
417
195k
    }
418
6.04k
    _Py_DECREF_STAT_INC();
419
6.04k
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
6.04k
}
frameobject.c:Py_DECREF
Line
Count
Source
411
29.8M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
29.8M
    if (_Py_IsImmortal(op)) {
415
0
        _Py_DECREF_IMMORTAL_STAT_INC();
416
0
        return;
417
0
    }
418
29.8M
    _Py_DECREF_STAT_INC();
419
29.8M
    if (--op->ob_refcnt == 0) {
420
6.12M
        _Py_Dealloc(op);
421
6.12M
    }
422
29.8M
}
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.3M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
71.3M
        return;
417
71.3M
    }
418
53.8M
    _Py_DECREF_STAT_INC();
419
53.8M
    if (--op->ob_refcnt == 0) {
420
492k
        _Py_Dealloc(op);
421
492k
    }
422
53.8M
}
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.34M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
2.34M
    if (_Py_IsImmortal(op)) {
415
786k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
786k
        return;
417
786k
    }
418
1.55M
    _Py_DECREF_STAT_INC();
419
1.55M
    if (--op->ob_refcnt == 0) {
420
393k
        _Py_Dealloc(op);
421
393k
    }
422
1.55M
}
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.21M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
7.21M
        return;
417
7.21M
    }
418
326M
    _Py_DECREF_STAT_INC();
419
326M
    if (--op->ob_refcnt == 0) {
420
248M
        _Py_Dealloc(op);
421
248M
    }
422
326M
}
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.76M
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
2.76M
    if (_Py_IsImmortal(op)) {
415
1.53M
        _Py_DECREF_IMMORTAL_STAT_INC();
416
1.53M
        return;
417
1.53M
    }
418
1.23M
    _Py_DECREF_STAT_INC();
419
1.23M
    if (--op->ob_refcnt == 0) {
420
344k
        _Py_Dealloc(op);
421
344k
    }
422
1.23M
}
Unexecuted instantiation: Python-tokenize.c:Py_DECREF
Unexecuted instantiation: asdl.c:Py_DECREF
assemble.c:Py_DECREF
Line
Count
Source
411
59.7k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
59.7k
    if (_Py_IsImmortal(op)) {
415
9.87k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
9.87k
        return;
417
9.87k
    }
418
49.9k
    _Py_DECREF_STAT_INC();
419
49.9k
    if (--op->ob_refcnt == 0) {
420
0
        _Py_Dealloc(op);
421
0
    }
422
49.9k
}
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.60k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
1.60k
    if (_Py_IsImmortal(op)) {
415
1.23k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
1.23k
        return;
417
1.23k
    }
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
133k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
133k
    if (_Py_IsImmortal(op)) {
415
49.5k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
49.5k
        return;
417
49.5k
    }
418
83.6k
    _Py_DECREF_STAT_INC();
419
83.6k
    if (--op->ob_refcnt == 0) {
420
64.2k
        _Py_Dealloc(op);
421
64.2k
    }
422
83.6k
}
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.90k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
1.90k
        return;
417
1.90k
    }
418
38.0k
    _Py_DECREF_STAT_INC();
419
38.0k
    if (--op->ob_refcnt == 0) {
420
2.66k
        _Py_Dealloc(op);
421
2.66k
    }
422
38.0k
}
Unexecuted instantiation: parser.c:Py_DECREF
Unexecuted instantiation: buffer.c:Py_DECREF
lexer.c:Py_DECREF
Line
Count
Source
411
12.6k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
12.6k
    if (_Py_IsImmortal(op)) {
415
647
        _Py_DECREF_IMMORTAL_STAT_INC();
416
647
        return;
417
647
    }
418
12.0k
    _Py_DECREF_STAT_INC();
419
12.0k
    if (--op->ob_refcnt == 0) {
420
12.0k
        _Py_Dealloc(op);
421
12.0k
    }
422
12.0k
}
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
389
        _Py_DECREF_IMMORTAL_STAT_INC();
416
389
        return;
417
389
    }
418
20.9k
    _Py_DECREF_STAT_INC();
419
20.9k
    if (--op->ob_refcnt == 0) {
420
2.20k
        _Py_Dealloc(op);
421
2.20k
    }
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.1k
{
412
    // Non-limited C API and limited C API for Python 3.9 and older access
413
    // directly PyObject.ob_refcnt.
414
39.1k
    if (_Py_IsImmortal(op)) {
415
2.42k
        _Py_DECREF_IMMORTAL_STAT_INC();
416
2.42k
        return;
417
2.42k
    }
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
15.3G
#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.17G
    do { \
478
2.17G
        _Py_TYPEOF(op)* _tmp_op_ptr = &(op); \
479
2.17G
        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
480
2.17G
        if (_tmp_old_op != NULL) { \
481
500M
            *_tmp_op_ptr = _Py_NULL; \
482
500M
            Py_DECREF(_tmp_old_op); \
483
500M
        } \
484
2.17G
    } 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
2.12G
{
502
2.12G
    if (op != _Py_NULL) {
503
930M
        Py_INCREF(op);
504
930M
    }
505
2.12G
}
Unexecuted instantiation: bytesobject.c:Py_XINCREF
Unexecuted instantiation: call.c:Py_XINCREF
exceptions.c:Py_XINCREF
Line
Count
Source
501
100M
{
502
100M
    if (op != _Py_NULL) {
503
15.3M
        Py_INCREF(op);
504
15.3M
    }
505
100M
}
Unexecuted instantiation: genericaliasobject.c:Py_XINCREF
Unexecuted instantiation: floatobject.c:Py_XINCREF
listobject.c:Py_XINCREF
Line
Count
Source
501
4.54M
{
502
4.54M
    if (op != _Py_NULL) {
503
4.54M
        Py_INCREF(op);
504
4.54M
    }
505
4.54M
}
Unexecuted instantiation: longobject.c:Py_XINCREF
dictobject.c:Py_XINCREF
Line
Count
Source
501
847M
{
502
847M
    if (op != _Py_NULL) {
503
304M
        Py_INCREF(op);
504
304M
    }
505
847M
}
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
54.0M
{
502
54.0M
    if (op != _Py_NULL) {
503
53.8M
        Py_INCREF(op);
504
53.8M
    }
505
54.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
312k
{
502
312k
    if (op != _Py_NULL) {
503
32.0k
        Py_INCREF(op);
504
32.0k
    }
505
312k
}
Unexecuted instantiation: _warnings.c:Py_XINCREF
bltinmodule.c:Py_XINCREF
Line
Count
Source
501
561
{
502
561
    if (op != _Py_NULL) {
503
561
        Py_INCREF(op);
504
561
    }
505
561
}
ceval.c:Py_XINCREF
Line
Count
Source
501
277M
{
502
277M
    if (op != _Py_NULL) {
503
83.9M
        Py_INCREF(op);
504
83.9M
    }
505
277M
}
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.11k
        Py_INCREF(op);
504
6.11k
    }
505
12.2k
}
context.c:Py_XINCREF
Line
Count
Source
501
160k
{
502
160k
    if (op != _Py_NULL) {
503
0
        Py_INCREF(op);
504
0
    }
505
160k
}
errors.c:Py_XINCREF
Line
Count
Source
501
40.6M
{
502
40.6M
    if (op != _Py_NULL) {
503
40.5M
        Py_INCREF(op);
504
40.5M
    }
505
40.6M
}
Unexecuted instantiation: flowgraph.c:Py_XINCREF
Unexecuted instantiation: frame.c:Py_XINCREF
Unexecuted instantiation: future.c:Py_XINCREF
Unexecuted instantiation: gc.c:Py_XINCREF
Unexecuted instantiation: gc_gil.c:Py_XINCREF
Unexecuted instantiation: getargs.c:Py_XINCREF
Unexecuted instantiation: ceval_gil.c:Py_XINCREF
Unexecuted instantiation: hamt.c:Py_XINCREF
Unexecuted instantiation: hashtable.c:Py_XINCREF
import.c:Py_XINCREF
Line
Count
Source
501
35.7k
{
502
35.7k
    if (op != _Py_NULL) {
503
29.5k
        Py_INCREF(op);
504
29.5k
    }
505
35.7k
}
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
616k
{
502
616k
    if (op != _Py_NULL) {
503
616k
        Py_INCREF(op);
504
616k
    }
505
616k
}
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
104M
{
502
104M
    if (op != _Py_NULL) {
503
66.0M
        Py_INCREF(op);
504
66.0M
    }
505
104M
}
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
178k
{
502
178k
    if (op != _Py_NULL) {
503
178k
        Py_INCREF(op);
504
178k
    }
505
178k
}
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.03k
{
502
6.03k
    if (op != _Py_NULL) {
503
6.03k
        Py_INCREF(op);
504
6.03k
    }
505
6.03k
}
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
24.8M
{
502
24.8M
    if (op != _Py_NULL) {
503
24.3M
        Py_INCREF(op);
504
24.3M
    }
505
24.8M
}
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
8.19M
{
502
8.19M
    if (op != _Py_NULL) {
503
123k
        Py_INCREF(op);
504
123k
    }
505
8.19M
}
Unexecuted instantiation: classobject.c:Py_XINCREF
codeobject.c:Py_XINCREF
Line
Count
Source
501
8.04k
{
502
8.04k
    if (op != _Py_NULL) {
503
8.04k
        Py_INCREF(op);
504
8.04k
    }
505
8.04k
}
Unexecuted instantiation: complexobject.c:Py_XINCREF
descrobject.c:Py_XINCREF
Line
Count
Source
501
79.7k
{
502
79.7k
    if (op != _Py_NULL) {
503
76.8k
        Py_INCREF(op);
504
76.8k
    }
505
79.7k
}
Unexecuted instantiation: enumobject.c:Py_XINCREF
genobject.c:Py_XINCREF
Line
Count
Source
501
1.97k
{
502
1.97k
    if (op != _Py_NULL) {
503
0
        Py_INCREF(op);
504
0
    }
505
1.97k
}
Unexecuted instantiation: fileobject.c:Py_XINCREF
frameobject.c:Py_XINCREF
Line
Count
Source
501
8.98M
{
502
8.98M
    if (op != _Py_NULL) {
503
8.98M
        Py_INCREF(op);
504
8.98M
    }
505
8.98M
}
funcobject.c:Py_XINCREF
Line
Count
Source
501
19.2k
{
502
19.2k
    if (op != _Py_NULL) {
503
16
        Py_INCREF(op);
504
16
    }
505
19.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
649M
{
502
649M
    if (op != _Py_NULL) {
503
324M
        Py_INCREF(op);
504
324M
    }
505
649M
}
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
2.34M
{
502
2.34M
    if (op != _Py_NULL) {
503
1.57M
        Py_INCREF(op);
504
1.57M
    }
505
2.34M
}
pegen.c:Py_XINCREF
Line
Count
Source
501
18.7k
{
502
18.7k
    if (op != _Py_NULL) {
503
446
        Py_INCREF(op);
504
446
    }
505
18.7k
}
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
2.12G
#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
508
#endif
509
510
static inline void Py_XDECREF(PyObject *op)
511
10.2G
{
512
10.2G
    if (op != _Py_NULL) {
513
9.07G
        Py_DECREF(op);
514
9.07G
    }
515
10.2G
}
bytesobject.c:Py_XDECREF
Line
Count
Source
511
8.83M
{
512
8.83M
    if (op != _Py_NULL) {
513
74.2k
        Py_DECREF(op);
514
74.2k
    }
515
8.83M
}
Unexecuted instantiation: call.c:Py_XDECREF
exceptions.c:Py_XDECREF
Line
Count
Source
511
96.3M
{
512
96.3M
    if (op != _Py_NULL) {
513
47.9M
        Py_DECREF(op);
514
47.9M
    }
515
96.3M
}
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
702k
{
512
702k
    if (op != _Py_NULL) {
513
131k
        Py_DECREF(op);
514
131k
    }
515
702k
}
listobject.c:Py_XDECREF
Line
Count
Source
511
1.55G
{
512
1.55G
    if (op != _Py_NULL) {
513
1.51G
        Py_DECREF(op);
514
1.51G
    }
515
1.55G
}
longobject.c:Py_XDECREF
Line
Count
Source
511
11.7M
{
512
11.7M
    if (op != _Py_NULL) {
513
4.31M
        Py_DECREF(op);
514
4.31M
    }
515
11.7M
}
dictobject.c:Py_XDECREF
Line
Count
Source
511
1.15G
{
512
1.15G
    if (op != _Py_NULL) {
513
1.14G
        Py_DECREF(op);
514
1.14G
    }
515
1.15G
}
Unexecuted instantiation: memoryobject.c:Py_XDECREF
moduleobject.c:Py_XDECREF
Line
Count
Source
511
22.4k
{
512
22.4k
    if (op != _Py_NULL) {
513
15.1k
        Py_DECREF(op);
514
15.1k
    }
515
22.4k
}
object.c:Py_XDECREF
Line
Count
Source
511
4.54M
{
512
4.54M
    if (op != _Py_NULL) {
513
21.4k
        Py_DECREF(op);
514
21.4k
    }
515
4.54M
}
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
272k
{
512
272k
    if (op != _Py_NULL) {
513
28
        Py_DECREF(op);
514
28
    }
515
272k
}
Unexecuted instantiation: sliceobject.c:Py_XDECREF
structseq.c:Py_XDECREF
Line
Count
Source
511
7.79M
{
512
7.79M
    if (op != _Py_NULL) {
513
7.79M
        Py_DECREF(op);
514
7.79M
    }
515
7.79M
}
Unexecuted instantiation: templateobject.c:Py_XDECREF
tupleobject.c:Py_XDECREF
Line
Count
Source
511
5.56G
{
512
5.56G
    if (op != _Py_NULL) {
513
5.56G
        Py_DECREF(op);
514
5.56G
    }
515
5.56G
}
typeobject.c:Py_XDECREF
Line
Count
Source
511
33.3M
{
512
33.3M
    if (op != _Py_NULL) {
513
20.7M
        Py_DECREF(op);
514
20.7M
    }
515
33.3M
}
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
569
{
512
569
    if (op != _Py_NULL) {
513
256
        Py_DECREF(op);
514
256
    }
515
569
}
Unexecuted instantiation: unicode_writer.c:Py_XDECREF
Unexecuted instantiation: unicodectype.c:Py_XDECREF
unicodeobject.c:Py_XDECREF
Line
Count
Source
511
106M
{
512
106M
    if (op != _Py_NULL) {
513
78.0M
        Py_DECREF(op);
514
78.0M
    }
515
106M
}
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
319k
{
512
319k
    if (op != _Py_NULL) {
513
4.42k
        Py_DECREF(op);
514
4.42k
    }
515
319k
}
_warnings.c:Py_XDECREF
Line
Count
Source
511
3.76M
{
512
3.76M
    if (op != _Py_NULL) {
513
3.29M
        Py_DECREF(op);
514
3.29M
    }
515
3.76M
}
bltinmodule.c:Py_XDECREF
Line
Count
Source
511
11.6M
{
512
11.6M
    if (op != _Py_NULL) {
513
661k
        Py_DECREF(op);
514
661k
    }
515
11.6M
}
ceval.c:Py_XDECREF
Line
Count
Source
511
348k
{
512
348k
    if (op != _Py_NULL) {
513
5.85k
        Py_DECREF(op);
514
5.85k
    }
515
348k
}
codecs.c:Py_XDECREF
Line
Count
Source
511
185k
{
512
185k
    if (op != _Py_NULL) {
513
123k
        Py_DECREF(op);
514
123k
    }
515
185k
}
Unexecuted instantiation: codegen.c:Py_XDECREF
compile.c:Py_XDECREF
Line
Count
Source
511
34.1k
{
512
34.1k
    if (op != _Py_NULL) {
513
10.4k
        Py_DECREF(op);
514
10.4k
    }
515
34.1k
}
Unexecuted instantiation: context.c:Py_XDECREF
errors.c:Py_XDECREF
Line
Count
Source
511
241M
{
512
241M
    if (op != _Py_NULL) {
513
33.9M
        Py_DECREF(op);
514
33.9M
    }
515
241M
}
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
157k
{
512
157k
    if (op != _Py_NULL) {
513
0
        Py_DECREF(op);
514
0
    }
515
157k
}
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
5.89M
{
512
5.89M
    if (op != _Py_NULL) {
513
4.12M
        Py_DECREF(op);
514
4.12M
    }
515
5.89M
}
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.8k
{
512
24.8k
    if (op != _Py_NULL) {
513
24.8k
        Py_DECREF(op);
514
24.8k
    }
515
24.8k
}
Unexecuted instantiation: legacy_tracing.c:Py_XDECREF
Unexecuted instantiation: lock.c:Py_XDECREF
marshal.c:Py_XDECREF
Line
Count
Source
511
1.42M
{
512
1.42M
    if (op != _Py_NULL) {
513
1.42M
        Py_DECREF(op);
514
1.42M
    }
515
1.42M
}
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
546
{
512
546
    if (op != _Py_NULL) {
513
364
        Py_DECREF(op);
514
364
    }
515
546
}
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.05M
{
512
3.05M
    if (op != _Py_NULL) {
513
1.83M
        Py_DECREF(op);
514
1.83M
    }
515
3.05M
}
symtable.c:Py_XDECREF
Line
Count
Source
511
208k
{
512
208k
    if (op != _Py_NULL) {
513
163k
        Py_DECREF(op);
514
163k
    }
515
208k
}
sysmodule.c:Py_XDECREF
Line
Count
Source
511
3.15M
{
512
3.15M
    if (op != _Py_NULL) {
513
2.36M
        Py_DECREF(op);
514
2.36M
    }
515
3.15M
}
Unexecuted instantiation: thread.c:Py_XDECREF
traceback.c:Py_XDECREF
Line
Count
Source
511
209M
{
512
209M
    if (op != _Py_NULL) {
513
132M
        Py_DECREF(op);
514
132M
    }
515
209M
}
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
1.31M
{
512
1.31M
    if (op != _Py_NULL) {
513
1.12M
        Py_DECREF(op);
514
1.12M
    }
515
1.31M
}
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
30
{
512
30
    if (op != _Py_NULL) {
513
16
        Py_DECREF(op);
514
16
    }
515
30
}
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
33.9k
{
512
33.9k
    if (op != _Py_NULL) {
513
33.9k
        Py_DECREF(op);
514
33.9k
    }
515
33.9k
}
bufferedio.c:Py_XDECREF
Line
Count
Source
511
37.3k
{
512
37.3k
    if (op != _Py_NULL) {
513
6.03k
        Py_DECREF(op);
514
6.03k
    }
515
37.3k
}
textio.c:Py_XDECREF
Line
Count
Source
511
32.0k
{
512
32.0k
    if (op != _Py_NULL) {
513
56
        Py_DECREF(op);
514
56
    }
515
32.0k
}
Unexecuted instantiation: stringio.c:Py_XDECREF
itertoolsmodule.c:Py_XDECREF
Line
Count
Source
511
28.2k
{
512
28.2k
    if (op != _Py_NULL) {
513
4.54k
        Py_DECREF(op);
514
4.54k
    }
515
28.2k
}
sre.c:Py_XDECREF
Line
Count
Source
511
82.4M
{
512
82.4M
    if (op != _Py_NULL) {
513
82.4M
        Py_DECREF(op);
514
82.4M
    }
515
82.4M
}
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.4k
{
512
26.4k
    if (op != _Py_NULL) {
513
24.6k
        Py_DECREF(op);
514
24.6k
    }
515
26.4k
}
_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.85k
{
512
2.85k
    if (op != _Py_NULL) {
513
2.85k
        Py_DECREF(op);
514
2.85k
    }
515
2.85k
}
Unexecuted instantiation: myreadline.c:Py_XDECREF
abstract.c:Py_XDECREF
Line
Count
Source
511
290k
{
512
290k
    if (op != _Py_NULL) {
513
140k
        Py_DECREF(op);
514
140k
    }
515
290k
}
Unexecuted instantiation: boolobject.c:Py_XDECREF
Unexecuted instantiation: bytes_methods.c:Py_XDECREF
bytearrayobject.c:Py_XDECREF
Line
Count
Source
511
2.76M
{
512
2.76M
    if (op != _Py_NULL) {
513
2.76M
        Py_DECREF(op);
514
2.76M
    }
515
2.76M
}
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
8.18M
{
512
8.18M
    if (op != _Py_NULL) {
513
463k
        Py_DECREF(op);
514
463k
    }
515
8.18M
}
classobject.c:Py_XDECREF
Line
Count
Source
511
39.2M
{
512
39.2M
    if (op != _Py_NULL) {
513
39.2M
        Py_DECREF(op);
514
39.2M
    }
515
39.2M
}
codeobject.c:Py_XDECREF
Line
Count
Source
511
1.06M
{
512
1.06M
    if (op != _Py_NULL) {
513
918k
        Py_DECREF(op);
514
918k
    }
515
1.06M
}
Unexecuted instantiation: complexobject.c:Py_XDECREF
descrobject.c:Py_XDECREF
Line
Count
Source
511
32.0M
{
512
32.0M
    if (op != _Py_NULL) {
513
22.6M
        Py_DECREF(op);
514
22.6M
    }
515
32.0M
}
enumobject.c:Py_XDECREF
Line
Count
Source
511
24.9M
{
512
24.9M
    if (op != _Py_NULL) {
513
16.6M
        Py_DECREF(op);
514
16.6M
    }
515
24.9M
}
genobject.c:Py_XDECREF
Line
Count
Source
511
985
{
512
985
    if (op != _Py_NULL) {
513
0
        Py_DECREF(op);
514
0
    }
515
985
}
Unexecuted instantiation: fileobject.c:Py_XDECREF
Unexecuted instantiation: frameobject.c:Py_XDECREF
funcobject.c:Py_XDECREF
Line
Count
Source
511
4.73k
{
512
4.73k
    if (op != _Py_NULL) {
513
1.62k
        Py_DECREF(op);
514
1.62k
    }
515
4.73k
}
Unexecuted instantiation: interpolationobject.c:Py_XDECREF
iterobject.c:Py_XDECREF
Line
Count
Source
511
2.34M
{
512
2.34M
    if (op != _Py_NULL) {
513
393k
        Py_DECREF(op);
514
393k
    }
515
2.34M
}
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
974M
{
512
974M
    if (op != _Py_NULL) {
513
334M
        Py_DECREF(op);
514
334M
    }
515
974M
}
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.7k
{
512
59.7k
    if (op != _Py_NULL) {
513
59.7k
        Py_DECREF(op);
514
59.7k
    }
515
59.7k
}
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.56M
{
512
1.56M
    if (op != _Py_NULL) {
513
1.60k
        Py_DECREF(op);
514
1.60k
    }
515
1.56M
}
pegen.c:Py_XDECREF
Line
Count
Source
511
30.8k
{
512
30.8k
    if (op != _Py_NULL) {
513
1.44k
        Py_DECREF(op);
514
1.44k
    }
515
30.8k
}
pegen_errors.c:Py_XDECREF
Line
Count
Source
511
8.59k
{
512
8.59k
    if (op != _Py_NULL) {
513
7.35k
        Py_DECREF(op);
514
7.35k
    }
515
8.59k
}
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.2G
#  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
12.1G
{
529
12.1G
    Py_INCREF(obj);
530
12.1G
    return obj;
531
12.1G
}
bytesobject.c:_Py_NewRef
Line
Count
Source
528
421k
{
529
421k
    Py_INCREF(obj);
530
421k
    return obj;
531
421k
}
call.c:_Py_NewRef
Line
Count
Source
528
29.5M
{
529
29.5M
    Py_INCREF(obj);
530
29.5M
    return obj;
531
29.5M
}
exceptions.c:_Py_NewRef
Line
Count
Source
528
134M
{
529
134M
    Py_INCREF(obj);
530
134M
    return obj;
531
134M
}
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.23G
{
529
1.23G
    Py_INCREF(obj);
530
1.23G
    return obj;
531
1.23G
}
longobject.c:_Py_NewRef
Line
Count
Source
528
8.46M
{
529
8.46M
    Py_INCREF(obj);
530
8.46M
    return obj;
531
8.46M
}
dictobject.c:_Py_NewRef
Line
Count
Source
528
1.50G
{
529
1.50G
    Py_INCREF(obj);
530
1.50G
    return obj;
531
1.50G
}
memoryobject.c:_Py_NewRef
Line
Count
Source
528
1.23M
{
529
1.23M
    Py_INCREF(obj);
530
1.23M
    return obj;
531
1.23M
}
moduleobject.c:_Py_NewRef
Line
Count
Source
528
6.99k
{
529
6.99k
    Py_INCREF(obj);
530
6.99k
    return obj;
531
6.99k
}
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
6.87M
{
529
6.87M
    Py_INCREF(obj);
530
6.87M
    return obj;
531
6.87M
}
sliceobject.c:_Py_NewRef
Line
Count
Source
528
55.9M
{
529
55.9M
    Py_INCREF(obj);
530
55.9M
    return obj;
531
55.9M
}
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.28G
{
529
5.28G
    Py_INCREF(obj);
530
5.28G
    return obj;
531
5.28G
}
typeobject.c:_Py_NewRef
Line
Count
Source
528
133M
{
529
133M
    Py_INCREF(obj);
530
133M
    return obj;
531
133M
}
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
55.4M
{
529
55.4M
    Py_INCREF(obj);
530
55.4M
    return obj;
531
55.4M
}
Unexecuted instantiation: unicode_formatter.c:_Py_NewRef
unicode_writer.c:_Py_NewRef
Line
Count
Source
528
9.53k
{
529
9.53k
    Py_INCREF(obj);
530
9.53k
    return obj;
531
9.53k
}
Unexecuted instantiation: unicodectype.c:_Py_NewRef
unicodeobject.c:_Py_NewRef
Line
Count
Source
528
185M
{
529
185M
    Py_INCREF(obj);
530
185M
    return obj;
531
185M
}
Unexecuted instantiation: unionobject.c:_Py_NewRef
Unexecuted instantiation: weakrefobject.c:_Py_NewRef
_warnings.c:_Py_NewRef
Line
Count
Source
528
1.38M
{
529
1.38M
    Py_INCREF(obj);
530
1.38M
    return obj;
531
1.38M
}
bltinmodule.c:_Py_NewRef
Line
Count
Source
528
24.9M
{
529
24.9M
    Py_INCREF(obj);
530
24.9M
    return obj;
531
24.9M
}
ceval.c:_Py_NewRef
Line
Count
Source
528
1.78G
{
529
1.78G
    Py_INCREF(obj);
530
1.78G
    return obj;
531
1.78G
}
codecs.c:_Py_NewRef
Line
Count
Source
528
2.80M
{
529
2.80M
    Py_INCREF(obj);
530
2.80M
    return obj;
531
2.80M
}
codegen.c:_Py_NewRef
Line
Count
Source
528
3.40k
{
529
3.40k
    Py_INCREF(obj);
530
3.40k
    return obj;
531
3.40k
}
compile.c:_Py_NewRef
Line
Count
Source
528
130k
{
529
130k
    Py_INCREF(obj);
530
130k
    return obj;
531
130k
}
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
40.6M
{
529
40.6M
    Py_INCREF(obj);
530
40.6M
    return obj;
531
40.6M
}
flowgraph.c:_Py_NewRef
Line
Count
Source
528
114k
{
529
114k
    Py_INCREF(obj);
530
114k
    return obj;
531
114k
}
frame.c:_Py_NewRef
Line
Count
Source
528
29.8M
{
529
29.8M
    Py_INCREF(obj);
530
29.8M
    return obj;
531
29.8M
}
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.20M
{
529
2.20M
    Py_INCREF(obj);
530
2.20M
    return obj;
531
2.20M
}
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.46M
{
529
3.46M
    Py_INCREF(obj);
530
3.46M
    return obj;
531
3.46M
}
importdl.c:_Py_NewRef
Line
Count
Source
528
808
{
529
808
    Py_INCREF(obj);
530
808
    return obj;
531
808
}
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
22.4k
{
529
22.4k
    Py_INCREF(obj);
530
22.4k
    return obj;
531
22.4k
}
Unexecuted instantiation: legacy_tracing.c:_Py_NewRef
Unexecuted instantiation: lock.c:_Py_NewRef
marshal.c:_Py_NewRef
Line
Count
Source
528
1.51M
{
529
1.51M
    Py_INCREF(obj);
530
1.51M
    return obj;
531
1.51M
}
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
347k
{
529
347k
    Py_INCREF(obj);
530
347k
    return obj;
531
347k
}
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.65M
{
529
1.65M
    Py_INCREF(obj);
530
1.65M
    return obj;
531
1.65M
}
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
86
{
529
86
    Py_INCREF(obj);
530
86
    return obj;
531
86
}
Unexecuted instantiation: _codecsmodule.c:_Py_NewRef
_collectionsmodule.c:_Py_NewRef
Line
Count
Source
528
24.2M
{
529
24.2M
    Py_INCREF(obj);
530
24.2M
    return obj;
531
24.2M
}
Unexecuted instantiation: errnomodule.c:_Py_NewRef
_iomodule.c:_Py_NewRef
Line
Count
Source
528
348
{
529
348
    Py_INCREF(obj);
530
348
    return obj;
531
348
}
iobase.c:_Py_NewRef
Line
Count
Source
528
64.3k
{
529
64.3k
    Py_INCREF(obj);
530
64.3k
    return obj;
531
64.3k
}
Unexecuted instantiation: fileio.c:_Py_NewRef
bytesio.c:_Py_NewRef
Line
Count
Source
528
50.1k
{
529
50.1k
    Py_INCREF(obj);
530
50.1k
    return obj;
531
50.1k
}
bufferedio.c:_Py_NewRef
Line
Count
Source
528
11.8k
{
529
11.8k
    Py_INCREF(obj);
530
11.8k
    return obj;
531
11.8k
}
textio.c:_Py_NewRef
Line
Count
Source
528
220k
{
529
220k
    Py_INCREF(obj);
530
220k
    return obj;
531
220k
}
stringio.c:_Py_NewRef
Line
Count
Source
528
21.1k
{
529
21.1k
    Py_INCREF(obj);
530
21.1k
    return obj;
531
21.1k
}
itertoolsmodule.c:_Py_NewRef
Line
Count
Source
528
37.3k
{
529
37.3k
    Py_INCREF(obj);
530
37.3k
    return obj;
531
37.3k
}
sre.c:_Py_NewRef
Line
Count
Source
528
168M
{
529
168M
    Py_INCREF(obj);
530
168M
    return obj;
531
168M
}
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.0k
{
529
11.0k
    Py_INCREF(obj);
530
11.0k
    return obj;
531
11.0k
}
_functoolsmodule.c:_Py_NewRef
Line
Count
Source
528
288k
{
529
288k
    Py_INCREF(obj);
530
288k
    return obj;
531
288k
}
Unexecuted instantiation: _localemodule.c:_Py_NewRef
Unexecuted instantiation: _opcode.c:_Py_NewRef
_operator.c:_Py_NewRef
Line
Count
Source
528
1.36M
{
529
1.36M
    Py_INCREF(obj);
530
1.36M
    return obj;
531
1.36M
}
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
1.10G
{
529
1.10G
    Py_INCREF(obj);
530
1.10G
    return obj;
531
1.10G
}
Unexecuted instantiation: boolobject.c:_Py_NewRef
Unexecuted instantiation: bytes_methods.c:_Py_NewRef
bytearrayobject.c:_Py_NewRef
Line
Count
Source
528
237k
{
529
237k
    Py_INCREF(obj);
530
237k
    return obj;
531
237k
}
Unexecuted instantiation: capsule.c:_Py_NewRef
Unexecuted instantiation: cellobject.c:_Py_NewRef
classobject.c:_Py_NewRef
Line
Count
Source
528
78.5M
{
529
78.5M
    Py_INCREF(obj);
530
78.5M
    return obj;
531
78.5M
}
codeobject.c:_Py_NewRef
Line
Count
Source
528
1.54M
{
529
1.54M
    Py_INCREF(obj);
530
1.54M
    return obj;
531
1.54M
}
Unexecuted instantiation: complexobject.c:_Py_NewRef
descrobject.c:_Py_NewRef
Line
Count
Source
528
22.7M
{
529
22.7M
    Py_INCREF(obj);
530
22.7M
    return obj;
531
22.7M
}
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.4M
{
529
45.4M
    Py_INCREF(obj);
530
45.4M
    return obj;
531
45.4M
}
Unexecuted instantiation: fileobject.c:_Py_NewRef
frameobject.c:_Py_NewRef
Line
Count
Source
528
9.63M
{
529
9.63M
    Py_INCREF(obj);
530
9.63M
    return obj;
531
9.63M
}
funcobject.c:_Py_NewRef
Line
Count
Source
528
32.1M
{
529
32.1M
    Py_INCREF(obj);
530
32.1M
    return obj;
531
32.1M
}
Unexecuted instantiation: interpolationobject.c:_Py_NewRef
iterobject.c:_Py_NewRef
Line
Count
Source
528
1.94M
{
529
1.94M
    Py_INCREF(obj);
530
1.94M
    return obj;
531
1.94M
}
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
9.06M
{
529
9.06M
    Py_INCREF(obj);
530
9.06M
    return obj;
531
9.06M
}
Unexecuted instantiation: namespaceobject.c:_Py_NewRef
Unexecuted instantiation: _contextvars.c:_Py_NewRef
Python-ast.c:_Py_NewRef
Line
Count
Source
528
402k
{
529
402k
    Py_INCREF(obj);
530
402k
    return obj;
531
402k
}
Unexecuted instantiation: Python-tokenize.c:_Py_NewRef
Unexecuted instantiation: asdl.c:_Py_NewRef
assemble.c:_Py_NewRef
Line
Count
Source
528
57.5k
{
529
57.5k
    Py_INCREF(obj);
530
57.5k
    return obj;
531
57.5k
}
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.7k
{
529
18.7k
    Py_INCREF(obj);
530
18.7k
    return obj;
531
18.7k
}
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.83G
{
535
1.83G
    Py_XINCREF(obj);
536
1.83G
    return obj;
537
1.83G
}
Unexecuted instantiation: bytesobject.c:_Py_XNewRef
Unexecuted instantiation: call.c:_Py_XNewRef
exceptions.c:_Py_XNewRef
Line
Count
Source
534
99.9M
{
535
99.9M
    Py_XINCREF(obj);
536
99.9M
    return obj;
537
99.9M
}
Unexecuted instantiation: genericaliasobject.c:_Py_XNewRef
Unexecuted instantiation: floatobject.c:_Py_XNewRef
listobject.c:_Py_XNewRef
Line
Count
Source
534
4.54M
{
535
4.54M
    Py_XINCREF(obj);
536
4.54M
    return obj;
537
4.54M
}
Unexecuted instantiation: longobject.c:_Py_XNewRef
dictobject.c:_Py_XNewRef
Line
Count
Source
534
847M
{
535
847M
    Py_XINCREF(obj);
536
847M
    return obj;
537
847M
}
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
284k
{
535
284k
    Py_XINCREF(obj);
536
284k
    return obj;
537
284k
}
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
312k
{
535
312k
    Py_XINCREF(obj);
536
312k
    return obj;
537
312k
}
Unexecuted instantiation: _warnings.c:_Py_XNewRef
bltinmodule.c:_Py_XNewRef
Line
Count
Source
534
561
{
535
561
    Py_XINCREF(obj);
536
561
    return obj;
537
561
}
ceval.c:_Py_XNewRef
Line
Count
Source
534
83.9M
{
535
83.9M
    Py_XINCREF(obj);
536
83.9M
    return obj;
537
83.9M
}
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
35.7k
{
535
35.7k
    Py_XINCREF(obj);
536
35.7k
    return obj;
537
35.7k
}
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
616k
{
535
616k
    Py_XINCREF(obj);
536
616k
    return obj;
537
616k
}
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
104M
{
535
104M
    Py_XINCREF(obj);
536
104M
    return obj;
537
104M
}
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
178k
{
535
178k
    Py_XINCREF(obj);
536
178k
    return obj;
537
178k
}
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
24.8M
{
535
24.8M
    Py_XINCREF(obj);
536
24.8M
    return obj;
537
24.8M
}
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
8.19M
{
535
8.19M
    Py_XINCREF(obj);
536
8.19M
    return obj;
537
8.19M
}
Unexecuted instantiation: classobject.c:_Py_XNewRef
codeobject.c:_Py_XNewRef
Line
Count
Source
534
8.04k
{
535
8.04k
    Py_XINCREF(obj);
536
8.04k
    return obj;
537
8.04k
}
Unexecuted instantiation: complexobject.c:_Py_XNewRef
descrobject.c:_Py_XNewRef
Line
Count
Source
534
79.7k
{
535
79.7k
    Py_XINCREF(obj);
536
79.7k
    return obj;
537
79.7k
}
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.98M
{
535
8.98M
    Py_XINCREF(obj);
536
8.98M
    return obj;
537
8.98M
}
funcobject.c:_Py_XNewRef
Line
Count
Source
534
19.2k
{
535
19.2k
    Py_XINCREF(obj);
536
19.2k
    return obj;
537
19.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
649M
{
535
649M
    Py_XINCREF(obj);
536
649M
    return obj;
537
649M
}
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.56M
{
535
1.56M
    Py_XINCREF(obj);
536
1.56M
    return obj;
537
1.56M
}
pegen.c:_Py_XNewRef
Line
Count
Source
534
18.7k
{
535
18.7k
    Py_XINCREF(obj);
536
18.7k
    return obj;
537
18.7k
}
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
12.0G
#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
544
1.81G
#  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