Coverage Report

Created: 2025-08-26 06:26

/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.72G
#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
47
0
#define _Py_IMMORTAL_MINIMUM_REFCNT (1ULL << 31)
48
262M
#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
49
262M
#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
992M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
992M
    #if !defined(Py_GIL_DISABLED)
104
992M
        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
992M
    }
bytesobject.c:_Py_REFCNT
Line
Count
Source
102
265k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
265k
    #if !defined(Py_GIL_DISABLED)
104
265k
        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
265k
    }
Unexecuted instantiation: call.c:_Py_REFCNT
Unexecuted instantiation: exceptions.c:_Py_REFCNT
Unexecuted instantiation: genericaliasobject.c:_Py_REFCNT
Unexecuted instantiation: floatobject.c:_Py_REFCNT
Unexecuted instantiation: listobject.c:_Py_REFCNT
longobject.c:_Py_REFCNT
Line
Count
Source
102
13
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
13
    #if !defined(Py_GIL_DISABLED)
104
13
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
13
    }
dictobject.c:_Py_REFCNT
Line
Count
Source
102
586M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
586M
    #if !defined(Py_GIL_DISABLED)
104
586M
        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
586M
    }
Unexecuted instantiation: memoryobject.c:_Py_REFCNT
Unexecuted instantiation: moduleobject.c:_Py_REFCNT
object.c:_Py_REFCNT
Line
Count
Source
102
63.0M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
63.0M
    #if !defined(Py_GIL_DISABLED)
104
63.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
63.0M
    }
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
73.2k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
73.2k
    #if !defined(Py_GIL_DISABLED)
104
73.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
73.2k
    }
typeobject.c:_Py_REFCNT
Line
Count
Source
102
12
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
12
    #if !defined(Py_GIL_DISABLED)
104
12
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
12
    }
Unexecuted instantiation: typevarobject.c:_Py_REFCNT
unicodeobject.c:_Py_REFCNT
Line
Count
Source
102
64.8M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
64.8M
    #if !defined(Py_GIL_DISABLED)
104
64.8M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
64.8M
    }
Unexecuted instantiation: unicodectype.c:_Py_REFCNT
Unexecuted instantiation: unionobject.c:_Py_REFCNT
weakrefobject.c:_Py_REFCNT
Line
Count
Source
102
40.4M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
40.4M
    #if !defined(Py_GIL_DISABLED)
104
40.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
40.4M
    }
Unexecuted instantiation: _warnings.c:_Py_REFCNT
bltinmodule.c:_Py_REFCNT
Line
Count
Source
102
27.8M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
27.8M
    #if !defined(Py_GIL_DISABLED)
104
27.8M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
27.8M
    }
Unexecuted instantiation: 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
23.5M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
23.5M
    #if !defined(Py_GIL_DISABLED)
104
23.5M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
23.5M
    }
Unexecuted instantiation: future.c:_Py_REFCNT
gc.c:_Py_REFCNT
Line
Count
Source
102
44.9M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
44.9M
    #if !defined(Py_GIL_DISABLED)
104
44.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
44.9M
    }
Unexecuted instantiation: gc_gil.c:_Py_REFCNT
Unexecuted instantiation: getargs.c:_Py_REFCNT
Unexecuted instantiation: ceval_gil.c:_Py_REFCNT
Unexecuted instantiation: hamt.c:_Py_REFCNT
Unexecuted instantiation: hashtable.c:_Py_REFCNT
import.c:_Py_REFCNT
Line
Count
Source
102
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.8k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
11.8k
    #if !defined(Py_GIL_DISABLED)
104
11.8k
        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.8k
    }
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.1k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
16.1k
    #if !defined(Py_GIL_DISABLED)
104
16.1k
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
16.1k
    }
Unexecuted instantiation: complexobject.c:_Py_REFCNT
Unexecuted instantiation: descrobject.c:_Py_REFCNT
enumobject.c:_Py_REFCNT
Line
Count
Source
102
111M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
111M
    #if !defined(Py_GIL_DISABLED)
104
111M
        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
111M
    }
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
29.1M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
29.1M
    #if !defined(Py_GIL_DISABLED)
104
29.1M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
29.1M
    }
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
664M
    #  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.3G
{
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.3G
    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.3G
}
bytesobject.c:_Py_IsImmortal
Line
Count
Source
122
4.32M
{
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.32M
    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.32M
}
call.c:_Py_IsImmortal
Line
Count
Source
122
134M
{
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
134M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
134M
}
exceptions.c:_Py_IsImmortal
Line
Count
Source
122
111M
{
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
111M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
111M
}
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.72G
{
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.72G
    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.72G
}
longobject.c:_Py_IsImmortal
Line
Count
Source
122
21.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
21.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
21.7M
}
dictobject.c:_Py_IsImmortal
Line
Count
Source
122
1.64G
{
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.64G
    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.64G
}
memoryobject.c:_Py_IsImmortal
Line
Count
Source
122
737k
{
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
737k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
737k
}
moduleobject.c:_Py_IsImmortal
Line
Count
Source
122
45.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
45.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
45.8k
}
object.c:_Py_IsImmortal
Line
Count
Source
122
476M
{
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
476M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
476M
}
Unexecuted instantiation: obmalloc.c:_Py_IsImmortal
Unexecuted instantiation: picklebufobject.c:_Py_IsImmortal
rangeobject.c:_Py_IsImmortal
Line
Count
Source
122
34.8M
{
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
34.8M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
34.8M
}
setobject.c:_Py_IsImmortal
Line
Count
Source
122
1.19M
{
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.19M
    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.19M
}
sliceobject.c:_Py_IsImmortal
Line
Count
Source
122
140M
{
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
140M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
140M
}
structseq.c:_Py_IsImmortal
Line
Count
Source
122
94.9k
{
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
94.9k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
94.9k
}
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
879M
{
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
879M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
879M
}
typeobject.c:_Py_IsImmortal
Line
Count
Source
122
826M
{
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
826M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
826M
}
Unexecuted instantiation: typevarobject.c:_Py_IsImmortal
unicodeobject.c:_Py_IsImmortal
Line
Count
Source
122
236M
{
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
236M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
236M
}
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.5k
{
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.5k
    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.5k
}
_warnings.c:_Py_IsImmortal
Line
Count
Source
122
157k
{
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
157k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
157k
}
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
5.83G
{
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.83G
    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.83G
}
codecs.c:_Py_IsImmortal
Line
Count
Source
122
7.24M
{
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.24M
    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.24M
}
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
578k
{
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
578k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
578k
}
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
74.8M
{
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
74.8M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
74.8M
}
flowgraph.c:_Py_IsImmortal
Line
Count
Source
122
69.4k
{
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.4k
    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.4k
}
frame.c:_Py_IsImmortal
Line
Count
Source
122
34.8M
{
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
34.8M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
34.8M
}
Unexecuted instantiation: future.c:_Py_IsImmortal
gc.c:_Py_IsImmortal
Line
Count
Source
122
998M
{
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
998M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
998M
}
Unexecuted instantiation: gc_gil.c:_Py_IsImmortal
getargs.c:_Py_IsImmortal
Line
Count
Source
122
1.70M
{
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.70M
    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.70M
}
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
168k
{
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
168k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
168k
}
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.51M
{
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.51M
    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.51M
}
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
567k
{
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
567k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
567k
}
symtable.c:_Py_IsImmortal
Line
Count
Source
122
756k
{
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
756k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
756k
}
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
65.4M
{
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
65.4M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
65.4M
}
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.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
11.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
11.7k
}
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
51.1k
{
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
51.1k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
51.1k
}
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
110k
{
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
110k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
110k
}
Unexecuted instantiation: errnomodule.c:_Py_IsImmortal
_iomodule.c:_Py_IsImmortal
Line
Count
Source
122
6.36k
{
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.36k
    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.36k
}
iobase.c:_Py_IsImmortal
Line
Count
Source
122
121k
{
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
121k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
121k
}
fileio.c:_Py_IsImmortal
Line
Count
Source
122
3.48k
{
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.48k
    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.48k
}
bytesio.c:_Py_IsImmortal
Line
Count
Source
122
28.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
28.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
28.7k
}
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
49.1k
{
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.1k
    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.1k
}
stringio.c:_Py_IsImmortal
Line
Count
Source
122
298k
{
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
298k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
298k
}
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
490M
{
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
490M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
490M
}
Unexecuted instantiation: _sysconfig.c:_Py_IsImmortal
_threadmodule.c:_Py_IsImmortal
Line
Count
Source
122
5.32k
{
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.32k
    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.32k
}
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
585k
{
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
585k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
585k
}
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.1k
{
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.1k
    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.1k
}
Unexecuted instantiation: myreadline.c:_Py_IsImmortal
abstract.c:_Py_IsImmortal
Line
Count
Source
122
428M
{
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
428M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
428M
}
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
331k
{
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
331k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
331k
}
classobject.c:_Py_IsImmortal
Line
Count
Source
122
45.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
45.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
45.9M
}
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
109M
{
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
109M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
109M
}
enumobject.c:_Py_IsImmortal
Line
Count
Source
122
273M
{
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
273M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
273M
}
genobject.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
}
fileobject.c:_Py_IsImmortal
Line
Count
Source
122
12.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
12.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
12.8k
}
frameobject.c:_Py_IsImmortal
Line
Count
Source
122
11.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
11.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
11.2M
}
funcobject.c:_Py_IsImmortal
Line
Count
Source
122
160M
{
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
160M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
160M
}
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.09M
{
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.09M
    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.09M
}
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
295M
{
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
295M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
295M
}
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.05M
{
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.05M
    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.05M
}
Unexecuted instantiation: Python-tokenize.c:_Py_IsImmortal
Unexecuted instantiation: asdl.c:_Py_IsImmortal
assemble.c:_Py_IsImmortal
Line
Count
Source
122
45.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
45.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
45.8k
}
Unexecuted instantiation: ast.c:_Py_IsImmortal
ast_preprocess.c:_Py_IsImmortal
Line
Count
Source
122
2.28k
{
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.28k
    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.28k
}
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
134k
{
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
134k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
134k
}
pegen_errors.c:_Py_IsImmortal
Line
Count
Source
122
50.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
50.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
50.2k
}
Unexecuted instantiation: parser.c:_Py_IsImmortal
Unexecuted instantiation: buffer.c:_Py_IsImmortal
lexer.c:_Py_IsImmortal
Line
Count
Source
122
13.9k
{
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.9k
    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.9k
}
state.c:_Py_IsImmortal
Line
Count
Source
122
23.9k
{
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.9k
    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.9k
}
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
42.4k
{
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
42.4k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
42.4k
}
132
17.2G
#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
656M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
656M
    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
