Coverage Report

Created: 2025-07-04 06:49

/src/cpython/Include/refcount.h
Line
Count
Source (jump to first uncovered line)
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
8.18G
#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
47
0
#define _Py_IMMORTAL_MINIMUM_REFCNT (1ULL << 31)
48
279M
#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
49
279M
#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
913M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
913M
    #if !defined(Py_GIL_DISABLED)
104
913M
        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
913M
    }
bytesobject.c:_Py_REFCNT
Line
Count
Source
102
263k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
263k
    #if !defined(Py_GIL_DISABLED)
104
263k
        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
263k
    }
Unexecuted instantiation: call.c:_Py_REFCNT
Unexecuted instantiation: exceptions.c:_Py_REFCNT
Unexecuted instantiation: genericaliasobject.c:_Py_REFCNT
Unexecuted instantiation: floatobject.c:_Py_REFCNT
Unexecuted instantiation: listobject.c:_Py_REFCNT
longobject.c:_Py_REFCNT
Line
Count
Source
102
13
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
13
    #if !defined(Py_GIL_DISABLED)
104
13
        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
13
    }
dictobject.c:_Py_REFCNT
Line
Count
Source
102
531M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
531M
    #if !defined(Py_GIL_DISABLED)
104
531M
        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
531M
    }
Unexecuted instantiation: memoryobject.c:_Py_REFCNT
Unexecuted instantiation: moduleobject.c:_Py_REFCNT
object.c:_Py_REFCNT
Line
Count
Source
102
63.4M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
63.4M
    #if !defined(Py_GIL_DISABLED)
104
63.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
63.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
1.30k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
1.30k
    #if !defined(Py_GIL_DISABLED)
104
1.30k
        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.30k
    }
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
74.2k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
74.2k
    #if !defined(Py_GIL_DISABLED)
104
74.2k
        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.2k
    }
typeobject.c:_Py_REFCNT
Line
Count
Source
102
12
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
12
    #if !defined(Py_GIL_DISABLED)
104
12
        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
12
    }
Unexecuted instantiation: typevarobject.c:_Py_REFCNT
unicodeobject.c:_Py_REFCNT
Line
Count
Source
102
65.7M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
65.7M
    #if !defined(Py_GIL_DISABLED)
104
65.7M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
65.7M
    }
Unexecuted instantiation: unicodectype.c:_Py_REFCNT
Unexecuted instantiation: unionobject.c:_Py_REFCNT
weakrefobject.c:_Py_REFCNT
Line
Count
Source
102
37.8M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
37.8M
    #if !defined(Py_GIL_DISABLED)
104
37.8M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
37.8M
    }
Unexecuted instantiation: _warnings.c:_Py_REFCNT
bltinmodule.c:_Py_REFCNT
Line
Count
Source
102
20.3M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
20.3M
    #if !defined(Py_GIL_DISABLED)
104
20.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
20.3M
    }
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
27.3M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
27.3M
    #if !defined(Py_GIL_DISABLED)
104
27.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
27.3M
    }
Unexecuted instantiation: future.c:_Py_REFCNT
gc.c:_Py_REFCNT
Line
Count
Source
102
45.2M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
45.2M
    #if !defined(Py_GIL_DISABLED)
104
45.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
45.2M
    }
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
16
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
16
    #if !defined(Py_GIL_DISABLED)
104
16
        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
16
    }
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
135k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
135k
    #if !defined(Py_GIL_DISABLED)
104
135k
        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
135k
    }
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: formatter_unicode.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: 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: _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
12.0k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
12.0k
    #if !defined(Py_GIL_DISABLED)
104
12.0k
        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
12.0k
    }
Unexecuted instantiation: fileio.c:_Py_REFCNT
Unexecuted instantiation: bytesio.c:_Py_REFCNT
Unexecuted instantiation: bufferedio.c:_Py_REFCNT
Unexecuted instantiation: textio.c:_Py_REFCNT
Unexecuted instantiation: stringio.c:_Py_REFCNT
Unexecuted instantiation: itertoolsmodule.c:_Py_REFCNT
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
14
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
14
    #if !defined(Py_GIL_DISABLED)
104
14
        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
14
    }
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
15.4k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
15.4k
    #if !defined(Py_GIL_DISABLED)
104
15.4k
        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
15.4k
    }
Unexecuted instantiation: complexobject.c:_Py_REFCNT
Unexecuted instantiation: descrobject.c:_Py_REFCNT
enumobject.c:_Py_REFCNT
Line
Count
Source
102
94.1M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
94.1M
    #if !defined(Py_GIL_DISABLED)
104
94.1M
        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
94.1M
    }
Unexecuted instantiation: genobject.c:_Py_REFCNT
Unexecuted instantiation: fileobject.c:_Py_REFCNT
Unexecuted instantiation: frameobject.c:_Py_REFCNT
funcobject.c:_Py_REFCNT
Line
Count
Source
102
26.9M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
26.9M
    #if !defined(Py_GIL_DISABLED)
104
26.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
26.9M
    }
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
613M
    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
117
    #endif
118
#endif
119
120
static inline Py_ALWAYS_INLINE int _Py_IsImmortal(PyObject *op)
121
15.1G
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
15.1G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
15.1G
}
bytesobject.c:_Py_IsImmortal
Line
Count
Source
121
5.03M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
5.03M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
5.03M
}
call.c:_Py_IsImmortal
Line
Count
Source
121
138M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
138M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
138M
}
exceptions.c:_Py_IsImmortal
Line
Count
Source
121
114M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
114M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
114M
}
genericaliasobject.c:_Py_IsImmortal
Line
Count
Source
121
84
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
84
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
84
}
floatobject.c:_Py_IsImmortal
Line
Count
Source
121
8
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
8
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
8
}
listobject.c:_Py_IsImmortal
Line
Count
Source
121
1.78G
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
1.78G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
1.78G
}
longobject.c:_Py_IsImmortal
Line
Count
Source
121
17.7M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
17.7M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
17.7M
}
dictobject.c:_Py_IsImmortal
Line
Count
Source
121
1.10G
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
1.10G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
1.10G
}
memoryobject.c:_Py_IsImmortal
Line
Count
Source
121
595k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
595k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
595k
}
moduleobject.c:_Py_IsImmortal
Line
Count
Source
121
46.6k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
46.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
46.6k
}
object.c:_Py_IsImmortal
Line
Count
Source
121
444M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
444M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
444M
}
Unexecuted instantiation: obmalloc.c:_Py_IsImmortal
Unexecuted instantiation: picklebufobject.c:_Py_IsImmortal
rangeobject.c:_Py_IsImmortal
Line
Count
Source
121
26.9M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
26.9M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
26.9M
}
setobject.c:_Py_IsImmortal
Line
Count
Source
121
1.16M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
1.16M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
1.16M
}
sliceobject.c:_Py_IsImmortal
Line
Count
Source
121
122M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
122M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
122M
}
structseq.c:_Py_IsImmortal
Line
Count
Source
121
94.6k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
94.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
94.6k
}
Unexecuted instantiation: templateobject.c:_Py_IsImmortal
tupleobject.c:_Py_IsImmortal
Line
Count
Source
121
982M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
982M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
982M
}
typeobject.c:_Py_IsImmortal
Line
Count
Source
121
781M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
781M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
781M
}
Unexecuted instantiation: typevarobject.c:_Py_IsImmortal
unicodeobject.c:_Py_IsImmortal
Line
Count
Source
121
234M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
234M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
234M
}
Unexecuted instantiation: unicodectype.c:_Py_IsImmortal
unionobject.c:_Py_IsImmortal
Line
Count
Source
121
864
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
864
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
864
}
weakrefobject.c:_Py_IsImmortal
Line
Count
Source
121
12.7k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
12.7k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
12.7k
}
_warnings.c:_Py_IsImmortal
Line
Count
Source
121
169k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
169k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
169k
}
bltinmodule.c:_Py_IsImmortal
Line
Count
Source
121
125M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
125M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
125M
}
ceval.c:_Py_IsImmortal
Line
Count
Source
121
5.79G
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
5.79G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
5.79G
}
codecs.c:_Py_IsImmortal
Line
Count
Source
121
5.55M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
5.55M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
5.55M
}
codegen.c:_Py_IsImmortal
Line
Count
Source
121
121k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
121k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
121k
}
compile.c:_Py_IsImmortal
Line
Count
Source
121
505k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
505k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
505k
}
context.c:_Py_IsImmortal
Line
Count
Source
121
32
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
32
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
32
}
errors.c:_Py_IsImmortal
Line
Count
Source
121
78.8M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
78.8M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
78.8M
}
flowgraph.c:_Py_IsImmortal
Line
Count
Source
121
61.1k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
61.1k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
61.1k
}
frame.c:_Py_IsImmortal
Line
Count
Source
121
40.7M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
40.7M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
40.7M
}
Unexecuted instantiation: future.c:_Py_IsImmortal
gc.c:_Py_IsImmortal
Line
Count
Source
121
1.26G
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
1.26G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
1.26G
}
Unexecuted instantiation: gc_gil.c:_Py_IsImmortal
getargs.c:_Py_IsImmortal
Line
Count
Source
121
1.43M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
1.43M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
1.43M
}
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
121
166k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
166k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
166k
}
importdl.c:_Py_IsImmortal
Line
Count
Source
121
1.22k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
1.22k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
1.22k
}
initconfig.c:_Py_IsImmortal
Line
Count
Source
121
2.20k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
2.20k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
2.20k
}
instrumentation.c:_Py_IsImmortal
Line
Count
Source
121
384
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
384
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
384
}
Unexecuted instantiation: instruction_sequence.c:_Py_IsImmortal
intrinsics.c:_Py_IsImmortal
Line
Count
Source
121
27.2k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
27.2k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
27.2k
}
Unexecuted instantiation: legacy_tracing.c:_Py_IsImmortal
Unexecuted instantiation: lock.c:_Py_IsImmortal
marshal.c:_Py_IsImmortal
Line
Count
Source
121
299k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
299k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
299k
}
modsupport.c:_Py_IsImmortal
Line
Count
Source
121
16.7k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
16.7k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
16.7k
}
Unexecuted instantiation: mysnprintf.c:_Py_IsImmortal
Unexecuted instantiation: parking_lot.c:_Py_IsImmortal
Unexecuted instantiation: preconfig.c:_Py_IsImmortal
pyarena.c:_Py_IsImmortal
Line
Count
Source
121
4.63M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
4.63M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
4.63M
}
Unexecuted instantiation: pyctype.c:_Py_IsImmortal
Unexecuted instantiation: pyhash.c:_Py_IsImmortal
pylifecycle.c:_Py_IsImmortal
Line
Count
Source
121
576
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
576
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
576
}
Unexecuted instantiation: pymath.c:_Py_IsImmortal
Unexecuted instantiation: pystate.c:_Py_IsImmortal
pythonrun.c:_Py_IsImmortal
Line
Count
Source
121
155
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
155
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
155
}
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
121
502k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
502k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
502k
}
symtable.c:_Py_IsImmortal
Line
Count
Source
121
653k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
653k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
653k
}
sysmodule.c:_Py_IsImmortal
Line
Count
Source
121
1.90k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
1.90k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
1.90k
}
Unexecuted instantiation: thread.c:_Py_IsImmortal
traceback.c:_Py_IsImmortal
Line
Count
Source
121
69.2M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
69.2M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
69.2M
}
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
formatter_unicode.c:_Py_IsImmortal
Line
Count
Source
121
256
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
256
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
256
}
fileutils.c:_Py_IsImmortal
Line
Count
Source
121
11.8k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
11.8k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
11.8k
}
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: atexitmodule.c:_Py_IsImmortal
Unexecuted instantiation: faulthandler.c:_Py_IsImmortal
posixmodule.c:_Py_IsImmortal
Line
Count
Source
121
50.9k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
50.9k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
50.9k
}
signalmodule.c:_Py_IsImmortal
Line
Count
Source
121
32
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
32
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
32
}
Unexecuted instantiation: _tracemalloc.c:_Py_IsImmortal
Unexecuted instantiation: _suggestions.c:_Py_IsImmortal
Unexecuted instantiation: _codecsmodule.c:_Py_IsImmortal
_collectionsmodule.c:_Py_IsImmortal
Line
Count
Source
121
101k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
101k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
101k
}
Unexecuted instantiation: errnomodule.c:_Py_IsImmortal
_iomodule.c:_Py_IsImmortal
Line
Count
Source
121
6.00k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
6.00k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
6.00k
}
iobase.c:_Py_IsImmortal
Line
Count
Source
121
123k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
123k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
123k
}
fileio.c:_Py_IsImmortal
Line
Count
Source
121
3.26k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
3.26k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
3.26k
}
bytesio.c:_Py_IsImmortal
Line
Count
Source
121
29.7k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
29.7k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
29.7k
}
bufferedio.c:_Py_IsImmortal
Line
Count
Source
121
6.76k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
6.76k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
6.76k
}
textio.c:_Py_IsImmortal
Line
Count
Source
121
52.6k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
52.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
52.6k
}
stringio.c:_Py_IsImmortal
Line
Count
Source
121
307k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
307k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
307k
}
itertoolsmodule.c:_Py_IsImmortal
Line
Count
Source
121
2
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
2
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
2
}
sre.c:_Py_IsImmortal
Line
Count
Source
121
523M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
523M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
523M
}
Unexecuted instantiation: _sysconfig.c:_Py_IsImmortal
_threadmodule.c:_Py_IsImmortal
Line
Count
Source
121
5.47k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
5.47k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
5.47k
}
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
121
28.0k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
28.0k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
28.0k
}
_functoolsmodule.c:_Py_IsImmortal
Line
Count
Source
121
106
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
106
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
106
}
Unexecuted instantiation: _localemodule.c:_Py_IsImmortal
Unexecuted instantiation: _opcode.c:_Py_IsImmortal
_operator.c:_Py_IsImmortal
Line
Count
Source
121
516k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
516k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
516k
}
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
121
528
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
528
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
528
}
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
121
21.7k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
21.7k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
21.7k
}
Unexecuted instantiation: myreadline.c:_Py_IsImmortal
abstract.c:_Py_IsImmortal
Line
Count
Source
121
449M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
449M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
449M
}
Unexecuted instantiation: boolobject.c:_Py_IsImmortal
Unexecuted instantiation: bytes_methods.c:_Py_IsImmortal
bytearrayobject.c:_Py_IsImmortal
Line
Count
Source
121
16
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
16
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
16
}
capsule.c:_Py_IsImmortal
Line
Count
Source
121
10
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
10
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
10
}
cellobject.c:_Py_IsImmortal
Line
Count
Source
121
324k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
324k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
324k
}
classobject.c:_Py_IsImmortal
Line
Count
Source
121
46.4M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
46.4M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
46.4M
}
codeobject.c:_Py_IsImmortal
Line
Count
Source
121
112k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
112k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
112k
}
Unexecuted instantiation: complexobject.c:_Py_IsImmortal
descrobject.c:_Py_IsImmortal
Line
Count
Source
121
112M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
112M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
112M
}
enumobject.c:_Py_IsImmortal
Line
Count
Source
121
243M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
243M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
243M
}
genobject.c:_Py_IsImmortal
Line
Count
Source
121
139M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
139M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
139M
}
fileobject.c:_Py_IsImmortal
Line
Count
Source
121
12.9k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
12.9k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
12.9k
}
frameobject.c:_Py_IsImmortal
Line
Count
Source
121
13.3M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
13.3M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
13.3M
}
funcobject.c:_Py_IsImmortal
Line
Count
Source
121
148M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
148M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
148M
}
interpolationobject.c:_Py_IsImmortal
Line
Count
Source
121
16
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
16
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
16
}
iterobject.c:_Py_IsImmortal
Line
Count
Source
121
1.01M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
1.01M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
1.01M
}
Unexecuted instantiation: odictobject.c:_Py_IsImmortal
methodobject.c:_Py_IsImmortal
Line
Count
Source
121
280M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
280M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
280M
}
namespaceobject.c:_Py_IsImmortal
Line
Count
Source
121
16
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
16
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
16
}
Unexecuted instantiation: _contextvars.c:_Py_IsImmortal
Python-ast.c:_Py_IsImmortal
Line
Count
Source
121
4.17M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
4.17M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
4.17M
}
Unexecuted instantiation: Python-tokenize.c:_Py_IsImmortal
Unexecuted instantiation: asdl.c:_Py_IsImmortal
assemble.c:_Py_IsImmortal
Line
Count
Source
121
40.4k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
40.4k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
40.4k
}
Unexecuted instantiation: ast.c:_Py_IsImmortal
ast_preprocess.c:_Py_IsImmortal
Line
Count
Source
121
2.36k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
2.36k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
2.36k
}
Unexecuted instantiation: ast_unparse.c:_Py_IsImmortal
Unexecuted instantiation: critical_section.c:_Py_IsImmortal
Unexecuted instantiation: crossinterp.c:_Py_IsImmortal
Unexecuted instantiation: getcopyright.c:_Py_IsImmortal
Unexecuted instantiation: getplatform.c:_Py_IsImmortal
Unexecuted instantiation: getversion.c:_Py_IsImmortal
Unexecuted instantiation: optimizer.c:_Py_IsImmortal
Unexecuted instantiation: pathconfig.c:_Py_IsImmortal
structmember.c:_Py_IsImmortal
Line
Count
Source
121
558
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
558
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
558
}
pegen.c:_Py_IsImmortal
Line
Count
Source
121
140k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
140k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
140k
}
pegen_errors.c:_Py_IsImmortal
Line
Count
Source
121
50.5k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
50.5k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
50.5k
}
Unexecuted instantiation: parser.c:_Py_IsImmortal
Unexecuted instantiation: buffer.c:_Py_IsImmortal
lexer.c:_Py_IsImmortal
Line
Count
Source
121
14.0k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
14.0k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
14.0k
}
state.c:_Py_IsImmortal
Line
Count
Source
121
24.1k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
24.1k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
24.1k
}
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
121
42.4k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
42.4k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
42.4k
}
131
17.2G
#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
132
133
134
static inline Py_ALWAYS_INLINE int _Py_IsStaticImmortal(PyObject *op)
135
0
{
136
0
#if defined(Py_GIL_DISABLED) || SIZEOF_VOID_P > 4
137
0
    return (op->ob_flags & _Py_STATICALLY_ALLOCATED_FLAG) != 0;
138
0
#else
139
0
    return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT;
140
0
#endif
141
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: unicodeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicodectype.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: formatter_unicode.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: 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: _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
142
#define _Py_IsStaticImmortal(op) _Py_IsStaticImmortal(_PyObject_CAST(op))
143
144
// Py_SET_REFCNT() implementation for stable ABI
145
PyAPI_FUNC(void) _Py_SetRefcnt(PyObject *ob, Py_ssize_t refcnt);
146
147
600M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
148
600M
    assert(refcnt >= 0);
149
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
150
    // Stable ABI implements Py_SET_REFCNT() as a function call
151
    // on limited C API version 3.13 and newer.
152
    _Py_SetRefcnt(ob, refcnt);
153
#else
154
    // This immortal check is for code that is unaware of immortal objects.
155
    // The runtime tracks these objects and we should avoid as much
156
    // as possible having extensions inadvertently change the refcnt
157
    // of an immortalized object.
158
600M
    if (_Py_IsImmortal(ob)) {
159
439
        return;
160
439
    }
161
600M
#ifndef Py_GIL_DISABLED
162
600M
#if SIZEOF_VOID_P > 4
163
600M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
164
#else
165
    ob->ob_refcnt = refcnt;
166
#endif
167
#else
168
    if (_Py_IsOwnedByCurrentThread(ob)) {
169
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
170
            // On overflow, make the object immortal
171
            ob->ob_tid = _Py_UNOWNED_TID;
172
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
173
            ob->ob_ref_shared = 0;
174
        }
175
        else {
176
            // Set local refcount to desired refcount and shared refcount
177
            // to zero, but preserve the shared refcount flags.
178
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
179
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
180
        }
181
    }
