Coverage Report

Created: 2025-08-24 07:03

/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.81G
#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
47
0
#define _Py_IMMORTAL_MINIMUM_REFCNT (1ULL << 31)
48
276M
#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
49
276M
#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
50
51
#else
52
/*
53
In 32 bit systems, an object will be treated as immortal if its reference
54
count equals or exceeds _Py_IMMORTAL_MINIMUM_REFCNT (2**30).
55
56
Using the lower 30 bits makes the value backwards compatible by allowing
57
C-Extensions without the updated checks in Py_INCREF and Py_DECREF to safely
58
increase and decrease the objects reference count. The object would lose its
59
immortality, but the execution would still be correct.
60
61
Reference count increases and decreases will first go through an immortality
62
check by comparing the reference count field to the minimum immortality refcount.
63
*/
64
#define _Py_IMMORTAL_INITIAL_REFCNT ((Py_ssize_t)(5L << 28))
65
#define _Py_IMMORTAL_MINIMUM_REFCNT ((Py_ssize_t)(1L << 30))
66
#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT ((Py_ssize_t)(7L << 28))
67
#define _Py_STATIC_IMMORTAL_MINIMUM_REFCNT ((Py_ssize_t)(6L << 28))
68
#endif
69
70
// Py_GIL_DISABLED builds indicate immortal objects using `ob_ref_local`, which is
71
// always 32-bits.
72
#ifdef Py_GIL_DISABLED
73
#define _Py_IMMORTAL_REFCNT_LOCAL UINT32_MAX
74
#endif
75
76
77
#ifdef Py_GIL_DISABLED
78
   // The shared reference count uses the two least-significant bits to store
79
   // flags. The remaining bits are used to store the reference count.
80
#  define _Py_REF_SHARED_SHIFT        2
81
#  define _Py_REF_SHARED_FLAG_MASK    0x3
82
83
   // The shared flags are initialized to zero.
84
#  define _Py_REF_SHARED_INIT         0x0
85
#  define _Py_REF_MAYBE_WEAKREF       0x1
86
#  define _Py_REF_QUEUED              0x2
87
#  define _Py_REF_MERGED              0x3
88
89
   // Create a shared field from a refcnt and desired flags
90
#  define _Py_REF_SHARED(refcnt, flags) \
91
              (((refcnt) << _Py_REF_SHARED_SHIFT) + (flags))
92
#endif  // Py_GIL_DISABLED
93
94
95
// Py_REFCNT() implementation for the stable ABI
96
PyAPI_FUNC(Py_ssize_t) Py_REFCNT(PyObject *ob);
97
98
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030e0000
99
    // Stable ABI implements Py_REFCNT() as a function call
100
    // on limited C API version 3.14 and newer.
101
#else
102
1.03G
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
1.03G
    #if !defined(Py_GIL_DISABLED)
104
1.03G
        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.03G
    }
bytesobject.c:_Py_REFCNT
Line
Count
Source
102
237k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
237k
    #if !defined(Py_GIL_DISABLED)
104
237k
        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
237k
    }
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
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
    }
dictobject.c:_Py_REFCNT
Line
Count
Source
102
625M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
625M
    #if !defined(Py_GIL_DISABLED)
104
625M
        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
625M
    }
Unexecuted instantiation: memoryobject.c:_Py_REFCNT
Unexecuted instantiation: moduleobject.c:_Py_REFCNT
object.c:_Py_REFCNT
Line
Count
Source
102
61.9M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
61.9M
    #if !defined(Py_GIL_DISABLED)
104
61.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
61.9M
    }
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.32k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
1.32k
    #if !defined(Py_GIL_DISABLED)
104
1.32k
        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.32k
    }
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
72.3k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
72.3k
    #if !defined(Py_GIL_DISABLED)
104
72.3k
        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
72.3k
    }
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
68.4M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
68.4M
    #if !defined(Py_GIL_DISABLED)
104
68.4M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
68.4M
    }
Unexecuted instantiation: unicodectype.c:_Py_REFCNT
Unexecuted instantiation: unionobject.c:_Py_REFCNT
weakrefobject.c:_Py_REFCNT
Line
Count
Source
102
38.0M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
38.0M
    #if !defined(Py_GIL_DISABLED)
104
38.0M
        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
38.0M
    }
Unexecuted instantiation: _warnings.c:_Py_REFCNT
bltinmodule.c:_Py_REFCNT
Line
Count
Source
102
28.6M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
28.6M
    #if !defined(Py_GIL_DISABLED)
104
28.6M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
28.6M
    }
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
25.7M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
25.7M
    #if !defined(Py_GIL_DISABLED)
104
25.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
25.7M
    }
Unexecuted instantiation: future.c:_Py_REFCNT
gc.c:_Py_REFCNT
Line
Count
Source
102
45.0M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
45.0M
    #if !defined(Py_GIL_DISABLED)
104
45.0M
        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.0M
    }
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
153k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
153k
    #if !defined(Py_GIL_DISABLED)
104
153k
        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
153k
    }
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: _asynciomodule.c:_Py_REFCNT
Unexecuted instantiation: atexitmodule.c:_Py_REFCNT
Unexecuted instantiation: faulthandler.c:_Py_REFCNT
Unexecuted instantiation: posixmodule.c:_Py_REFCNT
Unexecuted instantiation: signalmodule.c:_Py_REFCNT
Unexecuted instantiation: _tracemalloc.c:_Py_REFCNT
Unexecuted instantiation: _suggestions.c:_Py_REFCNT
Unexecuted instantiation: _datetimemodule.c:_Py_REFCNT
Unexecuted instantiation: _codecsmodule.c:_Py_REFCNT
Unexecuted instantiation: _collectionsmodule.c:_Py_REFCNT
Unexecuted instantiation: errnomodule.c:_Py_REFCNT
Unexecuted instantiation: _iomodule.c:_Py_REFCNT
iobase.c:_Py_REFCNT
Line
Count
Source
102
11.7k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
11.7k
    #if !defined(Py_GIL_DISABLED)
104
11.7k
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
11.7k
    }
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
itertoolsmodule.c:_Py_REFCNT
Line
Count
Source
102
270
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
270
    #if !defined(Py_GIL_DISABLED)
104
270
        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
270
    }
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
39
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
39
    #if !defined(Py_GIL_DISABLED)
104
39
        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
39
    }
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
16.2k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
16.2k
    #if !defined(Py_GIL_DISABLED)
104
16.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
16.2k
    }
Unexecuted instantiation: complexobject.c:_Py_REFCNT
Unexecuted instantiation: descrobject.c:_Py_REFCNT
enumobject.c:_Py_REFCNT
Line
Count
Source
102
117M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
117M
    #if !defined(Py_GIL_DISABLED)
104
117M
        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
117M
    }
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
692M
    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
117
    #endif
118
#endif
119
120
#ifndef _Py_OPAQUE_PYOBJECT
121
static inline Py_ALWAYS_INLINE int _Py_IsImmortal(PyObject *op)
122
15.8G
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
15.8G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
15.8G
}
bytesobject.c:_Py_IsImmortal
Line
Count
Source
122
4.29M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
4.29M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
4.29M
}
call.c:_Py_IsImmortal
Line
Count
Source
122
135M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
135M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
135M
}
exceptions.c:_Py_IsImmortal
Line
Count
Source
122
116M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
116M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
116M
}
genericaliasobject.c:_Py_IsImmortal
Line
Count
Source
122
88
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
88
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
88
}
floatobject.c:_Py_IsImmortal
Line
Count
Source
122
8
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
8
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
8
}
listobject.c:_Py_IsImmortal
Line
Count
Source
122
1.61G
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
1.61G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
1.61G
}
longobject.c:_Py_IsImmortal
Line
Count
Source
122
22.2M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
22.2M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
22.2M
}
dictobject.c:_Py_IsImmortal
Line
Count
Source
122
1.70G
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
1.70G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
1.70G
}
memoryobject.c:_Py_IsImmortal
Line
Count
Source
122
670k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
670k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
670k
}
moduleobject.c:_Py_IsImmortal
Line
Count
Source
122
45.6k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
45.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
45.6k
}
object.c:_Py_IsImmortal
Line
Count
Source
122
491M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
491M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
491M
}
Unexecuted instantiation: obmalloc.c:_Py_IsImmortal
Unexecuted instantiation: picklebufobject.c:_Py_IsImmortal
rangeobject.c:_Py_IsImmortal
Line
Count
Source
122
33.9M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
33.9M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
33.9M
}
setobject.c:_Py_IsImmortal
Line
Count
Source
122
1.17M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
1.17M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
1.17M
}
sliceobject.c:_Py_IsImmortal
Line
Count
Source
122
146M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
146M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
146M
}
structseq.c:_Py_IsImmortal
Line
Count
Source
122
93.7k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
93.7k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
93.7k
}
templateobject.c:_Py_IsImmortal
Line
Count
Source
122
4
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
4
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
4
}
tupleobject.c:_Py_IsImmortal
Line
Count
Source
122
904M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
904M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
904M
}
typeobject.c:_Py_IsImmortal
Line
Count
Source
122
832M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
832M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
832M
}
Unexecuted instantiation: typevarobject.c:_Py_IsImmortal
unicodeobject.c:_Py_IsImmortal
Line
Count
Source
122
237M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
237M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
237M
}
Unexecuted instantiation: unicodectype.c:_Py_IsImmortal
unionobject.c:_Py_IsImmortal
Line
Count
Source
122
950
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
950
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
950
}
weakrefobject.c:_Py_IsImmortal
Line
Count
Source
122
12.2k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
12.2k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
12.2k
}
_warnings.c:_Py_IsImmortal
Line
Count
Source
122
156k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
156k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
156k
}
bltinmodule.c:_Py_IsImmortal
Line
Count
Source
122
136M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
136M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
136M
}
ceval.c:_Py_IsImmortal
Line
Count
Source
122
6.10G
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
6.10G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
6.10G
}
codecs.c:_Py_IsImmortal
Line
Count
Source
122
6.58M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
6.58M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
6.58M
}
codegen.c:_Py_IsImmortal
Line
Count
Source
122
142k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
142k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
142k
}
compile.c:_Py_IsImmortal
Line
Count
Source
122
576k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
576k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
576k
}
context.c:_Py_IsImmortal
Line
Count
Source
122
32
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
32
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
32
}
errors.c:_Py_IsImmortal
Line
Count
Source
122
83.0M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
83.0M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
83.0M
}
flowgraph.c:_Py_IsImmortal
Line
Count
Source
122
69.3k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
69.3k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
69.3k
}
frame.c:_Py_IsImmortal
Line
Count
Source
122
38.0M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
38.0M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
38.0M
}
Unexecuted instantiation: future.c:_Py_IsImmortal
gc.c:_Py_IsImmortal
Line
Count
Source
122
1.13G
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
1.13G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
1.13G
}
Unexecuted instantiation: gc_gil.c:_Py_IsImmortal
getargs.c:_Py_IsImmortal
Line
Count
Source
122
1.59M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
1.59M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
1.59M
}
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
122
166k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
166k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
166k
}
importdl.c:_Py_IsImmortal
Line
Count
Source
122
1.20k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
1.20k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
1.20k
}
initconfig.c:_Py_IsImmortal
Line
Count
Source
122
2.20k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
2.20k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
2.20k
}
instrumentation.c:_Py_IsImmortal
Line
Count
Source
122
384
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
384
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
384
}
instruction_sequence.c:_Py_IsImmortal
Line
Count
Source
122
1
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
1
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
1
}
intrinsics.c:_Py_IsImmortal
Line
Count
Source
122
28.6k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
28.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
28.6k
}
Unexecuted instantiation: legacy_tracing.c:_Py_IsImmortal
Unexecuted instantiation: lock.c:_Py_IsImmortal
marshal.c:_Py_IsImmortal
Line
Count
Source
122
317k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
317k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
317k
}
modsupport.c:_Py_IsImmortal
Line
Count
Source
122
17.7k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
17.7k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
17.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
122
4.50M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
4.50M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
4.50M
}
Unexecuted instantiation: pyctype.c:_Py_IsImmortal
Unexecuted instantiation: pyhash.c:_Py_IsImmortal
pylifecycle.c:_Py_IsImmortal
Line
Count
Source
122
576
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
576
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
576
}
Unexecuted instantiation: pymath.c:_Py_IsImmortal
Unexecuted instantiation: pystate.c:_Py_IsImmortal
pythonrun.c:_Py_IsImmortal
Line
Count
Source
122
190
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
190
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
190
}
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
122
526k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
526k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
526k
}
symtable.c:_Py_IsImmortal
Line
Count
Source
122
754k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
754k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
754k
}
sysmodule.c:_Py_IsImmortal
Line
Count
Source
122
1.90k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
1.90k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
1.90k
}
Unexecuted instantiation: thread.c:_Py_IsImmortal
traceback.c:_Py_IsImmortal
Line
Count
Source
122
71.0M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
71.0M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
71.0M
}
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
122
256
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
256
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
256
}
fileutils.c:_Py_IsImmortal
Line
Count
Source
122
11.6k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
11.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
11.6k
}
Unexecuted instantiation: suggestions.c:_Py_IsImmortal
Unexecuted instantiation: perf_trampoline.c:_Py_IsImmortal
Unexecuted instantiation: perf_jit_trampoline.c:_Py_IsImmortal
Unexecuted instantiation: remote_debugging.c:_Py_IsImmortal
Unexecuted instantiation: dynload_shlib.c:_Py_IsImmortal
Unexecuted instantiation: config.c:_Py_IsImmortal
Unexecuted instantiation: gcmodule.c:_Py_IsImmortal
Unexecuted instantiation: _asynciomodule.c:_Py_IsImmortal
Unexecuted instantiation: atexitmodule.c:_Py_IsImmortal
Unexecuted instantiation: faulthandler.c:_Py_IsImmortal
posixmodule.c:_Py_IsImmortal
Line
Count
Source
122
50.6k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
50.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
50.6k
}
signalmodule.c:_Py_IsImmortal
Line
Count
Source
122
32
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
32
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
32
}
Unexecuted instantiation: _tracemalloc.c:_Py_IsImmortal
Unexecuted instantiation: _suggestions.c:_Py_IsImmortal
_datetimemodule.c:_Py_IsImmortal
Line
Count
Source
122
262
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
262
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
262
}
Unexecuted instantiation: _codecsmodule.c:_Py_IsImmortal
_collectionsmodule.c:_Py_IsImmortal
Line
Count
Source
122
103k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
103k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
103k
}
Unexecuted instantiation: errnomodule.c:_Py_IsImmortal
_iomodule.c:_Py_IsImmortal
Line
Count
Source
122
6.37k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
6.37k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
6.37k
}
iobase.c:_Py_IsImmortal
Line
Count
Source
122
120k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
120k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
120k
}
fileio.c:_Py_IsImmortal
Line
Count
Source
122
3.49k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
3.49k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
3.49k
}
bytesio.c:_Py_IsImmortal
Line
Count
Source
122
28.3k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
28.3k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
28.3k
}
bufferedio.c:_Py_IsImmortal
Line
Count
Source
122
7.19k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
7.19k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
7.19k
}
textio.c:_Py_IsImmortal
Line
Count
Source
122
48.6k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
48.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
48.6k
}
stringio.c:_Py_IsImmortal
Line
Count
Source
122
295k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
295k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
295k
}
itertoolsmodule.c:_Py_IsImmortal
Line
Count
Source
122
928
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
928
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
928
}
sre.c:_Py_IsImmortal
Line
Count
Source
122
491M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
491M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
491M
}
Unexecuted instantiation: _sysconfig.c:_Py_IsImmortal
_threadmodule.c:_Py_IsImmortal
Line
Count
Source
122
5.19k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
5.19k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
5.19k
}
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
122
29.2k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
29.2k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
29.2k
}
_functoolsmodule.c:_Py_IsImmortal
Line
Count
Source
122
251
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
251
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
251
}
Unexecuted instantiation: _localemodule.c:_Py_IsImmortal
Unexecuted instantiation: _opcode.c:_Py_IsImmortal
_operator.c:_Py_IsImmortal
Line
Count
Source
122
543k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
543k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
543k
}
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
122
528
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
528
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
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
122
21.0k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
21.0k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
21.0k
}
Unexecuted instantiation: myreadline.c:_Py_IsImmortal
abstract.c:_Py_IsImmortal
Line
Count
Source
122
427M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
427M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
427M
}
Unexecuted instantiation: boolobject.c:_Py_IsImmortal
Unexecuted instantiation: bytes_methods.c:_Py_IsImmortal
bytearrayobject.c:_Py_IsImmortal
Line
Count
Source
122
16
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
16
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
16
}
capsule.c:_Py_IsImmortal
Line
Count
Source
122
10
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
10
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
10
}
cellobject.c:_Py_IsImmortal
Line
Count
Source
122
324k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
324k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
324k
}
classobject.c:_Py_IsImmortal
Line
Count
Source
122
46.7M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
46.7M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
46.7M
}
codeobject.c:_Py_IsImmortal
Line
Count
Source
122
120k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
120k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
120k
}
Unexecuted instantiation: complexobject.c:_Py_IsImmortal
descrobject.c:_Py_IsImmortal
Line
Count
Source
122
104M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
104M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
104M
}
enumobject.c:_Py_IsImmortal
Line
Count
Source
122
288M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
288M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
288M
}
genobject.c:_Py_IsImmortal
Line
Count
Source
122
145M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
145M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
145M
}
fileobject.c:_Py_IsImmortal
Line
Count
Source
122
12.7k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
12.7k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
12.7k
}
frameobject.c:_Py_IsImmortal
Line
Count
Source
122
12.2M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
12.2M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
12.2M
}
funcobject.c:_Py_IsImmortal
Line
Count
Source
122
148M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
148M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
148M
}
interpolationobject.c:_Py_IsImmortal
Line
Count
Source
122
16
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
16
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
16
}
iterobject.c:_Py_IsImmortal
Line
Count
Source
122
1.07M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
1.07M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
1.07M
}
odictobject.c:_Py_IsImmortal
Line
Count
Source
122
672
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
672
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
672
}
methodobject.c:_Py_IsImmortal
Line
Count
Source
122
323M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
323M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
323M
}
namespaceobject.c:_Py_IsImmortal
Line
Count
Source
122
16
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
16
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
16
}
Unexecuted instantiation: _contextvars.c:_Py_IsImmortal
Python-ast.c:_Py_IsImmortal
Line
Count
Source
122
4.01M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
4.01M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
4.01M
}
Unexecuted instantiation: Python-tokenize.c:_Py_IsImmortal
Unexecuted instantiation: asdl.c:_Py_IsImmortal
assemble.c:_Py_IsImmortal
Line
Count
Source
122
45.7k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
45.7k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
45.7k
}
Unexecuted instantiation: ast.c:_Py_IsImmortal
ast_preprocess.c:_Py_IsImmortal
Line
Count
Source
122
2.27k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
2.27k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
2.27k
}
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
122
592
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
592
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
592
}
pegen.c:_Py_IsImmortal
Line
Count
Source
122
133k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
133k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
133k
}
pegen_errors.c:_Py_IsImmortal
Line
Count
Source
122
49.8k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
49.8k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
49.8k
}
Unexecuted instantiation: parser.c:_Py_IsImmortal
Unexecuted instantiation: buffer.c:_Py_IsImmortal
lexer.c:_Py_IsImmortal
Line
Count
Source
122
13.6k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
13.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
13.6k
}
state.c:_Py_IsImmortal
Line
Count
Source
122
23.7k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
23.7k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
23.7k
}
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
122
41.6k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
41.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
41.6k
}
132
17.8G
#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
133
134
135
static inline Py_ALWAYS_INLINE int _Py_IsStaticImmortal(PyObject *op)
136
0
{
137
0
#if defined(Py_GIL_DISABLED) || SIZEOF_VOID_P > 4
138
0
    return (op->ob_flags & _Py_STATICALLY_ALLOCATED_FLAG) != 0;
139
0
#else
140
0
    return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT;
141
0
#endif
142
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: _asynciomodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: atexitmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: faulthandler.c:_Py_IsStaticImmortal
Unexecuted instantiation: posixmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: signalmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _tracemalloc.c:_Py_IsStaticImmortal
Unexecuted instantiation: _suggestions.c:_Py_IsStaticImmortal
Unexecuted instantiation: _datetimemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _codecsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _collectionsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: errnomodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _iomodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: iobase.c:_Py_IsStaticImmortal
Unexecuted instantiation: fileio.c:_Py_IsStaticImmortal
Unexecuted instantiation: bytesio.c:_Py_IsStaticImmortal
Unexecuted instantiation: bufferedio.c:_Py_IsStaticImmortal
Unexecuted instantiation: textio.c:_Py_IsStaticImmortal
Unexecuted instantiation: stringio.c:_Py_IsStaticImmortal
Unexecuted instantiation: itertoolsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: sre.c:_Py_IsStaticImmortal
Unexecuted instantiation: _sysconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: _threadmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: timemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _typesmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _typingmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _weakref.c:_Py_IsStaticImmortal
Unexecuted instantiation: _abc.c:_Py_IsStaticImmortal
Unexecuted instantiation: _functoolsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _localemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _opcode.c:_Py_IsStaticImmortal
Unexecuted instantiation: _operator.c:_Py_IsStaticImmortal
Unexecuted instantiation: _stat.c:_Py_IsStaticImmortal
Unexecuted instantiation: symtablemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: pwdmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: getpath.c:_Py_IsStaticImmortal
Unexecuted instantiation: frozen.c:_Py_IsStaticImmortal
Unexecuted instantiation: getbuildinfo.c:_Py_IsStaticImmortal
Unexecuted instantiation: peg_api.c:_Py_IsStaticImmortal
Unexecuted instantiation: file_tokenizer.c:_Py_IsStaticImmortal
Unexecuted instantiation: helpers.c:_Py_IsStaticImmortal
Unexecuted instantiation: myreadline.c:_Py_IsStaticImmortal
Unexecuted instantiation: abstract.c:_Py_IsStaticImmortal
Unexecuted instantiation: boolobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: bytes_methods.c:_Py_IsStaticImmortal
Unexecuted instantiation: bytearrayobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: capsule.c:_Py_IsStaticImmortal
Unexecuted instantiation: cellobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: classobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: codeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: complexobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: descrobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: enumobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: genobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: fileobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: frameobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: funcobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: interpolationobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: iterobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: odictobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: methodobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: namespaceobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: _contextvars.c:_Py_IsStaticImmortal
Unexecuted instantiation: Python-ast.c:_Py_IsStaticImmortal
Unexecuted instantiation: Python-tokenize.c:_Py_IsStaticImmortal
Unexecuted instantiation: asdl.c:_Py_IsStaticImmortal
Unexecuted instantiation: assemble.c:_Py_IsStaticImmortal
Unexecuted instantiation: ast.c:_Py_IsStaticImmortal
Unexecuted instantiation: ast_preprocess.c:_Py_IsStaticImmortal
Unexecuted instantiation: ast_unparse.c:_Py_IsStaticImmortal
Unexecuted instantiation: critical_section.c:_Py_IsStaticImmortal
Unexecuted instantiation: crossinterp.c:_Py_IsStaticImmortal
Unexecuted instantiation: getcopyright.c:_Py_IsStaticImmortal
Unexecuted instantiation: getplatform.c:_Py_IsStaticImmortal
Unexecuted instantiation: getversion.c:_Py_IsStaticImmortal
Unexecuted instantiation: optimizer.c:_Py_IsStaticImmortal
Unexecuted instantiation: pathconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: structmember.c:_Py_IsStaticImmortal
Unexecuted instantiation: pegen.c:_Py_IsStaticImmortal
Unexecuted instantiation: pegen_errors.c:_Py_IsStaticImmortal
Unexecuted instantiation: parser.c:_Py_IsStaticImmortal
Unexecuted instantiation: buffer.c:_Py_IsStaticImmortal
Unexecuted instantiation: lexer.c:_Py_IsStaticImmortal
Unexecuted instantiation: state.c:_Py_IsStaticImmortal
Unexecuted instantiation: readline_tokenizer.c:_Py_IsStaticImmortal
Unexecuted instantiation: string_tokenizer.c:_Py_IsStaticImmortal
Unexecuted instantiation: utf8_tokenizer.c:_Py_IsStaticImmortal
Unexecuted instantiation: getcompiler.c:_Py_IsStaticImmortal
Unexecuted instantiation: mystrtoul.c:_Py_IsStaticImmortal
Unexecuted instantiation: token.c:_Py_IsStaticImmortal
Unexecuted instantiation: action_helpers.c:_Py_IsStaticImmortal
Unexecuted instantiation: string_parser.c:_Py_IsStaticImmortal
143
#define _Py_IsStaticImmortal(op) _Py_IsStaticImmortal(_PyObject_CAST(op))
144
#endif // !defined(_Py_OPAQUE_PYOBJECT)
145
146
// Py_SET_REFCNT() implementation for stable ABI
147
PyAPI_FUNC(void) _Py_SetRefcnt(PyObject *ob, Py_ssize_t refcnt);
148
149
692M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
692M
    assert(refcnt >= 0);
151
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
152
    // Stable ABI implements Py_SET_REFCNT() as a function call
153
    // on limited C API version 3.13 and newer.
154
    _Py_SetRefcnt(ob, refcnt);
155
#else
156
    // This immortal check is for code that is unaware of immortal objects.
157
    // The runtime tracks these objects and we should avoid as much
158
    // as possible having extensions inadvertently change the refcnt
159
    // of an immortalized object.
160
692M
    if (_Py_IsImmortal(ob)) {
161
447
        return;
162
447
    }
163
692M
#ifndef Py_GIL_DISABLED
164
692M
#if SIZEOF_VOID_P > 4
165
692M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
166
#else
167
    ob->ob_refcnt = refcnt;
168
#endif
169
#else
170
    if (_Py_IsOwnedByCurrentThread(ob)) {
171
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
172
            // On overflow, make the object immortal
173
            ob->ob_tid = _Py_UNOWNED_TID;
174
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
175
            ob->ob_ref_shared = 0;
176
        }
177
        else {
178
            // Set local refcount to desired refcount and shared refcount
179
            // to zero, but preserve the shared refcount flags.
180
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
181
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
182
        }
183
    }