656M
    if (_Py_IsImmortal(ob)) {
161
447
        return;
162
447
    }
163
656M
#ifndef Py_GIL_DISABLED
164
656M
#if SIZEOF_VOID_P > 4
165
656M
    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
656M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
656M
}
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
584M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
584M
    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
584M
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
584M
#ifndef Py_GIL_DISABLED
164
584M
#if SIZEOF_VOID_P > 4
165
584M
    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
584M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
584M
}
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
42.0M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
42.0M
    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
42.0M
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
42.0M
#ifndef Py_GIL_DISABLED
164
42.0M
#if SIZEOF_VOID_P > 4
165
42.0M
    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
42.0M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
42.0M
}
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
1.06M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
1.06M
    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
1.06M
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
1.06M
#ifndef Py_GIL_DISABLED
164
1.06M
#if SIZEOF_VOID_P > 4
165
1.06M
    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
1.06M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
1.06M
}
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.1k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
16.1k
    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.1k
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
16.1k
#ifndef Py_GIL_DISABLED
164
16.1k
#if SIZEOF_VOID_P > 4
165
16.1k
    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.1k
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
16.1k
}
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
29.1M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
29.1M
    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
29.1M
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
29.1M
#ifndef Py_GIL_DISABLED
164
29.1M
#if SIZEOF_VOID_P > 4
165
29.1M
    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
29.1M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
29.1M
}
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
656M
#  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.46G
{
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.46G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
8.46G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
4.17G
        _Py_INCREF_IMMORTAL_STAT_INC();
283
4.17G
        return;
284
4.17G
    }
285
4.28G
    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.28G
    _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.28G
#endif
301
4.28G
}
bytesobject.c:Py_INCREF
Line
Count
Source
250
24.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
24.0M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
24.0M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
22.4M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
22.4M
        return;
284
22.4M
    }
285
1.58M
    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.58M
    _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.58M
#endif
301
1.58M
}
call.c:Py_INCREF
Line
Count
Source
250
22.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
22.8M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
22.8M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
8.13M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
8.13M
        return;
284
8.13M
    }
285
14.6M
    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
14.6M
    _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
14.6M
#endif
301
14.6M
}
exceptions.c:Py_INCREF
Line
Count
Source
250
83.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
83.7M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
83.7M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
31.9M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
31.9M
        return;
284
31.9M
    }
285
51.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
51.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
51.7M
#endif
301
51.7M
}
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
593k
{
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
593k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
593k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
593k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
593k
        return;
284
593k
    }
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.32G
{
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.32G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.32G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
249M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
249M
        return;
284
249M
    }
285
1.07G
    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.07G
    _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.07G
#endif
301
1.07G
}
longobject.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
117M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
117M
        return;
284
117M
    }
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.08G
{
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.08G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.08G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
373M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
373M
        return;
284
373M
    }
285
711M
    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
711M
    _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
711M
#endif
301
711M
}
memoryobject.c:Py_INCREF
Line
Count
Source
250
627k
{
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
627k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
627k
    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
627k
    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
627k
    _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
627k
#endif
301
627k
}
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
591
    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
591
    _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
591
#endif
301
591
}
object.c:Py_INCREF
Line
Count
Source
250
588M
{
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
588M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
588M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
427M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
427M
        return;
284
427M
    }
285
160M
    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
160M
    _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
160M
#endif
301
160M
}
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.43M
{
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.43M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.43M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
501k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
501k
        return;
284
501k
    }
285
936k
    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
936k
    _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
936k
#endif
301
936k
}
sliceobject.c:Py_INCREF
Line
Count
Source
250
46.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
46.8M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
46.8M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
46.8M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
46.8M
        return;
284
46.8M
    }
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
596M
{
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
596M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
596M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
409M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
409M
        return;
284
409M
    }
285
186M
    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
186M
    _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
186M
#endif
301
186M
}
typeobject.c:Py_INCREF
Line
Count
Source
250
301M
{
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
301M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
301M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
91.5M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
91.5M
        return;
284
91.5M
    }
285
210M
    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
210M
    _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
210M
#endif
301
210M
}
Unexecuted instantiation: typevarobject.c:Py_INCREF
unicodeobject.c:Py_INCREF
Line
Count
Source
250
774M
{
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
774M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
774M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
674M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
674M
        return;
284
674M
    }
285
100M
    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
100M
    _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
100M
#endif
301
100M
}
Unexecuted instantiation: unicodectype.c:Py_INCREF
Unexecuted instantiation: unionobject.c:Py_INCREF
weakrefobject.c:Py_INCREF
Line
Count
Source
250
329k
{
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
329k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
329k
    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
327k
    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
327k
    _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
327k
#endif
301
327k
}
_warnings.c:Py_INCREF
Line
Count
Source
250
66.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
66.3k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
66.3k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
20.6k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
20.6k
        return;
284
20.6k
    }
285
45.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
45.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
45.7k
#endif
301
45.7k
}
bltinmodule.c:Py_INCREF
Line
Count
Source
250
61.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
61.6M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
61.6M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
19.9M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
19.9M
        return;
284
19.9M
    }
285
41.6M
    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
41.6M
    _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
41.6M
#endif
301
41.6M
}
ceval.c:Py_INCREF
Line
Count
Source
250
1.46G
{
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.46G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.46G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
829M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
829M
        return;
284
829M
    }
285
638M
    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
638M
    _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
638M
#endif
301
638M
}
codecs.c:Py_INCREF
Line
Count
Source
250
3.39M
{
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.39M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
3.39M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
668k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
668k
        return;
284
668k
    }
285
2.72M
    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.72M
    _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.72M
#endif
301
2.72M
}
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.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
60.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
60.9k
#endif
301
60.9k
}
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
60.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
60.6M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
60.6M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
29.6M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
29.6M
        return;
284
29.6M
    }
285
31.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
31.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
31.0M
#endif
301
31.0M
}
flowgraph.c:Py_INCREF
Line
Count
Source
250
93.6k
{
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.6k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
93.6k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
43.9k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
43.9k
        return;
284
43.9k
    }
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
11.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
11.9M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
11.9M
    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
11.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
11.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
11.9M
#endif
301
11.9M
}
Unexecuted instantiation: future.c:Py_INCREF
gc.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
259M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
259M
        return;
284
259M
    }
285
80.4M
    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
80.4M
    _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
80.4M
#endif
301
80.4M
}
Unexecuted instantiation: gc_gil.c:Py_INCREF
getargs.c:Py_INCREF
Line
Count
Source
250
754k
{
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
754k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
754k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
145k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
145k
        return;
284
145k
    }
285
608k
    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
608k
    _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
608k
#endif
301
608k
}
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.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
82.7k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
82.7k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
12.5k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
12.5k
        return;
284
12.5k
    }
285
70.1k
    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
70.1k
    _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
70.1k
#endif
301
70.1k
}
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
19.8k
{
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
19.8k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
19.8k
    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
19.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
19.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
19.8k
#endif
301
19.8k
}
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
323k
{
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
323k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
323k
    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
306k
    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
306k
    _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
306k
#endif
301
306k
}
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
254k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
254k
        return;
284
254k
    }