182
    else {
183
        // Set local refcount to zero and shared refcount to desired refcount.
184
        // Mark the object as merged.
185
        ob->ob_tid = _Py_UNOWNED_TID;
186
        ob->ob_ref_local = 0;
187
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
188
    }
189
#endif  // Py_GIL_DISABLED
190
600M
#endif  // Py_LIMITED_API+0 < 0x030d0000
191
600M
}
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
147
529M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
148
529M
    assert(refcnt >= 0);
149
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
150
    // Stable ABI implements Py_SET_REFCNT() as a function call
151
    // on limited C API version 3.13 and newer.
152
    _Py_SetRefcnt(ob, refcnt);
153
#else
154
    // This immortal check is for code that is unaware of immortal objects.
155
    // The runtime tracks these objects and we should avoid as much
156
    // as possible having extensions inadvertently change the refcnt
157
    // of an immortalized object.
158
529M
    if (_Py_IsImmortal(ob)) {
159
0
        return;
160
0
    }
161
529M
#ifndef Py_GIL_DISABLED
162
529M
#if SIZEOF_VOID_P > 4
163
529M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
164
#else
165
    ob->ob_refcnt = refcnt;
166
#endif
167
#else
168
    if (_Py_IsOwnedByCurrentThread(ob)) {
169
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
170
            // On overflow, make the object immortal
171
            ob->ob_tid = _Py_UNOWNED_TID;
172
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
173
            ob->ob_ref_shared = 0;
174
        }
175
        else {
176
            // Set local refcount to desired refcount and shared refcount
177
            // to zero, but preserve the shared refcount flags.
178
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
179
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
180
        }
181
    }
182
    else {
183
        // Set local refcount to zero and shared refcount to desired refcount.
184
        // Mark the object as merged.
185
        ob->ob_tid = _Py_UNOWNED_TID;
186
        ob->ob_ref_local = 0;
187
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
188
    }
189
#endif  // Py_GIL_DISABLED
190
529M
#endif  // Py_LIMITED_API+0 < 0x030d0000
191
529M
}
Unexecuted instantiation: memoryobject.c:Py_SET_REFCNT
moduleobject.c:Py_SET_REFCNT
Line
Count
Source
147
439
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
148
439
    assert(refcnt >= 0);
149
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
150
    // Stable ABI implements Py_SET_REFCNT() as a function call
151
    // on limited C API version 3.13 and newer.
152
    _Py_SetRefcnt(ob, refcnt);
153
#else
154
    // This immortal check is for code that is unaware of immortal objects.
155
    // The runtime tracks these objects and we should avoid as much
156
    // as possible having extensions inadvertently change the refcnt
157
    // of an immortalized object.
158
439
    if (_Py_IsImmortal(ob)) {
159
439
        return;
160
439
    }
161
0
#ifndef Py_GIL_DISABLED
162
0
#if SIZEOF_VOID_P > 4
163
0
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
164
#else
165
    ob->ob_refcnt = refcnt;
166
#endif
167
#else
168
    if (_Py_IsOwnedByCurrentThread(ob)) {
169
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
170
            // On overflow, make the object immortal
171
            ob->ob_tid = _Py_UNOWNED_TID;
172
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
173
            ob->ob_ref_shared = 0;
174
        }
175
        else {
176
            // Set local refcount to desired refcount and shared refcount
177
            // to zero, but preserve the shared refcount flags.
178
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
179
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
180
        }
181
    }
182
    else {
183
        // Set local refcount to zero and shared refcount to desired refcount.
184
        // Mark the object as merged.
185
        ob->ob_tid = _Py_UNOWNED_TID;
186
        ob->ob_ref_local = 0;
187
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
188
    }
189
#endif  // Py_GIL_DISABLED
190
0
#endif  // Py_LIMITED_API+0 < 0x030d0000
191
0
}
object.c:Py_SET_REFCNT
Line
Count
Source
147
42.3M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
148
42.3M
    assert(refcnt >= 0);
149
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
150
    // Stable ABI implements Py_SET_REFCNT() as a function call
151
    // on limited C API version 3.13 and newer.
152
    _Py_SetRefcnt(ob, refcnt);
153
#else
154
    // This immortal check is for code that is unaware of immortal objects.
155
    // The runtime tracks these objects and we should avoid as much
156
    // as possible having extensions inadvertently change the refcnt
157
    // of an immortalized object.
158
42.3M
    if (_Py_IsImmortal(ob)) {
159
0
        return;
160
0
    }
161
42.3M
#ifndef Py_GIL_DISABLED
162
42.3M
#if SIZEOF_VOID_P > 4
163
42.3M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
164
#else
165
    ob->ob_refcnt = refcnt;
166
#endif
167
#else
168
    if (_Py_IsOwnedByCurrentThread(ob)) {
169
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
170
            // On overflow, make the object immortal
171
            ob->ob_tid = _Py_UNOWNED_TID;
172
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
173
            ob->ob_ref_shared = 0;
174
        }
175
        else {
176
            // Set local refcount to desired refcount and shared refcount
177
            // to zero, but preserve the shared refcount flags.
178
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
179
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
180
        }
181
    }
182
    else {
183
        // Set local refcount to zero and shared refcount to desired refcount.
184
        // Mark the object as merged.
185
        ob->ob_tid = _Py_UNOWNED_TID;
186
        ob->ob_ref_local = 0;
187
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
188
    }
189
#endif  // Py_GIL_DISABLED
190
42.3M
#endif  // Py_LIMITED_API+0 < 0x030d0000
191
42.3M
}
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
unicodeobject.c:Py_SET_REFCNT
Line
Count
Source
147
947k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
148
947k
    assert(refcnt >= 0);
149
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
150
    // Stable ABI implements Py_SET_REFCNT() as a function call
151
    // on limited C API version 3.13 and newer.
152
    _Py_SetRefcnt(ob, refcnt);
153
#else
154
    // This immortal check is for code that is unaware of immortal objects.
155
    // The runtime tracks these objects and we should avoid as much
156
    // as possible having extensions inadvertently change the refcnt
157
    // of an immortalized object.
158
947k
    if (_Py_IsImmortal(ob)) {
159
0
        return;
160
0
    }
161
947k
#ifndef Py_GIL_DISABLED
162
947k
#if SIZEOF_VOID_P > 4
163
947k
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
164
#else
165
    ob->ob_refcnt = refcnt;
166
#endif
167
#else
168
    if (_Py_IsOwnedByCurrentThread(ob)) {
169
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
170
            // On overflow, make the object immortal
171
            ob->ob_tid = _Py_UNOWNED_TID;
172
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
173
            ob->ob_ref_shared = 0;
174
        }
175
        else {
176
            // Set local refcount to desired refcount and shared refcount
177
            // to zero, but preserve the shared refcount flags.
178
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
179
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
180
        }
181
    }
182
    else {
183
        // Set local refcount to zero and shared refcount to desired refcount.
184
        // Mark the object as merged.
185
        ob->ob_tid = _Py_UNOWNED_TID;
186
        ob->ob_ref_local = 0;
187
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
188
    }
189
#endif  // Py_GIL_DISABLED
190
947k
#endif  // Py_LIMITED_API+0 < 0x030d0000
191
947k
}
Unexecuted instantiation: unicodectype.c:Py_SET_REFCNT
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: formatter_unicode.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: 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: _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
147
15.4k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
148
15.4k
    assert(refcnt >= 0);
149
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
150
    // Stable ABI implements Py_SET_REFCNT() as a function call
151
    // on limited C API version 3.13 and newer.
152
    _Py_SetRefcnt(ob, refcnt);
153
#else
154
    // This immortal check is for code that is unaware of immortal objects.
155
    // The runtime tracks these objects and we should avoid as much
156
    // as possible having extensions inadvertently change the refcnt
157
    // of an immortalized object.
158
15.4k
    if (_Py_IsImmortal(ob)) {
159
0
        return;
160
0
    }
161
15.4k
#ifndef Py_GIL_DISABLED
162
15.4k
#if SIZEOF_VOID_P > 4
163
15.4k
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
164
#else
165
    ob->ob_refcnt = refcnt;
166
#endif
167
#else
168
    if (_Py_IsOwnedByCurrentThread(ob)) {
169
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
170
            // On overflow, make the object immortal
171
            ob->ob_tid = _Py_UNOWNED_TID;
172
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
173
            ob->ob_ref_shared = 0;
174
        }
175
        else {
176
            // Set local refcount to desired refcount and shared refcount
177
            // to zero, but preserve the shared refcount flags.
178
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
179
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
180
        }
181
    }
182
    else {
183
        // Set local refcount to zero and shared refcount to desired refcount.
184
        // Mark the object as merged.
185
        ob->ob_tid = _Py_UNOWNED_TID;
186
        ob->ob_ref_local = 0;
187
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
188
    }
189
#endif  // Py_GIL_DISABLED
190
15.4k
#endif  // Py_LIMITED_API+0 < 0x030d0000
191
15.4k
}
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
147
26.9M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
148
26.9M
    assert(refcnt >= 0);
149
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
150
    // Stable ABI implements Py_SET_REFCNT() as a function call
151
    // on limited C API version 3.13 and newer.
152
    _Py_SetRefcnt(ob, refcnt);
153
#else
154
    // This immortal check is for code that is unaware of immortal objects.
155
    // The runtime tracks these objects and we should avoid as much
156
    // as possible having extensions inadvertently change the refcnt
157
    // of an immortalized object.
158
26.9M
    if (_Py_IsImmortal(ob)) {
159
0
        return;
160
0
    }
161
26.9M
#ifndef Py_GIL_DISABLED
162
26.9M
#if SIZEOF_VOID_P > 4
163
26.9M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
164
#else
165
    ob->ob_refcnt = refcnt;
166
#endif
167
#else
168
    if (_Py_IsOwnedByCurrentThread(ob)) {
169
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
170
            // On overflow, make the object immortal
171
            ob->ob_tid = _Py_UNOWNED_TID;
172
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
173
            ob->ob_ref_shared = 0;
174
        }
175
        else {
176
            // Set local refcount to desired refcount and shared refcount
177
            // to zero, but preserve the shared refcount flags.
178
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
179
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
180
        }
181
    }
182
    else {
183
        // Set local refcount to zero and shared refcount to desired refcount.
184
        // Mark the object as merged.
185
        ob->ob_tid = _Py_UNOWNED_TID;
186
        ob->ob_ref_local = 0;
187
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
188
    }
189
#endif  // Py_GIL_DISABLED
190
26.9M
#endif  // Py_LIMITED_API+0 < 0x030d0000
191
26.9M
}
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
192
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
193
600M
#  define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt))
194
#endif
195
196
197
/*
198
The macros Py_INCREF(op) and Py_DECREF(op) are used to increment or decrement
199
reference counts.  Py_DECREF calls the object's deallocator function when
200
the refcount falls to 0; for
201
objects that don't contain references to other objects or heap memory
202
this can be the standard function free().  Both macros can be used
203
wherever a void expression is allowed.  The argument must not be a
204
NULL pointer.  If it may be NULL, use Py_XINCREF/Py_XDECREF instead.
205
The macro _Py_NewReference(op) initialize reference counts to 1, and
206
in special builds (Py_REF_DEBUG, Py_TRACE_REFS) performs additional
207
bookkeeping appropriate to the special build.
208
209
We assume that the reference count field can never overflow; this can
210
be proven when the size of the field is the same as the pointer size, so
211
we ignore the possibility.  Provided a C int is at least 32 bits (which
212
is implicitly assumed in many parts of this code), that's enough for
213
about 2**31 references to an object.
214
215
XXX The following became out of date in Python 2.2, but I'm not sure
216
XXX what the full truth is now.  Certainly, heap-allocated type objects
217
XXX can and should be deallocated.
218
Type objects should never be deallocated; the type pointer in an object
219
is not considered to be a reference to the type object, to save
220
complications in the deallocation function.  (This is actually a
221
decision that's up to the implementer of each new type so if you want,
222
you can count such references to the type object.)
223
*/
224
225
#if defined(Py_REF_DEBUG) && !defined(Py_LIMITED_API)
226
PyAPI_FUNC(void) _Py_NegativeRefcount(const char *filename, int lineno,
227
                                      PyObject *op);
228
PyAPI_FUNC(void) _Py_INCREF_IncRefTotal(void);
229
PyAPI_FUNC(void) _Py_DECREF_DecRefTotal(void);
230
#endif  // Py_REF_DEBUG && !Py_LIMITED_API
231
232
PyAPI_FUNC(void) _Py_Dealloc(PyObject *);
233
234
235
/*
236
These are provided as conveniences to Python runtime embedders, so that
237
they can have object code that is not dependent on Python compilation flags.
238
*/
239
PyAPI_FUNC(void) Py_IncRef(PyObject *);
240
PyAPI_FUNC(void) Py_DecRef(PyObject *);
241
242
// Similar to Py_IncRef() and Py_DecRef() but the argument must be non-NULL.
243
// Private functions used by Py_INCREF() and Py_DECREF().
244
PyAPI_FUNC(void) _Py_IncRef(PyObject *);
245
PyAPI_FUNC(void) _Py_DecRef(PyObject *);
246
247
static inline Py_ALWAYS_INLINE void Py_INCREF(PyObject *op)
248
7.90G
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
7.90G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
7.90G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
3.95G
        _Py_INCREF_IMMORTAL_STAT_INC();
281
3.95G
        return;
282
3.95G
    }
283
3.95G
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
3.95G
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
#endif
299
3.95G
}
bytesobject.c:Py_INCREF
Line
Count
Source
248
19.6M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
19.6M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
19.6M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
18.2M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
18.2M
        return;
282
18.2M
    }
283
1.44M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
1.44M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
1.44M
#endif
299
1.44M
}
call.c:Py_INCREF
Line
Count
Source
248
24.7M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
24.7M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
24.7M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
8.64M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
8.64M
        return;
282
8.64M
    }
283
16.0M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
16.0M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
16.0M
#endif
299
16.0M
}
exceptions.c:Py_INCREF
Line
Count
Source
248
88.7M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
88.7M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
88.7M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
38.3M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
38.3M
        return;
282
38.3M
    }
283
50.3M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
50.3M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
50.3M
#endif
299
50.3M
}
genericaliasobject.c:Py_INCREF
Line
Count
Source
248
782
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
782
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
782
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
782
        _Py_INCREF_IMMORTAL_STAT_INC();
281
782
        return;
282
782
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
0
}
floatobject.c:Py_INCREF
Line
Count
Source
248
550k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
550k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
550k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
550k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
550k
        return;