184
    else {
185
        // Set local refcount to zero and shared refcount to desired refcount.
186
        // Mark the object as merged.
187
        ob->ob_tid = _Py_UNOWNED_TID;
188
        ob->ob_ref_local = 0;
189
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
190
    }
191
#endif  // Py_GIL_DISABLED
192
692M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
692M
}
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
149
623M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
623M
    assert(refcnt >= 0);
151
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
152
    // Stable ABI implements Py_SET_REFCNT() as a function call
153
    // on limited C API version 3.13 and newer.
154
    _Py_SetRefcnt(ob, refcnt);
155
#else
156
    // This immortal check is for code that is unaware of immortal objects.
157
    // The runtime tracks these objects and we should avoid as much
158
    // as possible having extensions inadvertently change the refcnt
159
    // of an immortalized object.
160
623M
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
623M
#ifndef Py_GIL_DISABLED
164
623M
#if SIZEOF_VOID_P > 4
165
623M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
166
#else
167
    ob->ob_refcnt = refcnt;
168
#endif
169
#else
170
    if (_Py_IsOwnedByCurrentThread(ob)) {
171
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
172
            // On overflow, make the object immortal
173
            ob->ob_tid = _Py_UNOWNED_TID;
174
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
175
            ob->ob_ref_shared = 0;
176
        }
177
        else {
178
            // Set local refcount to desired refcount and shared refcount
179
            // to zero, but preserve the shared refcount flags.
180
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
181
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
182
        }
183
    }
184
    else {
185
        // Set local refcount to zero and shared refcount to desired refcount.
186
        // Mark the object as merged.
187
        ob->ob_tid = _Py_UNOWNED_TID;
188
        ob->ob_ref_local = 0;
189
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
190
    }
191
#endif  // Py_GIL_DISABLED
192
623M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
623M
}
Unexecuted instantiation: memoryobject.c:Py_SET_REFCNT
moduleobject.c:Py_SET_REFCNT
Line
Count
Source
149
447
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
447
    assert(refcnt >= 0);
151
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
152
    // Stable ABI implements Py_SET_REFCNT() as a function call
153
    // on limited C API version 3.13 and newer.
154
    _Py_SetRefcnt(ob, refcnt);
155
#else
156
    // This immortal check is for code that is unaware of immortal objects.
157
    // The runtime tracks these objects and we should avoid as much
158
    // as possible having extensions inadvertently change the refcnt
159
    // of an immortalized object.
160
447
    if (_Py_IsImmortal(ob)) {
161
447
        return;
162
447
    }
163
0
#ifndef Py_GIL_DISABLED
164
0
#if SIZEOF_VOID_P > 4
165
0
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
166
#else
167
    ob->ob_refcnt = refcnt;
168
#endif
169
#else
170
    if (_Py_IsOwnedByCurrentThread(ob)) {
171
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
172
            // On overflow, make the object immortal
173
            ob->ob_tid = _Py_UNOWNED_TID;
174
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
175
            ob->ob_ref_shared = 0;
176
        }
177
        else {
178
            // Set local refcount to desired refcount and shared refcount
179
            // to zero, but preserve the shared refcount flags.
180
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
181
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
182
        }
183
    }
184
    else {
185
        // Set local refcount to zero and shared refcount to desired refcount.
186
        // Mark the object as merged.
187
        ob->ob_tid = _Py_UNOWNED_TID;
188
        ob->ob_ref_local = 0;
189
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
190
    }
191
#endif  // Py_GIL_DISABLED
192
0
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
0
}
object.c:Py_SET_REFCNT
Line
Count
Source
149
41.3M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
41.3M
    assert(refcnt >= 0);
151
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
152
    // Stable ABI implements Py_SET_REFCNT() as a function call
153
    // on limited C API version 3.13 and newer.
154
    _Py_SetRefcnt(ob, refcnt);
155
#else
156
    // This immortal check is for code that is unaware of immortal objects.
157
    // The runtime tracks these objects and we should avoid as much
158
    // as possible having extensions inadvertently change the refcnt
159
    // of an immortalized object.
160
41.3M
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
41.3M
#ifndef Py_GIL_DISABLED
164
41.3M
#if SIZEOF_VOID_P > 4
165
41.3M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
166
#else
167
    ob->ob_refcnt = refcnt;
168
#endif
169
#else
170
    if (_Py_IsOwnedByCurrentThread(ob)) {
171
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
172
            // On overflow, make the object immortal
173
            ob->ob_tid = _Py_UNOWNED_TID;
174
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
175
            ob->ob_ref_shared = 0;
176
        }
177
        else {
178
            // Set local refcount to desired refcount and shared refcount
179
            // to zero, but preserve the shared refcount flags.
180
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
181
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
182
        }
183
    }
184
    else {
185
        // Set local refcount to zero and shared refcount to desired refcount.
186
        // Mark the object as merged.
187
        ob->ob_tid = _Py_UNOWNED_TID;
188
        ob->ob_ref_local = 0;
189
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
190
    }
191
#endif  // Py_GIL_DISABLED
192
41.3M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
41.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
149
945k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
945k
    assert(refcnt >= 0);
151
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
152
    // Stable ABI implements Py_SET_REFCNT() as a function call
153
    // on limited C API version 3.13 and newer.
154
    _Py_SetRefcnt(ob, refcnt);
155
#else
156
    // This immortal check is for code that is unaware of immortal objects.
157
    // The runtime tracks these objects and we should avoid as much
158
    // as possible having extensions inadvertently change the refcnt
159
    // of an immortalized object.
160
945k
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
945k
#ifndef Py_GIL_DISABLED
164
945k
#if SIZEOF_VOID_P > 4
165
945k
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
166
#else
167
    ob->ob_refcnt = refcnt;
168
#endif
169
#else
170
    if (_Py_IsOwnedByCurrentThread(ob)) {
171
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
172
            // On overflow, make the object immortal
173
            ob->ob_tid = _Py_UNOWNED_TID;
174
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
175
            ob->ob_ref_shared = 0;
176
        }
177
        else {
178
            // Set local refcount to desired refcount and shared refcount
179
            // to zero, but preserve the shared refcount flags.
180
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
181
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
182
        }
183
    }
184
    else {
185
        // Set local refcount to zero and shared refcount to desired refcount.
186
        // Mark the object as merged.
187
        ob->ob_tid = _Py_UNOWNED_TID;
188
        ob->ob_ref_local = 0;
189
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
190
    }
191
#endif  // Py_GIL_DISABLED
192
945k
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
945k
}
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: _asynciomodule.c:Py_SET_REFCNT
Unexecuted instantiation: atexitmodule.c:Py_SET_REFCNT
Unexecuted instantiation: faulthandler.c:Py_SET_REFCNT
Unexecuted instantiation: posixmodule.c:Py_SET_REFCNT
Unexecuted instantiation: signalmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _tracemalloc.c:Py_SET_REFCNT
Unexecuted instantiation: _suggestions.c:Py_SET_REFCNT
Unexecuted instantiation: _datetimemodule.c:Py_SET_REFCNT
Unexecuted instantiation: _codecsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _collectionsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: errnomodule.c:Py_SET_REFCNT
Unexecuted instantiation: _iomodule.c:Py_SET_REFCNT
Unexecuted instantiation: iobase.c:Py_SET_REFCNT
Unexecuted instantiation: fileio.c:Py_SET_REFCNT
Unexecuted instantiation: bytesio.c:Py_SET_REFCNT
Unexecuted instantiation: bufferedio.c:Py_SET_REFCNT
Unexecuted instantiation: textio.c:Py_SET_REFCNT
Unexecuted instantiation: stringio.c:Py_SET_REFCNT
Unexecuted instantiation: itertoolsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: sre.c:Py_SET_REFCNT
Unexecuted instantiation: _sysconfig.c:Py_SET_REFCNT
Unexecuted instantiation: _threadmodule.c:Py_SET_REFCNT
Unexecuted instantiation: timemodule.c:Py_SET_REFCNT
Unexecuted instantiation: _typesmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _typingmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _weakref.c:Py_SET_REFCNT
Unexecuted instantiation: _abc.c:Py_SET_REFCNT
Unexecuted instantiation: _functoolsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _localemodule.c:Py_SET_REFCNT
Unexecuted instantiation: _opcode.c:Py_SET_REFCNT
Unexecuted instantiation: _operator.c:Py_SET_REFCNT
Unexecuted instantiation: _stat.c:Py_SET_REFCNT
Unexecuted instantiation: symtablemodule.c:Py_SET_REFCNT
Unexecuted instantiation: pwdmodule.c:Py_SET_REFCNT
Unexecuted instantiation: getpath.c:Py_SET_REFCNT
Unexecuted instantiation: frozen.c:Py_SET_REFCNT
Unexecuted instantiation: getbuildinfo.c:Py_SET_REFCNT
Unexecuted instantiation: peg_api.c:Py_SET_REFCNT
Unexecuted instantiation: file_tokenizer.c:Py_SET_REFCNT
Unexecuted instantiation: helpers.c:Py_SET_REFCNT
Unexecuted instantiation: myreadline.c:Py_SET_REFCNT
Unexecuted instantiation: abstract.c:Py_SET_REFCNT
Unexecuted instantiation: boolobject.c:Py_SET_REFCNT
Unexecuted instantiation: bytes_methods.c:Py_SET_REFCNT
Unexecuted instantiation: bytearrayobject.c:Py_SET_REFCNT
Unexecuted instantiation: capsule.c:Py_SET_REFCNT
Unexecuted instantiation: cellobject.c:Py_SET_REFCNT
Unexecuted instantiation: classobject.c:Py_SET_REFCNT
codeobject.c:Py_SET_REFCNT
Line
Count
Source
149
16.2k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
16.2k
    assert(refcnt >= 0);
151
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
152
    // Stable ABI implements Py_SET_REFCNT() as a function call
153
    // on limited C API version 3.13 and newer.
154
    _Py_SetRefcnt(ob, refcnt);
155
#else
156
    // This immortal check is for code that is unaware of immortal objects.
157
    // The runtime tracks these objects and we should avoid as much
158
    // as possible having extensions inadvertently change the refcnt
159
    // of an immortalized object.
160
16.2k
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
16.2k
#ifndef Py_GIL_DISABLED
164
16.2k
#if SIZEOF_VOID_P > 4
165
16.2k
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
166
#else
167
    ob->ob_refcnt = refcnt;
168
#endif
169
#else
170
    if (_Py_IsOwnedByCurrentThread(ob)) {
171
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
172
            // On overflow, make the object immortal
173
            ob->ob_tid = _Py_UNOWNED_TID;
174
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
175
            ob->ob_ref_shared = 0;
176
        }
177
        else {
178
            // Set local refcount to desired refcount and shared refcount
179
            // to zero, but preserve the shared refcount flags.
180
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
181
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
182
        }
183
    }
184
    else {
185
        // Set local refcount to zero and shared refcount to desired refcount.
186
        // Mark the object as merged.
187
        ob->ob_tid = _Py_UNOWNED_TID;
188
        ob->ob_ref_local = 0;
189
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
190
    }