285
682
    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
682
    _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
682
#endif
301
682
}
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
32.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
32.7M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
32.7M
    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
32.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
32.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
32.7M
#endif
301
32.7M
}
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.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
45.7k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
45.7k
    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.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
45.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
45.6k
#endif
301
45.6k
}
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
16.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
16.9M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
16.9M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
14.3M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
14.3M
        return;
284
14.3M
    }
285
2.60M
    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.60M
    _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.60M
#endif
301
2.60M
}
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.6k
{
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.6k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
40.6k
    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.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
40.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
40.6k
#endif
301
40.6k
}
Unexecuted instantiation: fileio.c:Py_INCREF
bytesio.c:Py_INCREF
Line
Count
Source
250
10.2k
{
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.2k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
10.2k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
23
        _Py_INCREF_IMMORTAL_STAT_INC();
283
23
        return;
284
23
    }
285
10.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
10.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
10.2k
#endif
301
10.2k
}
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
82.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
82.3k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
82.3k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
20.2k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
20.2k
        return;
284
20.2k
    }
285
62.1k
    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
62.1k
    _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
62.1k
#endif
301
62.1k
}
stringio.c:Py_INCREF
Line
Count
Source
250
16.2k
{
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.2k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
16.2k
    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.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
16.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
16.2k
#endif
301
16.2k
}
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
334M
{
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
334M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
334M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
105M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
105M
        return;
284
105M
    }
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.52M
{
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.52M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.52M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
1.48M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
1.48M
        return;
284
1.48M
    }
285
38.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
38.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
38.6k
#endif
301
38.6k
}
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
554M
{
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
554M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
554M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
368M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
368M
        return;
284
368M
    }
285
185M
    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
185M
    _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
185M
#endif
301
185M
}
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.2k
{
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.2k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
70.2k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
22.5k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
22.5k
        return;
284
22.5k
    }
285
47.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
47.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
47.6k
#endif
301
47.6k
}
classobject.c:Py_INCREF
Line
Count
Source
250
45.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
45.9M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
45.9M
    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
45.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
45.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
45.9M
#endif
301
45.9M
}
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.87k
{
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.87k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
3.87k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
3.87k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
3.87k
        return;
284
3.87k
    }
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
25.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
25.0M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
25.0M
    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
25.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
25.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
25.0M
#endif
301
25.0M
}
enumobject.c:Py_INCREF
Line
Count
Source
250
111M
{
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
111M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
111M
    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
111M
    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
111M
    _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
111M
#endif
301
111M
}
genobject.c:Py_INCREF
Line
Count
Source
250
42.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
42.4M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
42.4M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
42.3M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
42.3M
        return;
284
42.3M
    }
285
85.1k
    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
85.1k
    _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
85.1k
#endif
301
85.1k
}
Unexecuted instantiation: fileobject.c:Py_INCREF
frameobject.c:Py_INCREF
Line
Count
Source
250
5.25k
{
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.25k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
5.25k
    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.25k
    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.25k
    _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.25k
#endif
301
5.25k
}
funcobject.c:Py_INCREF
Line
Count
Source
250
85.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
85.5M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
85.5M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
43.6M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
43.6M
        return;
284
43.6M
    }
285
41.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
41.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
41.8M
#endif
301
41.8M
}
Unexecuted instantiation: interpolationobject.c:Py_INCREF
iterobject.c:Py_INCREF
Line
Count
Source
250
730k
{
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
730k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
730k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
365k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
365k
        return;
284
365k
    }
285
365k
    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
365k
    _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
365k
#endif
301
365k
}
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
295M
{
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
295M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
295M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
4.48M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
4.48M
        return;
284
4.48M
    }
285
290M
    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
290M
    _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
290M
#endif
301
290M
}
Unexecuted instantiation: namespaceobject.c:Py_INCREF
Unexecuted instantiation: _contextvars.c:Py_INCREF
Python-ast.c:Py_INCREF
Line
Count
Source
250
565k
{
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
565k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
565k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
223k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
223k
        return;
284
223k
    }
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.2k
{
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.2k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
43.2k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
43.1k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
43.1k
        return;
284
43.1k
    }
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
95.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
95.0k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
95.0k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
37.4k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
37.4k
        return;
284
37.4k
    }
285
57.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
57.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
57.5k
#endif
301
57.5k
}
pegen.c:Py_INCREF
Line
Count
Source
250
22.8k
{
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.8k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
22.8k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
1.61k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
1.61k
        return;
284
1.61k
    }
285
21.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
21.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
21.2k
#endif
301
21.2k
}
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.46G
#  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.29G
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
7.29G
    if (_Py_IsImmortal(op)) {
413
3.12G
        _Py_DECREF_IMMORTAL_STAT_INC();
414
3.12G
        return;
415
3.12G
    }
416
4.17G
    _Py_DECREF_STAT_INC();
417
4.17G
    if (--op->ob_refcnt == 0) {
418
1.06G
        _Py_Dealloc(op);
419
1.06G
    }
420
4.17G
}
bytesobject.c:Py_DECREF
Line
Count
Source
409
4.32M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.32M
    if (_Py_IsImmortal(op)) {
413
4.11M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
4.11M
        return;
415
4.11M
    }
416
205k
    _Py_DECREF_STAT_INC();
417
205k
    if (--op->ob_refcnt == 0) {
418
134k
        _Py_Dealloc(op);
419
134k
    }
420
205k
}
call.c:Py_DECREF
Line
Count
Source
409
134M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
134M
    if (_Py_IsImmortal(op)) {
413
54.0M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
54.0M
        return;
415
54.0M
    }
416
80.7M
    _Py_DECREF_STAT_INC();
417
80.7M
    if (--op->ob_refcnt == 0) {
418
64.0M
        _Py_Dealloc(op);
419
64.0M
    }
420
80.7M
}
exceptions.c:Py_DECREF
Line
Count
Source
409
111M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
111M
    if (_Py_IsImmortal(op)) {
413
32.0M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
32.0M
        return;
415
32.0M
    }
416
79.1M
    _Py_DECREF_STAT_INC();
417
79.1M
    if (--op->ob_refcnt == 0) {
418
67.6M
        _Py_Dealloc(op);
419
67.6M
    }
420
79.1M
}
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.72G
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.72G
    if (_Py_IsImmortal(op)) {
413
444M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
444M
        return;
415
444M
    }
416
1.28G
    _Py_DECREF_STAT_INC();
417
1.28G
    if (--op->ob_refcnt == 0) {
418
282M
        _Py_Dealloc(op);
419
282M
    }
420
1.28G
}
longobject.c:Py_DECREF
Line
Count
Source
409
4.12M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.12M
    if (_Py_IsImmortal(op)) {
413
3.59M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
3.59M
        return;
415
3.59M
    }
416
520k
    _Py_DECREF_STAT_INC();
417
520k
    if (--op->ob_refcnt == 0) {
418
2.84k
        _Py_Dealloc(op);
419
2.84k
    }
420
520k
}
dictobject.c:Py_DECREF
Line
Count
Source
409
1.04G
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.04G
    if (_Py_IsImmortal(op)) {
413
513M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
513M
        return;
415
513M
    }
416
530M
    _Py_DECREF_STAT_INC();
417
530M
    if (--op->ob_refcnt == 0) {
418
83.5M
        _Py_Dealloc(op);
419
83.5M
    }
420
530M
}
memoryobject.c:Py_DECREF
Line
Count
Source
409
737k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
737k
    if (_Py_IsImmortal(op)) {
413
4
        _Py_DECREF_IMMORTAL_STAT_INC();
414
4
        return;
415
4
    }
416
737k
    _Py_DECREF_STAT_INC();
417
737k
    if (--op->ob_refcnt == 0) {
418
368k
        _Py_Dealloc(op);
419
368k
    }
420
737k
}
moduleobject.c:Py_DECREF
Line
Count
Source
409
45.3k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
45.3k
    if (_Py_IsImmortal(op)) {
413
33.7k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
33.7k
        return;
415
33.7k
    }
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
434M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
434M
    if (_Py_IsImmortal(op)) {
413
391M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
391M
        return;
415
391M
    }
416
43.5M
    _Py_DECREF_STAT_INC();
417
43.5M
    if (--op->ob_refcnt == 0) {
418
238
        _Py_Dealloc(op);
419
238
    }
420
43.5M
}
Unexecuted instantiation: obmalloc.c:Py_DECREF
Unexecuted instantiation: picklebufobject.c:Py_DECREF
rangeobject.c:Py_DECREF
Line
Count
Source
409
34.8M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
34.8M
    if (_Py_IsImmortal(op)) {
413
32.2M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
32.2M
        return;
415
32.2M
    }
416
2.61M
    _Py_DECREF_STAT_INC();
417
2.61M
    if (--op->ob_refcnt == 0) {
418
1.18M
        _Py_Dealloc(op);
419
1.18M
    }