282
550k
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
0
}
listobject.c:Py_INCREF
Line
Count
Source
248
1.37G
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
1.37G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
1.37G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
257M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
257M
        return;
282
257M
    }
283
1.12G
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
1.12G
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
1.12G
#endif
299
1.12G
}
longobject.c:Py_INCREF
Line
Count
Source
248
98.4M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
98.4M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
98.4M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
98.4M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
98.4M
        return;
282
98.4M
    }
283
4.59k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
4.59k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
4.59k
#endif
299
4.59k
}
dictobject.c:Py_INCREF
Line
Count
Source
248
738M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
738M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
738M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
195M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
195M
        return;
282
195M
    }
283
542M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
542M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
542M
#endif
299
542M
}
memoryobject.c:Py_INCREF
Line
Count
Source
248
511k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
511k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
511k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
511k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
511k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
511k
#endif
299
511k
}
moduleobject.c:Py_INCREF
Line
Count
Source
248
1.39k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
1.39k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
1.39k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
819
        _Py_INCREF_IMMORTAL_STAT_INC();
281
819
        return;
282
819
    }
283
580
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
580
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
580
#endif
299
580
}
object.c:Py_INCREF
Line
Count
Source
248
569M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
569M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
569M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
401M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
401M
        return;
282
401M
    }
283
167M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
167M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
167M
#endif
299
167M
}
Unexecuted instantiation: obmalloc.c:Py_INCREF
Unexecuted instantiation: picklebufobject.c:Py_INCREF
rangeobject.c:Py_INCREF
Line
Count
Source
248
64
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
64
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
64
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
48
        _Py_INCREF_IMMORTAL_STAT_INC();
281
48
        return;
282
48
    }
283
16
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
16
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
16
#endif
299
16
}
setobject.c:Py_INCREF
Line
Count
Source
248
1.41M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
1.41M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
1.41M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
525k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
525k
        return;
282
525k
    }
283
890k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
890k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
890k
#endif
299
890k
}
sliceobject.c:Py_INCREF
Line
Count
Source
248
40.9M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
40.9M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
40.9M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
40.9M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
40.9M
        return;
282
40.9M
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
0
}
Unexecuted instantiation: structseq.c:Py_INCREF
Unexecuted instantiation: templateobject.c:Py_INCREF
tupleobject.c:Py_INCREF
Line
Count
Source
248
641M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
641M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
641M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
466M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
466M
        return;
282
466M
    }
283
174M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
174M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
174M
#endif
299
174M
}
typeobject.c:Py_INCREF
Line
Count
Source
248
287M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
287M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
287M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
95.5M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
95.5M
        return;
282
95.5M
    }
283
192M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
192M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
192M
#endif
299
192M
}
Unexecuted instantiation: typevarobject.c:Py_INCREF
unicodeobject.c:Py_INCREF
Line
Count
Source
248
816M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
816M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
816M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
708M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
708M
        return;
282
708M
    }
283
108M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
108M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
108M
#endif
299
108M
}
Unexecuted instantiation: unicodectype.c:Py_INCREF
Unexecuted instantiation: unionobject.c:Py_INCREF
weakrefobject.c:Py_INCREF
Line
Count
Source
248
259k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
259k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
259k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
1.24k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
1.24k
        return;
282
1.24k
    }
283
258k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
258k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
258k
#endif
299
258k
}
_warnings.c:Py_INCREF
Line
Count
Source
248
71.3k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
71.3k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
71.3k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
22.0k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
22.0k
        return;
282
22.0k
    }
283
49.3k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
49.3k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
49.3k
#endif
299
49.3k
}
bltinmodule.c:Py_INCREF
Line
Count
Source
248
62.3M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
62.3M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
62.3M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
27.6M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
27.6M
        return;
282
27.6M
    }
283
34.7M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
34.7M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
34.7M
#endif
299
34.7M
}
ceval.c:Py_INCREF
Line
Count
Source
248
1.08G
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
1.08G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
1.08G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
647M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
647M
        return;
282
647M
    }
283
438M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
438M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
438M
#endif
299
438M
}
codecs.c:Py_INCREF
Line
Count
Source
248
2.60M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
2.60M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
2.60M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
457k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
457k
        return;
282
457k
    }
283
2.14M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
2.14M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
2.14M
#endif
299
2.14M
}
codegen.c:Py_INCREF
Line
Count
Source
248
2.11k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
2.11k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
2.11k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
2.11k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
2.11k
        return;
282
2.11k
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
0
}
compile.c:Py_INCREF
Line
Count
Source
248
94.4k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
94.4k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
94.4k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
40.8k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
40.8k
        return;
282
40.8k
    }
283
53.6k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
53.6k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
53.6k
#endif
299
53.6k
}
context.c:Py_INCREF
Line
Count
Source
248
24
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
24
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
24
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
7
        _Py_INCREF_IMMORTAL_STAT_INC();
281
7
        return;
282
7
    }
283
17
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
17
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
17
#endif
299
17
}
errors.c:Py_INCREF
Line
Count
Source
248
64.5M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
64.5M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
64.5M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
31.6M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
31.6M
        return;
282
31.6M
    }
283
32.8M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
32.8M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
32.8M
#endif
299
32.8M
}
flowgraph.c:Py_INCREF
Line
Count
Source
248
82.7k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
82.7k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
82.7k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
38.7k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
38.7k
        return;
282
38.7k
    }
283
44.0k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
44.0k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
44.0k
#endif
299
44.0k
}
frame.c:Py_INCREF
Line
Count
Source
248
14.0M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
14.0M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
14.0M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
14.0M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
14.0M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
14.0M
#endif
299
14.0M
}
Unexecuted instantiation: future.c:Py_INCREF
gc.c:Py_INCREF
Line
Count
Source
248
367M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
367M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
367M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
278M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
278M
        return;
282
278M
    }
283
88.8M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
88.8M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
88.8M
#endif
299
88.8M
}
Unexecuted instantiation: gc_gil.c:Py_INCREF
getargs.c:Py_INCREF
Line
Count
Source
248
678k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
678k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
678k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
130k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
130k
        return;
282
130k
    }
283
548k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
548k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
548k
#endif
299
548k
}
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
248
82.2k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
82.2k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
82.2k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
12.4k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
12.4k
        return;
282
12.4k
    }
283
69.8k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
69.8k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
69.8k
#endif
299
69.8k
}
importdl.c:Py_INCREF
Line
Count
Source
248
533
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
533
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
533
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
420
        _Py_INCREF_IMMORTAL_STAT_INC();
281
420
        return;
282
420
    }
283
113
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
113
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
113
#endif
299
113
}
initconfig.c:Py_INCREF
Line
Count
Source
248
272
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
272
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
272
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
272
        _Py_INCREF_IMMORTAL_STAT_INC();
281
272
        return;
282
272
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
0
}
Unexecuted instantiation: instrumentation.c:Py_INCREF
Unexecuted instantiation: instruction_sequence.c:Py_INCREF
intrinsics.c:Py_INCREF
Line
Count
Source
248
29.4k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
29.4k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
29.4k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
29.4k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
29.4k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
29.4k
#endif
299
29.4k
}
Unexecuted instantiation: legacy_tracing.c:Py_INCREF
Unexecuted instantiation: lock.c:Py_INCREF
marshal.c:Py_INCREF
Line
Count
Source
248
305k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
305k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
305k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
265k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
265k
        return;
282
265k
    }
283
40.3k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
40.3k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
40.3k
#endif
299
40.3k
}
modsupport.c:Py_INCREF
Line
Count
Source
248
256k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
256k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
256k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
15.4k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
15.4k
        return;
282
15.4k
    }
283
241k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
241k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
241k
#endif
299
241k
}
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
248
16
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
16
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
16
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
16
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
16
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
16
#endif
299
16
}
Unexecuted instantiation: pymath.c:Py_INCREF
pystate.c:Py_INCREF
Line
Count
Source
248
2.35k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
2.35k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
2.35k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
2.35k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
2.35k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
2.35k
#endif
299
2.35k
}
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
248
216k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
216k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
216k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
215k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
215k
        return;
282
215k
    }
283
588
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
588
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
588
#endif
299
588
}
sysmodule.c:Py_INCREF
Line
Count
Source
248
1.14k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
1.14k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
1.14k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
767
        _Py_INCREF_IMMORTAL_STAT_INC();
281
767
        return;
282
767
    }
283
379
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
379
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
379
#endif
299
379
}
Unexecuted instantiation: thread.c:Py_INCREF
traceback.c:Py_INCREF
Line
Count
Source
248
34.6M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
34.6M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
34.6M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
34.6M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
34.6M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
34.6M
#endif
299
34.6M
}
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: formatter_unicode.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: atexitmodule.c:Py_INCREF
Unexecuted instantiation: faulthandler.c:Py_INCREF
posixmodule.c:Py_INCREF
Line
Count
Source
248
45.7k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
45.7k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
45.7k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
96
        _Py_INCREF_IMMORTAL_STAT_INC();
281
96
        return;
282
96
    }
283
45.6k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
45.6k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
45.6k
#endif
299
45.6k
}
signalmodule.c:Py_INCREF
Line
Count
Source
248
1.02k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
1.02k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
1.02k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
1.02k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
1.02k
        return;
282
1.02k
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
0
}
Unexecuted instantiation: _tracemalloc.c:Py_INCREF
Unexecuted instantiation: _suggestions.c:Py_INCREF
Unexecuted instantiation: _codecsmodule.c:Py_INCREF
_collectionsmodule.c:Py_INCREF
Line
Count
Source
248
20.1M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
20.1M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
20.1M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
17.5M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
17.5M
        return;
282
17.5M
    }
283
2.61M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
2.61M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
2.61M
#endif
299
2.61M
}
Unexecuted instantiation: errnomodule.c:Py_INCREF
_iomodule.c:Py_INCREF
Line
Count
Source
248
48
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
48
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
48
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
48
        _Py_INCREF_IMMORTAL_STAT_INC();
281
48
        return;
282
48
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
0
}
iobase.c:Py_INCREF
Line
Count
Source
248
40.8k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
40.8k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
40.8k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
40.8k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
40.8k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
40.8k
#endif
299
40.8k
}
Unexecuted instantiation: fileio.c:Py_INCREF
bytesio.c:Py_INCREF
Line
Count
Source
248
10.6k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
10.6k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
10.6k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
30
        _Py_INCREF_IMMORTAL_STAT_INC();
281
30
        return;
282
30
    }
283
10.6k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
10.6k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
10.6k
#endif
299
10.6k
}
bufferedio.c:Py_INCREF
Line
Count
Source
248
1.93k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
1.93k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
1.93k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
3
        _Py_INCREF_IMMORTAL_STAT_INC();
281
3
        return;
282
3
    }
283
1.93k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
1.93k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
1.93k
#endif
299
1.93k
}
textio.c:Py_INCREF
Line
Count
Source
248
83.5k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
83.5k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
83.5k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
21.5k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
21.5k
        return;
282
21.5k
    }
283
62.0k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
62.0k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
62.0k
#endif
299
62.0k
}
stringio.c:Py_INCREF
Line
Count
Source
248
17.4k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
17.4k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
17.4k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
62
        _Py_INCREF_IMMORTAL_STAT_INC();
281
62
        return;
282
62
    }
283
17.3k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
17.3k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
17.3k
#endif
299
17.3k
}
itertoolsmodule.c:Py_INCREF
Line
Count
Source
248
4
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
4
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
4
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
4
        _Py_INCREF_IMMORTAL_STAT_INC();
281
4
        return;
282
4
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
0
}
sre.c:Py_INCREF
Line
Count
Source
248
387M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
387M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
387M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
137M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
137M
        return;
282
137M
    }
283
249M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
249M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
249M
#endif
299
249M
}
Unexecuted instantiation: _sysconfig.c:Py_INCREF
Unexecuted instantiation: _threadmodule.c:Py_INCREF
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
248
9.21k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
9.21k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
9.21k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
9.12k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
9.12k
        return;
282
9.12k
    }
283
94
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
94
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
94
#endif
299
94
}
_functoolsmodule.c:Py_INCREF
Line
Count
Source
248
249
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
249
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
249
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
249
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
249
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
249
#endif
299
249
}
Unexecuted instantiation: _localemodule.c:Py_INCREF
Unexecuted instantiation: _opcode.c:Py_INCREF
_operator.c:Py_INCREF
Line
Count
Source
248
1.43M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
1.43M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
1.43M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
1.39M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
1.39M
        return;
282
1.39M
    }
283
42.8k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
42.8k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
42.8k
#endif
299
42.8k
}
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
248
176
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
176
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
176
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
176
        _Py_INCREF_IMMORTAL_STAT_INC();
281
176
        return;
282
176
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
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
248
586M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
586M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
586M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
389M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
389M
        return;
282
389M
    }
283
197M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
197M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
197M
#endif
299
197M
}
Unexecuted instantiation: boolobject.c:Py_INCREF
Unexecuted instantiation: bytes_methods.c:Py_INCREF
bytearrayobject.c:Py_INCREF
Line
Count
Source
248
36
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
36
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
36
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
36
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
36
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
36
#endif
299
36
}
Unexecuted instantiation: capsule.c:Py_INCREF
cellobject.c:Py_INCREF
Line
Count
Source
248
74.5k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
74.5k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
74.5k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
24.1k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
24.1k
        return;
282
24.1k
    }
283
50.4k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
50.4k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
50.4k
#endif
299
50.4k
}
classobject.c:Py_INCREF
Line
Count
Source
248
46.4M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
46.4M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
46.4M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
46.4M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
46.4M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
46.4M
#endif
299
46.4M
}
codeobject.c:Py_INCREF
Line
Count
Source
248
447k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
447k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
447k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
230k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
230k
        return;
282
230k
    }
283
216k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
216k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
216k
#endif
299
216k
}
complexobject.c:Py_INCREF
Line
Count
Source
248
3.69k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
3.69k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
3.69k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
3.69k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
3.69k
        return;
282
3.69k
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
0
}
descrobject.c:Py_INCREF
Line
Count
Source
248
22.5M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
22.5M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
22.5M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
28.8k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
28.8k
        return;
282
28.8k
    }
283
22.4M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
22.4M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
22.4M
#endif
299
22.4M
}
enumobject.c:Py_INCREF
Line
Count
Source
248
94.1M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
94.1M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
94.1M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
94.1M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
94.1M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
94.1M
#endif
299
94.1M
}
genobject.c:Py_INCREF
Line
Count
Source
248
42.8M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
42.8M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
42.8M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
42.7M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
42.7M
        return;
282
42.7M
    }
283
93.9k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
93.9k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
93.9k
#endif
299
93.9k
}
Unexecuted instantiation: fileobject.c:Py_INCREF
frameobject.c:Py_INCREF
Line
Count
Source
248
5.59k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
5.59k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
5.59k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
5.59k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
5.59k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
5.59k
#endif
299
5.59k
}
funcobject.c:Py_INCREF
Line
Count
Source
248
79.3M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
79.3M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
79.3M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
40.4M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
40.4M
        return;
282
40.4M
    }
283
38.8M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
38.8M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
38.8M
#endif
299
38.8M
}
Unexecuted instantiation: interpolationobject.c:Py_INCREF
iterobject.c:Py_INCREF
Line
Count
Source
248
678k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
678k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
678k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
338k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
338k
        return;
282
338k
    }
283
339k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
339k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
339k
#endif
299
339k
}
Unexecuted instantiation: odictobject.c:Py_INCREF
methodobject.c:Py_INCREF
Line
Count
Source
248
280M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
280M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
280M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
5.56M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
5.56M
        return;
282
5.56M
    }
283
274M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
274M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
274M
#endif
299
274M
}
Unexecuted instantiation: namespaceobject.c:Py_INCREF
Unexecuted instantiation: _contextvars.c:Py_INCREF
Python-ast.c:Py_INCREF
Line
Count
Source
248
591k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
591k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
591k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
240k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
240k
        return;
282
240k
    }
283
350k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
350k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
350k
#endif
299
350k
}
Unexecuted instantiation: Python-tokenize.c:Py_INCREF
Unexecuted instantiation: asdl.c:Py_INCREF
assemble.c:Py_INCREF
Line
Count
Source
248
37.3k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
37.3k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
37.3k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
37.2k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
37.2k
        return;
282
37.2k
    }
283
98
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
98
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
98
#endif
299
98
}
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
248
103k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
103k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
103k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
38.6k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
38.6k
        return;
282
38.6k
    }
283
64.6k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
64.6k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
64.6k
#endif
299
64.6k
}
pegen.c:Py_INCREF
Line
Count
Source
248
23.0k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
23.0k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
23.0k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
1.52k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
1.52k
        return;
282
1.52k
    }