191
#endif  // Py_GIL_DISABLED
192
16.2k
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
16.2k
}
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
149
26.9M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
26.9M
    assert(refcnt >= 0);
151
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
152
    // Stable ABI implements Py_SET_REFCNT() as a function call
153
    // on limited C API version 3.13 and newer.
154
    _Py_SetRefcnt(ob, refcnt);
155
#else
156
    // This immortal check is for code that is unaware of immortal objects.
157
    // The runtime tracks these objects and we should avoid as much
158
    // as possible having extensions inadvertently change the refcnt
159
    // of an immortalized object.
160
26.9M
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
26.9M
#ifndef Py_GIL_DISABLED
164
26.9M
#if SIZEOF_VOID_P > 4
165
26.9M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
166
#else
167
    ob->ob_refcnt = refcnt;
168
#endif
169
#else
170
    if (_Py_IsOwnedByCurrentThread(ob)) {
171
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
172
            // On overflow, make the object immortal
173
            ob->ob_tid = _Py_UNOWNED_TID;
174
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
175
            ob->ob_ref_shared = 0;
176
        }
177
        else {
178
            // Set local refcount to desired refcount and shared refcount
179
            // to zero, but preserve the shared refcount flags.
180
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
181
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
182
        }
183
    }
184
    else {
185
        // Set local refcount to zero and shared refcount to desired refcount.
186
        // Mark the object as merged.
187
        ob->ob_tid = _Py_UNOWNED_TID;
188
        ob->ob_ref_local = 0;
189
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
190
    }
191
#endif  // Py_GIL_DISABLED
192
26.9M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
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
194
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
195
692M
#  define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt))
196
#endif
197
198
199
/*
200
The macros Py_INCREF(op) and Py_DECREF(op) are used to increment or decrement
201
reference counts.  Py_DECREF calls the object's deallocator function when
202
the refcount falls to 0; for
203
objects that don't contain references to other objects or heap memory
204
this can be the standard function free().  Both macros can be used
205
wherever a void expression is allowed.  The argument must not be a
206
NULL pointer.  If it may be NULL, use Py_XINCREF/Py_XDECREF instead.
207
The macro _Py_NewReference(op) initialize reference counts to 1, and
208
in special builds (Py_REF_DEBUG, Py_TRACE_REFS) performs additional
209
bookkeeping appropriate to the special build.
210
211
We assume that the reference count field can never overflow; this can
212
be proven when the size of the field is the same as the pointer size, so
213
we ignore the possibility.  Provided a C int is at least 32 bits (which
214
is implicitly assumed in many parts of this code), that's enough for
215
about 2**31 references to an object.
216
217
XXX The following became out of date in Python 2.2, but I'm not sure
218
XXX what the full truth is now.  Certainly, heap-allocated type objects
219
XXX can and should be deallocated.
220
Type objects should never be deallocated; the type pointer in an object
221
is not considered to be a reference to the type object, to save
222
complications in the deallocation function.  (This is actually a
223
decision that's up to the implementer of each new type so if you want,
224
you can count such references to the type object.)
225
*/
226
227
#if defined(Py_REF_DEBUG) && !defined(Py_LIMITED_API)
228
PyAPI_FUNC(void) _Py_NegativeRefcount(const char *filename, int lineno,
229
                                      PyObject *op);
230
PyAPI_FUNC(void) _Py_INCREF_IncRefTotal(void);
231
PyAPI_FUNC(void) _Py_DECREF_DecRefTotal(void);
232
#endif  // Py_REF_DEBUG && !Py_LIMITED_API
233
234
PyAPI_FUNC(void) _Py_Dealloc(PyObject *);
235
236
237
/*
238
These are provided as conveniences to Python runtime embedders, so that
239
they can have object code that is not dependent on Python compilation flags.
240
*/
241
PyAPI_FUNC(void) Py_IncRef(PyObject *);
242
PyAPI_FUNC(void) Py_DecRef(PyObject *);
243
244
// Similar to Py_IncRef() and Py_DecRef() but the argument must be non-NULL.
245
// Private functions used by Py_INCREF() and Py_DECREF().
246
PyAPI_FUNC(void) _Py_IncRef(PyObject *);
247
PyAPI_FUNC(void) _Py_DecRef(PyObject *);
248
249
static inline Py_ALWAYS_INLINE void Py_INCREF(PyObject *op)
250
8.53G
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
8.53G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
8.53G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
4.31G
        _Py_INCREF_IMMORTAL_STAT_INC();
283
4.31G
        return;
284
4.31G
    }
285
4.21G
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
4.21G
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
4.21G
#endif
301
4.21G
}
bytesobject.c:Py_INCREF
Line
Count
Source
250
23.4M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
23.4M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
23.4M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
21.9M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
21.9M
        return;
284
21.9M
    }
285
1.49M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
1.49M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
1.49M
#endif
301
1.49M
}
call.c:Py_INCREF
Line
Count
Source
250
24.5M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
24.5M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
24.5M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
8.68M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
8.68M
        return;
284
8.68M
    }
285
15.8M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
15.8M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
15.8M
#endif
301
15.8M
}
exceptions.c:Py_INCREF
Line
Count
Source
250
88.0M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
88.0M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
88.0M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
35.5M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
35.5M
        return;
284
35.5M
    }
285
52.5M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
52.5M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
52.5M
#endif
301
52.5M
}
genericaliasobject.c:Py_INCREF
Line
Count
Source
250
862
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
862
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
862
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
858
        _Py_INCREF_IMMORTAL_STAT_INC();
283
858
        return;
284
858
    }
285
4
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
4
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
4
#endif
301
4
}
floatobject.c:Py_INCREF
Line
Count
Source
250
531k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
531k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
531k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
531k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
531k
        return;
284
531k
    }
285
0
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
0
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
0
#endif
301
0
}
listobject.c:Py_INCREF
Line
Count
Source
250
1.18G
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
1.18G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.18G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
255M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
255M
        return;
284
255M
    }
285
931M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
931M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
931M
#endif
301
931M
}
longobject.c:Py_INCREF
Line
Count
Source
250
123M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
123M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
123M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
123M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
123M
        return;
284
123M
    }
285
4.81k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
4.81k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
4.81k
#endif
301
4.81k
}
dictobject.c:Py_INCREF
Line
Count
Source
250
1.11G
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
1.11G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.11G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
374M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
374M
        return;
284
374M
    }
285
742M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
742M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
742M
#endif
301
742M
}
memoryobject.c:Py_INCREF
Line
Count
Source
250
584k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
584k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
584k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
584k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
584k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
584k
#endif
301
584k
}
moduleobject.c:Py_INCREF
Line
Count
Source
250
1.45k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
1.45k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.45k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
861
        _Py_INCREF_IMMORTAL_STAT_INC();
283
861
        return;
284
861
    }
285
592
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
592
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
592
#endif
301
592
}
object.c:Py_INCREF
Line
Count
Source
250
612M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
612M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
612M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
449M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
449M
        return;
284
449M
    }
285
163M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
163M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
163M
#endif
301
163M
}
Unexecuted instantiation: obmalloc.c:Py_INCREF
Unexecuted instantiation: picklebufobject.c:Py_INCREF
rangeobject.c:Py_INCREF
Line
Count
Source
250
64
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
64
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
64
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
48
        _Py_INCREF_IMMORTAL_STAT_INC();
283
48
        return;
284
48
    }
285
16
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
16
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
16
#endif
301
16
}
setobject.c:Py_INCREF
Line
Count
Source
250
1.42M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
1.42M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.42M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
509k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
509k
        return;
284
509k
    }
285
912k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
912k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
912k
#endif
301
912k
}
sliceobject.c:Py_INCREF
Line
Count
Source
250
48.7M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
48.7M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
48.7M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
48.7M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
48.7M
        return;
284
48.7M
    }
285
0
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
0
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
0
#endif
301
0
}
Unexecuted instantiation: structseq.c:Py_INCREF
templateobject.c:Py_INCREF
Line
Count
Source
250
4
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
4
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
4
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
2
        _Py_INCREF_IMMORTAL_STAT_INC();
283
2
        return;
284
2
    }
285
2
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
2
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
2
#endif
301
2
}
tupleobject.c:Py_INCREF
Line
Count
Source
250
605M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
605M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
605M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
426M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
426M
        return;
284
426M
    }
285
178M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
178M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
178M
#endif
301
178M
}
typeobject.c:Py_INCREF
Line
Count
Source
250
293M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
293M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
293M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
94.6M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
94.6M
        return;
284
94.6M
    }
285
198M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
198M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
198M
#endif
301
198M
}
Unexecuted instantiation: typevarobject.c:Py_INCREF
unicodeobject.c:Py_INCREF
Line
Count
Source
250
809M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
809M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
809M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
700M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
700M
        return;
284
700M
    }
285
109M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
109M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
109M
#endif
301
109M
}
Unexecuted instantiation: unicodectype.c:Py_INCREF
Unexecuted instantiation: unionobject.c:Py_INCREF
weakrefobject.c:Py_INCREF
Line
Count
Source
250
313k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
313k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
313k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
1.25k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
1.25k
        return;
284
1.25k
    }
285
312k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
312k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
312k
#endif
301
312k
}
_warnings.c:Py_INCREF
Line
Count
Source
250
65.9k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
65.9k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
65.9k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
20.5k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
20.5k
        return;
284
20.5k
    }
285
45.4k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
45.4k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
45.4k
#endif
301
45.4k
}
bltinmodule.c:Py_INCREF
Line
Count
Source
250
64.6M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
64.6M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
64.6M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
22.5M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
22.5M
        return;
284
22.5M
    }
285
42.0M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
42.0M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
42.0M
#endif
301
42.0M
}
ceval.c:Py_INCREF
Line
Count
Source
250
1.50G
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
1.50G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.50G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
856M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
856M
        return;
284
856M
    }
285
651M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
651M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
651M
#endif
301
651M
}
codecs.c:Py_INCREF
Line
Count
Source
250
3.10M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
3.10M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
3.10M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
586k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
586k
        return;
284
586k
    }
285
2.51M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
2.51M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
2.51M
#endif
301
2.51M
}
codegen.c:Py_INCREF
Line
Count
Source
250
2.70k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
2.70k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
2.70k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
2.70k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
2.70k
        return;
284
2.70k
    }
285
0
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
0
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
0
#endif
301
0
}
compile.c:Py_INCREF
Line
Count
Source
250
107k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
107k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
107k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
46.2k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
46.2k
        return;
284
46.2k
    }
285
60.8k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
60.8k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
60.8k
#endif
301
60.8k
}
context.c:Py_INCREF
Line
Count
Source
250
24
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
24
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
24
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
7
        _Py_INCREF_IMMORTAL_STAT_INC();
283
7
        return;
284
7
    }
285
17
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
17
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
17
#endif
301
17
}
errors.c:Py_INCREF
Line
Count
Source
250
66.7M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
66.7M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
66.7M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
32.7M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
32.7M
        return;
284
32.7M
    }
285
33.9M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
33.9M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
33.9M
#endif
301
33.9M
}
flowgraph.c:Py_INCREF
Line
Count
Source
250
93.5k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
93.5k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
93.5k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
43.8k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
43.8k
        return;
284
43.8k
    }
285
49.6k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
49.6k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
49.6k
#endif
301
49.6k
}
frame.c:Py_INCREF
Line
Count
Source
250
12.8M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
12.8M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
12.8M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
12.8M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
12.8M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
12.8M
#endif
301
12.8M
}
Unexecuted instantiation: future.c:Py_INCREF
gc.c:Py_INCREF
Line
Count
Source
250
349M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
349M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
349M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
268M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
268M
        return;
284
268M
    }
285
81.0M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
81.0M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
81.0M
#endif
301
81.0M
}
Unexecuted instantiation: gc_gil.c:Py_INCREF
getargs.c:Py_INCREF
Line
Count
Source
250
719k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
719k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
719k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
138k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
138k
        return;
284
138k
    }
285
580k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
580k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
580k
#endif
301
580k
}
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
250
82.0k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
82.0k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
82.0k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
12.4k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
12.4k
        return;
284
12.4k
    }
285
69.5k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
69.5k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
69.5k
#endif
301
69.5k
}
importdl.c:Py_INCREF
Line
Count
Source
250
529
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
529
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
529
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
422
        _Py_INCREF_IMMORTAL_STAT_INC();
283
422
        return;
284
422
    }
285
107
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
107
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
107
#endif
301
107
}
initconfig.c:Py_INCREF
Line
Count
Source
250
272
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
272
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
272
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
272
        _Py_INCREF_IMMORTAL_STAT_INC();
283
272
        return;
284
272
    }
285
0
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
0
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
0
#endif
301
0
}
Unexecuted instantiation: instrumentation.c:Py_INCREF
Unexecuted instantiation: instruction_sequence.c:Py_INCREF
intrinsics.c:Py_INCREF
Line
Count
Source
250
17.7k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
17.7k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
17.7k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
17.7k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
17.7k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
17.7k
#endif
301
17.7k
}
Unexecuted instantiation: legacy_tracing.c:Py_INCREF
Unexecuted instantiation: lock.c:Py_INCREF
marshal.c:Py_INCREF
Line
Count
Source
250
324k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
324k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
324k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
281k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
281k
        return;
284
281k
    }
285
43.3k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
43.3k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
43.3k
#endif
301
43.3k
}
modsupport.c:Py_INCREF
Line
Count
Source
250
294k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
294k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
294k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
17.2k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
17.2k
        return;
284
17.2k
    }
285
277k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
277k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
277k
#endif
301
277k
}
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
250
16
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
16
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
16
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
16
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
16
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
16
#endif
301
16
}
Unexecuted instantiation: pymath.c:Py_INCREF
pystate.c:Py_INCREF
Line
Count
Source
250
2.27k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
2.27k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
2.27k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
2.27k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
2.27k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
2.27k
#endif
301
2.27k
}
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
250
254k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
254k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
254k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
253k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
253k
        return;
284
253k
    }
285
677
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
677
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
677
#endif
301
677
}
sysmodule.c:Py_INCREF
Line
Count
Source
250
1.46k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
1.46k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.46k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
897
        _Py_INCREF_IMMORTAL_STAT_INC();
283
897
        return;
284
897
    }
285
571
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
571
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
571
#endif
301
571
}
Unexecuted instantiation: thread.c:Py_INCREF
traceback.c:Py_INCREF
Line
Count
Source
250
35.5M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
35.5M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
35.5M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
35.5M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
35.5M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
35.5M
#endif
301
35.5M
}
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: _asynciomodule.c:Py_INCREF
Unexecuted instantiation: atexitmodule.c:Py_INCREF
Unexecuted instantiation: faulthandler.c:Py_INCREF
posixmodule.c:Py_INCREF
Line
Count
Source
250
45.3k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
45.3k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
45.3k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
96
        _Py_INCREF_IMMORTAL_STAT_INC();
283
96
        return;
284
96
    }
285
45.2k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
45.2k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
45.2k
#endif
301
45.2k
}
signalmodule.c:Py_INCREF
Line
Count
Source
250
1.02k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
1.02k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.02k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
1.02k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
1.02k
        return;
284
1.02k
    }
285
0
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
0
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
0
#endif
301
0
}
Unexecuted instantiation: _tracemalloc.c:Py_INCREF
Unexecuted instantiation: _suggestions.c:Py_INCREF
_datetimemodule.c:Py_INCREF
Line
Count
Source
250
108
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
108
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
108
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
76
        _Py_INCREF_IMMORTAL_STAT_INC();
283
76
        return;
284
76
    }
285
32
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
32
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
32
#endif
301
32
}
Unexecuted instantiation: _codecsmodule.c:Py_INCREF
_collectionsmodule.c:Py_INCREF
Line
Count
Source
250
18.9M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
18.9M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
18.9M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
15.8M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
15.8M
        return;
284
15.8M
    }
285
3.13M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
3.13M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
3.13M
#endif
301
3.13M
}
Unexecuted instantiation: errnomodule.c:Py_INCREF
_iomodule.c:Py_INCREF
Line
Count
Source
250
48
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
48
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
48
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
48
        _Py_INCREF_IMMORTAL_STAT_INC();
283
48
        return;
284
48
    }
285
0
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
0
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
0
#endif
301
0
}
iobase.c:Py_INCREF
Line
Count
Source
250
40.4k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
40.4k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
40.4k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
40.4k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
40.4k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
40.4k
#endif
301
40.4k
}
Unexecuted instantiation: fileio.c:Py_INCREF
bytesio.c:Py_INCREF
Line
Count
Source
250
10.1k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
10.1k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
10.1k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
21
        _Py_INCREF_IMMORTAL_STAT_INC();
283
21
        return;
284
21
    }
285
10.0k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
10.0k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
10.0k
#endif
301
10.0k
}
bufferedio.c:Py_INCREF
Line
Count
Source
250
2.05k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
2.05k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
2.05k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
3
        _Py_INCREF_IMMORTAL_STAT_INC();
283
3
        return;
284
3
    }
285
2.05k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
2.05k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
2.05k
#endif
301
2.05k
}
textio.c:Py_INCREF
Line
Count
Source
250
81.7k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
81.7k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
81.7k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
20.1k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
20.1k
        return;
284
20.1k
    }
285
61.5k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
61.5k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
61.5k
#endif
301
61.5k
}
stringio.c:Py_INCREF
Line
Count
Source
250
16.0k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
16.0k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
16.0k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
44
        _Py_INCREF_IMMORTAL_STAT_INC();
283
44
        return;
284
44
    }
285
16.0k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
16.0k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
16.0k
#endif
301
16.0k
}
itertoolsmodule.c:Py_INCREF
Line
Count
Source
250
758
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
758
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
758
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
350
        _Py_INCREF_IMMORTAL_STAT_INC();
283
350
        return;
284
350
    }
285
408
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
408
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
408
#endif
301
408
}
sre.c:Py_INCREF
Line
Count
Source
250
339M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
339M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
339M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
111M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
111M
        return;
284
111M
    }
285
228M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
228M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
228M
#endif
301
228M
}
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
250
9.59k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
9.59k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
9.59k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
9.48k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
9.48k
        return;
284
9.48k
    }
285
114
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
114
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
114
#endif
301
114
}
_functoolsmodule.c:Py_INCREF
Line
Count
Source
250
525
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
525
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
525
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
157
        _Py_INCREF_IMMORTAL_STAT_INC();
283
157
        return;
284
157
    }
285
368
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
368
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
368
#endif
301
368
}
Unexecuted instantiation: _localemodule.c:Py_INCREF
Unexecuted instantiation: _opcode.c:Py_INCREF
_operator.c:Py_INCREF
Line
Count
Source
250
1.36M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
1.36M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.36M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
1.32M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
1.32M
        return;