420
2.61M
}
setobject.c:Py_DECREF
Line
Count
Source
409
1.19M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.19M
    if (_Py_IsImmortal(op)) {
413
364k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
364k
        return;
415
364k
    }
416
827k
    _Py_DECREF_STAT_INC();
417
827k
    if (--op->ob_refcnt == 0) {
418
35.3k
        _Py_Dealloc(op);
419
35.3k
    }
420
827k
}
sliceobject.c:Py_DECREF
Line
Count
Source
409
140M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
140M
    if (_Py_IsImmortal(op)) {
413
127M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
127M
        return;
415
127M
    }
416
13.0M
    _Py_DECREF_STAT_INC();
417
13.0M
    if (--op->ob_refcnt == 0) {
418
1.15M
        _Py_Dealloc(op);
419
1.15M
    }
420
13.0M
}
structseq.c:Py_DECREF
Line
Count
Source
409
94.9k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
94.9k
    if (_Py_IsImmortal(op)) {
413
24.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
24.2k
        return;
415
24.2k
    }
416
70.6k
    _Py_DECREF_STAT_INC();
417
70.6k
    if (--op->ob_refcnt == 0) {
418
61.5k
        _Py_Dealloc(op);
419
61.5k
    }
420
70.6k
}
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
879M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
879M
    if (_Py_IsImmortal(op)) {
413
513M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
513M
        return;
415
513M
    }
416
365M
    _Py_DECREF_STAT_INC();
417
365M
    if (--op->ob_refcnt == 0) {
418
94.7M
        _Py_Dealloc(op);
419
94.7M
    }
420
365M
}
typeobject.c:Py_DECREF
Line
Count
Source
409
383M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
383M
    if (_Py_IsImmortal(op)) {
413
44.3M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
44.3M
        return;
415
44.3M
    }
416
339M
    _Py_DECREF_STAT_INC();
417
339M
    if (--op->ob_refcnt == 0) {
418
16.5M
        _Py_Dealloc(op);
419
16.5M
    }
420
339M
}
Unexecuted instantiation: typevarobject.c:Py_DECREF
unicodeobject.c:Py_DECREF
Line
Count
Source
409
231M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
231M
    if (_Py_IsImmortal(op)) {
413
137M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
137M
        return;
415
137M
    }
416
94.1M
    _Py_DECREF_STAT_INC();
417
94.1M
    if (--op->ob_refcnt == 0) {
418
22.4M
        _Py_Dealloc(op);
419
22.4M
    }
420
94.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.5k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
12.5k
    if (_Py_IsImmortal(op)) {
413
6.53k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
6.53k
        return;
415
6.53k
    }
416
5.98k
    _Py_DECREF_STAT_INC();
417
5.98k
    if (--op->ob_refcnt == 0) {
418
5.68k
        _Py_Dealloc(op);
419
5.68k
    }
420
5.98k
}
_warnings.c:Py_DECREF
Line
Count
Source
409
157k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
157k
    if (_Py_IsImmortal(op)) {
413
40.8k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
40.8k
        return;
415
40.8k
    }
416
116k
    _Py_DECREF_STAT_INC();
417
116k
    if (--op->ob_refcnt == 0) {
418
32.3k
        _Py_Dealloc(op);
419
32.3k
    }
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
74.2M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
74.2M
        return;
415
74.2M
    }
416
62.2M
    _Py_DECREF_STAT_INC();
417
62.2M
    if (--op->ob_refcnt == 0) {
418
36.1M
        _Py_Dealloc(op);
419
36.1M
    }
420
62.2M
}
ceval.c:Py_DECREF
Line
Count
Source
409
5.04k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
5.04k
    if (_Py_IsImmortal(op)) {
413
681
        _Py_DECREF_IMMORTAL_STAT_INC();
414
681
        return;
415
681
    }
416
4.36k
    _Py_DECREF_STAT_INC();
417
4.36k
    if (--op->ob_refcnt == 0) {
418
420
        _Py_Dealloc(op);
419
420
    }
420
4.36k
}
codecs.c:Py_DECREF
Line
Count
Source
409
7.24M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
7.24M
    if (_Py_IsImmortal(op)) {
413
2.48M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.48M
        return;
415
2.48M
    }
416
4.75M
    _Py_DECREF_STAT_INC();
417
4.75M
    if (--op->ob_refcnt == 0) {
418
2.25M
        _Py_Dealloc(op);
419
2.25M
    }
420
4.75M
}
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
127k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
127k
        return;
415
127k
    }
416
15.9k
    _Py_DECREF_STAT_INC();
417
15.9k
    if (--op->ob_refcnt == 0) {
418
976
        _Py_Dealloc(op);
419
976
    }
420
15.9k
}
compile.c:Py_DECREF
Line
Count
Source
409
578k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
578k
    if (_Py_IsImmortal(op)) {
413
296k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
296k
        return;
415
296k
    }
416
281k
    _Py_DECREF_STAT_INC();
417
281k
    if (--op->ob_refcnt == 0) {
418
93.1k
        _Py_Dealloc(op);
419
93.1k
    }
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
74.8M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
74.8M
    if (_Py_IsImmortal(op)) {
413
29.6M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
29.6M
        return;
415
29.6M
    }
416
45.2M
    _Py_DECREF_STAT_INC();
417
45.2M
    if (--op->ob_refcnt == 0) {
418
10.0M
        _Py_Dealloc(op);
419
10.0M
    }
420
45.2M
}
flowgraph.c:Py_DECREF
Line
Count
Source
409
69.4k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
69.4k
    if (_Py_IsImmortal(op)) {
413
37.9k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
37.9k
        return;
415
37.9k
    }
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
23.5M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
23.5M
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
23.5M
    _Py_DECREF_STAT_INC();
417
23.5M
    if (--op->ob_refcnt == 0) {
418
12.2M
        _Py_Dealloc(op);
419
12.2M
    }
420
23.5M
}
Unexecuted instantiation: future.c:Py_DECREF
gc.c:Py_DECREF
Line
Count
Source
409
729k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
729k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
729k
    _Py_DECREF_STAT_INC();
417
729k
    if (--op->ob_refcnt == 0) {
418
427k
        _Py_Dealloc(op);
419
427k
    }
420
729k
}
Unexecuted instantiation: gc_gil.c:Py_DECREF
getargs.c:Py_DECREF
Line
Count
Source
409
1.70M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.70M
    if (_Py_IsImmortal(op)) {
413
977k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
977k
        return;
415
977k
    }
416
732k
    _Py_DECREF_STAT_INC();
417
732k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
732k
}
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
168k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
168k
    if (_Py_IsImmortal(op)) {
413
13.1k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
13.1k
        return;
415
13.1k
    }
416
155k
    _Py_DECREF_STAT_INC();
417
155k
    if (--op->ob_refcnt == 0) {
418
11.6k
        _Py_Dealloc(op);
419
11.6k
    }
420
155k
}
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.51M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.51M
    if (_Py_IsImmortal(op)) {
413
3.85M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
3.85M
        return;
415
3.85M
    }
416
662k
    _Py_DECREF_STAT_INC();
417
662k
    if (--op->ob_refcnt == 0) {
418
23.1k
        _Py_Dealloc(op);
419
23.1k
    }
420
662k
}
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
567k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
567k
    if (_Py_IsImmortal(op)) {
413
91.9k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
91.9k
        return;
415
91.9k
    }
416
475k
    _Py_DECREF_STAT_INC();
417
475k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
475k
}
symtable.c:Py_DECREF
Line
Count
Source
409
756k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
756k
    if (_Py_IsImmortal(op)) {
413
346k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
346k
        return;
415
346k
    }
416
410k
    _Py_DECREF_STAT_INC();
417
410k
    if (--op->ob_refcnt == 0) {
418
193k
        _Py_Dealloc(op);
419
193k
    }
420
410k
}
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
65.4M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
65.4M
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
65.4M
    _Py_DECREF_STAT_INC();
417
65.4M
    if (--op->ob_refcnt == 0) {
418
12.5M
        _Py_Dealloc(op);
419
12.5M
    }
420
65.4M
}
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.7k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
11.7k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
11.7k
    _Py_DECREF_STAT_INC();
417
11.7k
    if (--op->ob_refcnt == 0) {
418
11.7k
        _Py_Dealloc(op);
419
11.7k
    }
420
11.7k
}
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
51.1k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
51.1k
    if (_Py_IsImmortal(op)) {
413
2.59k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.59k
        return;
415
2.59k
    }
416
48.5k
    _Py_DECREF_STAT_INC();
417
48.5k
    if (--op->ob_refcnt == 0) {
418
33.9k
        _Py_Dealloc(op);
419
33.9k
    }
420
48.5k
}
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
110k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
110k
    if (_Py_IsImmortal(op)) {
413
51.9k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
51.9k
        return;
415
51.9k
    }
416
58.4k
    _Py_DECREF_STAT_INC();