283
21.4k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
21.4k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
21.4k
#endif
299
21.4k
}
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
300
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
301
7.90G
#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
302
#endif
303
304
305
#if !defined(Py_LIMITED_API) && defined(Py_GIL_DISABLED)
306
// Implements Py_DECREF on objects not owned by the current thread.
307
PyAPI_FUNC(void) _Py_DecRefShared(PyObject *);
308
PyAPI_FUNC(void) _Py_DecRefSharedDebug(PyObject *, const char *, int);
309
310
// Called from Py_DECREF by the owning thread when the local refcount reaches
311
// zero. The call will deallocate the object if the shared refcount is also
312
// zero. Otherwise, the thread gives up ownership and merges the reference
313
// count fields.
314
PyAPI_FUNC(void) _Py_MergeZeroLocalRefcount(PyObject *);
315
#endif
316
317
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
318
// Stable ABI implements Py_DECREF() as a function call on limited C API
319
// version 3.12 and newer, and on Python built in debug mode. _Py_DecRef() was
320
// added to Python 3.10.0a7, use Py_DecRef() on older Python versions.
321
// Py_DecRef() accepts NULL whereas _Py_DecRef() doesn't.
322
4.40k
static inline void Py_DECREF(PyObject *op) {
323
4.40k
#  if Py_LIMITED_API+0 >= 0x030a00A7
324
4.40k
    _Py_DecRef(op);
325
#  else
326
    Py_DecRef(op);
327
#  endif
328
4.40k
}
errnomodule.c:Py_DECREF
Line
Count
Source
322
4.40k
static inline void Py_DECREF(PyObject *op) {
323
4.40k
#  if Py_LIMITED_API+0 >= 0x030a00A7
324
4.40k
    _Py_DecRef(op);
325
#  else
326
    Py_DecRef(op);
327
#  endif
328
4.40k
}
Unexecuted instantiation: _stat.c:Py_DECREF
Unexecuted instantiation: pwdmodule.c:Py_DECREF
329
4.40k
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
330
331
#elif defined(Py_GIL_DISABLED) && defined(Py_REF_DEBUG)
332
static inline void Py_DECREF(const char *filename, int lineno, PyObject *op)
333
{
334
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
335
    if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
336
        _Py_DECREF_IMMORTAL_STAT_INC();
337
        return;
338
    }
339
    _Py_DECREF_STAT_INC();
340
    _Py_DECREF_DecRefTotal();
341
    if (_Py_IsOwnedByCurrentThread(op)) {
342
        if (local == 0) {
343
            _Py_NegativeRefcount(filename, lineno, op);
344
        }
345
        local--;
346
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, local);
347
        if (local == 0) {
348
            _Py_MergeZeroLocalRefcount(op);
349
        }
350
    }
351
    else {
352
        _Py_DecRefSharedDebug(op, filename, lineno);
353
    }
354
}
355
#define Py_DECREF(op) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
356
357
#elif defined(Py_GIL_DISABLED)
358
static inline void Py_DECREF(PyObject *op)
359
{
360
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
361
    if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
362
        _Py_DECREF_IMMORTAL_STAT_INC();
363
        return;
364
    }
365
    _Py_DECREF_STAT_INC();
366
    if (_Py_IsOwnedByCurrentThread(op)) {
367
        local--;
368
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, local);
369
        if (local == 0) {
370
            _Py_MergeZeroLocalRefcount(op);
371
        }
372
    }
373
    else {
374
        _Py_DecRefShared(op);
375
    }
376
}
377
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
378
379
#elif defined(Py_REF_DEBUG)
380
381
static inline void Py_DECREF(const char *filename, int lineno, PyObject *op)
382
{
383
#if SIZEOF_VOID_P > 4
384
    /* If an object has been freed, it will have a negative full refcnt
385
     * If it has not it been freed, will have a very large refcnt */
386
    if (op->ob_refcnt_full <= 0 || op->ob_refcnt > (((PY_UINT32_T)-1) - (1<<20))) {
387
#else
388
    if (op->ob_refcnt <= 0) {
389
#endif
390
        _Py_NegativeRefcount(filename, lineno, op);
391
    }
392
    if (_Py_IsImmortal(op)) {
393
        _Py_DECREF_IMMORTAL_STAT_INC();
394
        return;
395
    }
396
    _Py_DECREF_STAT_INC();
397
    _Py_DECREF_DecRefTotal();
398
    if (--op->ob_refcnt == 0) {
399
        _Py_Dealloc(op);
400
    }
401
}
402
#define Py_DECREF(op) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
403
404
#else
405
406
static inline Py_ALWAYS_INLINE void Py_DECREF(PyObject *op)
407
6.90G
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
6.90G
    if (_Py_IsImmortal(op)) {
411
2.99G
        _Py_DECREF_IMMORTAL_STAT_INC();
412
2.99G
        return;
413
2.99G
    }
414
3.90G
    _Py_DECREF_STAT_INC();
415
3.90G
    if (--op->ob_refcnt == 0) {
416
1.04G
        _Py_Dealloc(op);
417
1.04G
    }
418
3.90G
}
bytesobject.c:Py_DECREF
Line
Count
Source
407
5.03M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
5.03M
    if (_Py_IsImmortal(op)) {
411
4.87M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
4.87M
        return;
413
4.87M
    }
414
157k
    _Py_DECREF_STAT_INC();
415
157k
    if (--op->ob_refcnt == 0) {
416
91.5k
        _Py_Dealloc(op);
417
91.5k
    }
418
157k
}
call.c:Py_DECREF
Line
Count
Source
407
138M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
138M
    if (_Py_IsImmortal(op)) {
411
59.9M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
59.9M
        return;
413
59.9M
    }
414
78.4M
    _Py_DECREF_STAT_INC();
415
78.4M
    if (--op->ob_refcnt == 0) {
416
60.8M
        _Py_Dealloc(op);
417
60.8M
    }
418
78.4M
}
exceptions.c:Py_DECREF
Line
Count
Source
407
114M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
114M
    if (_Py_IsImmortal(op)) {
411
38.4M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
38.4M
        return;
413
38.4M
    }
414
76.2M
    _Py_DECREF_STAT_INC();
415
76.2M
    if (--op->ob_refcnt == 0) {
416
66.6M
        _Py_Dealloc(op);
417
66.6M
    }
418
76.2M
}
genericaliasobject.c:Py_DECREF
Line
Count
Source
407
84
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
84
    if (_Py_IsImmortal(op)) {
411
42
        _Py_DECREF_IMMORTAL_STAT_INC();
412
42
        return;
413
42
    }
414
42
    _Py_DECREF_STAT_INC();
415
42
    if (--op->ob_refcnt == 0) {
416
42
        _Py_Dealloc(op);
417
42
    }
418
42
}
floatobject.c:Py_DECREF
Line
Count
Source
407
8
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
8
    if (_Py_IsImmortal(op)) {
411
5
        _Py_DECREF_IMMORTAL_STAT_INC();
412
5
        return;
413
5
    }
414
3
    _Py_DECREF_STAT_INC();
415
3
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
3
}
listobject.c:Py_DECREF
Line
Count
Source
407
1.78G
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
1.78G
    if (_Py_IsImmortal(op)) {
411
455M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
455M
        return;
413
455M
    }
414
1.32G
    _Py_DECREF_STAT_INC();
415
1.32G
    if (--op->ob_refcnt == 0) {
416
270M
        _Py_Dealloc(op);
417
270M
    }
418
1.32G
}
longobject.c:Py_DECREF
Line
Count
Source
407
3.83M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
3.83M
    if (_Py_IsImmortal(op)) {
411
3.38M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
3.38M
        return;
413
3.38M
    }
414
448k
    _Py_DECREF_STAT_INC();
415
448k
    if (--op->ob_refcnt == 0) {
416
3.25k
        _Py_Dealloc(op);
417
3.25k
    }
418
448k
}
dictobject.c:Py_DECREF
Line
Count
Source
407
559M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
559M
    if (_Py_IsImmortal(op)) {
411
334M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
334M
        return;
413
334M
    }
414
225M
    _Py_DECREF_STAT_INC();
415
225M
    if (--op->ob_refcnt == 0) {
416
73.5M
        _Py_Dealloc(op);
417
73.5M
    }
418
225M
}
memoryobject.c:Py_DECREF
Line
Count
Source
407
595k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
595k
    if (_Py_IsImmortal(op)) {
411
4
        _Py_DECREF_IMMORTAL_STAT_INC();
412
4
        return;
413
4
    }
414
595k
    _Py_DECREF_STAT_INC();
415
595k
    if (--op->ob_refcnt == 0) {
416
297k
        _Py_Dealloc(op);
417
297k
    }
418
595k
}
moduleobject.c:Py_DECREF
Line
Count
Source
407
46.1k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
46.1k
    if (_Py_IsImmortal(op)) {
411
34.4k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
34.4k
        return;
413
34.4k
    }
414
11.6k
    _Py_DECREF_STAT_INC();
415
11.6k
    if (--op->ob_refcnt == 0) {
416
8
        _Py_Dealloc(op);
417
8
    }
418
11.6k
}
object.c:Py_DECREF
Line
Count
Source
407
402M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
402M
    if (_Py_IsImmortal(op)) {
411
361M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
361M
        return;
413
361M
    }
414
41.0M
    _Py_DECREF_STAT_INC();
415
41.0M
    if (--op->ob_refcnt == 0) {
416
224
        _Py_Dealloc(op);
417
224
    }
418
41.0M
}
Unexecuted instantiation: obmalloc.c:Py_DECREF
Unexecuted instantiation: picklebufobject.c:Py_DECREF
rangeobject.c:Py_DECREF
Line
Count
Source
407
26.9M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
26.9M
    if (_Py_IsImmortal(op)) {
411
23.9M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
23.9M
        return;
413
23.9M
    }
414
3.07M
    _Py_DECREF_STAT_INC();
415
3.07M
    if (--op->ob_refcnt == 0) {
416
1.67M
        _Py_Dealloc(op);
417
1.67M
    }
418
3.07M
}
setobject.c:Py_DECREF
Line
Count
Source
407
1.16M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
1.16M
    if (_Py_IsImmortal(op)) {
411
367k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
367k
        return;
413
367k
    }
414
796k
    _Py_DECREF_STAT_INC();
415
796k
    if (--op->ob_refcnt == 0) {
416
36.7k
        _Py_Dealloc(op);
417
36.7k
    }
418
796k
}
sliceobject.c:Py_DECREF
Line
Count
Source
407
122M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
122M
    if (_Py_IsImmortal(op)) {
411
112M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
112M
        return;
413
112M
    }
414
10.6M
    _Py_DECREF_STAT_INC();
415
10.6M
    if (--op->ob_refcnt == 0) {
416
932k
        _Py_Dealloc(op);
417
932k
    }
418
10.6M
}
structseq.c:Py_DECREF
Line
Count
Source
407
94.6k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
94.6k
    if (_Py_IsImmortal(op)) {
411
24.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
24.2k
        return;
413
24.2k
    }
414
70.4k
    _Py_DECREF_STAT_INC();
415
70.4k
    if (--op->ob_refcnt == 0) {
416
61.3k
        _Py_Dealloc(op);
417
61.3k
    }
418
70.4k
}
Unexecuted instantiation: templateobject.c:Py_DECREF
tupleobject.c:Py_DECREF
Line
Count
Source
407
982M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
982M
    if (_Py_IsImmortal(op)) {
411
608M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
608M
        return;
413
608M
    }
414
374M
    _Py_DECREF_STAT_INC();
415
374M
    if (--op->ob_refcnt == 0) {
416
108M
        _Py_Dealloc(op);
417
108M
    }
418
374M
}
typeobject.c:Py_DECREF
Line
Count
Source
407
358M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
358M
    if (_Py_IsImmortal(op)) {
411
43.5M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
43.5M
        return;
413
43.5M
    }
414
315M
    _Py_DECREF_STAT_INC();
415
315M
    if (--op->ob_refcnt == 0) {
416
15.2M
        _Py_Dealloc(op);
417
15.2M
    }
418
315M
}
Unexecuted instantiation: typevarobject.c:Py_DECREF
unicodeobject.c:Py_DECREF
Line
Count
Source
407
229M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
229M
    if (_Py_IsImmortal(op)) {
411
137M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
137M
        return;
413
137M
    }
414
92.4M
    _Py_DECREF_STAT_INC();
415
92.4M
    if (--op->ob_refcnt == 0) {
416
20.3M
        _Py_Dealloc(op);
417
20.3M
    }
418
92.4M
}
Unexecuted instantiation: unicodectype.c:Py_DECREF
unionobject.c:Py_DECREF
Line
Count
Source
407
864
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
864
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
864
    _Py_DECREF_STAT_INC();
415
864
    if (--op->ob_refcnt == 0) {
416
864
        _Py_Dealloc(op);
417
864
    }
418
864
}
weakrefobject.c:Py_DECREF
Line
Count
Source
407
12.7k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
12.7k
    if (_Py_IsImmortal(op)) {
411
6.67k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
6.67k
        return;
413
6.67k
    }
414
6.06k
    _Py_DECREF_STAT_INC();
415
6.06k
    if (--op->ob_refcnt == 0) {
416
5.81k
        _Py_Dealloc(op);
417
5.81k
    }
418
6.06k
}
_warnings.c:Py_DECREF
Line
Count
Source
407
169k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
169k
    if (_Py_IsImmortal(op)) {
411
43.5k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
43.5k
        return;
413
43.5k
    }
414
125k
    _Py_DECREF_STAT_INC();
415
125k
    if (--op->ob_refcnt == 0) {
416
34.8k
        _Py_Dealloc(op);
417
34.8k
    }
418
125k
}
bltinmodule.c:Py_DECREF
Line
Count
Source
407
125M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
125M
    if (_Py_IsImmortal(op)) {
411
64.6M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
64.6M
        return;
413
64.6M
    }
414
61.3M
    _Py_DECREF_STAT_INC();
415
61.3M
    if (--op->ob_refcnt == 0) {
416
35.1M
        _Py_Dealloc(op);
417
35.1M
    }
418
61.3M
}
ceval.c:Py_DECREF
Line
Count
Source
407
5.57k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
5.57k
    if (_Py_IsImmortal(op)) {
411
639
        _Py_DECREF_IMMORTAL_STAT_INC();
412
639
        return;
413
639
    }
414
4.93k
    _Py_DECREF_STAT_INC();
415
4.93k
    if (--op->ob_refcnt == 0) {
416
402
        _Py_Dealloc(op);
417
402
    }
418
4.93k
}
codecs.c:Py_DECREF
Line
Count
Source
407
5.55M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
5.55M
    if (_Py_IsImmortal(op)) {
411
1.89M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
1.89M
        return;
413
1.89M
    }
414
3.66M
    _Py_DECREF_STAT_INC();
415
3.66M
    if (--op->ob_refcnt == 0) {
416
1.72M
        _Py_Dealloc(op);
417
1.72M
    }
418
3.66M
}
codegen.c:Py_DECREF
Line
Count
Source
407
121k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
121k
    if (_Py_IsImmortal(op)) {
411
107k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
107k
        return;
413
107k
    }
414
13.9k
    _Py_DECREF_STAT_INC();
415
13.9k
    if (--op->ob_refcnt == 0) {
416
789
        _Py_Dealloc(op);
417
789
    }
418
13.9k
}
compile.c:Py_DECREF
Line
Count
Source
407
505k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
505k
    if (_Py_IsImmortal(op)) {
411
257k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
257k
        return;
413
257k
    }
414
248k
    _Py_DECREF_STAT_INC();
415
248k
    if (--op->ob_refcnt == 0) {
416
82.5k
        _Py_Dealloc(op);
417
82.5k
    }
418
248k
}
context.c:Py_DECREF
Line
Count
Source
407
32
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
32
    if (_Py_IsImmortal(op)) {
411
16
        _Py_DECREF_IMMORTAL_STAT_INC();
412
16
        return;
413
16
    }
414
16
    _Py_DECREF_STAT_INC();
415
16
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
16
}
errors.c:Py_DECREF
Line
Count
Source
407
78.8M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
78.8M
    if (_Py_IsImmortal(op)) {
411
31.6M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
31.6M
        return;
413
31.6M
    }
414
47.1M
    _Py_DECREF_STAT_INC();
415
47.1M
    if (--op->ob_refcnt == 0) {
416
12.1M
        _Py_Dealloc(op);
417
12.1M
    }
418
47.1M
}
flowgraph.c:Py_DECREF
Line
Count
Source
407
61.1k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
61.1k
    if (_Py_IsImmortal(op)) {
411
33.5k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
33.5k
        return;
413
33.5k
    }
414
27.5k
    _Py_DECREF_STAT_INC();
415
27.5k
    if (--op->ob_refcnt == 0) {
416
28
        _Py_Dealloc(op);
417
28
    }
418
27.5k
}
frame.c:Py_DECREF
Line
Count
Source
407
27.3M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
27.3M
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
27.3M
    _Py_DECREF_STAT_INC();
415
27.3M
    if (--op->ob_refcnt == 0) {
416
13.9M
        _Py_Dealloc(op);
417
13.9M
    }
418
27.3M
}
Unexecuted instantiation: future.c:Py_DECREF
gc.c:Py_DECREF
Line
Count
Source
407
602k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
602k
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
602k
    _Py_DECREF_STAT_INC();
415
602k
    if (--op->ob_refcnt == 0) {
416
369k
        _Py_Dealloc(op);
417
369k
    }
418
602k
}
Unexecuted instantiation: gc_gil.c:Py_DECREF
getargs.c:Py_DECREF
Line
Count
Source
407
1.43M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
1.43M
    if (_Py_IsImmortal(op)) {
411
756k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
756k
        return;
413
756k
    }
414
674k
    _Py_DECREF_STAT_INC();
415
674k
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
674k
}
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
407
166k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
166k
    if (_Py_IsImmortal(op)) {
411
13.0k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
13.0k
        return;
413
13.0k
    }