284
1.32M
    }
285
35.3k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
35.3k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
35.3k
#endif
301
35.3k
}
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
250
176
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
176
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
176
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
176
        _Py_INCREF_IMMORTAL_STAT_INC();
283
176
        return;
284
176
    }
285
0
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
0
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
0
#endif
301
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
250
561M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
561M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
561M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
379M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
379M
        return;
284
379M
    }
285
181M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
181M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
181M
#endif
301
181M
}
Unexecuted instantiation: boolobject.c:Py_INCREF
Unexecuted instantiation: bytes_methods.c:Py_INCREF
bytearrayobject.c:Py_INCREF
Line
Count
Source
250
36
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
36
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
36
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
36
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
36
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
36
#endif
301
36
}
Unexecuted instantiation: capsule.c:Py_INCREF
cellobject.c:Py_INCREF
Line
Count
Source
250
70.1k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
70.1k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
70.1k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
22.2k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
22.2k
        return;
284
22.2k
    }
285
47.9k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
47.9k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
47.9k
#endif
301
47.9k
}
classobject.c:Py_INCREF
Line
Count
Source
250
46.7M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
46.7M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
46.7M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
2
        _Py_INCREF_IMMORTAL_STAT_INC();
283
2
        return;
284
2
    }
285
46.7M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
46.7M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
46.7M
#endif
301
46.7M
}
codeobject.c:Py_INCREF
Line
Count
Source
250
490k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
490k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
490k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
255k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
255k
        return;
284
255k
    }
285
235k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
235k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
235k
#endif
301
235k
}
complexobject.c:Py_INCREF
Line
Count
Source
250
3.95k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
3.95k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
3.95k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
3.95k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
3.95k
        return;
284
3.95k
    }
285
0
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
0
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
0
#endif
301
0
}
descrobject.c:Py_INCREF
Line
Count
Source
250
22.3M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
22.3M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
22.3M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
30.5k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
30.5k
        return;
284
30.5k
    }
285
22.3M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
22.3M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
22.3M
#endif
301
22.3M
}
enumobject.c:Py_INCREF
Line
Count
Source
250
117M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
117M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
117M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
117M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
117M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
117M
#endif
301
117M
}
genobject.c:Py_INCREF
Line
Count
Source
250
41.7M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
41.7M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
41.7M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
41.6M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
41.6M
        return;
284
41.6M
    }
285
84.4k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
84.4k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
84.4k
#endif
301
84.4k
}
Unexecuted instantiation: fileobject.c:Py_INCREF
frameobject.c:Py_INCREF
Line
Count
Source
250
5.13k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
5.13k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
5.13k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
5.13k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
5.13k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
5.13k
#endif
301
5.13k
}
funcobject.c:Py_INCREF
Line
Count
Source
250
79.2M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
79.2M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
79.2M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
40.4M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
40.4M
        return;
284
40.4M
    }
285
38.7M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
38.7M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
38.7M
#endif
301
38.7M
}
Unexecuted instantiation: interpolationobject.c:Py_INCREF
iterobject.c:Py_INCREF
Line
Count
Source
250
713k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
713k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
713k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
356k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
356k
        return;
284
356k
    }
285
357k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
357k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
357k
#endif
301
357k
}
odictobject.c:Py_INCREF
Line
Count
Source
250
480
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
480
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
480
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
304
        _Py_INCREF_IMMORTAL_STAT_INC();
283
304
        return;
284
304
    }
285
176
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
176
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
176
#endif
301
176
}
methodobject.c:Py_INCREF
Line
Count
Source
250
323M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
323M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
323M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
4.91M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
4.91M
        return;
284
4.91M
    }
285
318M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
318M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
318M
#endif
301
318M
}
Unexecuted instantiation: namespaceobject.c:Py_INCREF
Unexecuted instantiation: _contextvars.c:Py_INCREF
Python-ast.c:Py_INCREF
Line
Count
Source
250
563k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
563k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
563k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
222k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
222k
        return;
284
222k
    }
285
341k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
341k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
341k
#endif
301
341k
}
Unexecuted instantiation: Python-tokenize.c:Py_INCREF
Unexecuted instantiation: asdl.c:Py_INCREF
assemble.c:Py_INCREF
Line
Count
Source
250
43.1k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
43.1k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
43.1k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
42.9k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
42.9k
        return;
284
42.9k
    }
285
131
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
131
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
131
#endif
301
131
}
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
250
94.4k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
94.4k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
94.4k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
36.6k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
36.6k
        return;
284
36.6k
    }
285
57.8k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
57.8k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
57.8k
#endif
301
57.8k
}
pegen.c:Py_INCREF
Line
Count
Source
250
22.5k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
22.5k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
22.5k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
1.57k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
1.57k
        return;
284
1.57k
    }
285
20.9k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
20.9k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
20.9k
#endif
301
20.9k
}
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
302
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
303
8.53G
#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
304
#endif
305
306
307
#if !defined(Py_LIMITED_API) && defined(Py_GIL_DISABLED)
308
// Implements Py_DECREF on objects not owned by the current thread.
309
PyAPI_FUNC(void) _Py_DecRefShared(PyObject *);
310
PyAPI_FUNC(void) _Py_DecRefSharedDebug(PyObject *, const char *, int);
311
312
// Called from Py_DECREF by the owning thread when the local refcount reaches
313
// zero. The call will deallocate the object if the shared refcount is also
314
// zero. Otherwise, the thread gives up ownership and merges the reference
315
// count fields.
316
PyAPI_FUNC(void) _Py_MergeZeroLocalRefcount(PyObject *);
317
#endif
318
319
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
320
// Stable ABI implements Py_DECREF() as a function call on limited C API
321
// version 3.12 and newer, and on Python built in debug mode. _Py_DecRef() was
322
// added to Python 3.10.0a7, use Py_DecRef() on older Python versions.
323
// Py_DecRef() accepts NULL whereas _Py_DecRef() doesn't.
324
4.40k
static inline void Py_DECREF(PyObject *op) {
325
4.40k
#  if Py_LIMITED_API+0 >= 0x030a00A7
326
4.40k
    _Py_DecRef(op);
327
#  else
328
    Py_DecRef(op);
329
#  endif
330
4.40k
}
errnomodule.c:Py_DECREF
Line
Count
Source
324
4.40k
static inline void Py_DECREF(PyObject *op) {
325
4.40k
#  if Py_LIMITED_API+0 >= 0x030a00A7
326
4.40k
    _Py_DecRef(op);
327
#  else
328
    Py_DecRef(op);
329
#  endif
330
4.40k
}
Unexecuted instantiation: _stat.c:Py_DECREF
331
4.40k
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
332
333
#elif defined(Py_GIL_DISABLED) && defined(Py_REF_DEBUG)
334
static inline void Py_DECREF(const char *filename, int lineno, PyObject *op)
335
{
336
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
337
    if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
338
        _Py_DECREF_IMMORTAL_STAT_INC();
339
        return;
340
    }
341
    _Py_DECREF_STAT_INC();
342
    _Py_DECREF_DecRefTotal();
343
    if (_Py_IsOwnedByCurrentThread(op)) {
344
        if (local == 0) {
345
            _Py_NegativeRefcount(filename, lineno, op);
346
        }
347
        local--;
348
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, local);
349
        if (local == 0) {
350
            _Py_MergeZeroLocalRefcount(op);
351
        }
352
    }
353
    else {
354
        _Py_DecRefSharedDebug(op, filename, lineno);
355
    }
356
}
357
#define Py_DECREF(op) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
358
359
#elif defined(Py_GIL_DISABLED)
360
static inline void Py_DECREF(PyObject *op)
361
{
362
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
363
    if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
364
        _Py_DECREF_IMMORTAL_STAT_INC();
365
        return;
366
    }
367
    _Py_DECREF_STAT_INC();
368
    if (_Py_IsOwnedByCurrentThread(op)) {
369
        local--;
370
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, local);
371
        if (local == 0) {
372
            _Py_MergeZeroLocalRefcount(op);
373
        }
374
    }
375
    else {
376
        _Py_DecRefShared(op);
377
    }
378
}
379
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
380
381
#elif defined(Py_REF_DEBUG)
382
383
static inline void Py_DECREF(const char *filename, int lineno, PyObject *op)
384
{
385
#if SIZEOF_VOID_P > 4
386
    /* If an object has been freed, it will have a negative full refcnt
387
     * If it has not it been freed, will have a very large refcnt */
388
    if (op->ob_refcnt_full <= 0 || op->ob_refcnt > (((PY_UINT32_T)-1) - (1<<20))) {
389
#else
390
    if (op->ob_refcnt <= 0) {
391
#endif
392
        _Py_NegativeRefcount(filename, lineno, op);
393
    }
394
    if (_Py_IsImmortal(op)) {
395
        _Py_DECREF_IMMORTAL_STAT_INC();
396
        return;
397
    }
398
    _Py_DECREF_STAT_INC();
399
    _Py_DECREF_DecRefTotal();
400
    if (--op->ob_refcnt == 0) {
401
        _Py_Dealloc(op);
402
    }
403
}
404
#define Py_DECREF(op) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
405
406
#else
407
408
static inline Py_ALWAYS_INLINE void Py_DECREF(PyObject *op)
409
7.28G
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
7.28G
    if (_Py_IsImmortal(op)) {
413
3.21G
        _Py_DECREF_IMMORTAL_STAT_INC();
414
3.21G
        return;
415
3.21G
    }
416
4.07G
    _Py_DECREF_STAT_INC();
417
4.07G
    if (--op->ob_refcnt == 0) {
418
1.10G
        _Py_Dealloc(op);
419
1.10G
    }
420
4.07G
}
bytesobject.c:Py_DECREF
Line
Count
Source
409
4.29M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.29M
    if (_Py_IsImmortal(op)) {
413
4.12M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
4.12M
        return;
415
4.12M
    }
416
174k
    _Py_DECREF_STAT_INC();
417
174k
    if (--op->ob_refcnt == 0) {
418
103k
        _Py_Dealloc(op);
419
103k
    }
420
174k
}
call.c:Py_DECREF
Line
Count
Source
409
135M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
135M
    if (_Py_IsImmortal(op)) {
413
57.3M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
57.3M
        return;
415
57.3M
    }
416
78.4M
    _Py_DECREF_STAT_INC();
417
78.4M
    if (--op->ob_refcnt == 0) {
418
60.8M
        _Py_Dealloc(op);
419
60.8M
    }
420
78.4M
}
exceptions.c:Py_DECREF
Line
Count
Source
409
116M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
116M
    if (_Py_IsImmortal(op)) {
413
35.5M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
35.5M
        return;
415
35.5M
    }
416
81.3M
    _Py_DECREF_STAT_INC();
417
81.3M
    if (--op->ob_refcnt == 0) {
418
71.1M
        _Py_Dealloc(op);
419
71.1M
    }
420
81.3M
}
genericaliasobject.c:Py_DECREF
Line
Count
Source
409
88
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
88
    if (_Py_IsImmortal(op)) {
413
44
        _Py_DECREF_IMMORTAL_STAT_INC();
414
44
        return;
415
44
    }
416
44
    _Py_DECREF_STAT_INC();
417
44
    if (--op->ob_refcnt == 0) {
418
44
        _Py_Dealloc(op);
419
44
    }
420
44
}
floatobject.c:Py_DECREF
Line
Count
Source
409
8
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
8
    if (_Py_IsImmortal(op)) {
413
5
        _Py_DECREF_IMMORTAL_STAT_INC();
414
5
        return;
415
5
    }
416
3
    _Py_DECREF_STAT_INC();
417
3
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
3
}
listobject.c:Py_DECREF
Line
Count
Source
409
1.61G
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.61G
    if (_Py_IsImmortal(op)) {
413
459M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
459M
        return;
415
459M
    }
416
1.15G
    _Py_DECREF_STAT_INC();
417
1.15G
    if (--op->ob_refcnt == 0) {
418
287M
        _Py_Dealloc(op);
419
287M
    }
420
1.15G
}
longobject.c:Py_DECREF
Line
Count
Source
409
4.25M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.25M
    if (_Py_IsImmortal(op)) {
413
3.72M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
3.72M
        return;
415
3.72M
    }
416
529k
    _Py_DECREF_STAT_INC();
417
529k
    if (--op->ob_refcnt == 0) {
418
2.85k
        _Py_Dealloc(op);
419
2.85k
    }
420
529k
}
dictobject.c:Py_DECREF
Line
Count
Source
409
1.06G
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.06G
    if (_Py_IsImmortal(op)) {
413
526M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
526M
        return;
415
526M
    }
416
541M
    _Py_DECREF_STAT_INC();
417
541M
    if (--op->ob_refcnt == 0) {
418
86.5M
        _Py_Dealloc(op);
419
86.5M
    }
420
541M
}
memoryobject.c:Py_DECREF
Line
Count
Source
409
670k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
670k
    if (_Py_IsImmortal(op)) {
413
4
        _Py_DECREF_IMMORTAL_STAT_INC();
414
4
        return;
415
4
    }
416
670k
    _Py_DECREF_STAT_INC();
417
670k
    if (--op->ob_refcnt == 0) {
418
334k
        _Py_Dealloc(op);
419
334k
    }
420
670k
}
moduleobject.c:Py_DECREF
Line
Count
Source
409
45.2k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
45.2k
    if (_Py_IsImmortal(op)) {
413
33.5k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
33.5k
        return;
415
33.5k
    }
416
11.6k
    _Py_DECREF_STAT_INC();
417
11.6k
    if (--op->ob_refcnt == 0) {
418
8
        _Py_Dealloc(op);
419
8
    }
420
11.6k
}
object.c:Py_DECREF
Line
Count
Source
409
449M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
449M
    if (_Py_IsImmortal(op)) {
413
410M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
410M
        return;
415
410M
    }
416
39.9M
    _Py_DECREF_STAT_INC();
417
39.9M
    if (--op->ob_refcnt == 0) {
418
238
        _Py_Dealloc(op);
419
238
    }
420
39.9M
}
Unexecuted instantiation: obmalloc.c:Py_DECREF
Unexecuted instantiation: picklebufobject.c:Py_DECREF
rangeobject.c:Py_DECREF
Line
Count
Source
409
33.9M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
33.9M
    if (_Py_IsImmortal(op)) {
413
31.1M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
31.1M
        return;
415
31.1M
    }
416
2.79M
    _Py_DECREF_STAT_INC();
417
2.79M
    if (--op->ob_refcnt == 0) {
418
1.32M
        _Py_Dealloc(op);
419
1.32M
    }
420
2.79M
}
setobject.c:Py_DECREF
Line
Count
Source
409
1.17M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.17M
    if (_Py_IsImmortal(op)) {
413
367k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
367k
        return;
415
367k
    }
416
809k
    _Py_DECREF_STAT_INC();
417
809k
    if (--op->ob_refcnt == 0) {
418
34.3k
        _Py_Dealloc(op);
419
34.3k
    }
420
809k
}
sliceobject.c:Py_DECREF
Line
Count
Source
409
146M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
146M
    if (_Py_IsImmortal(op)) {
413
134M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
134M
        return;
415
134M
    }
416
11.6M
    _Py_DECREF_STAT_INC();
417
11.6M
    if (--op->ob_refcnt == 0) {
418
1.10M
        _Py_Dealloc(op);
419
1.10M
    }
420
11.6M
}
structseq.c:Py_DECREF
Line
Count
Source
409
93.7k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
93.7k
    if (_Py_IsImmortal(op)) {
413
23.9k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
23.9k
        return;
415
23.9k
    }
416
69.7k
    _Py_DECREF_STAT_INC();
417
69.7k
    if (--op->ob_refcnt == 0) {
418
60.7k
        _Py_Dealloc(op);
419
60.7k
    }
420
69.7k
}
templateobject.c:Py_DECREF
Line
Count
Source
409
4
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4
    if (_Py_IsImmortal(op)) {
413
2
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2
        return;
415
2
    }
416
2
    _Py_DECREF_STAT_INC();
417
2
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
2
}
tupleobject.c:Py_DECREF
Line
Count
Source
409
904M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
904M
    if (_Py_IsImmortal(op)) {
413
536M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
536M
        return;
415
536M
    }
416
368M
    _Py_DECREF_STAT_INC();
417
368M
    if (--op->ob_refcnt == 0) {
418
101M
        _Py_Dealloc(op);
419
101M
    }
420
368M
}
typeobject.c:Py_DECREF
Line
Count
Source
409
365M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
365M
    if (_Py_IsImmortal(op)) {
413
43.1M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
43.1M
        return;
415
43.1M
    }
416
322M
    _Py_DECREF_STAT_INC();
417
322M
    if (--op->ob_refcnt == 0) {
418
15.5M
        _Py_Dealloc(op);
419
15.5M
    }
420
322M
}
Unexecuted instantiation: typevarobject.c:Py_DECREF
unicodeobject.c:Py_DECREF
Line
Count
Source
409
232M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
232M
    if (_Py_IsImmortal(op)) {
413
142M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
142M
        return;
415
142M
    }
416
90.1M
    _Py_DECREF_STAT_INC();
417
90.1M
    if (--op->ob_refcnt == 0) {
418
20.4M
        _Py_Dealloc(op);
419
20.4M
    }
420
90.1M
}
Unexecuted instantiation: unicodectype.c:Py_DECREF
unionobject.c:Py_DECREF
Line
Count
Source
409
950
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
950
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
950
    _Py_DECREF_STAT_INC();
417
950
    if (--op->ob_refcnt == 0) {
418
950
        _Py_Dealloc(op);
419
950
    }
420
950
}
weakrefobject.c:Py_DECREF
Line
Count
Source
409
12.2k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
12.2k
    if (_Py_IsImmortal(op)) {
413
6.41k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
6.41k
        return;
415
6.41k
    }
416
5.86k
    _Py_DECREF_STAT_INC();
417
5.86k
    if (--op->ob_refcnt == 0) {
418
5.55k
        _Py_Dealloc(op);
419
5.55k
    }
420
5.86k
}
_warnings.c:Py_DECREF
Line
Count
Source
409
156k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
156k
    if (_Py_IsImmortal(op)) {
413
40.6k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
40.6k
        return;
415
40.6k
    }
416
116k
    _Py_DECREF_STAT_INC();
417
116k
    if (--op->ob_refcnt == 0) {
418
32.1k
        _Py_Dealloc(op);
419
32.1k
    }
420
116k
}
bltinmodule.c:Py_DECREF
Line
Count
Source
409
136M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
136M
    if (_Py_IsImmortal(op)) {
413
77.9M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
77.9M
        return;
415
77.9M
    }