417
58.4k
    if (--op->ob_refcnt == 0) {
418
42.2k
        _Py_Dealloc(op);
419
42.2k
    }
420
58.4k
}
_iomodule.c:Py_DECREF
Line
Count
Source
409
6.36k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
6.36k
    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
121k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
121k
    if (_Py_IsImmortal(op)) {
413
102k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
102k
        return;
415
102k
    }
416
19.1k
    _Py_DECREF_STAT_INC();
417
19.1k
    if (--op->ob_refcnt == 0) {
418
9.58k
        _Py_Dealloc(op);
419
9.58k
    }
420
19.1k
}
fileio.c:Py_DECREF
Line
Count
Source
409
3.48k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
3.48k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
3.48k
    _Py_DECREF_STAT_INC();
417
3.48k
    if (--op->ob_refcnt == 0) {
418
2.24k
        _Py_Dealloc(op);
419
2.24k
    }
420
3.48k
}
bytesio.c:Py_DECREF
Line
Count
Source
409
28.7k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
28.7k
    if (_Py_IsImmortal(op)) {
413
9.60k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
9.60k
        return;
415
9.60k
    }
416
19.1k
    _Py_DECREF_STAT_INC();
417
19.1k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
19.1k
}
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.10k
    _Py_DECREF_STAT_INC();
417
5.10k
    if (--op->ob_refcnt == 0) {
418
2.05k
        _Py_Dealloc(op);
419
2.05k
    }
420
5.10k
}
textio.c:Py_DECREF
Line
Count
Source
409
49.1k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
49.1k
    if (_Py_IsImmortal(op)) {
413
32.7k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
32.7k
        return;
415
32.7k
    }
416
16.3k
    _Py_DECREF_STAT_INC();
417
16.3k
    if (--op->ob_refcnt == 0) {
418
16
        _Py_Dealloc(op);
419
16
    }
420
16.3k
}
stringio.c:Py_DECREF
Line
Count
Source
409
298k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
298k
    if (_Py_IsImmortal(op)) {
413
155k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
155k
        return;
415
155k
    }
416
143k
    _Py_DECREF_STAT_INC();
417
143k
    if (--op->ob_refcnt == 0) {
418
32.4k
        _Py_Dealloc(op);
419
32.4k
    }
420
143k
}
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
490M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
490M
    if (_Py_IsImmortal(op)) {
413
108M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
108M
        return;
415
108M
    }
416
381M
    _Py_DECREF_STAT_INC();
417
381M
    if (--op->ob_refcnt == 0) {
418
8.17M
        _Py_Dealloc(op);
419
8.17M
    }
420
381M
}
Unexecuted instantiation: _sysconfig.c:Py_DECREF
_threadmodule.c:Py_DECREF
Line
Count
Source
409
5.32k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
5.32k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
5.32k
    _Py_DECREF_STAT_INC();
417
5.32k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
5.32k
}
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
585k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
585k
    if (_Py_IsImmortal(op)) {
413
292k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
292k
        return;
415
292k
    }
416
292k
    _Py_DECREF_STAT_INC();
417
292k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
292k
}
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.1k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
21.1k
    if (_Py_IsImmortal(op)) {
413
523
        _Py_DECREF_IMMORTAL_STAT_INC();
414
523
        return;
415
523
    }
416
20.6k
    _Py_DECREF_STAT_INC();
417
20.6k
    if (--op->ob_refcnt == 0) {
418
15.0k
        _Py_Dealloc(op);
419
15.0k
    }
420
20.6k
}
Unexecuted instantiation: myreadline.c:Py_DECREF
abstract.c:Py_DECREF
Line
Count
Source
409
428M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
428M
    if (_Py_IsImmortal(op)) {
413
340M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
340M
        return;
415
340M
    }
416
88.1M
    _Py_DECREF_STAT_INC();
417
88.1M
    if (--op->ob_refcnt == 0) {
418
1.64M
        _Py_Dealloc(op);
419
1.64M
    }
420
88.1M
}
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
331k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
331k
    if (_Py_IsImmortal(op)) {
413
28.0k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
28.0k
        return;
415
28.0k
    }
416
303k
    _Py_DECREF_STAT_INC();
417
303k
    if (--op->ob_refcnt == 0) {
418
203k
        _Py_Dealloc(op);
419
203k
    }
420
303k
}
classobject.c:Py_DECREF
Line
Count
Source
409
45.9M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
45.9M
    if (_Py_IsImmortal(op)) {
413
2
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2
        return;
415
2
    }
416
45.9M
    _Py_DECREF_STAT_INC();
417
45.9M
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
45.9M
}
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
62.9k
    _Py_DECREF_STAT_INC();
417
62.9k
    if (--op->ob_refcnt == 0) {
418
30.1k
        _Py_Dealloc(op);
419
30.1k
    }
420
62.9k
}
Unexecuted instantiation: complexobject.c:Py_DECREF
descrobject.c:Py_DECREF
Line
Count
Source
409
109M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
109M
    if (_Py_IsImmortal(op)) {
413
11.3M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
11.3M
        return;
415
11.3M
    }
416
97.8M
    _Py_DECREF_STAT_INC();
417
97.8M
    if (--op->ob_refcnt == 0) {
418
65.1M
        _Py_Dealloc(op);
419
65.1M
    }
420
97.8M
}
enumobject.c:Py_DECREF
Line
Count
Source
409
273M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
273M
    if (_Py_IsImmortal(op)) {
413
110M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
110M
        return;
415
110M
    }
416
162M
    _Py_DECREF_STAT_INC();
417
162M
    if (--op->ob_refcnt == 0) {
418
49.6M
        _Py_Dealloc(op);
419
49.6M
    }
420
162M
}
genobject.c:Py_DECREF
Line
Count
Source
409
56.2M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
56.2M
    if (_Py_IsImmortal(op)) {
413
56.1M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
56.1M
        return;
415
56.1M
    }
416
83.1k
    _Py_DECREF_STAT_INC();
417
83.1k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
83.1k
}
fileobject.c:Py_DECREF
Line
Count
Source
409
12.8k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
12.8k
    if (_Py_IsImmortal(op)) {
413
11.8k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
11.8k
        return;
415
11.8k
    }
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
11.2M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
11.2M
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
11.2M
    _Py_DECREF_STAT_INC();
417
11.2M
    if (--op->ob_refcnt == 0) {
418
24.6k
        _Py_Dealloc(op);
419
24.6k
    }
420
11.2M
}
funcobject.c:Py_DECREF
Line
Count
Source
409
131M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
131M
    if (_Py_IsImmortal(op)) {
413
74.6M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
74.6M
        return;
415
74.6M
    }
416
56.7M
    _Py_DECREF_STAT_INC();
417
56.7M
    if (--op->ob_refcnt == 0) {
418
398k
        _Py_Dealloc(op);
419
398k
    }
420
56.7M
}
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.09M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.09M
    if (_Py_IsImmortal(op)) {
413
730k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
730k
        return;
415
730k
    }
416
365k
    _Py_DECREF_STAT_INC();
417
365k
    if (--op->ob_refcnt == 0) {
418
365k
        _Py_Dealloc(op);
419
365k
    }
420
365k
}
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
295M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
295M
    if (_Py_IsImmortal(op)) {
413
4.48M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
4.48M
        return;
415
4.48M
    }
416
290M
    _Py_DECREF_STAT_INC();
417
290M
    if (--op->ob_refcnt == 0) {
418
227M
        _Py_Dealloc(op);
419
227M
    }
420
290M
}
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.05M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.05M
    if (_Py_IsImmortal(op)) {
413
1.80M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
1.80M
        return;
415
1.80M
    }
416
2.25M
    _Py_DECREF_STAT_INC();
417
2.25M
    if (--op->ob_refcnt == 0) {
418
506k
        _Py_Dealloc(op);
419
506k
    }
420
2.25M
}
Unexecuted instantiation: Python-tokenize.c:Py_DECREF
Unexecuted instantiation: asdl.c:Py_DECREF
assemble.c:Py_DECREF
Line
Count
Source
409
45.8k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
45.8k
    if (_Py_IsImmortal(op)) {
413
7.84k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
7.84k
        return;
415
7.84k
    }
416
38.0k
    _Py_DECREF_STAT_INC();
417
38.0k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
38.0k
}
Unexecuted instantiation: ast.c:Py_DECREF
ast_preprocess.c:Py_DECREF
Line
Count
Source
409
2.28k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
2.28k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
2.28k
    _Py_DECREF_STAT_INC();
417
2.28k
    if (--op->ob_refcnt == 0) {
418
2.28k
        _Py_Dealloc(op);
419
2.28k
    }
420
2.28k
}
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
134k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
134k
    if (_Py_IsImmortal(op)) {
413
48.0k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
48.0k
        return;
415
48.0k
    }
416
86.8k
    _Py_DECREF_STAT_INC();
417
86.8k
    if (--op->ob_refcnt == 0) {
418
69.3k
        _Py_Dealloc(op);
419
69.3k
    }