414
153k
    _Py_DECREF_STAT_INC();
415
153k
    if (--op->ob_refcnt == 0) {
416
10.8k
        _Py_Dealloc(op);
417
10.8k
    }
418
153k
}
importdl.c:Py_DECREF
Line
Count
Source
407
1.22k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
1.22k
    if (_Py_IsImmortal(op)) {
411
498
        _Py_DECREF_IMMORTAL_STAT_INC();
412
498
        return;
413
498
    }
414
726
    _Py_DECREF_STAT_INC();
415
726
    if (--op->ob_refcnt == 0) {
416
454
        _Py_Dealloc(op);
417
454
    }
418
726
}
initconfig.c:Py_DECREF
Line
Count
Source
407
2.20k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
2.20k
    if (_Py_IsImmortal(op)) {
411
1.77k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
1.77k
        return;
413
1.77k
    }
414
432
    _Py_DECREF_STAT_INC();
415
432
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
432
}
instrumentation.c:Py_DECREF
Line
Count
Source
407
384
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
384
    if (_Py_IsImmortal(op)) {
411
208
        _Py_DECREF_IMMORTAL_STAT_INC();
412
208
        return;
413
208
    }
414
176
    _Py_DECREF_STAT_INC();
415
176
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
176
}
Unexecuted instantiation: instruction_sequence.c:Py_DECREF
intrinsics.c:Py_DECREF
Line
Count
Source
407
27.2k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
27.2k
    if (_Py_IsImmortal(op)) {
411
15.4k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
15.4k
        return;
413
15.4k
    }
414
11.8k
    _Py_DECREF_STAT_INC();
415
11.8k
    if (--op->ob_refcnt == 0) {
416
120
        _Py_Dealloc(op);
417
120
    }
418
11.8k
}
Unexecuted instantiation: legacy_tracing.c:Py_DECREF
Unexecuted instantiation: lock.c:Py_DECREF
marshal.c:Py_DECREF
Line
Count
Source
407
299k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
299k
    if (_Py_IsImmortal(op)) {
411
130k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
130k
        return;
413
130k
    }
414
169k
    _Py_DECREF_STAT_INC();
415
169k
    if (--op->ob_refcnt == 0) {
416
2.43k
        _Py_Dealloc(op);
417
2.43k
    }
418
169k
}
modsupport.c:Py_DECREF
Line
Count
Source
407
16.7k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
16.7k
    if (_Py_IsImmortal(op)) {
411
11.0k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
11.0k
        return;
413
11.0k
    }
414
5.71k
    _Py_DECREF_STAT_INC();
415
5.71k
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
5.71k
}
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
407
4.63M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
4.63M
    if (_Py_IsImmortal(op)) {
411
4.00M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
4.00M
        return;
413
4.00M
    }
414
636k
    _Py_DECREF_STAT_INC();
415
636k
    if (--op->ob_refcnt == 0) {
416
23.4k
        _Py_Dealloc(op);
417
23.4k
    }
418
636k
}
Unexecuted instantiation: pyctype.c:Py_DECREF
Unexecuted instantiation: pyhash.c:Py_DECREF
pylifecycle.c:Py_DECREF
Line
Count
Source
407
576
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
576
    if (_Py_IsImmortal(op)) {
411
112
        _Py_DECREF_IMMORTAL_STAT_INC();
412
112
        return;
413
112
    }
414
464
    _Py_DECREF_STAT_INC();
415
464
    if (--op->ob_refcnt == 0) {
416
48
        _Py_Dealloc(op);
417
48
    }
418
464
}
Unexecuted instantiation: pymath.c:Py_DECREF
Unexecuted instantiation: pystate.c:Py_DECREF
pythonrun.c:Py_DECREF
Line
Count
Source
407
155
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
155
    if (_Py_IsImmortal(op)) {
411
32
        _Py_DECREF_IMMORTAL_STAT_INC();
412
32
        return;
413
32
    }
414
123
    _Py_DECREF_STAT_INC();
415
123
    if (--op->ob_refcnt == 0) {
416
91
        _Py_Dealloc(op);
417
91
    }
418
123
}
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
407
502k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
502k
    if (_Py_IsImmortal(op)) {
411
80.1k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
80.1k
        return;
413
80.1k
    }
414
422k
    _Py_DECREF_STAT_INC();
415
422k
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
422k
}
symtable.c:Py_DECREF
Line
Count
Source
407
653k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
653k
    if (_Py_IsImmortal(op)) {
411
295k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
295k
        return;
413
295k
    }
414
358k
    _Py_DECREF_STAT_INC();
415
358k
    if (--op->ob_refcnt == 0) {
416
171k
        _Py_Dealloc(op);
417
171k
    }
418
358k
}
sysmodule.c:Py_DECREF
Line
Count
Source
407
1.90k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
1.90k
    if (_Py_IsImmortal(op)) {
411
1.02k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
1.02k
        return;
413
1.02k
    }
414
880
    _Py_DECREF_STAT_INC();
415
880
    if (--op->ob_refcnt == 0) {
416
64
        _Py_Dealloc(op);
417
64
    }
418
880
}
Unexecuted instantiation: thread.c:Py_DECREF
traceback.c:Py_DECREF
Line
Count
Source
407
69.2M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
69.2M
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
69.2M
    _Py_DECREF_STAT_INC();
415
69.2M
    if (--op->ob_refcnt == 0) {
416
14.6M
        _Py_Dealloc(op);
417
14.6M
    }
418
69.2M
}
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
formatter_unicode.c:Py_DECREF
Line
Count
Source
407
256
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
256
    if (_Py_IsImmortal(op)) {
411
192
        _Py_DECREF_IMMORTAL_STAT_INC();
412
192
        return;
413
192
    }
414
64
    _Py_DECREF_STAT_INC();
415
64
    if (--op->ob_refcnt == 0) {
416
64
        _Py_Dealloc(op);
417
64
    }
418
64
}
fileutils.c:Py_DECREF
Line
Count
Source
407
11.8k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
11.8k
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
11.8k
    _Py_DECREF_STAT_INC();
415
11.8k
    if (--op->ob_refcnt == 0) {
416
11.8k
        _Py_Dealloc(op);
417
11.8k
    }
418
11.8k
}
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: atexitmodule.c:Py_DECREF
Unexecuted instantiation: faulthandler.c:Py_DECREF
posixmodule.c:Py_DECREF
Line
Count
Source
407
50.9k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
50.9k
    if (_Py_IsImmortal(op)) {
411
2.59k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
2.59k
        return;
413
2.59k
    }
414
48.3k
    _Py_DECREF_STAT_INC();
415
48.3k
    if (--op->ob_refcnt == 0) {
416
33.7k
        _Py_Dealloc(op);
417
33.7k
    }
418
48.3k
}
signalmodule.c:Py_DECREF
Line
Count
Source
407
32
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
32
    if (_Py_IsImmortal(op)) {
411
16
        _Py_DECREF_IMMORTAL_STAT_INC();
412
16
        return;
413
16
    }
414
16
    _Py_DECREF_STAT_INC();
415
16
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
16
}
Unexecuted instantiation: _tracemalloc.c:Py_DECREF
Unexecuted instantiation: _suggestions.c:Py_DECREF
Unexecuted instantiation: _codecsmodule.c:Py_DECREF
_collectionsmodule.c:Py_DECREF
Line
Count
Source
407
101k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
101k
    if (_Py_IsImmortal(op)) {
411
41.3k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
41.3k
        return;
413
41.3k
    }
414
60.0k
    _Py_DECREF_STAT_INC();
415
60.0k
    if (--op->ob_refcnt == 0) {
416
42.5k
        _Py_Dealloc(op);
417
42.5k
    }
418
60.0k
}
_iomodule.c:Py_DECREF
Line
Count
Source
407
6.00k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
6.00k
    if (_Py_IsImmortal(op)) {
411
2.04k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
2.04k
        return;
413
2.04k
    }
414
3.95k
    _Py_DECREF_STAT_INC();
415
3.95k
    if (--op->ob_refcnt == 0) {
416
1.98k
        _Py_Dealloc(op);
417
1.98k
    }
418
3.95k
}
iobase.c:Py_DECREF
Line
Count
Source
407
123k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
123k
    if (_Py_IsImmortal(op)) {
411
103k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
103k
        return;
413
103k
    }
414
19.8k
    _Py_DECREF_STAT_INC();
415
19.8k
    if (--op->ob_refcnt == 0) {
416
9.90k
        _Py_Dealloc(op);
417
9.90k
    }
418
19.8k
}
fileio.c:Py_DECREF
Line
Count
Source
407
3.26k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
3.26k
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
3.26k
    _Py_DECREF_STAT_INC();
415
3.26k
    if (--op->ob_refcnt == 0) {
416
2.10k
        _Py_Dealloc(op);
417
2.10k
    }
418
3.26k
}
bytesio.c:Py_DECREF
Line
Count
Source
407
29.7k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
29.7k
    if (_Py_IsImmortal(op)) {
411
9.93k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
9.93k
        return;
413
9.93k
    }
414
19.7k
    _Py_DECREF_STAT_INC();
415
19.7k
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
19.7k
}
bufferedio.c:Py_DECREF
Line
Count
Source
407
6.76k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
6.76k
    if (_Py_IsImmortal(op)) {
411
1.96k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
1.96k
        return;
413
1.96k
    }
414
4.80k
    _Py_DECREF_STAT_INC();
415
4.80k
    if (--op->ob_refcnt == 0) {
416
1.92k
        _Py_Dealloc(op);
417
1.92k
    }
418
4.80k
}
textio.c:Py_DECREF
Line
Count
Source
407
52.6k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
52.6k
    if (_Py_IsImmortal(op)) {
411
35.1k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
35.1k
        return;
413
35.1k
    }
414
17.5k
    _Py_DECREF_STAT_INC();
415
17.5k
    if (--op->ob_refcnt == 0) {
416
16
        _Py_Dealloc(op);
417
16
    }
418
17.5k
}
stringio.c:Py_DECREF
Line
Count
Source
407
307k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
307k
    if (_Py_IsImmortal(op)) {
411
158k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
158k
        return;
413
158k
    }
414
148k
    _Py_DECREF_STAT_INC();
415
148k
    if (--op->ob_refcnt == 0) {
416
34.8k
        _Py_Dealloc(op);
417
34.8k
    }
418
148k
}
itertoolsmodule.c:Py_DECREF
Line
Count
Source
407
2
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
2
    if (_Py_IsImmortal(op)) {
411
2
        _Py_DECREF_IMMORTAL_STAT_INC();
412
2
        return;
413
2
    }
414
0
    _Py_DECREF_STAT_INC();
415
0
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
0
}
sre.c:Py_DECREF
Line
Count
Source
407
523M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
523M
    if (_Py_IsImmortal(op)) {
411
108M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
108M
        return;
413
108M
    }
414
415M
    _Py_DECREF_STAT_INC();
415
415M
    if (--op->ob_refcnt == 0) {
416
5.05M
        _Py_Dealloc(op);
417
5.05M
    }
418
415M
}
Unexecuted instantiation: _sysconfig.c:Py_DECREF
_threadmodule.c:Py_DECREF
Line
Count
Source
407
5.47k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
5.47k
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
5.47k
    _Py_DECREF_STAT_INC();
415
5.47k
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
5.47k
}
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
407
28.0k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
28.0k
    if (_Py_IsImmortal(op)) {
411
9.86k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
9.86k
        return;
413
9.86k
    }
414
18.2k
    _Py_DECREF_STAT_INC();
415
18.2k
    if (--op->ob_refcnt == 0) {
416
2.43k
        _Py_Dealloc(op);
417
2.43k
    }
418
18.2k
}
_functoolsmodule.c:Py_DECREF
Line
Count
Source
407
106
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
106
    if (_Py_IsImmortal(op)) {
411
14
        _Py_DECREF_IMMORTAL_STAT_INC();
412
14
        return;
413
14
    }
414
92
    _Py_DECREF_STAT_INC();
415
92
    if (--op->ob_refcnt == 0) {
416
28
        _Py_Dealloc(op);
417
28
    }
418
92
}
Unexecuted instantiation: _localemodule.c:Py_DECREF
Unexecuted instantiation: _opcode.c:Py_DECREF
_operator.c:Py_DECREF
Line
Count
Source
407
516k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
516k
    if (_Py_IsImmortal(op)) {
411
258k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
258k
        return;
413
258k
    }
414
258k
    _Py_DECREF_STAT_INC();
415
258k
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
258k
}
Unexecuted instantiation: symtablemodule.c:Py_DECREF
getpath.c:Py_DECREF
Line
Count
Source
407
528
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
528
    if (_Py_IsImmortal(op)) {
411
192
        _Py_DECREF_IMMORTAL_STAT_INC();
412
192
        return;
413
192
    }
414
336
    _Py_DECREF_STAT_INC();
415
336
    if (--op->ob_refcnt == 0) {
416
16
        _Py_Dealloc(op);
417
16
    }
418
336
}
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
407
21.7k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
21.7k
    if (_Py_IsImmortal(op)) {
411
531
        _Py_DECREF_IMMORTAL_STAT_INC();
412
531
        return;
413
531
    }
414
21.1k
    _Py_DECREF_STAT_INC();
415
21.1k
    if (--op->ob_refcnt == 0) {
416
15.7k
        _Py_Dealloc(op);
417
15.7k
    }
418
21.1k
}
Unexecuted instantiation: myreadline.c:Py_DECREF
abstract.c:Py_DECREF
Line
Count
Source
407
449M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
449M
    if (_Py_IsImmortal(op)) {
411
362M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
362M
        return;
413
362M
    }
414
87.0M
    _Py_DECREF_STAT_INC();
415
87.0M
    if (--op->ob_refcnt == 0) {
416
1.66M
        _Py_Dealloc(op);
417
1.66M
    }
418
87.0M
}
Unexecuted instantiation: boolobject.c:Py_DECREF
Unexecuted instantiation: bytes_methods.c:Py_DECREF
bytearrayobject.c:Py_DECREF
Line
Count
Source
407
16
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
16
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
16
    _Py_DECREF_STAT_INC();
415
16
    if (--op->ob_refcnt == 0) {
416
16
        _Py_Dealloc(op);
417
16
    }
418
16
}
capsule.c:Py_DECREF
Line
Count
Source
407
10
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
10
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
10
    _Py_DECREF_STAT_INC();
415
10
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
10
}
cellobject.c:Py_DECREF
Line
Count
Source
407
324k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
324k
    if (_Py_IsImmortal(op)) {
411
31.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
31.2k
        return;
413
31.2k
    }
414
293k
    _Py_DECREF_STAT_INC();
415
293k
    if (--op->ob_refcnt == 0) {
416
203k
        _Py_Dealloc(op);
417
203k
    }
418
293k
}
classobject.c:Py_DECREF
Line
Count
Source
407
46.4M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
46.4M
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
46.4M
    _Py_DECREF_STAT_INC();
415
46.4M
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
46.4M
}
codeobject.c:Py_DECREF
Line
Count
Source
407
97.4k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
97.4k
    if (_Py_IsImmortal(op)) {
411
39.1k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
39.1k
        return;
413
39.1k
    }
414
58.2k
    _Py_DECREF_STAT_INC();
415
58.2k
    if (--op->ob_refcnt == 0) {
416
28.6k
        _Py_Dealloc(op);
417
28.6k
    }
418
58.2k
}
Unexecuted instantiation: complexobject.c:Py_DECREF
descrobject.c:Py_DECREF
Line
Count
Source
407
112M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
112M
    if (_Py_IsImmortal(op)) {
411
10.2M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
10.2M
        return;
413
10.2M
    }
414
102M
    _Py_DECREF_STAT_INC();
415
102M
    if (--op->ob_refcnt == 0) {
416
73.3M
        _Py_Dealloc(op);
417
73.3M
    }
418
102M
}
enumobject.c:Py_DECREF
Line
Count
Source
407
243M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
243M
    if (_Py_IsImmortal(op)) {
411
95.6M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
95.6M
        return;
413
95.6M
    }
414
148M
    _Py_DECREF_STAT_INC();
415
148M
    if (--op->ob_refcnt == 0) {
416
55.5M
        _Py_Dealloc(op);
417
55.5M
    }
418
148M
}
genobject.c:Py_DECREF
Line
Count
Source
407
55.4M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
55.4M
    if (_Py_IsImmortal(op)) {
411
55.3M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
55.3M
        return;
413
55.3M
    }
414
91.0k
    _Py_DECREF_STAT_INC();
415
91.0k
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
91.0k
}
fileobject.c:Py_DECREF
Line
Count
Source
407
12.9k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
12.9k
    if (_Py_IsImmortal(op)) {
411
12.0k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
12.0k
        return;
413
12.0k
    }
414
944
    _Py_DECREF_STAT_INC();
415
944
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
944
}
frameobject.c:Py_DECREF
Line
Count
Source
407
13.3M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
13.3M
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
13.3M
    _Py_DECREF_STAT_INC();
415
13.3M
    if (--op->ob_refcnt == 0) {
416
20.7k
        _Py_Dealloc(op);
417
20.7k
    }
418
13.3M
}
funcobject.c:Py_DECREF
Line
Count
Source
407
121M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
121M
    if (_Py_IsImmortal(op)) {
411
69.5M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
69.5M
        return;
413
69.5M
    }