416
58.6M
    _Py_DECREF_STAT_INC();
417
58.6M
    if (--op->ob_refcnt == 0) {
418
33.8M
        _Py_Dealloc(op);
419
33.8M
    }
420
58.6M
}
ceval.c:Py_DECREF
Line
Count
Source
409
4.88k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.88k
    if (_Py_IsImmortal(op)) {
413
681
        _Py_DECREF_IMMORTAL_STAT_INC();
414
681
        return;
415
681
    }
416
4.20k
    _Py_DECREF_STAT_INC();
417
4.20k
    if (--op->ob_refcnt == 0) {
418
436
        _Py_Dealloc(op);
419
436
    }
420
4.20k
}
codecs.c:Py_DECREF
Line
Count
Source
409
6.58M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
6.58M
    if (_Py_IsImmortal(op)) {
413
2.25M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.25M
        return;
415
2.25M
    }
416
4.33M
    _Py_DECREF_STAT_INC();
417
4.33M
    if (--op->ob_refcnt == 0) {
418
2.06M
        _Py_Dealloc(op);
419
2.06M
    }
420
4.33M
}
codegen.c:Py_DECREF
Line
Count
Source
409
142k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
142k
    if (_Py_IsImmortal(op)) {
413
126k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
126k
        return;
415
126k
    }
416
15.9k
    _Py_DECREF_STAT_INC();
417
15.9k
    if (--op->ob_refcnt == 0) {
418
968
        _Py_Dealloc(op);
419
968
    }
420
15.9k
}
compile.c:Py_DECREF
Line
Count
Source
409
576k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
576k
    if (_Py_IsImmortal(op)) {
413
295k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
295k
        return;
415
295k
    }
416
281k
    _Py_DECREF_STAT_INC();
417
281k
    if (--op->ob_refcnt == 0) {
418
92.9k
        _Py_Dealloc(op);
419
92.9k
    }
420
281k
}
context.c:Py_DECREF
Line
Count
Source
409
32
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
32
    if (_Py_IsImmortal(op)) {
413
16
        _Py_DECREF_IMMORTAL_STAT_INC();
414
16
        return;
415
16
    }
416
16
    _Py_DECREF_STAT_INC();
417
16
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
16
}
errors.c:Py_DECREF
Line
Count
Source
409
83.0M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
83.0M
    if (_Py_IsImmortal(op)) {
413
32.7M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
32.7M
        return;
415
32.7M
    }
416
50.2M
    _Py_DECREF_STAT_INC();
417
50.2M
    if (--op->ob_refcnt == 0) {
418
11.1M
        _Py_Dealloc(op);
419
11.1M
    }
420
50.2M
}
flowgraph.c:Py_DECREF
Line
Count
Source
409
69.3k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
69.3k
    if (_Py_IsImmortal(op)) {
413
37.8k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
37.8k
        return;
415
37.8k
    }
416
31.4k
    _Py_DECREF_STAT_INC();
417
31.4k
    if (--op->ob_refcnt == 0) {
418
51
        _Py_Dealloc(op);
419
51
    }
420
31.4k
}
frame.c:Py_DECREF
Line
Count
Source
409
25.7M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
25.7M
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
25.7M
    _Py_DECREF_STAT_INC();
417
25.7M
    if (--op->ob_refcnt == 0) {
418
13.4M
        _Py_Dealloc(op);
419
13.4M
    }
420
25.7M
}
Unexecuted instantiation: future.c:Py_DECREF
gc.c:Py_DECREF
Line
Count
Source
409
703k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
703k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
703k
    _Py_DECREF_STAT_INC();
417
703k
    if (--op->ob_refcnt == 0) {
418
415k
        _Py_Dealloc(op);
419
415k
    }
420
703k
}
Unexecuted instantiation: gc_gil.c:Py_DECREF
getargs.c:Py_DECREF
Line
Count
Source
409
1.59M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.59M
    if (_Py_IsImmortal(op)) {
413
898k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
898k
        return;
415
898k
    }
416
701k
    _Py_DECREF_STAT_INC();
417
701k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
701k
}
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
409
166k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
166k
    if (_Py_IsImmortal(op)) {
413
13.0k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
13.0k
        return;
415
13.0k
    }
416
153k
    _Py_DECREF_STAT_INC();
417
153k
    if (--op->ob_refcnt == 0) {
418
11.4k
        _Py_Dealloc(op);
419
11.4k
    }
420
153k
}
importdl.c:Py_DECREF
Line
Count
Source
409
1.20k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.20k
    if (_Py_IsImmortal(op)) {
413
494
        _Py_DECREF_IMMORTAL_STAT_INC();
414
494
        return;
415
494
    }
416
710
    _Py_DECREF_STAT_INC();
417
710
    if (--op->ob_refcnt == 0) {
418
456
        _Py_Dealloc(op);
419
456
    }
420
710
}
initconfig.c:Py_DECREF
Line
Count
Source
409
2.20k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
2.20k
    if (_Py_IsImmortal(op)) {
413
1.77k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
1.77k
        return;
415
1.77k
    }
416
432
    _Py_DECREF_STAT_INC();
417
432
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
432
}
instrumentation.c:Py_DECREF
Line
Count
Source
409
384
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
384
    if (_Py_IsImmortal(op)) {
413
208
        _Py_DECREF_IMMORTAL_STAT_INC();
414
208
        return;
415
208
    }
416
176
    _Py_DECREF_STAT_INC();
417
176
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
176
}
instruction_sequence.c:Py_DECREF
Line
Count
Source
409
1
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
1
    _Py_DECREF_STAT_INC();
417
1
    if (--op->ob_refcnt == 0) {
418
1
        _Py_Dealloc(op);
419
1
    }
420
1
}
intrinsics.c:Py_DECREF
Line
Count
Source
409
28.6k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
28.6k
    if (_Py_IsImmortal(op)) {
413
16.3k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
16.3k
        return;
415
16.3k
    }
416
12.3k
    _Py_DECREF_STAT_INC();
417
12.3k
    if (--op->ob_refcnt == 0) {
418
124
        _Py_Dealloc(op);
419
124
    }
420
12.3k
}
Unexecuted instantiation: legacy_tracing.c:Py_DECREF
Unexecuted instantiation: lock.c:Py_DECREF
marshal.c:Py_DECREF
Line
Count
Source
409
317k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
317k
    if (_Py_IsImmortal(op)) {
413
138k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
138k
        return;
415
138k
    }
416
179k
    _Py_DECREF_STAT_INC();
417
179k
    if (--op->ob_refcnt == 0) {
418
2.46k
        _Py_Dealloc(op);
419
2.46k
    }
420
179k
}
modsupport.c:Py_DECREF
Line
Count
Source
409
17.7k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
17.7k
    if (_Py_IsImmortal(op)) {
413
11.7k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
11.7k
        return;
415
11.7k
    }
416
6.00k
    _Py_DECREF_STAT_INC();
417
6.00k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
6.00k
}
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
409
4.50M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.50M
    if (_Py_IsImmortal(op)) {
413
3.85M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
3.85M
        return;
415
3.85M
    }
416
658k
    _Py_DECREF_STAT_INC();
417
658k
    if (--op->ob_refcnt == 0) {
418
22.8k
        _Py_Dealloc(op);
419
22.8k
    }
420
658k
}
Unexecuted instantiation: pyctype.c:Py_DECREF
Unexecuted instantiation: pyhash.c:Py_DECREF
pylifecycle.c:Py_DECREF
Line
Count
Source
409
576
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
576
    if (_Py_IsImmortal(op)) {
413
112
        _Py_DECREF_IMMORTAL_STAT_INC();
414
112
        return;
415
112
    }
416
464
    _Py_DECREF_STAT_INC();
417
464
    if (--op->ob_refcnt == 0) {
418
48
        _Py_Dealloc(op);
419
48
    }
420
464
}
Unexecuted instantiation: pymath.c:Py_DECREF
Unexecuted instantiation: pystate.c:Py_DECREF
pythonrun.c:Py_DECREF
Line
Count
Source
409
190
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
190
    if (_Py_IsImmortal(op)) {
413
32
        _Py_DECREF_IMMORTAL_STAT_INC();
414
32
        return;
415
32
    }
416
158
    _Py_DECREF_STAT_INC();
417
158
    if (--op->ob_refcnt == 0) {
418
126
        _Py_Dealloc(op);
419
126
    }
420
158
}
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
409
526k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
526k
    if (_Py_IsImmortal(op)) {
413
82.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
82.2k
        return;
415
82.2k
    }
416
444k
    _Py_DECREF_STAT_INC();
417
444k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
444k
}
symtable.c:Py_DECREF
Line
Count
Source
409
754k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
754k
    if (_Py_IsImmortal(op)) {
413
344k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
344k
        return;
415
344k
    }
416
409k
    _Py_DECREF_STAT_INC();
417
409k
    if (--op->ob_refcnt == 0) {
418
193k
        _Py_Dealloc(op);
419
193k
    }
420
409k
}
sysmodule.c:Py_DECREF
Line
Count
Source
409
1.90k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.90k
    if (_Py_IsImmortal(op)) {
413
1.02k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
1.02k
        return;
415
1.02k
    }
416
880
    _Py_DECREF_STAT_INC();
417
880
    if (--op->ob_refcnt == 0) {
418
64
        _Py_Dealloc(op);
419
64
    }
420
880
}
Unexecuted instantiation: thread.c:Py_DECREF
traceback.c:Py_DECREF
Line
Count
Source
409
71.0M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
71.0M
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
71.0M
    _Py_DECREF_STAT_INC();
417
71.0M
    if (--op->ob_refcnt == 0) {
418
13.3M
        _Py_Dealloc(op);
419
13.3M
    }
420
71.0M
}
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
409
256
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
256
    if (_Py_IsImmortal(op)) {
413
192
        _Py_DECREF_IMMORTAL_STAT_INC();
414
192
        return;
415
192
    }
416
64
    _Py_DECREF_STAT_INC();
417
64
    if (--op->ob_refcnt == 0) {
418
64
        _Py_Dealloc(op);
419
64
    }
420
64
}
fileutils.c:Py_DECREF
Line
Count
Source
409
11.6k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
11.6k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
11.6k
    _Py_DECREF_STAT_INC();
417
11.6k
    if (--op->ob_refcnt == 0) {
418
11.6k
        _Py_Dealloc(op);
419
11.6k
    }
420
11.6k
}
Unexecuted instantiation: suggestions.c:Py_DECREF
Unexecuted instantiation: perf_trampoline.c:Py_DECREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_DECREF
Unexecuted instantiation: remote_debugging.c:Py_DECREF
Unexecuted instantiation: dynload_shlib.c:Py_DECREF
Unexecuted instantiation: config.c:Py_DECREF
Unexecuted instantiation: gcmodule.c:Py_DECREF
Unexecuted instantiation: _asynciomodule.c:Py_DECREF
Unexecuted instantiation: atexitmodule.c:Py_DECREF
Unexecuted instantiation: faulthandler.c:Py_DECREF
posixmodule.c:Py_DECREF
Line
Count
Source
409
50.6k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
50.6k
    if (_Py_IsImmortal(op)) {
413
2.59k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.59k
        return;
415
2.59k
    }
416
48.0k
    _Py_DECREF_STAT_INC();
417
48.0k
    if (--op->ob_refcnt == 0) {
418
33.5k
        _Py_Dealloc(op);
419
33.5k
    }
420
48.0k
}
signalmodule.c:Py_DECREF
Line
Count
Source
409
32
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
32
    if (_Py_IsImmortal(op)) {
413
16
        _Py_DECREF_IMMORTAL_STAT_INC();
414
16
        return;
415
16
    }
416
16
    _Py_DECREF_STAT_INC();
417
16
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
16
}
Unexecuted instantiation: _tracemalloc.c:Py_DECREF
Unexecuted instantiation: _suggestions.c:Py_DECREF
_datetimemodule.c:Py_DECREF
Line
Count
Source
409
262
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
262
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
262
    _Py_DECREF_STAT_INC();
417
262
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
262
}
Unexecuted instantiation: _codecsmodule.c:Py_DECREF
_collectionsmodule.c:Py_DECREF
Line
Count
Source
409
103k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
103k
    if (_Py_IsImmortal(op)) {
413
44.3k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
44.3k
        return;
415
44.3k
    }
416
59.5k
    _Py_DECREF_STAT_INC();
417
59.5k
    if (--op->ob_refcnt == 0) {
418
43.4k
        _Py_Dealloc(op);
419
43.4k
    }
420
59.5k
}
_iomodule.c:Py_DECREF
Line
Count
Source
409
6.37k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
6.37k
    if (_Py_IsImmortal(op)) {
413
2.16k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.16k
        return;
415
2.16k
    }
416
4.20k
    _Py_DECREF_STAT_INC();
417
4.20k
    if (--op->ob_refcnt == 0) {
418
2.10k
        _Py_Dealloc(op);
419
2.10k
    }
420
4.20k
}
iobase.c:Py_DECREF
Line
Count
Source
409
120k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
120k
    if (_Py_IsImmortal(op)) {
413
101k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
101k
        return;
415
101k
    }
416
18.9k
    _Py_DECREF_STAT_INC();
417
18.9k
    if (--op->ob_refcnt == 0) {
418
9.46k
        _Py_Dealloc(op);
419
9.46k
    }
420
18.9k
}
fileio.c:Py_DECREF
Line
Count
Source
409
3.49k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
3.49k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
3.49k
    _Py_DECREF_STAT_INC();
417
3.49k
    if (--op->ob_refcnt == 0) {
418
2.24k
        _Py_Dealloc(op);
419
2.24k
    }
420
3.49k
}
bytesio.c:Py_DECREF
Line
Count
Source
409
28.3k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
28.3k
    if (_Py_IsImmortal(op)) {
413
9.48k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
9.48k
        return;
415
9.48k
    }
416
18.9k
    _Py_DECREF_STAT_INC();
417
18.9k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
18.9k
}
bufferedio.c:Py_DECREF
Line
Count
Source
409
7.19k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
7.19k
    if (_Py_IsImmortal(op)) {
413
2.08k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.08k
        return;
415
2.08k
    }
416
5.11k
    _Py_DECREF_STAT_INC();
417
5.11k
    if (--op->ob_refcnt == 0) {
418
2.05k
        _Py_Dealloc(op);
419
2.05k
    }
420
5.11k
}
textio.c:Py_DECREF
Line
Count
Source
409
48.6k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
48.6k
    if (_Py_IsImmortal(op)) {
413
32.4k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
32.4k
        return;
415
32.4k
    }
416
16.2k
    _Py_DECREF_STAT_INC();
417
16.2k
    if (--op->ob_refcnt == 0) {
418
16
        _Py_Dealloc(op);
419
16
    }
420
16.2k
}
stringio.c:Py_DECREF
Line
Count
Source
409
295k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
295k
    if (_Py_IsImmortal(op)) {
413
154k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
154k
        return;
415
154k
    }
416
141k
    _Py_DECREF_STAT_INC();
417
141k
    if (--op->ob_refcnt == 0) {
418
32.1k
        _Py_Dealloc(op);
419
32.1k
    }
420
141k
}
itertoolsmodule.c:Py_DECREF
Line
Count
Source
409
928
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
928
    if (_Py_IsImmortal(op)) {
413
178
        _Py_DECREF_IMMORTAL_STAT_INC();
414
178
        return;
415
178
    }
416
750
    _Py_DECREF_STAT_INC();
417
750
    if (--op->ob_refcnt == 0) {
418
228
        _Py_Dealloc(op);
419
228
    }
420
750
}
sre.c:Py_DECREF
Line
Count
Source
409
491M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
491M
    if (_Py_IsImmortal(op)) {
413
110M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
110M
        return;
415
110M
    }
416
381M
    _Py_DECREF_STAT_INC();
417
381M
    if (--op->ob_refcnt == 0) {
418
7.80M
        _Py_Dealloc(op);
419
7.80M
    }
420
381M
}
Unexecuted instantiation: _sysconfig.c:Py_DECREF
_threadmodule.c:Py_DECREF
Line
Count
Source
409
5.19k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
5.19k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
5.19k
    _Py_DECREF_STAT_INC();
417
5.19k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
5.19k
}
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
409
29.2k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
29.2k
    if (_Py_IsImmortal(op)) {
413
10.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
10.2k
        return;
415
10.2k
    }
416
18.9k
    _Py_DECREF_STAT_INC();
417
18.9k
    if (--op->ob_refcnt == 0) {
418
2.54k
        _Py_Dealloc(op);
419
2.54k
    }
420
18.9k
}
_functoolsmodule.c:Py_DECREF
Line
Count
Source
409
251
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
251
    if (_Py_IsImmortal(op)) {
413
39
        _Py_DECREF_IMMORTAL_STAT_INC();
414
39
        return;
415
39
    }
416
212
    _Py_DECREF_STAT_INC();
417
212
    if (--op->ob_refcnt == 0) {
418
70
        _Py_Dealloc(op);
419
70
    }
420
212
}
Unexecuted instantiation: _localemodule.c:Py_DECREF
Unexecuted instantiation: _opcode.c:Py_DECREF
_operator.c:Py_DECREF
Line
Count
Source
409
543k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
543k
    if (_Py_IsImmortal(op)) {
413
271k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
271k
        return;
415
271k
    }
416
271k
    _Py_DECREF_STAT_INC();
417
271k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
271k
}
Unexecuted instantiation: symtablemodule.c:Py_DECREF
Unexecuted instantiation: pwdmodule.c:Py_DECREF
getpath.c:Py_DECREF
Line
Count
Source
409
528
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
528
    if (_Py_IsImmortal(op)) {
413
192
        _Py_DECREF_IMMORTAL_STAT_INC();
414
192
        return;
415
192
    }
416
336
    _Py_DECREF_STAT_INC();
417
336
    if (--op->ob_refcnt == 0) {
418
16
        _Py_Dealloc(op);
419
16
    }
420
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
409
21.0k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
21.0k
    if (_Py_IsImmortal(op)) {
413
515
        _Py_DECREF_IMMORTAL_STAT_INC();
414
515
        return;
415
515
    }
416
20.5k
    _Py_DECREF_STAT_INC();
417
20.5k
    if (--op->ob_refcnt == 0) {
418
14.9k
        _Py_Dealloc(op);
419
14.9k
    }
420
20.5k
}
Unexecuted instantiation: myreadline.c:Py_DECREF
abstract.c:Py_DECREF
Line
Count
Source
409
427M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
427M
    if (_Py_IsImmortal(op)) {
413
345M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
345M
        return;
415
345M
    }