420
86.8k
}
pegen_errors.c:Py_DECREF
Line
Count
Source
409
50.2k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
50.2k
    if (_Py_IsImmortal(op)) {
413
3.84k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
3.84k
        return;
415
3.84k
    }
416
46.4k
    _Py_DECREF_STAT_INC();
417
46.4k
    if (--op->ob_refcnt == 0) {
418
6.04k
        _Py_Dealloc(op);
419
6.04k
    }
420
46.4k
}
Unexecuted instantiation: parser.c:Py_DECREF
Unexecuted instantiation: buffer.c:Py_DECREF
lexer.c:Py_DECREF
Line
Count
Source
409
13.9k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
13.9k
    if (_Py_IsImmortal(op)) {
413
691
        _Py_DECREF_IMMORTAL_STAT_INC();
414
691
        return;
415
691
    }
416
13.3k
    _Py_DECREF_STAT_INC();
417
13.3k
    if (--op->ob_refcnt == 0) {
418
13.3k
        _Py_Dealloc(op);
419
13.3k
    }
420
13.3k
}
state.c:Py_DECREF
Line
Count
Source
409
23.9k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
23.9k
    if (_Py_IsImmortal(op)) {
413
151
        _Py_DECREF_IMMORTAL_STAT_INC();
414
151
        return;
415
151
    }
416
23.8k
    _Py_DECREF_STAT_INC();
417
23.8k
    if (--op->ob_refcnt == 0) {
418
2.60k
        _Py_Dealloc(op);
419
2.60k
    }
420
23.8k
}
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
42.4k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
42.4k
    if (_Py_IsImmortal(op)) {
413
2.74k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.74k
        return;
415
2.74k
    }
416
39.7k
    _Py_DECREF_STAT_INC();
417
39.7k
    if (--op->ob_refcnt == 0) {
418
39.7k
        _Py_Dealloc(op);
419
39.7k
    }