414
52.2M
    _Py_DECREF_STAT_INC();
415
52.2M
    if (--op->ob_refcnt == 0) {
416
391k
        _Py_Dealloc(op);
417
391k
    }
418
52.2M
}
interpolationobject.c:Py_DECREF
Line
Count
Source
407
16
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
16
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
16
    _Py_DECREF_STAT_INC();
415
16
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
16
}
iterobject.c:Py_DECREF
Line
Count
Source
407
1.01M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
1.01M
    if (_Py_IsImmortal(op)) {
411
677k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
677k
        return;
413
677k
    }
414
339k
    _Py_DECREF_STAT_INC();
415
339k
    if (--op->ob_refcnt == 0) {
416
338k
        _Py_Dealloc(op);
417
338k
    }
418
339k
}
Unexecuted instantiation: odictobject.c:Py_DECREF
methodobject.c:Py_DECREF
Line
Count
Source
407
280M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
280M
    if (_Py_IsImmortal(op)) {
411
5.55M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
5.55M
        return;
413
5.55M
    }
414
274M
    _Py_DECREF_STAT_INC();
415
274M
    if (--op->ob_refcnt == 0) {
416
207M
        _Py_Dealloc(op);
417
207M
    }
418
274M
}
namespaceobject.c:Py_DECREF
Line
Count
Source
407
16
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
16
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
16
    _Py_DECREF_STAT_INC();
415
16
    if (--op->ob_refcnt == 0) {
416
16
        _Py_Dealloc(op);
417
16
    }
418
16
}
Unexecuted instantiation: _contextvars.c:Py_DECREF
Python-ast.c:Py_DECREF
Line
Count
Source
407
4.17M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
4.17M
    if (_Py_IsImmortal(op)) {
411
1.87M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
1.87M
        return;
413
1.87M
    }
414
2.30M
    _Py_DECREF_STAT_INC();
415
2.30M
    if (--op->ob_refcnt == 0) {
416
521k
        _Py_Dealloc(op);
417
521k
    }
418
2.30M
}
Unexecuted instantiation: Python-tokenize.c:Py_DECREF
Unexecuted instantiation: asdl.c:Py_DECREF
assemble.c:Py_DECREF
Line
Count
Source
407
40.4k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
40.4k
    if (_Py_IsImmortal(op)) {
411
6.93k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
6.93k
        return;
413
6.93k
    }
414
33.5k
    _Py_DECREF_STAT_INC();
415
33.5k
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
33.5k
}
Unexecuted instantiation: ast.c:Py_DECREF
ast_preprocess.c:Py_DECREF
Line
Count
Source
407
2.36k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
2.36k
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
2.36k
    _Py_DECREF_STAT_INC();
415
2.36k
    if (--op->ob_refcnt == 0) {
416
2.36k
        _Py_Dealloc(op);
417
2.36k
    }
418
2.36k
}
Unexecuted instantiation: ast_unparse.c:Py_DECREF
Unexecuted instantiation: critical_section.c:Py_DECREF
Unexecuted instantiation: crossinterp.c:Py_DECREF
Unexecuted instantiation: getcopyright.c:Py_DECREF
Unexecuted instantiation: getplatform.c:Py_DECREF
Unexecuted instantiation: getversion.c:Py_DECREF
Unexecuted instantiation: optimizer.c:Py_DECREF
Unexecuted instantiation: pathconfig.c:Py_DECREF
structmember.c:Py_DECREF
Line
Count
Source
407
558
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
558
    if (_Py_IsImmortal(op)) {
411
372
        _Py_DECREF_IMMORTAL_STAT_INC();
412
372
        return;
413
372
    }
414
186
    _Py_DECREF_STAT_INC();
415
186
    if (--op->ob_refcnt == 0) {
416
12
        _Py_Dealloc(op);
417
12
    }
418
186
}
pegen.c:Py_DECREF
Line
Count
Source
407
140k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
140k
    if (_Py_IsImmortal(op)) {
411
53.4k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
53.4k
        return;
413
53.4k
    }
414
87.0k
    _Py_DECREF_STAT_INC();
415
87.0k
    if (--op->ob_refcnt == 0) {
416
70.5k
        _Py_Dealloc(op);
417
70.5k
    }
418
87.0k
}
pegen_errors.c:Py_DECREF
Line
Count
Source
407
50.5k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
50.5k
    if (_Py_IsImmortal(op)) {
411
3.83k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
3.83k
        return;
413
3.83k
    }
414
46.7k
    _Py_DECREF_STAT_INC();
415
46.7k
    if (--op->ob_refcnt == 0) {
416
5.98k
        _Py_Dealloc(op);
417
5.98k
    }
418
46.7k
}
Unexecuted instantiation: parser.c:Py_DECREF
Unexecuted instantiation: buffer.c:Py_DECREF
lexer.c:Py_DECREF
Line
Count
Source
407
14.0k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
14.0k
    if (_Py_IsImmortal(op)) {
411
596
        _Py_DECREF_IMMORTAL_STAT_INC();
412
596
        return;
413
596
    }
414
13.4k
    _Py_DECREF_STAT_INC();
415
13.4k
    if (--op->ob_refcnt == 0) {
416
13.4k
        _Py_Dealloc(op);
417
13.4k
    }
418
13.4k
}
state.c:Py_DECREF
Line
Count
Source
407
24.1k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
24.1k
    if (_Py_IsImmortal(op)) {
411
121
        _Py_DECREF_IMMORTAL_STAT_INC();
412
121
        return;
413
121
    }
414
24.0k
    _Py_DECREF_STAT_INC();
415
24.0k
    if (--op->ob_refcnt == 0) {
416
2.52k
        _Py_Dealloc(op);
417
2.52k
    }
418
24.0k
}
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
407
42.4k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
42.4k
    if (_Py_IsImmortal(op)) {
411
3.01k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
3.01k
        return;
413
3.01k
    }
414
39.4k
    _Py_DECREF_STAT_INC();
415
39.4k
    if (--op->ob_refcnt == 0) {
416
39.4k
        _Py_Dealloc(op);
417
39.4k
    }
418
39.4k
}
419
6.90G
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
420
#endif
421
422
423
/* Safely decref `op` and set `op` to NULL, especially useful in tp_clear
424
 * and tp_dealloc implementations.
425
 *
426
 * Note that "the obvious" code can be deadly:
427
 *
428
 *     Py_XDECREF(op);
429
 *     op = NULL;
430
 *
431
 * Typically, `op` is something like self->containee, and `self` is done
432
 * using its `containee` member.  In the code sequence above, suppose
433
 * `containee` is non-NULL with a refcount of 1.  Its refcount falls to
434
 * 0 on the first line, which can trigger an arbitrary amount of code,
435
 * possibly including finalizers (like __del__ methods or weakref callbacks)
436
 * coded in Python, which in turn can release the GIL and allow other threads
437
 * to run, etc.  Such code may even invoke methods of `self` again, or cause
438
 * cyclic gc to trigger, but-- oops! --self->containee still points to the
439
 * object being torn down, and it may be in an insane state while being torn
440
 * down.  This has in fact been a rich historic source of miserable (rare &
441
 * hard-to-diagnose) segfaulting (and other) bugs.
442
 *
443
 * The safe way is:
444
 *
445
 *      Py_CLEAR(op);
446
 *
447
 * That arranges to set `op` to NULL _before_ decref'ing, so that any code
448
 * triggered as a side-effect of `op` getting torn down no longer believes
449
 * `op` points to a valid object.
450
 *
451
 * There are cases where it's safe to use the naive code, but they're brittle.
452
 * For example, if `op` points to a Python integer, you know that destroying
453
 * one of those can't cause problems -- but in part that relies on that
454
 * Python integers aren't currently weakly referencable.  Best practice is
455
 * to use Py_CLEAR() even if you can't think of a reason for why you need to.
456
 *
457
 * gh-98724: Use a temporary variable to only evaluate the macro argument once,
458
 * to avoid the duplication of side effects if the argument has side effects.
459
 *
460
 * gh-99701: If the PyObject* type is used with casting arguments to PyObject*,
461
 * the code can be miscompiled with strict aliasing because of type punning.
462
 * With strict aliasing, a compiler considers that two pointers of different
463
 * types cannot read or write the same memory which enables optimization
464
 * opportunities.
465
 *
466
 * If available, use _Py_TYPEOF() to use the 'op' type for temporary variables,
467
 * and so avoid type punning. Otherwise, use memcpy() which causes type erasure
468
 * and so prevents the compiler to reuse an old cached 'op' value after
469
 * Py_CLEAR().
470
 */
471
#ifdef _Py_TYPEOF
472
#define Py_CLEAR(op) \
473
1.55G
    do { \
474
1.55G
        _Py_TYPEOF(op)* _tmp_op_ptr = &(op); \
475
1.55G
        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
476
1.55G
        if (_tmp_old_op != NULL) { \
477
468M
            *_tmp_op_ptr = _Py_NULL; \
478
468M
            Py_DECREF(_tmp_old_op); \
479
468M
        } \
480
1.55G
    } while (0)
481
#else
482
#define Py_CLEAR(op) \
483
    do { \
484
        PyObject **_tmp_op_ptr = _Py_CAST(PyObject**, &(op)); \
485
        PyObject *_tmp_old_op = (*_tmp_op_ptr); \
486
        if (_tmp_old_op != NULL) { \
487
            PyObject *_null_ptr = _Py_NULL; \
488
            memcpy(_tmp_op_ptr, &_null_ptr, sizeof(PyObject*)); \
489
            Py_DECREF(_tmp_old_op); \
490
        } \
491
    } while (0)