416
82.3M
    _Py_DECREF_STAT_INC();
417
82.3M
    if (--op->ob_refcnt == 0) {
418
1.55M
        _Py_Dealloc(op);
419
1.55M
    }
420
82.3M
}
Unexecuted instantiation: boolobject.c:Py_DECREF
Unexecuted instantiation: bytes_methods.c:Py_DECREF
bytearrayobject.c:Py_DECREF
Line
Count
Source
409
16
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
16
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
16
    _Py_DECREF_STAT_INC();
417
16
    if (--op->ob_refcnt == 0) {
418
16
        _Py_Dealloc(op);
419
16
    }
420
16
}
capsule.c:Py_DECREF
Line
Count
Source
409
10
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
10
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
10
    _Py_DECREF_STAT_INC();
417
10
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
10
}
cellobject.c:Py_DECREF
Line
Count
Source
409
324k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
324k
    if (_Py_IsImmortal(op)) {
413
27.6k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
27.6k
        return;
415
27.6k
    }
416
297k
    _Py_DECREF_STAT_INC();
417
297k
    if (--op->ob_refcnt == 0) {
418
198k
        _Py_Dealloc(op);
419
198k
    }
420
297k
}
classobject.c:Py_DECREF
Line
Count
Source
409
46.7M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
46.7M
    if (_Py_IsImmortal(op)) {
413
2
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2
        return;
415
2
    }
416
46.7M
    _Py_DECREF_STAT_INC();
417
46.7M
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
46.7M
}
codeobject.c:Py_DECREF
Line
Count
Source
409
104k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
104k
    if (_Py_IsImmortal(op)) {
413
41.4k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
41.4k
        return;
415
41.4k
    }
416
63.0k
    _Py_DECREF_STAT_INC();
417
63.0k
    if (--op->ob_refcnt == 0) {
418
30.1k
        _Py_Dealloc(op);
419
30.1k
    }
420
63.0k
}
Unexecuted instantiation: complexobject.c:Py_DECREF
descrobject.c:Py_DECREF
Line
Count
Source
409
104M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
104M
    if (_Py_IsImmortal(op)) {
413
10.0M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
10.0M
        return;
415
10.0M
    }
416
93.9M
    _Py_DECREF_STAT_INC();
417
93.9M
    if (--op->ob_refcnt == 0) {
418
64.8M
        _Py_Dealloc(op);
419
64.8M
    }
420
93.9M
}
enumobject.c:Py_DECREF
Line
Count
Source
409
288M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
288M
    if (_Py_IsImmortal(op)) {
413
117M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
117M
        return;
415
117M
    }
416
171M
    _Py_DECREF_STAT_INC();
417
171M
    if (--op->ob_refcnt == 0) {
418
53.7M
        _Py_Dealloc(op);
419
53.7M
    }
420
171M
}
genobject.c:Py_DECREF
Line
Count
Source
409
54.4M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
54.4M
    if (_Py_IsImmortal(op)) {
413
54.3M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
54.3M
        return;
415
54.3M
    }
416
82.5k
    _Py_DECREF_STAT_INC();
417
82.5k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
82.5k
}
fileobject.c:Py_DECREF
Line
Count
Source
409
12.7k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
12.7k
    if (_Py_IsImmortal(op)) {
413
11.7k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
11.7k
        return;
415
11.7k
    }
416
1.00k
    _Py_DECREF_STAT_INC();
417
1.00k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
1.00k
}
frameobject.c:Py_DECREF
Line
Count
Source
409
12.2M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
12.2M
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
12.2M
    _Py_DECREF_STAT_INC();
417
12.2M
    if (--op->ob_refcnt == 0) {
418
22.7k
        _Py_Dealloc(op);
419
22.7k
    }
420
12.2M
}
funcobject.c:Py_DECREF
Line
Count
Source
409
121M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
121M
    if (_Py_IsImmortal(op)) {
413
69.3M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
69.3M
        return;
415
69.3M
    }
416
52.3M
    _Py_DECREF_STAT_INC();
417
52.3M
    if (--op->ob_refcnt == 0) {
418
395k
        _Py_Dealloc(op);
419
395k
    }
420
52.3M
}
interpolationobject.c:Py_DECREF
Line
Count
Source
409
16
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
16
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
16
    _Py_DECREF_STAT_INC();
417
16
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
16
}
iterobject.c:Py_DECREF
Line
Count
Source
409
1.07M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.07M
    if (_Py_IsImmortal(op)) {
413
713k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
713k
        return;
415
713k
    }
416
357k
    _Py_DECREF_STAT_INC();
417
357k
    if (--op->ob_refcnt == 0) {
418
356k
        _Py_Dealloc(op);
419
356k
    }
420
357k
}
odictobject.c:Py_DECREF
Line
Count
Source
409
672
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
672
    if (_Py_IsImmortal(op)) {
413
400
        _Py_DECREF_IMMORTAL_STAT_INC();
414
400
        return;
415
400
    }
416
272
    _Py_DECREF_STAT_INC();
417
272
    if (--op->ob_refcnt == 0) {
418
160
        _Py_Dealloc(op);
419
160
    }
420
272
}
methodobject.c:Py_DECREF
Line
Count
Source
409
323M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
323M
    if (_Py_IsImmortal(op)) {
413
4.90M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
4.90M
        return;
415
4.90M
    }
416
318M
    _Py_DECREF_STAT_INC();
417
318M
    if (--op->ob_refcnt == 0) {
418
251M
        _Py_Dealloc(op);
419
251M
    }
420
318M
}
namespaceobject.c:Py_DECREF
Line
Count
Source
409
16
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
16
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
16
    _Py_DECREF_STAT_INC();
417
16
    if (--op->ob_refcnt == 0) {
418
16
        _Py_Dealloc(op);
419
16
    }
420
16
}
Unexecuted instantiation: _contextvars.c:Py_DECREF
Python-ast.c:Py_DECREF
Line
Count
Source
409
4.01M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.01M
    if (_Py_IsImmortal(op)) {
413
1.79M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
1.79M
        return;
415
1.79M
    }
416
2.22M
    _Py_DECREF_STAT_INC();
417
2.22M
    if (--op->ob_refcnt == 0) {
418
501k
        _Py_Dealloc(op);
419
501k
    }
420
2.22M
}
Unexecuted instantiation: Python-tokenize.c:Py_DECREF
Unexecuted instantiation: asdl.c:Py_DECREF
assemble.c:Py_DECREF
Line
Count
Source
409
45.7k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
45.7k
    if (_Py_IsImmortal(op)) {
413
7.85k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
7.85k
        return;
415
7.85k
    }
416
37.9k
    _Py_DECREF_STAT_INC();
417
37.9k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
37.9k
}
Unexecuted instantiation: ast.c:Py_DECREF
ast_preprocess.c:Py_DECREF
Line
Count
Source
409
2.27k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
2.27k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
2.27k
    _Py_DECREF_STAT_INC();
417
2.27k
    if (--op->ob_refcnt == 0) {
418
2.27k
        _Py_Dealloc(op);
419
2.27k
    }
420
2.27k
}
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
409
592
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
592
    if (_Py_IsImmortal(op)) {
413
380
        _Py_DECREF_IMMORTAL_STAT_INC();
414
380
        return;
415
380
    }
416
212
    _Py_DECREF_STAT_INC();
417
212
    if (--op->ob_refcnt == 0) {
418
28
        _Py_Dealloc(op);
419
28
    }
420
212
}
pegen.c:Py_DECREF
Line
Count
Source
409
133k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
133k
    if (_Py_IsImmortal(op)) {
413
46.9k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
46.9k
        return;
415
46.9k
    }
416
86.1k
    _Py_DECREF_STAT_INC();
417
86.1k
    if (--op->ob_refcnt == 0) {
418
68.8k
        _Py_Dealloc(op);
419
68.8k
    }
420
86.1k
}
pegen_errors.c:Py_DECREF
Line
Count
Source
409
49.8k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
49.8k
    if (_Py_IsImmortal(op)) {
413
3.77k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
3.77k
        return;
415
3.77k
    }
416
46.0k
    _Py_DECREF_STAT_INC();
417
46.0k
    if (--op->ob_refcnt == 0) {
418
5.90k
        _Py_Dealloc(op);
419
5.90k
    }
420
46.0k
}
Unexecuted instantiation: parser.c:Py_DECREF
Unexecuted instantiation: buffer.c:Py_DECREF
lexer.c:Py_DECREF
Line
Count
Source
409
13.6k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
13.6k
    if (_Py_IsImmortal(op)) {
413
690
        _Py_DECREF_IMMORTAL_STAT_INC();
414
690
        return;
415
690
    }
416
12.9k
    _Py_DECREF_STAT_INC();
417
12.9k
    if (--op->ob_refcnt == 0) {
418
12.9k
        _Py_Dealloc(op);
419
12.9k
    }
420
12.9k
}
state.c:Py_DECREF
Line
Count
Source
409
23.7k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
23.7k
    if (_Py_IsImmortal(op)) {
413
151
        _Py_DECREF_IMMORTAL_STAT_INC();
414
151
        return;
415
151
    }
416
23.5k
    _Py_DECREF_STAT_INC();
417
23.5k
    if (--op->ob_refcnt == 0) {
418
2.57k
        _Py_Dealloc(op);
419
2.57k
    }
420
23.5k
}
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
409
41.6k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
41.6k
    if (_Py_IsImmortal(op)) {
413
2.54k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.54k
        return;
415
2.54k
    }
416
39.0k
    _Py_DECREF_STAT_INC();
417
39.0k
    if (--op->ob_refcnt == 0) {
418
39.0k
        _Py_Dealloc(op);
419
39.0k
    }
420
39.0k
}
421
7.28G
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
422
#endif
423
424
425
/* Safely decref `op` and set `op` to NULL, especially useful in tp_clear
426
 * and tp_dealloc implementations.
427
 *
428
 * Note that "the obvious" code can be deadly:
429
 *
430
 *     Py_XDECREF(op);
431
 *     op = NULL;
432
 *
433
 * Typically, `op` is something like self->containee, and `self` is done
434
 * using its `containee` member.  In the code sequence above, suppose
435
 * `containee` is non-NULL with a refcount of 1.  Its refcount falls to
436
 * 0 on the first line, which can trigger an arbitrary amount of code,
437
 * possibly including finalizers (like __del__ methods or weakref callbacks)
438
 * coded in Python, which in turn can release the GIL and allow other threads
439
 * to run, etc.  Such code may even invoke methods of `self` again, or cause
440
 * cyclic gc to trigger, but-- oops! --self->containee still points to the
441
 * object being torn down, and it may be in an insane state while being torn
442
 * down.  This has in fact been a rich historic source of miserable (rare &
443
 * hard-to-diagnose) segfaulting (and other) bugs.
444
 *
445
 * The safe way is:
446
 *
447
 *      Py_CLEAR(op);
448
 *
449
 * That arranges to set `op` to NULL _before_ decref'ing, so that any code
450
 * triggered as a side-effect of `op` getting torn down no longer believes
451
 * `op` points to a valid object.
452
 *
453
 * There are cases where it's safe to use the naive code, but they're brittle.
454
 * For example, if `op` points to a Python integer, you know that destroying
455
 * one of those can't cause problems -- but in part that relies on that
456
 * Python integers aren't currently weakly referencable.  Best practice is
457
 * to use Py_CLEAR() even if you can't think of a reason for why you need to.
458
 *
459
 * gh-98724: Use a temporary variable to only evaluate the macro argument once,
460
 * to avoid the duplication of side effects if the argument has side effects.
461
 *
462
 * gh-99701: If the PyObject* type is used with casting arguments to PyObject*,
463
 * the code can be miscompiled with strict aliasing because of type punning.
464
 * With strict aliasing, a compiler considers that two pointers of different
465
 * types cannot read or write the same memory which enables optimization
466
 * opportunities.
467
 *
468
 * If available, use _Py_TYPEOF() to use the 'op' type for temporary variables,
469
 * and so avoid type punning. Otherwise, use memcpy() which causes type erasure
470
 * and so prevents the compiler to reuse an old cached 'op' value after
471
 * Py_CLEAR().
472
 */
473
#ifdef _Py_TYPEOF
474
#define Py_CLEAR(op) \
475
1.51G
    do { \
476
1.51G
        _Py_TYPEOF(op)* _tmp_op_ptr = &(op); \
477
1.51G
        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
478
1.51G
        if (_tmp_old_op != NULL) { \
479
449M
            *_tmp_op_ptr = _Py_NULL; \
480
449M
            Py_DECREF(_tmp_old_op); \
481
449M
        } \
482
1.51G
    } while (0)
483
#else
484
#define Py_CLEAR(op) \
485
    do { \
486
        PyObject **_tmp_op_ptr = _Py_CAST(PyObject**, &(op)); \
487
        PyObject *_tmp_old_op = (*_tmp_op_ptr); \
488
        if (_tmp_old_op != NULL) { \
489
            PyObject *_null_ptr = _Py_NULL; \
490
            memcpy(_tmp_op_ptr, &_null_ptr, sizeof(PyObject*)); \
491
            Py_DECREF(_tmp_old_op); \
492
        } \
493
    } while (0)