420
39.7k
}
421
7.29G
#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.48G
    do { \
476
1.48G
        _Py_TYPEOF(op)* _tmp_op_ptr = &(op); \
477
1.48G
        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
478
1.48G
        if (_tmp_old_op != NULL) { \
479
444M
            *_tmp_op_ptr = _Py_NULL; \
480
444M
            Py_DECREF(_tmp_old_op); \
481
444M
        } \
482
1.48G
    } 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.63G
{
500
1.63G
    if (op != _Py_NULL) {
501
715M
        Py_INCREF(op);
502
715M
    }
503
1.63G
}
Unexecuted instantiation: bytesobject.c:Py_XINCREF
Unexecuted instantiation: call.c:Py_XINCREF
exceptions.c:Py_XINCREF
Line
Count
Source
499
62.3M
{
500
62.3M
    if (op != _Py_NULL) {
501
1.52M
        Py_INCREF(op);
502
1.52M
    }
503
62.3M
}
Unexecuted instantiation: genericaliasobject.c:Py_XINCREF
Unexecuted instantiation: floatobject.c:Py_XINCREF
listobject.c:Py_XINCREF
Line
Count
Source
499
1.01M
{
500
1.01M
    if (op != _Py_NULL) {
501
1.01M
        Py_INCREF(op);
502
1.01M
    }
503
1.01M
}
Unexecuted instantiation: longobject.c:Py_XINCREF
dictobject.c:Py_XINCREF
Line
Count
Source
499
611M
{
500
611M
    if (op != _Py_NULL) {
501
218M
        Py_INCREF(op);
502
218M
    }
503
611M
}
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
49.9M
{
500
49.9M
    if (op != _Py_NULL) {
501
49.6M
        Py_INCREF(op);
502
49.6M
    }
503
49.9M
}
Unexecuted instantiation: typevarobject.c:Py_XINCREF
Unexecuted instantiation: unicodeobject.c:Py_XINCREF
Unexecuted instantiation: unicodectype.c:Py_XINCREF
Unexecuted instantiation: unionobject.c:Py_XINCREF
weakrefobject.c:Py_XINCREF
Line
Count
Source
499
328k
{
500
328k
    if (op != _Py_NULL) {
501
6.46k
        Py_INCREF(op);
502
6.46k
    }
503
328k
}
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
220M
{
500
220M
    if (op != _Py_NULL) {
501
79.0M
        Py_INCREF(op);
502
79.0M
    }
503
220M
}
Unexecuted instantiation: codecs.c:Py_XINCREF
Unexecuted instantiation: codegen.c:Py_XINCREF
compile.c:Py_XINCREF
Line
Count
Source
499
9.36k
{
500
9.36k
    if (op != _Py_NULL) {
501
4.31k
        Py_INCREF(op);
502
4.31k
    }
503
9.36k
}
context.c:Py_XINCREF
Line
Count
Source
499
16.0k
{
500
16.0k
    if (op != _Py_NULL) {
501
0
        Py_INCREF(op);
502
0
    }
503
16.0k
}
errors.c:Py_XINCREF
Line
Count
Source
499
30.2M
{
500
30.2M
    if (op != _Py_NULL) {
501
30.1M
        Py_INCREF(op);
502
30.1M
    }
503
30.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.80k
{
500
2.80k
    if (op != _Py_NULL) {
501
1.42k
        Py_INCREF(op);
502
1.42k
    }
503
2.80k
}
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
62.9M
{
500
62.9M
    if (op != _Py_NULL) {
501
32.7M
        Py_INCREF(op);
502
32.7M
    }
503
62.9M
}
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
14.0M
{
500
14.0M
    if (op != _Py_NULL) {
501
13.6M
        Py_INCREF(op);
502
13.6M
    }
503
14.0M
}
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
5.71M
{
500
5.71M
    if (op != _Py_NULL) {
501
70.2k
        Py_INCREF(op);
502
70.2k
    }
503
5.71M
}
Unexecuted instantiation: classobject.c:Py_XINCREF
codeobject.c:Py_XINCREF
Line
Count
Source
499
6.17k
{
500
6.17k
    if (op != _Py_NULL) {
501
6.17k
        Py_INCREF(op);
502
6.17k
    }
503
6.17k
}
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
4.02k
{
500
4.02k
    if (op != _Py_NULL) {
501
0
        Py_INCREF(op);
502
0
    }
503
4.02k
}
Unexecuted instantiation: fileobject.c:Py_XINCREF
Unexecuted instantiation: frameobject.c:Py_XINCREF
funcobject.c:Py_XINCREF
Line
Count
Source
499
3.35k
{
500
3.35k
    if (op != _Py_NULL) {
501
12
        Py_INCREF(op);
502
12
    }
503
3.35k
}
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
578M
{
500
578M
    if (op != _Py_NULL) {
501
289M
        Py_INCREF(op);
502
289M
    }
503
578M
}
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.32k
{
500
7.32k
    if (op != _Py_NULL) {
501
7.32k
        Py_INCREF(op);
502
7.32k
    }
503
7.32k
}
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.63G
#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
506
#endif
507
508
static inline void Py_XDECREF(PyObject *op)
509
4.78G
{
510
4.78G
    if (op != _Py_NULL) {
511
3.88G
        Py_DECREF(op);
512
3.88G
    }
513
4.78G
}
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
51.8M
{
510
51.8M
    if (op != _Py_NULL) {
511
20.2M
        Py_DECREF(op);
512
20.2M
    }
513
51.8M
}
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
617k
{
510
617k
    if (op != _Py_NULL) {
511
8
        Py_DECREF(op);
512
8
    }
513
617k
}
listobject.c:Py_XDECREF
Line
Count
Source
509
1.65G
{
510
1.65G
    if (op != _Py_NULL) {
511
1.62G
        Py_DECREF(op);
512
1.62G
    }
513
1.65G
}
longobject.c:Py_XDECREF
Line
Count
Source
509
1.24k
{
510
1.24k
    if (op != _Py_NULL) {
511
417
        Py_DECREF(op);
512
417
    }
513
1.24k
}
dictobject.c:Py_XDECREF
Line
Count
Source
509
752M
{
510
752M
    if (op != _Py_NULL) {
511
745M
        Py_DECREF(op);
512
745M
    }
513
752M
}
Unexecuted instantiation: memoryobject.c:Py_XDECREF
moduleobject.c:Py_XDECREF
Line
Count
Source
509
2.16k
{
510
2.16k
    if (op != _Py_NULL) {
511
501
        Py_DECREF(op);
512
501
    }
513
2.16k
}
object.c:Py_XDECREF
Line
Count
Source
509
34.3k
{
510
34.3k
    if (op != _Py_NULL) {
511
369
        Py_DECREF(op);
512
369
    }
513
34.3k
}
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
262k
{
510
262k
    if (op != _Py_NULL) {
511
16
        Py_DECREF(op);
512
16
    }
513
262k
}
Unexecuted instantiation: sliceobject.c:Py_XDECREF
structseq.c:Py_XDECREF
Line
Count
Source
509
89.1k
{
510
89.1k
    if (op != _Py_NULL) {
511
89.1k
        Py_DECREF(op);
512
89.1k
    }
513
89.1k
}
Unexecuted instantiation: templateobject.c:Py_XDECREF
tupleobject.c:Py_XDECREF
Line
Count
Source
509
877M
{
510
877M
    if (op != _Py_NULL) {
511
874M
        Py_DECREF(op);
512
874M
    }
513
877M
}
typeobject.c:Py_XDECREF
Line
Count
Source
509
19.6M
{
510
19.6M
    if (op != _Py_NULL) {
511
15.4M
        Py_DECREF(op);
512
15.4M
    }
513
19.6M
}
Unexecuted instantiation: typevarobject.c:Py_XDECREF
unicodeobject.c:Py_XDECREF
Line
Count
Source
509
87.7M
{
510
87.7M
    if (op != _Py_NULL) {
511
62.1M
        Py_DECREF(op);
512
62.1M
    }
513
87.7M
}
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
321k
{
510
321k
    if (op != _Py_NULL) {
511
172
        Py_DECREF(op);
512
172
    }
513
321k
}
_warnings.c:Py_XDECREF
Line
Count
Source
509
82.2k
{
510
82.2k
    if (op != _Py_NULL) {
511
82.2k
        Py_DECREF(op);
512
82.2k
    }
513
82.2k
}
bltinmodule.c:Py_XDECREF
Line
Count
Source
509
6.60M
{
510
6.60M
    if (op != _Py_NULL) {
511
667k
        Py_DECREF(op);
512
667k
    }
513
6.60M
}
ceval.c:Py_XDECREF
Line
Count
Source
509
268k
{
510
268k
    if (op != _Py_NULL) {
511
5.04k
        Py_DECREF(op);
512
5.04k
    }
513
268k
}
codecs.c:Py_XDECREF
Line
Count
Source
509
174k
{
510
174k
    if (op != _Py_NULL) {
511
116k
        Py_DECREF(op);
512
116k
    }
513
174k
}
Unexecuted instantiation: codegen.c:Py_XDECREF
compile.c:Py_XDECREF
Line
Count
Source
509
26.4k
{
510
26.4k
    if (op != _Py_NULL) {
511
7.72k
        Py_DECREF(op);
512
7.72k
    }
513
26.4k
}
Unexecuted instantiation: context.c:Py_XDECREF
errors.c:Py_XDECREF
Line
Count
Source
509
157M
{
510
157M
    if (op != _Py_NULL) {
511
25.1M
        Py_DECREF(op);
512
25.1M
    }
513
157M
}
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
116k
{
510
116k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
116k
}
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
94.7k
{
510
94.7k
    if (op != _Py_NULL) {
511
71.3k
        Py_DECREF(op);
512
71.3k
    }
513
94.7k
}
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.1k
{
510
13.1k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
13.1k
}
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
1.06M
{
510
1.06M
    if (op != _Py_NULL) {
511
566k
        Py_DECREF(op);
512
566k
    }
513
1.06M
}
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
125M
{
510
125M
    if (op != _Py_NULL) {
511
65.4M
        Py_DECREF(op);
512
65.4M
    }
513
125M
}
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
665
{
510
665
    if (op != _Py_NULL) {
511
256
        Py_DECREF(op);
512
256
    }
513
665
}
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
70.3k
{
510
70.3k
    if (op != _Py_NULL) {
511
28.1k
        Py_DECREF(op);
512
28.1k
    }
513
70.3k
}
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.58k
{
510
9.58k
    if (op != _Py_NULL) {
511
9.58k
        Py_DECREF(op);
512
9.58k
    }
513
9.58k
}
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.6k
{
510
32.6k
    if (op != _Py_NULL) {
511
32
        Py_DECREF(op);
512
32
    }
513
32.6k
}
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
95.6M
{
510
95.6M
    if (op != _Py_NULL) {
511
95.6M
        Py_DECREF(op);
512
95.6M
    }
513
95.6M
}
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.78k
{
510
2.78k
    if (op != _Py_NULL) {
511
2.78k
        Py_DECREF(op);
512
2.78k
    }
513
2.78k
}
Unexecuted instantiation: myreadline.c:Py_XDECREF
abstract.c:Py_XDECREF
Line
Count
Source
509
178k
{
510
178k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
178k
}
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
5.70M
{
510
5.70M
    if (op != _Py_NULL) {
511
331k
        Py_DECREF(op);
512
331k
    }
513
5.70M
}
classobject.c:Py_XDECREF
Line
Count
Source
509
22.9M
{
510
22.9M
    if (op != _Py_NULL) {
511
22.9M
        Py_DECREF(op);
512
22.9M
    }
513
22.9M
}
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
34.5M
{
510
34.5M
    if (op != _Py_NULL) {
511
25.0M
        Py_DECREF(op);
512
25.0M
    }
513
34.5M
}
enumobject.c:Py_XDECREF
Line
Count
Source
509
17.7M
{
510
17.7M
    if (op != _Py_NULL) {
511
11.8M
        Py_DECREF(op);
512
11.8M
    }
513
17.7M
}
genobject.c:Py_XDECREF
Line
Count
Source
509
2.01k
{
510
2.01k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
2.01k
}
Unexecuted instantiation: fileobject.c:Py_XDECREF
Unexecuted instantiation: frameobject.c:Py_XDECREF
funcobject.c:Py_XDECREF
Line
Count
Source
509
2.83k
{
510
2.83k
    if (op != _Py_NULL) {
511
1.08k
        Py_DECREF(op);
512
1.08k
    }
513
2.83k
}
Unexecuted instantiation: interpolationobject.c:Py_XDECREF
iterobject.c:Py_XDECREF
Line
Count
Source
509
1.09M
{
510
1.09M
    if (op != _Py_NULL) {
511
365k
        Py_DECREF(op);
512
365k
    }
513
1.09M
}
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
867M
{
510
867M
    if (op != _Py_NULL) {
511
295M
        Py_DECREF(op);
512
295M
    }
513
867M
}
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.8k
{
510
45.8k
    if (op != _Py_NULL) {
511
45.8k
        Py_DECREF(op);
512
45.8k
    }
513
45.8k
}
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.85k
{
510
6.85k
    if (op != _Py_NULL) {
511
592
        Py_DECREF(op);
512
592
    }
513
6.85k
}
pegen.c:Py_XDECREF
Line
Count
Source
509
34.7k
{
510
34.7k
    if (op != _Py_NULL) {
511
1.65k
        Py_DECREF(op);
512
1.65k
    }
513
34.7k
}
pegen_errors.c:Py_XDECREF
Line
Count
Source
509
14.9k
{
510
14.9k
    if (op != _Py_NULL) {
511
12.1k
        Py_DECREF(op);
512
12.1k
    }
513
14.9k
}
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
101k
{
510
101k
    if (op != _Py_NULL) {
511
23.9k
        Py_DECREF(op);
512
23.9k
    }
513
101k
}
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
32.1k
{
510
32.1k
    if (op != _Py_NULL) {
511
32.1k
        Py_DECREF(op);
512
32.1k
    }
513
32.1k
}
514
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
515
4.79G
#  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.53G
{
527
5.53G
    Py_INCREF(obj);
528
5.53G
    return obj;
529
5.53G
}
bytesobject.c:_Py_NewRef
Line
Count
Source
526
400k
{
527
400k
    Py_INCREF(obj);
528
400k
    return obj;
529
400k
}
call.c:_Py_NewRef
Line
Count
Source
526
22.8M
{
527
22.8M
    Py_INCREF(obj);
528
22.8M
    return obj;
529
22.8M
}
exceptions.c:_Py_NewRef
Line
Count
Source
526
82.0M
{
527
82.0M
    Py_INCREF(obj);
528
82.0M
    return obj;
529
82.0M
}
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.30G
{
527
1.30G
    Py_INCREF(obj);
528
1.30G
    return obj;
529
1.30G
}
longobject.c:_Py_NewRef
Line
Count
Source
526
4.00M
{
527
4.00M
    Py_INCREF(obj);
528
4.00M
    return obj;
529
4.00M
}
dictobject.c:_Py_NewRef
Line
Count
Source
526
730M
{
527
730M
    Py_INCREF(obj);
528
730M
    return obj;
529
730M
}
memoryobject.c:_Py_NewRef
Line
Count
Source
526
627k
{
527
627k
    Py_INCREF(obj);
528
627k
    return obj;
529
627k
}
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
160M
{
527
160M
    Py_INCREF(obj);
528
160M
    return obj;
529
160M
}
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.43M
{
527
1.43M
    Py_INCREF(obj);
528
1.43M
    return obj;
529
1.43M
}
sliceobject.c:_Py_NewRef
Line
Count
Source
526
46.8M
{
527
46.8M
    Py_INCREF(obj);
528
46.8M
    return obj;
529
46.8M
}
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
596M
{
527
596M
    Py_INCREF(obj);
528
596M
    return obj;
529
596M
}
typeobject.c:_Py_NewRef
Line
Count
Source
526
76.1M
{
527
76.1M
    Py_INCREF(obj);
528
76.1M
    return obj;
529
76.1M
}
Unexecuted instantiation: typevarobject.c:_Py_NewRef
unicodeobject.c:_Py_NewRef
Line
Count
Source
526
221M
{
527
221M
    Py_INCREF(obj);
528
221M
    return obj;
529
221M
}
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
32.0k
{
527
32.0k
    Py_INCREF(obj);
528
32.0k
    return obj;
529
32.0k
}
bltinmodule.c:_Py_NewRef
Line
Count
Source
526
12.3M
{
527
12.3M
    Py_INCREF(obj);
528
12.3M
    return obj;
529
12.3M
}
ceval.c:_Py_NewRef
Line
Count
Source
526
1.26G
{
527
1.26G
    Py_INCREF(obj);
528
1.26G
    return obj;
529
1.26G
}
codecs.c:_Py_NewRef
Line
Count
Source
526
3.39M
{
527
3.39M
    Py_INCREF(obj);
528
3.39M
    return obj;
529
3.39M
}
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
30.2M
{
527
30.2M
    Py_INCREF(obj);
528
30.2M
    return obj;
529
30.2M
}
flowgraph.c:_Py_NewRef
Line
Count
Source
526
93.6k
{
527
93.6k
    Py_INCREF(obj);
528
93.6k
    return obj;
529
93.6k
}
frame.c:_Py_NewRef
Line
Count
Source
526
11.2M
{
527
11.2M
    Py_INCREF(obj);
528
11.2M
    return obj;
529
11.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
754k
{
527
754k
    Py_INCREF(obj);
528
754k
    return obj;
529
754k
}
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.8k
{
527
33.8k
    Py_INCREF(obj);
528
33.8k
    return obj;
529
33.8k
}
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
19.8k
{
527
19.8k
    Py_INCREF(obj);
528
19.8k
    return obj;
529
19.8k
}
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.8k
{
527
39.8k
    Py_INCREF(obj);
528
39.8k
    return obj;
529
39.8k
}
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
16.9M
{
527
16.9M
    Py_INCREF(obj);
528
16.9M
    return obj;
529
16.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.6k
{
527
40.6k
    Py_INCREF(obj);
528
40.6k
    return obj;
529
40.6k
}
Unexecuted instantiation: fileio.c:_Py_NewRef
bytesio.c:_Py_NewRef
Line
Count
Source
526
10.2k
{
527
10.2k
    Py_INCREF(obj);
528
10.2k
    return obj;
529
10.2k
}
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
82.3k
{
527
82.3k
    Py_INCREF(obj);
528
82.3k
    return obj;
529
82.3k
}
stringio.c:_Py_NewRef
Line
Count
Source
526
16.2k
{
527
16.2k
    Py_INCREF(obj);
528
16.2k
    return obj;
529
16.2k
}
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
254M
{
527
254M
    Py_INCREF(obj);
528
254M
    return obj;
529
254M
}
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.52M
{
527
1.52M
    Py_INCREF(obj);
528
1.52M
    return obj;
529
1.52M
}
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
540M
{
527
540M
    Py_INCREF(obj);
528
540M
    return obj;
529
540M
}
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
45.9M
{
527
45.9M
    Py_INCREF(obj);
528
45.9M
    return obj;
529
45.9M
}
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
25.0M
{
527
25.0M
    Py_INCREF(obj);
528
25.0M
    return obj;
529
25.0M
}
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
42.4M
{
527
42.4M
    Py_INCREF(obj);
528
42.4M
    return obj;
529
42.4M
}
Unexecuted instantiation: fileobject.c:_Py_NewRef
frameobject.c:_Py_NewRef
Line
Count
Source
526
5.25k
{
527
5.25k
    Py_INCREF(obj);
528
5.25k
    return obj;
529
5.25k
}
funcobject.c:_Py_NewRef
Line
Count
Source
526
27.1M
{
527
27.1M
    Py_INCREF(obj);
528
27.1M
    return obj;
529
27.1M
}
Unexecuted instantiation: interpolationobject.c:_Py_NewRef
iterobject.c:_Py_NewRef
Line
Count
Source
526
730k
{
527
730k
    Py_INCREF(obj);
528
730k
    return obj;
529
730k
}
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
5.93M
{
527
5.93M
    Py_INCREF(obj);
528
5.93M
    return obj;
529
5.93M
}
Unexecuted instantiation: namespaceobject.c:_Py_NewRef
Unexecuted instantiation: _contextvars.c:_Py_NewRef
Python-ast.c:_Py_NewRef
Line
Count
Source
526
564k
{
527
564k
    Py_INCREF(obj);
528
564k
    return obj;
529
564k
}
Unexecuted instantiation: Python-tokenize.c:_Py_NewRef
Unexecuted instantiation: asdl.c:_Py_NewRef
assemble.c:_Py_NewRef
Line
Count
Source
526
43.2k
{
527
43.2k
    Py_INCREF(obj);
528
43.2k
    return obj;
529
43.2k
}
Unexecuted instantiation: ast.c:_Py_NewRef
Unexecuted instantiation: ast_preprocess.c:_Py_NewRef
Unexecuted instantiation: ast_unparse.c:_Py_NewRef
Unexecuted instantiation: critical_section.c:_Py_NewRef
Unexecuted instantiation: crossinterp.c:_Py_NewRef
Unexecuted instantiation: getcopyright.c:_Py_NewRef
Unexecuted instantiation: getplatform.c:_Py_NewRef
Unexecuted instantiation: getversion.c:_Py_NewRef
Unexecuted instantiation: optimizer.c:_Py_NewRef
Unexecuted instantiation: pathconfig.c:_Py_NewRef
Unexecuted instantiation: structmember.c:_Py_NewRef
pegen.c:_Py_NewRef
Line
Count
Source
526
21.3k
{
527
21.3k
    Py_INCREF(obj);
528
21.3k
    return obj;
529
21.3k
}
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.41G
{
533
1.41G
    Py_XINCREF(obj);
534
1.41G
    return obj;
535
1.41G
}
Unexecuted instantiation: bytesobject.c:_Py_XNewRef
Unexecuted instantiation: call.c:_Py_XNewRef
exceptions.c:_Py_XNewRef
Line
Count
Source
532
62.2M
{
533
62.2M
    Py_XINCREF(obj);
534
62.2M
    return obj;
535
62.2M
}
Unexecuted instantiation: genericaliasobject.c:_Py_XNewRef
Unexecuted instantiation: floatobject.c:_Py_XNewRef
listobject.c:_Py_XNewRef
Line
Count
Source
532
1.01M
{
533
1.01M
    Py_XINCREF(obj);
534
1.01M
    return obj;
535
1.01M
}
Unexecuted instantiation: longobject.c:_Py_XNewRef
dictobject.c:_Py_XNewRef
Line
Count
Source
532
611M
{
533
611M
    Py_XINCREF(obj);
534
611M
    return obj;
535
611M
}
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
323k
{
533
323k
    Py_XINCREF(obj);
534
323k
    return obj;
535
323k
}
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
328k
{
533
328k
    Py_XINCREF(obj);
534
328k
    return obj;
535
328k
}
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
79.0M
{
533
79.0M
    Py_XINCREF(obj);
534
79.0M
    return obj;
535
79.0M
}
Unexecuted instantiation: codecs.c:_Py_XNewRef
Unexecuted instantiation: codegen.c:_Py_XNewRef
compile.c:_Py_XNewRef
Line
Count
Source
532
9.36k
{
533
9.36k
    Py_XINCREF(obj);
534
9.36k
    return obj;
535
9.36k
}
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.80k
{
533
2.80k
    Py_XINCREF(obj);
534
2.80k
    return obj;
535
2.80k
}
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
62.9M
{
533
62.9M
    Py_XINCREF(obj);
534
62.9M
    return obj;
535
62.9M
}
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
14.0M
{
533
14.0M
    Py_XINCREF(obj);
534
14.0M
    return obj;
535
14.0M
}
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
5.71M
{
533
5.71M
    Py_XINCREF(obj);
534
5.71M
    return obj;
535
5.71M
}
Unexecuted instantiation: classobject.c:_Py_XNewRef
codeobject.c:_Py_XNewRef
Line
Count
Source
532
6.17k
{
533
6.17k
    Py_XINCREF(obj);
534
6.17k
    return obj;
535
6.17k
}
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.35k
{
533
3.35k
    Py_XINCREF(obj);
534
3.35k
    return obj;
535
3.35k
}
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
578M
{
533
578M
    Py_XINCREF(obj);
534
578M
    return obj;
535
578M
}
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.85k
{
533
6.85k
    Py_XINCREF(obj);
534
6.85k
    return obj;
535
6.85k
}
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.42G
#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
542
1.39G
#  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