492
#endif
493
494
495
/* Function to use in case the object pointer can be NULL: */
496
static inline void Py_XINCREF(PyObject *op)
497
1.39G
{
498
1.39G
    if (op != _Py_NULL) {
499
597M
        Py_INCREF(op);
500
597M
    }
501
1.39G
}
Unexecuted instantiation: bytesobject.c:Py_XINCREF
Unexecuted instantiation: call.c:Py_XINCREF
exceptions.c:Py_XINCREF
Line
Count
Source
497
66.1M
{
498
66.1M
    if (op != _Py_NULL) {
499
1.48M
        Py_INCREF(op);
500
1.48M
    }
501
66.1M
}
Unexecuted instantiation: genericaliasobject.c:Py_XINCREF
Unexecuted instantiation: floatobject.c:Py_XINCREF
listobject.c:Py_XINCREF
Line
Count
Source
497
931k
{
498
931k
    if (op != _Py_NULL) {
499
931k
        Py_INCREF(op);
500
931k
    }
501
931k
}
Unexecuted instantiation: longobject.c:Py_XINCREF
dictobject.c:Py_XINCREF
Line
Count
Source
497
400M
{
498
400M
    if (op != _Py_NULL) {
499
122M
        Py_INCREF(op);
500
122M
    }
501
400M
}
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
497
43.9M
{
498
43.9M
    if (op != _Py_NULL) {
499
43.7M
        Py_INCREF(op);
500
43.7M
    }
501
43.9M
}
Unexecuted instantiation: typevarobject.c:Py_XINCREF
Unexecuted instantiation: unicodeobject.c:Py_XINCREF
Unexecuted instantiation: unicodectype.c:Py_XINCREF
Unexecuted instantiation: unionobject.c:Py_XINCREF
weakrefobject.c:Py_XINCREF
Line
Count
Source
497
258k
{
498
258k
    if (op != _Py_NULL) {
499
6.57k
        Py_INCREF(op);
500
6.57k
    }
501
258k
}
Unexecuted instantiation: _warnings.c:Py_XINCREF
bltinmodule.c:Py_XINCREF
Line
Count
Source
497
301
{
498
301
    if (op != _Py_NULL) {
499
301
        Py_INCREF(op);
500
301
    }
501
301
}
ceval.c:Py_XINCREF
Line
Count
Source
497
213M
{
498
213M
    if (op != _Py_NULL) {
499
75.8M
        Py_INCREF(op);
500
75.8M
    }
501
213M
}
Unexecuted instantiation: codecs.c:Py_XINCREF
Unexecuted instantiation: codegen.c:Py_XINCREF
compile.c:Py_XINCREF
Line
Count
Source
497
8.35k
{
498
8.35k
    if (op != _Py_NULL) {
499
3.98k
        Py_INCREF(op);
500
3.98k
    }
501
8.35k
}
context.c:Py_XINCREF
Line
Count
Source
497
17.2k
{
498
17.2k
    if (op != _Py_NULL) {
499
0
        Py_INCREF(op);
500
0
    }
501
17.2k
}
errors.c:Py_XINCREF
Line
Count
Source
497
32.1M
{
498
32.1M
    if (op != _Py_NULL) {
499
32.0M
        Py_INCREF(op);
500
32.0M
    }
501
32.1M
}
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
497
3.07k
{
498
3.07k
    if (op != _Py_NULL) {
499
1.55k
        Py_INCREF(op);
500
1.55k
    }
501
3.07k
}
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
497
2.35k
{
498
2.35k
    if (op != _Py_NULL) {
499
2.35k
        Py_INCREF(op);
500
2.35k
    }
501
2.35k
}
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
497
16
{
498
16
    if (op != _Py_NULL) {
499
16
        Py_INCREF(op);
500
16
    }
501
16
}
Unexecuted instantiation: thread.c:Py_XINCREF
traceback.c:Py_XINCREF
Line
Count
Source
497
66.8M
{
498
66.8M
    if (op != _Py_NULL) {
499
34.6M
        Py_INCREF(op);
500
34.6M
    }
501
66.8M
}
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: formatter_unicode.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: atexitmodule.c:Py_XINCREF
Unexecuted instantiation: faulthandler.c:Py_XINCREF
Unexecuted instantiation: posixmodule.c:Py_XINCREF
Unexecuted instantiation: signalmodule.c:Py_XINCREF
Unexecuted instantiation: _tracemalloc.c:Py_XINCREF
Unexecuted instantiation: _suggestions.c:Py_XINCREF
Unexecuted instantiation: _codecsmodule.c:Py_XINCREF
Unexecuted instantiation: _collectionsmodule.c:Py_XINCREF
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
497
942
{
498
942
    if (op != _Py_NULL) {
499
942
        Py_INCREF(op);
500
942
    }
501
942
}
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
Unexecuted instantiation: _threadmodule.c:Py_XINCREF
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
497
590
{
498
590
    if (op != _Py_NULL) {
499
590
        Py_INCREF(op);
500
590
    }
501
590
}
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
497
48
{
498
48
    if (op != _Py_NULL) {
499
48
        Py_INCREF(op);
500
48
    }
501
48
}
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
497
13.2M
{
498
13.2M
    if (op != _Py_NULL) {
499
12.9M
        Py_INCREF(op);
500
12.9M
    }
501
13.2M
}
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
497
6.78M
{
498
6.78M
    if (op != _Py_NULL) {
499
74.5k
        Py_INCREF(op);
500
74.5k
    }
501
6.78M
}
Unexecuted instantiation: classobject.c:Py_XINCREF
codeobject.c:Py_XINCREF
Line
Count
Source
497
5.56k
{
498
5.56k
    if (op != _Py_NULL) {
499
5.56k
        Py_INCREF(op);
500
5.56k
    }
501
5.56k
}
Unexecuted instantiation: complexobject.c:Py_XINCREF
descrobject.c:Py_XINCREF
Line
Count
Source
497
46.8k
{
498
46.8k
    if (op != _Py_NULL) {
499
44.9k
        Py_INCREF(op);
500
44.9k
    }
501
46.8k
}
Unexecuted instantiation: enumobject.c:Py_XINCREF
genobject.c:Py_XINCREF
Line
Count
Source
497
5.85k
{
498
5.85k
    if (op != _Py_NULL) {
499
0
        Py_INCREF(op);
500
0
    }
501
5.85k
}
Unexecuted instantiation: fileobject.c:Py_XINCREF
Unexecuted instantiation: frameobject.c:Py_XINCREF
funcobject.c:Py_XINCREF
Line
Count
Source
497
3.10k
{
498
3.10k
    if (op != _Py_NULL) {
499
0
        Py_INCREF(op);
500
0
    }
501
3.10k
}
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
497
546M
{
498
546M
    if (op != _Py_NULL) {
499
273M
        Py_INCREF(op);
500
273M
    }
501
546M
}
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
497
7.44k
{
498
7.44k
    if (op != _Py_NULL) {
499
7.44k
        Py_INCREF(op);
500
7.44k
    }
501
7.44k
}
Unexecuted instantiation: pegen.c:Py_XINCREF
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
502
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
503
1.39G
#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
504
#endif
505
506
static inline void Py_XDECREF(PyObject *op)
507
4.54G
{
508
4.54G
    if (op != _Py_NULL) {
509
3.66G
        Py_DECREF(op);
510
3.66G
    }
511
4.54G
}
bytesobject.c:Py_XDECREF
Line
Count
Source
507
51
{
508
51
    if (op != _Py_NULL) {
509
16
        Py_DECREF(op);
510
16
    }
511
51
}
Unexecuted instantiation: call.c:Py_XDECREF
exceptions.c:Py_XDECREF
Line
Count
Source
507
54.1M
{
508
54.1M
    if (op != _Py_NULL) {
509
20.9M
        Py_DECREF(op);
510
20.9M
    }
511
54.1M
}
genericaliasobject.c:Py_XDECREF
Line
Count
Source
507
126
{
508
126
    if (op != _Py_NULL) {
509
84
        Py_DECREF(op);
510
84
    }
511
126
}
floatobject.c:Py_XDECREF
Line
Count
Source
507
575k
{
508
575k
    if (op != _Py_NULL) {
509
8
        Py_DECREF(op);
510
8
    }
511
575k
}
listobject.c:Py_XDECREF
Line
Count
Source
507
1.71G
{
508
1.71G
    if (op != _Py_NULL) {
509
1.67G
        Py_DECREF(op);
510
1.67G
    }
511
1.71G
}
longobject.c:Py_XDECREF
Line
Count
Source
507
1.00k
{
508
1.00k
    if (op != _Py_NULL) {
509
277
        Py_DECREF(op);
510
277
    }
511
1.00k
}
dictobject.c:Py_XDECREF
Line
Count
Source
507
377M
{
508
377M
    if (op != _Py_NULL) {
509
371M
        Py_DECREF(op);
510
371M
    }
511
377M
}
Unexecuted instantiation: memoryobject.c:Py_XDECREF
moduleobject.c:Py_XDECREF
Line
Count
Source
507
2.13k
{
508
2.13k
    if (op != _Py_NULL) {
509
528
        Py_DECREF(op);
510
528
    }
511
2.13k
}
object.c:Py_XDECREF
Line
Count
Source
507
34.9k
{
508
34.9k
    if (op != _Py_NULL) {
509
350
        Py_DECREF(op);
510
350
    }
511
34.9k
}
Unexecuted instantiation: obmalloc.c:Py_XDECREF
Unexecuted instantiation: picklebufobject.c:Py_XDECREF
rangeobject.c:Py_XDECREF
Line
Count
Source
507
48
{
508
48
    if (op != _Py_NULL) {
509
48
        Py_DECREF(op);
510
48
    }
511
48
}
setobject.c:Py_XDECREF
Line
Count
Source
507
310k
{
508
310k
    if (op != _Py_NULL) {
509
16
        Py_DECREF(op);
510
16
    }
511
310k
}
Unexecuted instantiation: sliceobject.c:Py_XDECREF
structseq.c:Py_XDECREF
Line
Count
Source
507
88.8k
{
508
88.8k
    if (op != _Py_NULL) {
509
88.8k
        Py_DECREF(op);
510
88.8k
    }
511
88.8k
}
Unexecuted instantiation: templateobject.c:Py_XDECREF
tupleobject.c:Py_XDECREF
Line
Count
Source
507
980M
{
508
980M
    if (op != _Py_NULL) {
509
978M
        Py_DECREF(op);
510
978M
    }
511
980M
}
typeobject.c:Py_XDECREF
Line
Count
Source
507
17.4M
{
508
17.4M
    if (op != _Py_NULL) {
509
14.0M
        Py_DECREF(op);
510
14.0M
    }
511
17.4M
}
Unexecuted instantiation: typevarobject.c:Py_XDECREF
unicodeobject.c:Py_XDECREF
Line
Count
Source
507
82.7M
{
508
82.7M
    if (op != _Py_NULL) {
509
58.8M
        Py_DECREF(op);
510
58.8M
    }
511
82.7M
}
Unexecuted instantiation: unicodectype.c:Py_XDECREF
unionobject.c:Py_XDECREF
Line
Count
Source
507
465
{
508
465
    if (op != _Py_NULL) {
509
22
        Py_DECREF(op);
510
22
    }
511
465
}
weakrefobject.c:Py_XDECREF
Line
Count
Source
507
252k
{
508
252k
    if (op != _Py_NULL) {
509
160
        Py_DECREF(op);
510
160
    }
511
252k
}
_warnings.c:Py_XDECREF
Line
Count
Source
507
88.4k
{
508
88.4k
    if (op != _Py_NULL) {
509
88.4k
        Py_DECREF(op);
510
88.4k
    }
511
88.4k
}
bltinmodule.c:Py_XDECREF
Line
Count
Source
507
9.00M
{
508
9.00M
    if (op != _Py_NULL) {
509
790k
        Py_DECREF(op);
510
790k
    }
511
9.00M
}
ceval.c:Py_XDECREF
Line
Count
Source
507
256k
{
508
256k
    if (op != _Py_NULL) {
509
5.57k
        Py_DECREF(op);
510
5.57k
    }
511
256k
}
codecs.c:Py_XDECREF
Line
Count
Source
507
138k
{
508
138k
    if (op != _Py_NULL) {
509
92.4k
        Py_DECREF(op);
510
92.4k
    }
511
138k
}
Unexecuted instantiation: codegen.c:Py_XDECREF
compile.c:Py_XDECREF
Line
Count
Source
507
23.0k
{
508
23.0k
    if (op != _Py_NULL) {
509
6.74k
        Py_DECREF(op);
510
6.74k
    }
511
23.0k
}
Unexecuted instantiation: context.c:Py_XDECREF
errors.c:Py_XDECREF
Line
Count
Source
507
168M
{
508
168M
    if (op != _Py_NULL) {
509
27.2M
        Py_DECREF(op);
510
27.2M
    }
511
168M
}
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
507
128k
{
508
128k
    if (op != _Py_NULL) {
509
0
        Py_DECREF(op);
510
0
    }
511
128k
}
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
507
92.6k
{
508
92.6k
    if (op != _Py_NULL) {
509
69.5k
        Py_DECREF(op);
510
69.5k
    }
511
92.6k
}
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
507
11.5k
{
508
11.5k
    if (op != _Py_NULL) {
509
0
        Py_DECREF(op);
510
0
    }
511
11.5k
}
intrinsics.c:Py_XDECREF
Line
Count
Source
507
13.0k
{
508
13.0k
    if (op != _Py_NULL) {
509
13.0k
        Py_DECREF(op);
510
13.0k
    }
511
13.0k
}
Unexecuted instantiation: legacy_tracing.c:Py_XDECREF
Unexecuted instantiation: lock.c:Py_XDECREF
marshal.c:Py_XDECREF
Line
Count
Source
507
290k
{
508
290k
    if (op != _Py_NULL) {
509
290k
        Py_DECREF(op);
510
290k
    }
511
290k
}
modsupport.c:Py_XDECREF
Line
Count
Source
507
6.71k
{
508
6.71k
    if (op != _Py_NULL) {
509
6.71k
        Py_DECREF(op);
510
6.71k
    }
511
6.71k
}
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
507
96
{
508
96
    if (op != _Py_NULL) {
509
96
        Py_DECREF(op);
510
96
    }
511
96
}
Unexecuted instantiation: pymath.c:Py_XDECREF
Unexecuted instantiation: pystate.c:Py_XDECREF
pythonrun.c:Py_XDECREF
Line
Count
Source
507
91
{
508
91
    if (op != _Py_NULL) {
509
0
        Py_DECREF(op);
510
0
    }
511
91
}
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
507
945k
{
508
945k
    if (op != _Py_NULL) {
509
502k
        Py_DECREF(op);
510
502k
    }
511
945k
}
symtable.c:Py_XDECREF
Line
Count
Source
507
141k
{
508
141k
    if (op != _Py_NULL) {
509
111k
        Py_DECREF(op);
510
111k
    }
511
141k
}
sysmodule.c:Py_XDECREF
Line
Count
Source
507
720
{
508
720
    if (op != _Py_NULL) {
509
384
        Py_DECREF(op);
510
384
    }
511
720
}
Unexecuted instantiation: thread.c:Py_XDECREF
traceback.c:Py_XDECREF
Line
Count
Source
507
133M
{
508
133M
    if (op != _Py_NULL) {
509
69.2M
        Py_DECREF(op);
510
69.2M
    }
511
133M
}
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
formatter_unicode.c:Py_XDECREF
Line
Count
Source
507
638
{
508
638
    if (op != _Py_NULL) {
509
256
        Py_DECREF(op);
510
256
    }
511
638
}
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: atexitmodule.c:Py_XDECREF
Unexecuted instantiation: faulthandler.c:Py_XDECREF
posixmodule.c:Py_XDECREF
Line
Count
Source
507
70.1k
{
508
70.1k
    if (op != _Py_NULL) {
509
28.0k
        Py_DECREF(op);
510
28.0k
    }
511
70.1k
}
signalmodule.c:Py_XDECREF
Line
Count
Source
507
1.02k
{
508
1.02k
    if (op != _Py_NULL) {
509
0
        Py_DECREF(op);
510
0
    }
511
1.02k
}
Unexecuted instantiation: _tracemalloc.c:Py_XDECREF
Unexecuted instantiation: _suggestions.c:Py_XDECREF
Unexecuted instantiation: _codecsmodule.c:Py_XDECREF
Unexecuted instantiation: _collectionsmodule.c:Py_XDECREF
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
507
9.90k
{
508
9.90k
    if (op != _Py_NULL) {
509
9.90k
        Py_DECREF(op);
510
9.90k
    }
511
9.90k
}
bufferedio.c:Py_XDECREF
Line
Count
Source
507
3.81k
{
508
3.81k
    if (op != _Py_NULL) {
509
942
        Py_DECREF(op);
510
942
    }
511
3.81k
}
textio.c:Py_XDECREF
Line
Count
Source
507
34.9k
{
508
34.9k
    if (op != _Py_NULL) {
509
32
        Py_DECREF(op);
510
32
    }
511
34.9k
}
Unexecuted instantiation: stringio.c:Py_XDECREF
Unexecuted instantiation: itertoolsmodule.c:Py_XDECREF
sre.c:Py_XDECREF
Line
Count
Source
507
103M
{
508
103M
    if (op != _Py_NULL) {
509
103M
        Py_DECREF(op);
510
103M
    }
511
103M
}
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
507
3.25k
{
508
3.25k
    if (op != _Py_NULL) {
509
2.35k
        Py_DECREF(op);
510
2.35k
    }
511
3.25k
}
_functoolsmodule.c:Py_XDECREF
Line
Count
Source
507
14
{
508
14
    if (op != _Py_NULL) {
509
14
        Py_DECREF(op);
510
14
    }
511
14
}
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
507
2.68k
{
508
2.68k
    if (op != _Py_NULL) {
509
2.68k
        Py_DECREF(op);
510
2.68k
    }
511
2.68k
}
Unexecuted instantiation: myreadline.c:Py_XDECREF
abstract.c:Py_XDECREF
Line
Count
Source
507
209k
{
508
209k
    if (op != _Py_NULL) {
509
0
        Py_DECREF(op);
510
0
    }
511
209k
}
Unexecuted instantiation: boolobject.c:Py_XDECREF
Unexecuted instantiation: bytes_methods.c:Py_XDECREF
bytearrayobject.c:Py_XDECREF
Line
Count
Source
507
16
{
508
16
    if (op != _Py_NULL) {
509
16
        Py_DECREF(op);
510
16
    }
511
16
}
capsule.c:Py_XDECREF
Line
Count
Source
507
5
{
508
5
    if (op != _Py_NULL) {
509
5
        Py_DECREF(op);
510
5
    }
511
5
}
cellobject.c:Py_XDECREF
Line
Count
Source
507
6.78M
{
508
6.78M
    if (op != _Py_NULL) {
509
324k
        Py_DECREF(op);
510
324k
    }
511
6.78M
}
classobject.c:Py_XDECREF
Line
Count
Source
507
23.2M
{
508
23.2M
    if (op != _Py_NULL) {
509
23.2M
        Py_DECREF(op);
510
23.2M
    }
511
23.2M
}
codeobject.c:Py_XDECREF
Line
Count
Source
507
108k
{
508
108k
    if (op != _Py_NULL) {
509
72.6k
        Py_DECREF(op);
510
72.6k
    }
511
108k
}
Unexecuted instantiation: complexobject.c:Py_XDECREF
descrobject.c:Py_XDECREF
Line
Count
Source
507
31.2M
{
508
31.2M
    if (op != _Py_NULL) {
509
22.4M
        Py_DECREF(op);
510
22.4M
    }
511
31.2M
}
enumobject.c:Py_XDECREF
Line
Count
Source
507
21.0M
{
508
21.0M
    if (op != _Py_NULL) {
509
14.0M
        Py_DECREF(op);
510
14.0M
    }
511
21.0M
}
genobject.c:Py_XDECREF
Line
Count
Source
507
2.92k
{
508
2.92k
    if (op != _Py_NULL) {
509
0
        Py_DECREF(op);
510
0
    }
511
2.92k
}
Unexecuted instantiation: fileobject.c:Py_XDECREF
Unexecuted instantiation: frameobject.c:Py_XDECREF
funcobject.c:Py_XDECREF
Line
Count
Source
507
2.43k
{
508
2.43k
    if (op != _Py_NULL) {
509
815
        Py_DECREF(op);
510
815
    }
511
2.43k
}
Unexecuted instantiation: interpolationobject.c:Py_XDECREF
iterobject.c:Py_XDECREF
Line
Count
Source
507
1.01M
{
508
1.01M
    if (op != _Py_NULL) {
509
338k
        Py_DECREF(op);
510
338k
    }
511
1.01M
}
Unexecuted instantiation: odictobject.c:Py_XDECREF
methodobject.c:Py_XDECREF
Line
Count
Source
507
820M
{
508
820M
    if (op != _Py_NULL) {
509
280M
        Py_DECREF(op);
510
280M
    }
511
820M
}
Unexecuted instantiation: namespaceobject.c:Py_XDECREF
Unexecuted instantiation: _contextvars.c:Py_XDECREF
Unexecuted instantiation: Python-ast.c:Py_XDECREF
Unexecuted instantiation: Python-tokenize.c:Py_XDECREF
Unexecuted instantiation: asdl.c:Py_XDECREF
assemble.c:Py_XDECREF
Line
Count
Source
507
40.4k
{
508
40.4k
    if (op != _Py_NULL) {
509
40.4k
        Py_DECREF(op);
510
40.4k
    }
511
40.4k
}
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
507
7.11k
{
508
7.11k
    if (op != _Py_NULL) {
509
558
        Py_DECREF(op);
510
558
    }
511
7.11k
}
pegen.c:Py_XDECREF
Line
Count
Source
507
34.9k
{
508
34.9k
    if (op != _Py_NULL) {
509
1.61k
        Py_DECREF(op);
510
1.61k
    }
511
34.9k
}
pegen_errors.c:Py_XDECREF
Line
Count
Source
507
15.0k
{
508
15.0k
    if (op != _Py_NULL) {
509
12.2k
        Py_DECREF(op);
510
12.2k
    }
511
15.0k
}
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
507
102k
{
508
102k
    if (op != _Py_NULL) {
509
24.1k
        Py_DECREF(op);
510
24.1k
    }
511
102k
}
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
507
32.3k
{
508
32.3k
    if (op != _Py_NULL) {
509
32.3k
        Py_DECREF(op);
510
32.3k
    }
511
32.3k
}
512
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
513
4.55G
#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
514
#endif
515
516
// Create a new strong reference to an object:
517
// increment the reference count of the object and return the object.
518
PyAPI_FUNC(PyObject*) Py_NewRef(PyObject *obj);
519
520
// Similar to Py_NewRef(), but the object can be NULL.
521
PyAPI_FUNC(PyObject*) Py_XNewRef(PyObject *obj);
522
523
static inline PyObject* _Py_NewRef(PyObject *obj)
524
5.21G
{
525
5.21G
    Py_INCREF(obj);
526
5.21G
    return obj;
527
5.21G
}
bytesobject.c:_Py_NewRef
Line
Count
Source
524
352k
{
525
352k
    Py_INCREF(obj);
526
352k
    return obj;
527
352k
}
call.c:_Py_NewRef
Line
Count
Source
524
24.7M
{
525
24.7M
    Py_INCREF(obj);
526
24.7M
    return obj;
527
24.7M
}
exceptions.c:_Py_NewRef
Line
Count
Source
524
87.1M
{
525
87.1M
    Py_INCREF(obj);
526
87.1M
    return obj;
527
87.1M
}
genericaliasobject.c:_Py_NewRef
Line
Count
Source
524
782
{
525
782
    Py_INCREF(obj);
526
782
    return obj;
527
782
}
Unexecuted instantiation: floatobject.c:_Py_NewRef
listobject.c:_Py_NewRef
Line
Count
Source
524
1.36G
{
525
1.36G
    Py_INCREF(obj);
526
1.36G
    return obj;
527
1.36G
}
longobject.c:_Py_NewRef
Line
Count
Source
524
3.77M
{
525
3.77M
    Py_INCREF(obj);
526
3.77M
    return obj;
527
3.77M
}
dictobject.c:_Py_NewRef
Line
Count
Source
524
580M
{
525
580M
    Py_INCREF(obj);
526
580M
    return obj;
527
580M
}
memoryobject.c:_Py_NewRef
Line
Count
Source
524
511k
{
525
511k
    Py_INCREF(obj);
526
511k
    return obj;
527
511k
}
moduleobject.c:_Py_NewRef
Line
Count
Source
524
1.39k
{
525
1.39k
    Py_INCREF(obj);
526
1.39k
    return obj;
527
1.39k
}
object.c:_Py_NewRef
Line
Count
Source
524
173M
{
525
173M
    Py_INCREF(obj);
526
173M
    return obj;
527
173M
}
Unexecuted instantiation: obmalloc.c:_Py_NewRef
Unexecuted instantiation: picklebufobject.c:_Py_NewRef
rangeobject.c:_Py_NewRef
Line
Count
Source
524
48
{
525
48
    Py_INCREF(obj);
526
48
    return obj;
527
48
}
setobject.c:_Py_NewRef
Line
Count
Source
524
1.41M
{
525
1.41M
    Py_INCREF(obj);
526
1.41M
    return obj;
527
1.41M
}
sliceobject.c:_Py_NewRef
Line
Count
Source
524
40.9M
{
525
40.9M
    Py_INCREF(obj);
526
40.9M
    return obj;
527
40.9M
}
Unexecuted instantiation: structseq.c:_Py_NewRef
Unexecuted instantiation: templateobject.c:_Py_NewRef
tupleobject.c:_Py_NewRef
Line
Count
Source
524
641M
{
525
641M
    Py_INCREF(obj);
526
641M
    return obj;
527
641M
}
typeobject.c:_Py_NewRef
Line
Count
Source
524
67.2M
{
525
67.2M
    Py_INCREF(obj);
526
67.2M
    return obj;
527
67.2M
}
Unexecuted instantiation: typevarobject.c:_Py_NewRef
unicodeobject.c:_Py_NewRef
Line
Count
Source
524
243M
{
525
243M
    Py_INCREF(obj);
526
243M
    return obj;
527
243M
}
Unexecuted instantiation: unicodectype.c:_Py_NewRef
Unexecuted instantiation: unionobject.c:_Py_NewRef
Unexecuted instantiation: weakrefobject.c:_Py_NewRef
_warnings.c:_Py_NewRef
Line
Count
Source
524
34.5k
{
525
34.5k
    Py_INCREF(obj);
526
34.5k
    return obj;
527
34.5k
}
bltinmodule.c:_Py_NewRef
Line
Count
Source
524
16.9M
{
525
16.9M
    Py_INCREF(obj);
526
16.9M
    return obj;
527
16.9M
}
ceval.c:_Py_NewRef
Line
Count
Source
524
878M
{
525
878M
    Py_INCREF(obj);
526
878M
    return obj;
527
878M
}
codecs.c:_Py_NewRef
Line
Count
Source
524
2.60M
{
525
2.60M
    Py_INCREF(obj);
526
2.60M
    return obj;
527
2.60M
}
codegen.c:_Py_NewRef
Line
Count
Source
524
2.11k
{
525
2.11k
    Py_INCREF(obj);
526
2.11k
    return obj;
527
2.11k
}
compile.c:_Py_NewRef
Line
Count
Source
524
90.5k
{
525
90.5k
    Py_INCREF(obj);
526
90.5k
    return obj;
527
90.5k
}
context.c:_Py_NewRef
Line
Count
Source
524
24
{
525
24
    Py_INCREF(obj);
526
24
    return obj;
527
24
}
errors.c:_Py_NewRef
Line
Count
Source
524
32.1M
{
525
32.1M
    Py_INCREF(obj);
526
32.1M
    return obj;
527
32.1M
}
flowgraph.c:_Py_NewRef
Line
Count
Source
524
82.7k
{
525
82.7k
    Py_INCREF(obj);
526
82.7k
    return obj;
527
82.7k
}
frame.c:_Py_NewRef
Line
Count
Source
524
13.3M
{
525
13.3M
    Py_INCREF(obj);
526
13.3M
    return obj;
527
13.3M
}
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
524
678k
{
525
678k
    Py_INCREF(obj);
526
678k
    return obj;
527
678k
}
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
524
33.0k
{
525
33.0k
    Py_INCREF(obj);
526
33.0k
    return obj;
527
33.0k
}
importdl.c:_Py_NewRef
Line
Count
Source
524
454
{
525
454
    Py_INCREF(obj);
526
454
    return obj;
527
454
}
initconfig.c:_Py_NewRef
Line
Count
Source
524
272
{
525
272
    Py_INCREF(obj);
526
272
    return obj;
527
272
}
Unexecuted instantiation: instrumentation.c:_Py_NewRef
Unexecuted instantiation: instruction_sequence.c:_Py_NewRef
intrinsics.c:_Py_NewRef
Line
Count
Source
524
29.4k
{
525
29.4k
    Py_INCREF(obj);
526
29.4k
    return obj;
527
29.4k
}
Unexecuted instantiation: legacy_tracing.c:_Py_NewRef
Unexecuted instantiation: lock.c:_Py_NewRef
marshal.c:_Py_NewRef
Line
Count
Source
524
305k
{
525
305k
    Py_INCREF(obj);
526
305k
    return obj;
527
305k
}
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
524
16
{
525
16
    Py_INCREF(obj);
526
16
    return obj;
527
16
}
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
524
216k
{
525
216k
    Py_INCREF(obj);
526
216k
    return obj;
527
216k
}
sysmodule.c:_Py_NewRef
Line
Count
Source
524
731
{
525
731
    Py_INCREF(obj);
526
731
    return obj;
527
731
}
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: formatter_unicode.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: atexitmodule.c:_Py_NewRef
Unexecuted instantiation: faulthandler.c:_Py_NewRef
posixmodule.c:_Py_NewRef
Line
Count
Source
524
39.9k
{
525
39.9k
    Py_INCREF(obj);
526
39.9k
    return obj;
527
39.9k
}
signalmodule.c:_Py_NewRef
Line
Count
Source
524
1.02k
{
525
1.02k
    Py_INCREF(obj);
526
1.02k
    return obj;
527
1.02k
}
Unexecuted instantiation: _tracemalloc.c:_Py_NewRef
Unexecuted instantiation: _suggestions.c:_Py_NewRef
Unexecuted instantiation: _codecsmodule.c:_Py_NewRef
_collectionsmodule.c:_Py_NewRef
Line
Count
Source
524
20.1M
{
525
20.1M
    Py_INCREF(obj);
526
20.1M
    return obj;
527
20.1M
}
Unexecuted instantiation: errnomodule.c:_Py_NewRef
_iomodule.c:_Py_NewRef
Line
Count
Source
524
48
{
525
48
    Py_INCREF(obj);
526
48
    return obj;
527
48
}
iobase.c:_Py_NewRef
Line
Count
Source
524
40.8k
{
525
40.8k
    Py_INCREF(obj);
526
40.8k
    return obj;
527
40.8k
}
Unexecuted instantiation: fileio.c:_Py_NewRef
bytesio.c:_Py_NewRef
Line
Count
Source
524
10.6k
{
525
10.6k
    Py_INCREF(obj);
526
10.6k
    return obj;
527
10.6k
}
bufferedio.c:_Py_NewRef
Line
Count
Source
524
960
{
525
960
    Py_INCREF(obj);
526
960
    return obj;
527
960
}
textio.c:_Py_NewRef
Line
Count
Source
524
83.5k
{
525
83.5k
    Py_INCREF(obj);
526
83.5k
    return obj;
527
83.5k
}
stringio.c:_Py_NewRef
Line
Count
Source
524
17.4k
{
525
17.4k
    Py_INCREF(obj);
526
17.4k
    return obj;
527
17.4k
}
Unexecuted instantiation: itertoolsmodule.c:_Py_NewRef
sre.c:_Py_NewRef
Line
Count
Source
524
299M
{
525
299M
    Py_INCREF(obj);
526
299M
    return obj;
527
299M
}
Unexecuted instantiation: _sysconfig.c:_Py_NewRef
Unexecuted instantiation: _threadmodule.c:_Py_NewRef
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
524
590
{
525
590
    Py_INCREF(obj);
526
590
    return obj;
527
590
}
_functoolsmodule.c:_Py_NewRef
Line
Count
Source
524
249
{
525
249
    Py_INCREF(obj);
526
249
    return obj;
527
249
}
Unexecuted instantiation: _localemodule.c:_Py_NewRef
Unexecuted instantiation: _opcode.c:_Py_NewRef
_operator.c:_Py_NewRef
Line
Count
Source
524
1.43M
{
525
1.43M
    Py_INCREF(obj);
526
1.43M
    return obj;
527
1.43M
}
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
524
128
{
525
128
    Py_INCREF(obj);
526
128
    return obj;
527
128
}
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
524
574M
{
525
574M
    Py_INCREF(obj);
526
574M
    return obj;
527
574M
}
Unexecuted instantiation: boolobject.c:_Py_NewRef
Unexecuted instantiation: bytes_methods.c:_Py_NewRef
bytearrayobject.c:_Py_NewRef
Line
Count
Source
524
36
{
525
36
    Py_INCREF(obj);
526
36
    return obj;
527
36
}
Unexecuted instantiation: capsule.c:_Py_NewRef
Unexecuted instantiation: cellobject.c:_Py_NewRef
classobject.c:_Py_NewRef
Line
Count
Source
524
46.4M
{
525
46.4M
    Py_INCREF(obj);
526
46.4M
    return obj;
527
46.4M
}
codeobject.c:_Py_NewRef
Line
Count
Source
524
442k
{
525
442k
    Py_INCREF(obj);
526
442k
    return obj;
527
442k
}
Unexecuted instantiation: complexobject.c:_Py_NewRef
descrobject.c:_Py_NewRef
Line
Count
Source
524
22.4M
{
525
22.4M
    Py_INCREF(obj);
526
22.4M
    return obj;
527
22.4M
}
Unexecuted instantiation: enumobject.c:_Py_NewRef
genobject.c:_Py_NewRef
Line
Count
Source
524
42.8M
{
525
42.8M
    Py_INCREF(obj);
526
42.8M
    return obj;
527
42.8M
}
Unexecuted instantiation: fileobject.c:_Py_NewRef
frameobject.c:_Py_NewRef
Line
Count
Source
524
5.59k
{
525
5.59k
    Py_INCREF(obj);
526
5.59k
    return obj;
527
5.59k
}
funcobject.c:_Py_NewRef
Line
Count
Source
524
25.2M
{
525
25.2M
    Py_INCREF(obj);
526
25.2M
    return obj;
527
25.2M
}
Unexecuted instantiation: interpolationobject.c:_Py_NewRef
iterobject.c:_Py_NewRef
Line
Count
Source
524
678k
{
525
678k
    Py_INCREF(obj);
526
678k
    return obj;
527
678k
}
Unexecuted instantiation: odictobject.c:_Py_NewRef
methodobject.c:_Py_NewRef
Line
Count
Source
524
6.97M
{
525
6.97M
    Py_INCREF(obj);
526
6.97M
    return obj;
527
6.97M
}
Unexecuted instantiation: namespaceobject.c:_Py_NewRef
Unexecuted instantiation: _contextvars.c:_Py_NewRef
Python-ast.c:_Py_NewRef
Line
Count
Source
524
590k
{
525
590k
    Py_INCREF(obj);
526
590k
    return obj;
527
590k
}
Unexecuted instantiation: Python-tokenize.c:_Py_NewRef
Unexecuted instantiation: asdl.c:_Py_NewRef
assemble.c:_Py_NewRef
Line
Count
Source
524
37.3k
{
525
37.3k
    Py_INCREF(obj);
526
37.3k
    return obj;
527
37.3k
}
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
524
21.5k
{
525
21.5k
    Py_INCREF(obj);
526
21.5k
    return obj;
527
21.5k
}
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
528
529
static inline PyObject* _Py_XNewRef(PyObject *obj)
530
1.17G
{
531
1.17G
    Py_XINCREF(obj);
532
1.17G
    return obj;
533
1.17G
}
Unexecuted instantiation: bytesobject.c:_Py_XNewRef
Unexecuted instantiation: call.c:_Py_XNewRef
exceptions.c:_Py_XNewRef
Line
Count
Source
530
66.0M
{
531
66.0M
    Py_XINCREF(obj);
532
66.0M
    return obj;
533
66.0M
}
Unexecuted instantiation: genericaliasobject.c:_Py_XNewRef
Unexecuted instantiation: floatobject.c:_Py_XNewRef
listobject.c:_Py_XNewRef
Line
Count
Source
530
931k
{
531
931k
    Py_XINCREF(obj);
532
931k
    return obj;
533
931k
}
Unexecuted instantiation: longobject.c:_Py_XNewRef
dictobject.c:_Py_XNewRef
Line
Count
Source
530
400M
{
531
400M
    Py_XINCREF(obj);
532
400M
    return obj;
533
400M
}
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
530
253k
{
531
253k
    Py_XINCREF(obj);
532
253k
    return obj;
533
253k
}
Unexecuted instantiation: typevarobject.c:_Py_XNewRef
Unexecuted instantiation: unicodeobject.c:_Py_XNewRef
Unexecuted instantiation: unicodectype.c:_Py_XNewRef
Unexecuted instantiation: unionobject.c:_Py_XNewRef
weakrefobject.c:_Py_XNewRef
Line
Count
Source
530
258k
{
531
258k
    Py_XINCREF(obj);
532
258k
    return obj;
533
258k
}
Unexecuted instantiation: _warnings.c:_Py_XNewRef
bltinmodule.c:_Py_XNewRef
Line
Count
Source
530
301
{
531
301
    Py_XINCREF(obj);
532
301
    return obj;
533
301
}
ceval.c:_Py_XNewRef
Line
Count
Source
530
75.8M
{
531
75.8M
    Py_XINCREF(obj);
532
75.8M
    return obj;
533
75.8M
}
Unexecuted instantiation: codecs.c:_Py_XNewRef
Unexecuted instantiation: codegen.c:_Py_XNewRef
compile.c:_Py_XNewRef
Line
Count
Source
530
8.35k
{
531
8.35k
    Py_XINCREF(obj);
532
8.35k
    return obj;
533
8.35k
}
context.c:_Py_XNewRef
Line
Count
Source
530
24
{
531
24
    Py_XINCREF(obj);
532
24
    return obj;
533
24
}
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
530
3.07k
{
531
3.07k
    Py_XINCREF(obj);
532
3.07k
    return obj;
533
3.07k
}
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
530
2.35k
{
531
2.35k
    Py_XINCREF(obj);
532
2.35k
    return obj;
533
2.35k
}
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
530
16
{
531
16
    Py_XINCREF(obj);
532
16
    return obj;
533
16
}
Unexecuted instantiation: thread.c:_Py_XNewRef
traceback.c:_Py_XNewRef
Line
Count
Source
530
66.8M
{
531
66.8M
    Py_XINCREF(obj);
532
66.8M
    return obj;
533
66.8M
}
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: formatter_unicode.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: atexitmodule.c:_Py_XNewRef
Unexecuted instantiation: faulthandler.c:_Py_XNewRef
Unexecuted instantiation: posixmodule.c:_Py_XNewRef
Unexecuted instantiation: signalmodule.c:_Py_XNewRef
Unexecuted instantiation: _tracemalloc.c:_Py_XNewRef
Unexecuted instantiation: _suggestions.c:_Py_XNewRef
Unexecuted instantiation: _codecsmodule.c:_Py_XNewRef
Unexecuted instantiation: _collectionsmodule.c:_Py_XNewRef
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
Unexecuted instantiation: _threadmodule.c:_Py_XNewRef
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
530
590
{
531
590
    Py_XINCREF(obj);
532
590
    return obj;
533
590
}
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
530
48
{
531
48
    Py_XINCREF(obj);
532
48
    return obj;
533
48
}
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
530
13.2M
{
531
13.2M
    Py_XINCREF(obj);
532
13.2M
    return obj;
533
13.2M
}
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
530
6.78M
{
531
6.78M
    Py_XINCREF(obj);
532
6.78M
    return obj;
533
6.78M
}
Unexecuted instantiation: classobject.c:_Py_XNewRef
codeobject.c:_Py_XNewRef
Line
Count
Source
530
5.56k
{
531
5.56k
    Py_XINCREF(obj);
532
5.56k
    return obj;
533
5.56k
}
Unexecuted instantiation: complexobject.c:_Py_XNewRef
descrobject.c:_Py_XNewRef
Line
Count
Source
530
46.8k
{
531
46.8k
    Py_XINCREF(obj);
532
46.8k
    return obj;
533
46.8k
}
Unexecuted instantiation: enumobject.c:_Py_XNewRef
Unexecuted instantiation: genobject.c:_Py_XNewRef
Unexecuted instantiation: fileobject.c:_Py_XNewRef
Unexecuted instantiation: frameobject.c:_Py_XNewRef
funcobject.c:_Py_XNewRef
Line
Count
Source
530
3.10k
{
531
3.10k
    Py_XINCREF(obj);
532
3.10k
    return obj;
533
3.10k
}
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
530
546M
{
531
546M
    Py_XINCREF(obj);
532
546M
    return obj;
533
546M
}
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
530
7.11k
{
531
7.11k
    Py_XINCREF(obj);
532
7.11k
    return obj;
533
7.11k
}
Unexecuted instantiation: pegen.c:_Py_XNewRef
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
534
535
// Py_NewRef() and Py_XNewRef() are exported as functions for the stable ABI.
536
// Names overridden with macros by static inline functions for best
537
// performances.
538
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
539
5.09G
#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
540
1.16G
#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
541
#else
542
#  define Py_NewRef(obj) _Py_NewRef(obj)
543
#  define Py_XNewRef(obj) _Py_XNewRef(obj)
544
#endif
545
546
547
#ifdef __cplusplus
548
}
549
#endif
550
#endif   // !_Py_REFCOUNT_H