494
#endif
495
496
497
/* Function to use in case the object pointer can be NULL: */
498
static inline void Py_XINCREF(PyObject *op)
499
1.72G
{
500
1.72G
    if (op != _Py_NULL) {
501
747M
        Py_INCREF(op);
502
747M
    }
503
1.72G
}
Unexecuted instantiation: bytesobject.c:Py_XINCREF
Unexecuted instantiation: call.c:Py_XINCREF
exceptions.c:Py_XINCREF
Line
Count
Source
499
68.2M
{
500
68.2M
    if (op != _Py_NULL) {
501
1.40M
        Py_INCREF(op);
502
1.40M
    }
503
68.2M
}
Unexecuted instantiation: genericaliasobject.c:Py_XINCREF
Unexecuted instantiation: floatobject.c:Py_XINCREF
listobject.c:Py_XINCREF
Line
Count
Source
499
1.00M
{
500
1.00M
    if (op != _Py_NULL) {
501
1.00M
        Py_INCREF(op);
502
1.00M
    }
503
1.00M
}
Unexecuted instantiation: longobject.c:Py_XINCREF
dictobject.c:Py_XINCREF
Line
Count
Source
499
639M
{
500
639M
    if (op != _Py_NULL) {
501
225M
        Py_INCREF(op);
502
225M
    }
503
639M
}
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
499
44.7M
{
500
44.7M
    if (op != _Py_NULL) {
501
44.4M
        Py_INCREF(op);
502
44.4M
    }
503
44.7M
}
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
499
312k
{
500
312k
    if (op != _Py_NULL) {
501
6.34k
        Py_INCREF(op);
502
6.34k
    }
503
312k
}
Unexecuted instantiation: _warnings.c:Py_XINCREF
bltinmodule.c:Py_XINCREF
Line
Count
Source
499
317
{
500
317
    if (op != _Py_NULL) {
501
317
        Py_INCREF(op);
502
317
    }
503
317
}
ceval.c:Py_XINCREF
Line
Count
Source
499
216M
{
500
216M
    if (op != _Py_NULL) {
501
76.1M
        Py_INCREF(op);
502
76.1M
    }
503
216M
}
Unexecuted instantiation: codecs.c:Py_XINCREF
Unexecuted instantiation: codegen.c:Py_XINCREF
compile.c:Py_XINCREF
Line
Count
Source
499
9.35k
{
500
9.35k
    if (op != _Py_NULL) {
501
4.31k
        Py_INCREF(op);
502
4.31k
    }
503
9.35k
}
context.c:Py_XINCREF
Line
Count
Source
499
15.9k
{
500
15.9k
    if (op != _Py_NULL) {
501
0
        Py_INCREF(op);
502
0
    }
503
15.9k
}
errors.c:Py_XINCREF
Line
Count
Source
499
33.2M
{
500
33.2M
    if (op != _Py_NULL) {
501
33.1M
        Py_INCREF(op);
502
33.1M
    }
503
33.2M
}
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
499
2.68k
{
500
2.68k
    if (op != _Py_NULL) {
501
1.36k
        Py_INCREF(op);
502
1.36k
    }
503
2.68k
}
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
499
2.27k
{
500
2.27k
    if (op != _Py_NULL) {
501
2.27k
        Py_INCREF(op);
502
2.27k
    }
503
2.27k
}
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
499
16
{
500
16
    if (op != _Py_NULL) {
501
16
        Py_INCREF(op);
502
16
    }
503
16
}
Unexecuted instantiation: thread.c:Py_XINCREF
traceback.c:Py_XINCREF
Line
Count
Source
499
68.7M
{
500
68.7M
    if (op != _Py_NULL) {
501
35.5M
        Py_INCREF(op);
502
35.5M
    }
503
68.7M
}
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: _asynciomodule.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
_datetimemodule.c:Py_XINCREF
Line
Count
Source
499
32
{
500
32
    if (op != _Py_NULL) {
501
0
        Py_INCREF(op);
502
0
    }
503
32
}
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
499
1.00k
{
500
1.00k
    if (op != _Py_NULL) {
501
1.00k
        Py_INCREF(op);
502
1.00k
    }
503
1.00k
}
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
499
608
{
500
608
    if (op != _Py_NULL) {
501
608
        Py_INCREF(op);
502
608
    }
503
608
}
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
499
48
{
500
48
    if (op != _Py_NULL) {
501
48
        Py_INCREF(op);
502
48
    }
503
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
499
13.7M
{
500
13.7M
    if (op != _Py_NULL) {
501
13.3M
        Py_INCREF(op);
502
13.3M
    }
503
13.7M
}
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
499
6.38M
{
500
6.38M
    if (op != _Py_NULL) {
501
70.1k
        Py_INCREF(op);
502
70.1k
    }
503
6.38M
}
Unexecuted instantiation: classobject.c:Py_XINCREF
codeobject.c:Py_XINCREF
Line
Count
Source
499
6.16k
{
500
6.16k
    if (op != _Py_NULL) {
501
6.16k
        Py_INCREF(op);
502
6.16k
    }
503
6.16k
}
Unexecuted instantiation: complexobject.c:Py_XINCREF
descrobject.c:Py_XINCREF
Line
Count
Source
499
45.5k
{
500
45.5k
    if (op != _Py_NULL) {
501
43.5k
        Py_INCREF(op);
502
43.5k
    }
503
45.5k
}
Unexecuted instantiation: enumobject.c:Py_XINCREF
genobject.c:Py_XINCREF
Line
Count
Source
499
3.74k
{
500
3.74k
    if (op != _Py_NULL) {
501
0
        Py_INCREF(op);
502
0
    }
503
3.74k
}
Unexecuted instantiation: fileobject.c:Py_XINCREF
Unexecuted instantiation: frameobject.c:Py_XINCREF
funcobject.c:Py_XINCREF
Line
Count
Source
499
3.36k
{
500
3.36k
    if (op != _Py_NULL) {
501
12
        Py_INCREF(op);
502
12
    }
503
3.36k
}
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
499
634M
{
500
634M
    if (op != _Py_NULL) {
501
317M
        Py_INCREF(op);
502
317M
    }
503
634M
}
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
499
7.20k
{
500
7.20k
    if (op != _Py_NULL) {
501
7.20k
        Py_INCREF(op);
502
7.20k
    }
503
7.20k
}
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
504
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
505
1.72G
#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
506
#endif
507
508
static inline void Py_XDECREF(PyObject *op)
509
4.82G
{
510
4.82G
    if (op != _Py_NULL) {
511
3.84G
        Py_DECREF(op);
512
3.84G
    }
513
4.82G
}
bytesobject.c:Py_XDECREF
Line
Count
Source
509
52
{
510
52
    if (op != _Py_NULL) {
511
16
        Py_DECREF(op);
512
16
    }
513
52
}
Unexecuted instantiation: call.c:Py_XDECREF
exceptions.c:Py_XDECREF
Line
Count
Source
509
54.7M
{
510
54.7M
    if (op != _Py_NULL) {
511
20.3M
        Py_DECREF(op);
512
20.3M
    }
513
54.7M
}
genericaliasobject.c:Py_XDECREF
Line
Count
Source
509
132
{
510
132
    if (op != _Py_NULL) {
511
88
        Py_DECREF(op);
512
88
    }
513
132
}
floatobject.c:Py_XDECREF
Line
Count
Source
509
553k
{
510
553k
    if (op != _Py_NULL) {
511
8
        Py_DECREF(op);
512
8
    }
513
553k
}
listobject.c:Py_XDECREF
Line
Count
Source
509
1.54G
{
510
1.54G
    if (op != _Py_NULL) {
511
1.50G
        Py_DECREF(op);
512
1.50G
    }
513
1.54G
}
longobject.c:Py_XDECREF
Line
Count
Source
509
1.23k
{
510
1.23k
    if (op != _Py_NULL) {
511
416
        Py_DECREF(op);
512
416
    }
513
1.23k
}
dictobject.c:Py_XDECREF
Line
Count
Source
509
763M
{
510
763M
    if (op != _Py_NULL) {
511
756M
        Py_DECREF(op);
512
756M
    }
513
763M
}
Unexecuted instantiation: memoryobject.c:Py_XDECREF
moduleobject.c:Py_XDECREF
Line
Count
Source
509
2.16k
{
510
2.16k
    if (op != _Py_NULL) {
511
505
        Py_DECREF(op);
512
505
    }
513
2.16k
}
object.c:Py_XDECREF
Line
Count
Source
509
33.9k
{
510
33.9k
    if (op != _Py_NULL) {
511
369
        Py_DECREF(op);
512
369
    }
513
33.9k
}
Unexecuted instantiation: obmalloc.c:Py_XDECREF
Unexecuted instantiation: picklebufobject.c:Py_XDECREF
rangeobject.c:Py_XDECREF
Line
Count
Source
509
48
{
510
48
    if (op != _Py_NULL) {
511
48
        Py_DECREF(op);
512
48
    }
513
48
}
setobject.c:Py_XDECREF
Line
Count
Source
509
272k
{
510
272k
    if (op != _Py_NULL) {
511
16
        Py_DECREF(op);
512
16
    }
513
272k
}
Unexecuted instantiation: sliceobject.c:Py_XDECREF
structseq.c:Py_XDECREF
Line
Count
Source
509
87.9k
{
510
87.9k
    if (op != _Py_NULL) {
511
87.9k
        Py_DECREF(op);
512
87.9k
    }
513
87.9k
}
Unexecuted instantiation: templateobject.c:Py_XDECREF
tupleobject.c:Py_XDECREF
Line
Count
Source
509
902M
{
510
902M
    if (op != _Py_NULL) {
511
900M
        Py_DECREF(op);
512
900M
    }
513
902M
}
typeobject.c:Py_XDECREF
Line
Count
Source
509
18.3M
{
510
18.3M
    if (op != _Py_NULL) {
511
14.4M
        Py_DECREF(op);
512
14.4M
    }
513
18.3M
}
Unexecuted instantiation: typevarobject.c:Py_XDECREF
unicodeobject.c:Py_XDECREF
Line
Count
Source
509
87.3M
{
510
87.3M
    if (op != _Py_NULL) {
511
64.2M
        Py_DECREF(op);
512
64.2M
    }
513
87.3M
}
Unexecuted instantiation: unicodectype.c:Py_XDECREF
unionobject.c:Py_XDECREF
Line
Count
Source
509
511
{
510
511
    if (op != _Py_NULL) {
511
24
        Py_DECREF(op);
512
24
    }
513
511
}
weakrefobject.c:Py_XDECREF
Line
Count
Source
509
306k
{
510
306k
    if (op != _Py_NULL) {
511
172
        Py_DECREF(op);
512
172
    }
513
306k
}
_warnings.c:Py_XDECREF
Line
Count
Source
509
81.7k
{
510
81.7k
    if (op != _Py_NULL) {
511
81.7k
        Py_DECREF(op);
512
81.7k
    }
513
81.7k
}
bltinmodule.c:Py_XDECREF
Line
Count
Source
509
7.41M
{
510
7.41M
    if (op != _Py_NULL) {
511
706k
        Py_DECREF(op);
512
706k
    }
513
7.41M
}
ceval.c:Py_XDECREF
Line
Count
Source
509
261k
{
510
261k
    if (op != _Py_NULL) {
511
4.88k
        Py_DECREF(op);
512
4.88k
    }
513
261k
}
codecs.c:Py_XDECREF
Line
Count
Source
509
161k
{
510
161k
    if (op != _Py_NULL) {
511
107k
        Py_DECREF(op);
512
107k
    }
513
161k
}
Unexecuted instantiation: codegen.c:Py_XDECREF
compile.c:Py_XDECREF
Line
Count
Source
509
26.3k
{
510
26.3k
    if (op != _Py_NULL) {
511
7.69k
        Py_DECREF(op);
512
7.69k
    }
513
26.3k
}
Unexecuted instantiation: context.c:Py_XDECREF
errors.c:Py_XDECREF
Line
Count
Source
509
173M
{
510
173M
    if (op != _Py_NULL) {
511
28.3M
        Py_DECREF(op);
512
28.3M
    }
513
173M
}
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
509
120k
{
510
120k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
120k
}
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
509
93.6k
{
510
93.6k
    if (op != _Py_NULL) {
511
70.5k
        Py_DECREF(op);
512
70.5k
    }
513
93.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
509
13.0k
{
510
13.0k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
13.0k
}
intrinsics.c:Py_XDECREF
Line
Count
Source
509
13.6k
{
510
13.6k
    if (op != _Py_NULL) {
511
13.6k
        Py_DECREF(op);
512
13.6k
    }
513
13.6k
}
Unexecuted instantiation: legacy_tracing.c:Py_XDECREF
Unexecuted instantiation: lock.c:Py_XDECREF
marshal.c:Py_XDECREF
Line
Count
Source
509
307k
{
510
307k
    if (op != _Py_NULL) {
511
307k
        Py_DECREF(op);
512
307k
    }
513
307k
}
modsupport.c:Py_XDECREF
Line
Count
Source
509
6.72k
{
510
6.72k
    if (op != _Py_NULL) {
511
6.72k
        Py_DECREF(op);
512
6.72k
    }
513
6.72k
}
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
509
96
{
510
96
    if (op != _Py_NULL) {
511
96
        Py_DECREF(op);
512
96
    }
513
96
}
Unexecuted instantiation: pymath.c:Py_XDECREF
Unexecuted instantiation: pystate.c:Py_XDECREF
pythonrun.c:Py_XDECREF
Line
Count
Source
509
126
{
510
126
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
126
}
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
509
983k
{
510
983k
    if (op != _Py_NULL) {
511
526k
        Py_DECREF(op);
512
526k
    }
513
983k
}
symtable.c:Py_XDECREF
Line
Count
Source
509
159k
{
510
159k
    if (op != _Py_NULL) {
511
125k
        Py_DECREF(op);
512
125k
    }
513
159k
}
sysmodule.c:Py_XDECREF
Line
Count
Source
509
720
{
510
720
    if (op != _Py_NULL) {
511
384
        Py_DECREF(op);
512
384
    }
513
720
}
Unexecuted instantiation: thread.c:Py_XDECREF
traceback.c:Py_XDECREF
Line
Count
Source
509
137M
{
510
137M
    if (op != _Py_NULL) {
511
71.0M
        Py_DECREF(op);
512
71.0M
    }
513
137M
}
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
509
652
{
510
652
    if (op != _Py_NULL) {
511
256
        Py_DECREF(op);
512
256
    }
513
652
}
Unexecuted instantiation: fileutils.c:Py_XDECREF
Unexecuted instantiation: suggestions.c:Py_XDECREF
Unexecuted instantiation: perf_trampoline.c:Py_XDECREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_XDECREF
Unexecuted instantiation: remote_debugging.c:Py_XDECREF
Unexecuted instantiation: dynload_shlib.c:Py_XDECREF
Unexecuted instantiation: config.c:Py_XDECREF
Unexecuted instantiation: gcmodule.c:Py_XDECREF
Unexecuted instantiation: _asynciomodule.c:Py_XDECREF
Unexecuted instantiation: atexitmodule.c:Py_XDECREF
Unexecuted instantiation: faulthandler.c:Py_XDECREF
posixmodule.c:Py_XDECREF
Line
Count
Source
509
69.4k
{
510
69.4k
    if (op != _Py_NULL) {
511
27.7k
        Py_DECREF(op);
512
27.7k
    }
513
69.4k
}
signalmodule.c:Py_XDECREF
Line
Count
Source
509
1.02k
{
510
1.02k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
1.02k
}
Unexecuted instantiation: _tracemalloc.c:Py_XDECREF
Unexecuted instantiation: _suggestions.c:Py_XDECREF
_datetimemodule.c:Py_XDECREF
Line
Count
Source
509
6
{
510
6
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
6
}
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
509
9.46k
{
510
9.46k
    if (op != _Py_NULL) {
511
9.46k
        Py_DECREF(op);
512
9.46k
    }
513
9.46k
}
bufferedio.c:Py_XDECREF
Line
Count
Source
509
4.06k
{
510
4.06k
    if (op != _Py_NULL) {
511
1.00k
        Py_DECREF(op);
512
1.00k
    }
513
4.06k
}
textio.c:Py_XDECREF
Line
Count
Source
509
32.3k
{
510
32.3k
    if (op != _Py_NULL) {
511
32
        Py_DECREF(op);
512
32
    }
513
32.3k
}
Unexecuted instantiation: stringio.c:Py_XDECREF
itertoolsmodule.c:Py_XDECREF
Line
Count
Source
509
228
{
510
228
    if (op != _Py_NULL) {
511
228
        Py_DECREF(op);
512
228
    }
513
228
}
sre.c:Py_XDECREF
Line
Count
Source
509
97.7M
{
510
97.7M
    if (op != _Py_NULL) {
511
97.7M
        Py_DECREF(op);
512
97.7M
    }
513
97.7M
}
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
509
3.38k
{
510
3.38k
    if (op != _Py_NULL) {
511
2.45k
        Py_DECREF(op);
512
2.45k
    }
513
3.38k
}
_functoolsmodule.c:Py_XDECREF
Line
Count
Source
509
31
{
510
31
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
31
}
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
509
2.76k
{
510
2.76k
    if (op != _Py_NULL) {
511
2.76k
        Py_DECREF(op);
512
2.76k
    }
513
2.76k
}
Unexecuted instantiation: myreadline.c:Py_XDECREF
abstract.c:Py_XDECREF
Line
Count
Source
509
168k
{
510
168k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
168k
}
Unexecuted instantiation: boolobject.c:Py_XDECREF
Unexecuted instantiation: bytes_methods.c:Py_XDECREF
bytearrayobject.c:Py_XDECREF
Line
Count
Source
509
16
{
510
16
    if (op != _Py_NULL) {
511
16
        Py_DECREF(op);
512
16
    }
513
16
}
capsule.c:Py_XDECREF
Line
Count
Source
509
5
{
510
5
    if (op != _Py_NULL) {
511
5
        Py_DECREF(op);
512
5
    }
513
5
}
cellobject.c:Py_XDECREF
Line
Count
Source
509
6.38M
{
510
6.38M
    if (op != _Py_NULL) {
511
324k
        Py_DECREF(op);
512
324k
    }
513
6.38M
}
classobject.c:Py_XDECREF
Line
Count
Source
509
23.3M
{
510
23.3M
    if (op != _Py_NULL) {
511
23.3M
        Py_DECREF(op);
512
23.3M
    }
513
23.3M
}
codeobject.c:Py_XDECREF
Line
Count
Source
509
113k
{
510
113k
    if (op != _Py_NULL) {
511
76.3k
        Py_DECREF(op);
512
76.3k
    }
513
113k
}
Unexecuted instantiation: complexobject.c:Py_XDECREF
descrobject.c:Py_XDECREF
Line
Count
Source
509
30.7M
{
510
30.7M
    if (op != _Py_NULL) {
511
22.3M
        Py_DECREF(op);
512
22.3M
    }
513
30.7M
}
enumobject.c:Py_XDECREF
Line
Count
Source
509
19.7M
{
510
19.7M
    if (op != _Py_NULL) {
511
13.1M
        Py_DECREF(op);
512
13.1M
    }
513
19.7M
}
genobject.c:Py_XDECREF
Line
Count
Source
509
1.87k
{
510
1.87k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
1.87k
}
Unexecuted instantiation: fileobject.c:Py_XDECREF
Unexecuted instantiation: frameobject.c:Py_XDECREF
funcobject.c:Py_XDECREF
Line
Count
Source
509
2.84k
{
510
2.84k
    if (op != _Py_NULL) {
511
1.09k
        Py_DECREF(op);
512
1.09k
    }
513
2.84k
}
Unexecuted instantiation: interpolationobject.c:Py_XDECREF
iterobject.c:Py_XDECREF
Line
Count
Source
509
1.07M
{
510
1.07M
    if (op != _Py_NULL) {
511
356k
        Py_DECREF(op);
512
356k
    }
513
1.07M
}
odictobject.c:Py_XDECREF
Line
Count
Source
509
288
{
510
288
    if (op != _Py_NULL) {
511
240
        Py_DECREF(op);
512
240
    }
513
288
}
methodobject.c:Py_XDECREF
Line
Count
Source
509
951M
{
510
951M
    if (op != _Py_NULL) {
511
323M
        Py_DECREF(op);
512
323M
    }
513
951M
}
Unexecuted instantiation: namespaceobject.c:Py_XDECREF
Unexecuted instantiation: _contextvars.c:Py_XDECREF
Python-ast.c:Py_XDECREF
Line
Count
Source
509
210
{
510
210
    if (op != _Py_NULL) {
511
140
        Py_DECREF(op);
512
140
    }
513
210
}
Unexecuted instantiation: Python-tokenize.c:Py_XDECREF
Unexecuted instantiation: asdl.c:Py_XDECREF
assemble.c:Py_XDECREF
Line
Count
Source
509
45.7k
{
510
45.7k
    if (op != _Py_NULL) {
511
45.7k
        Py_DECREF(op);
512
45.7k
    }
513
45.7k
}
Unexecuted instantiation: ast.c:Py_XDECREF
Unexecuted instantiation: ast_preprocess.c:Py_XDECREF
Unexecuted instantiation: ast_unparse.c:Py_XDECREF
Unexecuted instantiation: critical_section.c:Py_XDECREF
Unexecuted instantiation: crossinterp.c:Py_XDECREF
Unexecuted instantiation: getcopyright.c:Py_XDECREF
Unexecuted instantiation: getplatform.c:Py_XDECREF
Unexecuted instantiation: getversion.c:Py_XDECREF
Unexecuted instantiation: optimizer.c:Py_XDECREF
Unexecuted instantiation: pathconfig.c:Py_XDECREF
structmember.c:Py_XDECREF
Line
Count
Source
509
6.73k
{
510
6.73k
    if (op != _Py_NULL) {
511
592
        Py_DECREF(op);
512
592
    }
513
6.73k
}
pegen.c:Py_XDECREF
Line
Count
Source
509
34.3k
{
510
34.3k
    if (op != _Py_NULL) {
511
1.62k
        Py_DECREF(op);
512
1.62k
    }
513
34.3k
}
pegen_errors.c:Py_XDECREF
Line
Count
Source
509
14.7k
{
510
14.7k
    if (op != _Py_NULL) {
511
11.9k
        Py_DECREF(op);
512
11.9k
    }
513
14.7k
}
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
509
100k
{
510
100k
    if (op != _Py_NULL) {
511
23.7k
        Py_DECREF(op);
512
23.7k
    }
513
100k
}
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
509
31.6k
{
510
31.6k
    if (op != _Py_NULL) {
511
31.6k
        Py_DECREF(op);
512
31.6k
    }
513
31.6k
}
514
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
515
4.82G
#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
516
#endif
517
518
// Create a new strong reference to an object:
519
// increment the reference count of the object and return the object.
520
PyAPI_FUNC(PyObject*) Py_NewRef(PyObject *obj);
521
522
// Similar to Py_NewRef(), but the object can be NULL.
523
PyAPI_FUNC(PyObject*) Py_XNewRef(PyObject *obj);
524
525
static inline PyObject* _Py_NewRef(PyObject *obj)
526
5.52G
{
527
5.52G
    Py_INCREF(obj);
528
5.52G
    return obj;
529
5.52G
}
bytesobject.c:_Py_NewRef
Line
Count
Source
526
369k
{
527
369k
    Py_INCREF(obj);
528
369k
    return obj;
529
369k
}
call.c:_Py_NewRef
Line
Count
Source
526
24.5M
{
527
24.5M
    Py_INCREF(obj);
528
24.5M
    return obj;
529
24.5M
}
exceptions.c:_Py_NewRef
Line
Count
Source
526
86.4M
{
527
86.4M
    Py_INCREF(obj);
528
86.4M
    return obj;
529
86.4M
}
genericaliasobject.c:_Py_NewRef
Line
Count
Source
526
860
{
527
860
    Py_INCREF(obj);
528
860
    return obj;
529
860
}
Unexecuted instantiation: floatobject.c:_Py_NewRef
listobject.c:_Py_NewRef
Line
Count
Source
526
1.17G
{
527
1.17G
    Py_INCREF(obj);
528
1.17G
    return obj;
529
1.17G
}
longobject.c:_Py_NewRef
Line
Count
Source
526
4.18M
{
527
4.18M
    Py_INCREF(obj);
528
4.18M
    return obj;
529
4.18M
}
dictobject.c:_Py_NewRef
Line
Count
Source
526
755M
{
527
755M
    Py_INCREF(obj);
528
755M
    return obj;
529
755M
}
memoryobject.c:_Py_NewRef
Line
Count
Source
526
584k
{
527
584k
    Py_INCREF(obj);
528
584k
    return obj;
529
584k
}
moduleobject.c:_Py_NewRef
Line
Count
Source
526
1.45k
{
527
1.45k
    Py_INCREF(obj);
528
1.45k
    return obj;
529
1.45k
}
object.c:_Py_NewRef
Line
Count
Source
526
169M
{
527
169M
    Py_INCREF(obj);
528
169M
    return obj;
529
169M
}
Unexecuted instantiation: obmalloc.c:_Py_NewRef
Unexecuted instantiation: picklebufobject.c:_Py_NewRef
rangeobject.c:_Py_NewRef
Line
Count
Source
526
48
{
527
48
    Py_INCREF(obj);
528
48
    return obj;
529
48
}
setobject.c:_Py_NewRef
Line
Count
Source
526
1.41M
{
527
1.41M
    Py_INCREF(obj);
528
1.41M
    return obj;
529
1.41M
}
sliceobject.c:_Py_NewRef
Line
Count
Source
526
48.7M
{
527
48.7M
    Py_INCREF(obj);
528
48.7M
    return obj;
529
48.7M
}
Unexecuted instantiation: structseq.c:_Py_NewRef
templateobject.c:_Py_NewRef
Line
Count
Source
526
4
{
527
4
    Py_INCREF(obj);
528
4
    return obj;
529
4
}
tupleobject.c:_Py_NewRef
Line
Count
Source
526
605M
{
527
605M
    Py_INCREF(obj);
528
605M
    return obj;
529
605M
}
typeobject.c:_Py_NewRef
Line
Count
Source
526
68.6M
{
527
68.6M
    Py_INCREF(obj);
528
68.6M
    return obj;
529
68.6M
}
Unexecuted instantiation: typevarobject.c:_Py_NewRef
unicodeobject.c:_Py_NewRef
Line
Count
Source
526
245M
{
527
245M
    Py_INCREF(obj);
528
245M
    return obj;
529
245M
}
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
526
31.8k
{
527
31.8k
    Py_INCREF(obj);
528
31.8k
    return obj;
529
31.8k
}
bltinmodule.c:_Py_NewRef
Line
Count
Source
526
13.9M
{
527
13.9M
    Py_INCREF(obj);
528
13.9M
    return obj;
529
13.9M
}
ceval.c:_Py_NewRef
Line
Count
Source
526
1.30G
{
527
1.30G
    Py_INCREF(obj);
528
1.30G
    return obj;
529
1.30G
}
codecs.c:_Py_NewRef
Line
Count
Source
526
3.10M
{
527
3.10M
    Py_INCREF(obj);
528
3.10M
    return obj;
529
3.10M
}
codegen.c:_Py_NewRef
Line
Count
Source
526
2.57k
{
527
2.57k
    Py_INCREF(obj);
528
2.57k
    return obj;
529
2.57k
}
compile.c:_Py_NewRef
Line
Count
Source
526
102k
{
527
102k
    Py_INCREF(obj);
528
102k
    return obj;
529
102k
}
context.c:_Py_NewRef
Line
Count
Source
526
24
{
527
24
    Py_INCREF(obj);
528
24
    return obj;
529
24
}
errors.c:_Py_NewRef
Line
Count
Source
526
33.2M
{
527
33.2M
    Py_INCREF(obj);
528
33.2M
    return obj;
529
33.2M
}
flowgraph.c:_Py_NewRef
Line
Count
Source
526
93.5k
{
527
93.5k
    Py_INCREF(obj);
528
93.5k
    return obj;
529
93.5k
}
frame.c:_Py_NewRef
Line
Count
Source
526
12.2M
{
527
12.2M
    Py_INCREF(obj);
528
12.2M
    return obj;
529
12.2M
}
Unexecuted instantiation: future.c:_Py_NewRef
Unexecuted instantiation: gc.c:_Py_NewRef
Unexecuted instantiation: gc_gil.c:_Py_NewRef
getargs.c:_Py_NewRef
Line
Count
Source
526
719k
{
527
719k
    Py_INCREF(obj);
528
719k
    return obj;
529
719k
}
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
526
33.6k
{
527
33.6k
    Py_INCREF(obj);
528
33.6k
    return obj;
529
33.6k
}
importdl.c:_Py_NewRef
Line
Count
Source
526
456
{
527
456
    Py_INCREF(obj);
528
456
    return obj;
529
456
}
initconfig.c:_Py_NewRef
Line
Count
Source
526
272
{
527
272
    Py_INCREF(obj);
528
272
    return obj;
529
272
}
Unexecuted instantiation: instrumentation.c:_Py_NewRef
Unexecuted instantiation: instruction_sequence.c:_Py_NewRef
intrinsics.c:_Py_NewRef
Line
Count
Source
526
17.7k
{
527
17.7k
    Py_INCREF(obj);
528
17.7k
    return obj;
529
17.7k
}
Unexecuted instantiation: legacy_tracing.c:_Py_NewRef
Unexecuted instantiation: lock.c:_Py_NewRef
marshal.c:_Py_NewRef
Line
Count
Source
526
324k
{
527
324k
    Py_INCREF(obj);
528
324k
    return obj;
529
324k
}
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
526
16
{
527
16
    Py_INCREF(obj);
528
16
    return obj;
529
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
526
254k
{
527
254k
    Py_INCREF(obj);
528
254k
    return obj;
529
254k
}
sysmodule.c:_Py_NewRef
Line
Count
Source
526
786
{
527
786
    Py_INCREF(obj);
528
786
    return obj;
529
786
}
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: _asynciomodule.c:_Py_NewRef
Unexecuted instantiation: atexitmodule.c:_Py_NewRef
Unexecuted instantiation: faulthandler.c:_Py_NewRef
posixmodule.c:_Py_NewRef
Line
Count
Source
526
39.4k
{
527
39.4k
    Py_INCREF(obj);
528
39.4k
    return obj;
529
39.4k
}
signalmodule.c:_Py_NewRef
Line
Count
Source
526
1.02k
{
527
1.02k
    Py_INCREF(obj);
528
1.02k
    return obj;
529
1.02k
}
Unexecuted instantiation: _tracemalloc.c:_Py_NewRef
Unexecuted instantiation: _suggestions.c:_Py_NewRef
_datetimemodule.c:_Py_NewRef
Line
Count
Source
526
38
{
527
38
    Py_INCREF(obj);
528
38
    return obj;
529
38
}
Unexecuted instantiation: _codecsmodule.c:_Py_NewRef
_collectionsmodule.c:_Py_NewRef
Line
Count
Source
526
18.9M
{
527
18.9M
    Py_INCREF(obj);
528
18.9M
    return obj;
529
18.9M
}
Unexecuted instantiation: errnomodule.c:_Py_NewRef
_iomodule.c:_Py_NewRef
Line
Count
Source
526
48
{
527
48
    Py_INCREF(obj);
528
48
    return obj;
529
48
}
iobase.c:_Py_NewRef
Line
Count
Source
526
40.4k
{
527
40.4k
    Py_INCREF(obj);
528
40.4k
    return obj;
529
40.4k
}
Unexecuted instantiation: fileio.c:_Py_NewRef
bytesio.c:_Py_NewRef
Line
Count
Source
526
10.1k
{
527
10.1k
    Py_INCREF(obj);
528
10.1k
    return obj;
529
10.1k
}
bufferedio.c:_Py_NewRef
Line
Count
Source
526
1.02k
{
527
1.02k
    Py_INCREF(obj);
528
1.02k
    return obj;
529
1.02k
}
textio.c:_Py_NewRef
Line
Count
Source
526
81.7k
{
527
81.7k
    Py_INCREF(obj);
528
81.7k
    return obj;
529
81.7k
}
stringio.c:_Py_NewRef
Line
Count
Source
526
16.0k
{
527
16.0k
    Py_INCREF(obj);
528
16.0k
    return obj;
529
16.0k
}
itertoolsmodule.c:_Py_NewRef
Line
Count
Source
526
270
{
527
270
    Py_INCREF(obj);
528
270
    return obj;
529
270
}
sre.c:_Py_NewRef
Line
Count
Source
526
259M
{
527
259M
    Py_INCREF(obj);
528
259M
    return obj;
529
259M
}
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
526
608
{
527
608
    Py_INCREF(obj);
528
608
    return obj;
529
608
}
_functoolsmodule.c:_Py_NewRef
Line
Count
Source
526
505
{
527
505
    Py_INCREF(obj);
528
505
    return obj;
529
505
}
Unexecuted instantiation: _localemodule.c:_Py_NewRef
Unexecuted instantiation: _opcode.c:_Py_NewRef
_operator.c:_Py_NewRef
Line
Count
Source
526
1.36M
{
527
1.36M
    Py_INCREF(obj);
528
1.36M
    return obj;
529
1.36M
}
Unexecuted instantiation: _stat.c:_Py_NewRef
Unexecuted instantiation: symtablemodule.c:_Py_NewRef
Unexecuted instantiation: pwdmodule.c:_Py_NewRef
getpath.c:_Py_NewRef
Line
Count
Source
526
128
{
527
128
    Py_INCREF(obj);
528
128
    return obj;
529
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
526
547M
{
527
547M
    Py_INCREF(obj);
528
547M
    return obj;
529
547M
}
Unexecuted instantiation: boolobject.c:_Py_NewRef
Unexecuted instantiation: bytes_methods.c:_Py_NewRef
bytearrayobject.c:_Py_NewRef
Line
Count
Source
526
36
{
527
36
    Py_INCREF(obj);
528
36
    return obj;
529
36
}
Unexecuted instantiation: capsule.c:_Py_NewRef
Unexecuted instantiation: cellobject.c:_Py_NewRef
classobject.c:_Py_NewRef
Line
Count
Source
526
46.7M
{
527
46.7M
    Py_INCREF(obj);
528
46.7M
    return obj;
529
46.7M
}
codeobject.c:_Py_NewRef
Line
Count
Source
526
484k
{
527
484k
    Py_INCREF(obj);
528
484k
    return obj;
529
484k
}
Unexecuted instantiation: complexobject.c:_Py_NewRef
descrobject.c:_Py_NewRef
Line
Count
Source
526
22.3M
{
527
22.3M
    Py_INCREF(obj);
528
22.3M
    return obj;
529
22.3M
}
enumobject.c:_Py_NewRef
Line
Count
Source
526
4
{
527
4
    Py_INCREF(obj);
528
4
    return obj;
529
4
}
genobject.c:_Py_NewRef
Line
Count
Source
526
41.7M
{
527
41.7M
    Py_INCREF(obj);
528
41.7M
    return obj;
529
41.7M
}
Unexecuted instantiation: fileobject.c:_Py_NewRef
frameobject.c:_Py_NewRef
Line
Count
Source
526
5.13k
{
527
5.13k
    Py_INCREF(obj);
528
5.13k
    return obj;
529
5.13k
}
funcobject.c:_Py_NewRef
Line
Count
Source
526
25.2M
{
527
25.2M
    Py_INCREF(obj);
528
25.2M
    return obj;
529
25.2M
}
Unexecuted instantiation: interpolationobject.c:_Py_NewRef
iterobject.c:_Py_NewRef
Line
Count
Source
526
713k
{
527
713k
    Py_INCREF(obj);
528
713k
    return obj;
529
713k
}
odictobject.c:_Py_NewRef
Line
Count
Source
526
168
{
527
168
    Py_INCREF(obj);
528
168
    return obj;
529
168
}
methodobject.c:_Py_NewRef
Line
Count
Source
526
6.59M
{
527
6.59M
    Py_INCREF(obj);
528
6.59M
    return obj;
529
6.59M
}
Unexecuted instantiation: namespaceobject.c:_Py_NewRef
Unexecuted instantiation: _contextvars.c:_Py_NewRef
Python-ast.c:_Py_NewRef
Line
Count
Source
526
562k
{
527
562k
    Py_INCREF(obj);
528
562k
    return obj;
529
562k
}
Unexecuted instantiation: Python-tokenize.c:_Py_NewRef
Unexecuted instantiation: asdl.c:_Py_NewRef
assemble.c:_Py_NewRef
Line
Count
Source
526
43.1k
{
527
43.1k
    Py_INCREF(obj);
528
43.1k
    return obj;
529
43.1k
}
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
526
21.1k
{
527
21.1k
    Py_INCREF(obj);
528
21.1k
    return obj;
529
21.1k
}
Unexecuted instantiation: pegen_errors.c:_Py_NewRef
Unexecuted instantiation: parser.c:_Py_NewRef
Unexecuted instantiation: buffer.c:_Py_NewRef
Unexecuted instantiation: lexer.c:_Py_NewRef
Unexecuted instantiation: state.c:_Py_NewRef
Unexecuted instantiation: readline_tokenizer.c:_Py_NewRef
Unexecuted instantiation: string_tokenizer.c:_Py_NewRef
Unexecuted instantiation: utf8_tokenizer.c:_Py_NewRef
Unexecuted instantiation: getcompiler.c:_Py_NewRef
Unexecuted instantiation: mystrtoul.c:_Py_NewRef
Unexecuted instantiation: token.c:_Py_NewRef
Unexecuted instantiation: action_helpers.c:_Py_NewRef
Unexecuted instantiation: string_parser.c:_Py_NewRef
530
531
static inline PyObject* _Py_XNewRef(PyObject *obj)
532
1.50G
{
533
1.50G
    Py_XINCREF(obj);
534
1.50G
    return obj;
535
1.50G
}
Unexecuted instantiation: bytesobject.c:_Py_XNewRef
Unexecuted instantiation: call.c:_Py_XNewRef
exceptions.c:_Py_XNewRef
Line
Count
Source
532
68.1M
{
533
68.1M
    Py_XINCREF(obj);
534
68.1M
    return obj;
535
68.1M
}
Unexecuted instantiation: genericaliasobject.c:_Py_XNewRef
Unexecuted instantiation: floatobject.c:_Py_XNewRef
listobject.c:_Py_XNewRef
Line
Count
Source
532
1.00M
{
533
1.00M
    Py_XINCREF(obj);
534
1.00M
    return obj;
535
1.00M
}
Unexecuted instantiation: longobject.c:_Py_XNewRef
dictobject.c:_Py_XNewRef
Line
Count
Source
532
639M
{
533
639M
    Py_XINCREF(obj);
534
639M
    return obj;
535
639M
}
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
532
308k
{
533
308k
    Py_XINCREF(obj);
534
308k
    return obj;
535
308k
}
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
532
312k
{
533
312k
    Py_XINCREF(obj);
534
312k
    return obj;
535
312k
}
Unexecuted instantiation: _warnings.c:_Py_XNewRef
bltinmodule.c:_Py_XNewRef
Line
Count
Source
532
317
{
533
317
    Py_XINCREF(obj);
534
317
    return obj;
535
317
}
ceval.c:_Py_XNewRef
Line
Count
Source
532
76.1M
{
533
76.1M
    Py_XINCREF(obj);
534
76.1M
    return obj;
535
76.1M
}
Unexecuted instantiation: codecs.c:_Py_XNewRef
Unexecuted instantiation: codegen.c:_Py_XNewRef
compile.c:_Py_XNewRef
Line
Count
Source
532
9.35k
{
533
9.35k
    Py_XINCREF(obj);
534
9.35k
    return obj;
535
9.35k
}
context.c:_Py_XNewRef
Line
Count
Source
532
24
{
533
24
    Py_XINCREF(obj);
534
24
    return obj;
535
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
532
2.68k
{
533
2.68k
    Py_XINCREF(obj);
534
2.68k
    return obj;
535
2.68k
}
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
532
2.27k
{
533
2.27k
    Py_XINCREF(obj);
534
2.27k
    return obj;
535
2.27k
}
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
532
16
{
533
16
    Py_XINCREF(obj);
534
16
    return obj;
535
16
}
Unexecuted instantiation: thread.c:_Py_XNewRef
traceback.c:_Py_XNewRef
Line
Count
Source
532
68.7M
{
533
68.7M
    Py_XINCREF(obj);
534
68.7M
    return obj;
535
68.7M
}
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: _asynciomodule.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
_datetimemodule.c:_Py_XNewRef
Line
Count
Source
532
32
{
533
32
    Py_XINCREF(obj);
534
32
    return obj;
535
32
}
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
532
608
{
533
608
    Py_XINCREF(obj);
534
608
    return obj;
535
608
}
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
532
48
{
533
48
    Py_XINCREF(obj);
534
48
    return obj;
535
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
532
13.7M
{
533
13.7M
    Py_XINCREF(obj);
534
13.7M
    return obj;
535
13.7M
}
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
532
6.38M
{
533
6.38M
    Py_XINCREF(obj);
534
6.38M
    return obj;
535
6.38M
}
Unexecuted instantiation: classobject.c:_Py_XNewRef
codeobject.c:_Py_XNewRef
Line
Count
Source
532
6.16k
{
533
6.16k
    Py_XINCREF(obj);
534
6.16k
    return obj;
535
6.16k
}
Unexecuted instantiation: complexobject.c:_Py_XNewRef
descrobject.c:_Py_XNewRef
Line
Count
Source
532
45.5k
{
533
45.5k
    Py_XINCREF(obj);
534
45.5k
    return obj;
535
45.5k
}
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
532
3.36k
{
533
3.36k
    Py_XINCREF(obj);
534
3.36k
    return obj;
535
3.36k
}
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
532
634M
{
533
634M
    Py_XINCREF(obj);
534
634M
    return obj;
535
634M
}
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
532
6.73k
{
533
6.73k
    Py_XINCREF(obj);
534
6.73k
    return obj;
535
6.73k
}
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
536
537
// Py_NewRef() and Py_XNewRef() are exported as functions for the stable ABI.
538
// Names overridden with macros by static inline functions for best
539
// performances.
540
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
541
5.40G
#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
542
1.49G
#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
543
#else
544
#  define Py_NewRef(obj) _Py_NewRef(obj)
545
#  define Py_XNewRef(obj) _Py_XNewRef(obj)
546
#endif
547
548
549
#ifdef __cplusplus
550
}
551
#endif
552
#endif   // !_Py_REFCOUNT_H