Coverage Report

Created: 2025-07-18 06:09

/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.87G
#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
47
0
#define _Py_IMMORTAL_MINIMUM_REFCNT (1ULL << 31)
48
273M
#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
49
273M
#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
921M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
921M
    #if !defined(Py_GIL_DISABLED)
104
921M
        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
921M
    }
bytesobject.c:_Py_REFCNT
Line
Count
Source
102
258k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
258k
    #if !defined(Py_GIL_DISABLED)
104
258k
        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
258k
    }
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
17
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
17
    #if !defined(Py_GIL_DISABLED)
104
17
        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
17
    }
dictobject.c:_Py_REFCNT
Line
Count
Source
102
539M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
539M
    #if !defined(Py_GIL_DISABLED)
104
539M
        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
539M
    }
Unexecuted instantiation: memoryobject.c:_Py_REFCNT
Unexecuted instantiation: moduleobject.c:_Py_REFCNT
object.c:_Py_REFCNT
Line
Count
Source
102
62.8M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
62.8M
    #if !defined(Py_GIL_DISABLED)
104
62.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
62.8M
    }
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.31k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
1.31k
    #if !defined(Py_GIL_DISABLED)
104
1.31k
        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.31k
    }
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
70.7k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
70.7k
    #if !defined(Py_GIL_DISABLED)
104
70.7k
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
70.7k
    }
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.3M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
64.3M
    #if !defined(Py_GIL_DISABLED)
104
64.3M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
64.3M
    }
Unexecuted instantiation: unicodectype.c:_Py_REFCNT
Unexecuted instantiation: unionobject.c:_Py_REFCNT
weakrefobject.c:_Py_REFCNT
Line
Count
Source
102
39.8M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
39.8M
    #if !defined(Py_GIL_DISABLED)
104
39.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
39.8M
    }
Unexecuted instantiation: _warnings.c:_Py_REFCNT
bltinmodule.c:_Py_REFCNT
Line
Count
Source
102
22.5M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
22.5M
    #if !defined(Py_GIL_DISABLED)
104
22.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
22.5M
    }
Unexecuted instantiation: ceval.c:_Py_REFCNT
Unexecuted instantiation: codecs.c:_Py_REFCNT
Unexecuted instantiation: codegen.c:_Py_REFCNT
Unexecuted instantiation: compile.c:_Py_REFCNT
Unexecuted instantiation: context.c:_Py_REFCNT
Unexecuted instantiation: errors.c:_Py_REFCNT
Unexecuted instantiation: flowgraph.c:_Py_REFCNT
frame.c:_Py_REFCNT
Line
Count
Source
102
24.9M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
24.9M
    #if !defined(Py_GIL_DISABLED)
104
24.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
24.9M
    }
Unexecuted instantiation: future.c:_Py_REFCNT
gc.c:_Py_REFCNT
Line
Count
Source
102
45.5M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
45.5M
    #if !defined(Py_GIL_DISABLED)
104
45.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
45.5M
    }
Unexecuted instantiation: gc_gil.c:_Py_REFCNT
Unexecuted instantiation: getargs.c:_Py_REFCNT
Unexecuted instantiation: ceval_gil.c:_Py_REFCNT
Unexecuted instantiation: hamt.c:_Py_REFCNT
Unexecuted instantiation: hashtable.c:_Py_REFCNT
import.c:_Py_REFCNT
Line
Count
Source
102
16
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
16
    #if !defined(Py_GIL_DISABLED)
104
16
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
16
    }
Unexecuted instantiation: importdl.c:_Py_REFCNT
Unexecuted instantiation: initconfig.c:_Py_REFCNT
Unexecuted instantiation: instrumentation.c:_Py_REFCNT
Unexecuted instantiation: instruction_sequence.c:_Py_REFCNT
Unexecuted instantiation: intrinsics.c:_Py_REFCNT
Unexecuted instantiation: legacy_tracing.c:_Py_REFCNT
Unexecuted instantiation: lock.c:_Py_REFCNT
marshal.c:_Py_REFCNT
Line
Count
Source
102
135k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
135k
    #if !defined(Py_GIL_DISABLED)
104
135k
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
135k
    }
Unexecuted instantiation: modsupport.c:_Py_REFCNT
Unexecuted instantiation: mysnprintf.c:_Py_REFCNT
Unexecuted instantiation: parking_lot.c:_Py_REFCNT
Unexecuted instantiation: preconfig.c:_Py_REFCNT
Unexecuted instantiation: pyarena.c:_Py_REFCNT
Unexecuted instantiation: pyctype.c:_Py_REFCNT
Unexecuted instantiation: pyhash.c:_Py_REFCNT
Unexecuted instantiation: pylifecycle.c:_Py_REFCNT
Unexecuted instantiation: pymath.c:_Py_REFCNT
Unexecuted instantiation: pystate.c:_Py_REFCNT
Unexecuted instantiation: pythonrun.c:_Py_REFCNT
Unexecuted instantiation: pytime.c:_Py_REFCNT
Unexecuted instantiation: qsbr.c:_Py_REFCNT
Unexecuted instantiation: bootstrap_hash.c:_Py_REFCNT
Unexecuted instantiation: specialize.c:_Py_REFCNT
Unexecuted instantiation: symtable.c:_Py_REFCNT
Unexecuted instantiation: sysmodule.c:_Py_REFCNT
Unexecuted instantiation: thread.c:_Py_REFCNT
Unexecuted instantiation: traceback.c:_Py_REFCNT
Unexecuted instantiation: tracemalloc.c:_Py_REFCNT
Unexecuted instantiation: getopt.c:_Py_REFCNT
Unexecuted instantiation: pystrcmp.c:_Py_REFCNT
Unexecuted instantiation: pystrtod.c:_Py_REFCNT
Unexecuted instantiation: pystrhex.c:_Py_REFCNT
Unexecuted instantiation: dtoa.c:_Py_REFCNT
Unexecuted instantiation: formatter_unicode.c:_Py_REFCNT
Unexecuted instantiation: fileutils.c:_Py_REFCNT
Unexecuted instantiation: suggestions.c:_Py_REFCNT
Unexecuted instantiation: perf_trampoline.c:_Py_REFCNT
Unexecuted instantiation: perf_jit_trampoline.c:_Py_REFCNT
Unexecuted instantiation: remote_debugging.c:_Py_REFCNT
Unexecuted instantiation: dynload_shlib.c:_Py_REFCNT
Unexecuted instantiation: config.c:_Py_REFCNT
Unexecuted instantiation: gcmodule.c:_Py_REFCNT
Unexecuted instantiation: _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: _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.1k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
11.1k
    #if !defined(Py_GIL_DISABLED)
104
11.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
11.1k
    }
Unexecuted instantiation: fileio.c:_Py_REFCNT
Unexecuted instantiation: bytesio.c:_Py_REFCNT
Unexecuted instantiation: bufferedio.c:_Py_REFCNT
Unexecuted instantiation: textio.c:_Py_REFCNT
Unexecuted instantiation: stringio.c:_Py_REFCNT
Unexecuted instantiation: itertoolsmodule.c:_Py_REFCNT
Unexecuted instantiation: sre.c:_Py_REFCNT
Unexecuted instantiation: _sysconfig.c:_Py_REFCNT
Unexecuted instantiation: _threadmodule.c:_Py_REFCNT
Unexecuted instantiation: timemodule.c:_Py_REFCNT
Unexecuted instantiation: _typesmodule.c:_Py_REFCNT
Unexecuted instantiation: _typingmodule.c:_Py_REFCNT
Unexecuted instantiation: _weakref.c:_Py_REFCNT
Unexecuted instantiation: _abc.c:_Py_REFCNT
_functoolsmodule.c:_Py_REFCNT
Line
Count
Source
102
14
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
14
    #if !defined(Py_GIL_DISABLED)
104
14
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
14
    }
Unexecuted instantiation: _localemodule.c:_Py_REFCNT
Unexecuted instantiation: _opcode.c:_Py_REFCNT
Unexecuted instantiation: _operator.c:_Py_REFCNT
Unexecuted instantiation: _stat.c:_Py_REFCNT
Unexecuted instantiation: symtablemodule.c:_Py_REFCNT
Unexecuted instantiation: pwdmodule.c:_Py_REFCNT
Unexecuted instantiation: getpath.c:_Py_REFCNT
Unexecuted instantiation: frozen.c:_Py_REFCNT
Unexecuted instantiation: getbuildinfo.c:_Py_REFCNT
Unexecuted instantiation: peg_api.c:_Py_REFCNT
Unexecuted instantiation: file_tokenizer.c:_Py_REFCNT
Unexecuted instantiation: helpers.c:_Py_REFCNT
Unexecuted instantiation: myreadline.c:_Py_REFCNT
Unexecuted instantiation: abstract.c:_Py_REFCNT
Unexecuted instantiation: boolobject.c:_Py_REFCNT
Unexecuted instantiation: bytes_methods.c:_Py_REFCNT
Unexecuted instantiation: bytearrayobject.c:_Py_REFCNT
Unexecuted instantiation: capsule.c:_Py_REFCNT
Unexecuted instantiation: cellobject.c:_Py_REFCNT
Unexecuted instantiation: classobject.c:_Py_REFCNT
codeobject.c:_Py_REFCNT
Line
Count
Source
102
15.3k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
15.3k
    #if !defined(Py_GIL_DISABLED)
104
15.3k
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
15.3k
    }
Unexecuted instantiation: complexobject.c:_Py_REFCNT
Unexecuted instantiation: descrobject.c:_Py_REFCNT
enumobject.c:_Py_REFCNT
Line
Count
Source
102
94.0M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
94.0M
    #if !defined(Py_GIL_DISABLED)
104
94.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
94.0M
    }
Unexecuted instantiation: genobject.c:_Py_REFCNT
Unexecuted instantiation: fileobject.c:_Py_REFCNT
Unexecuted instantiation: frameobject.c:_Py_REFCNT
funcobject.c:_Py_REFCNT
Line
Count
Source
102
27.7M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
27.7M
    #if !defined(Py_GIL_DISABLED)
104
27.7M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
27.7M
    }
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
618M
    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
117
    #endif
118
#endif
119
120
#ifndef _Py_OPAQUE_PYOBJECT
121
static inline Py_ALWAYS_INLINE int _Py_IsImmortal(PyObject *op)
122
15.8G
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
15.8G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
15.8G
}
bytesobject.c:_Py_IsImmortal
Line
Count
Source
122
4.79M
{
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.79M
    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.79M
}
call.c:_Py_IsImmortal
Line
Count
Source
122
137M
{
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
137M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
137M
}
exceptions.c:_Py_IsImmortal
Line
Count
Source
122
114M
{
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
114M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
114M
}
genericaliasobject.c:_Py_IsImmortal
Line
Count
Source
122
84
{
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
84
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
84
}
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.89G
{
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.89G
    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.89G
}
longobject.c:_Py_IsImmortal
Line
Count
Source
122
22.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
22.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
22.9M
}
dictobject.c:_Py_IsImmortal
Line
Count
Source
122
1.53G
{
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.53G
    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.53G
}
memoryobject.c:_Py_IsImmortal
Line
Count
Source
122
688k
{
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
688k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
688k
}
moduleobject.c:_Py_IsImmortal
Line
Count
Source
122
44.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
44.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
44.7k
}
object.c:_Py_IsImmortal
Line
Count
Source
122
443M
{
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
443M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
443M
}
Unexecuted instantiation: obmalloc.c:_Py_IsImmortal
Unexecuted instantiation: picklebufobject.c:_Py_IsImmortal
rangeobject.c:_Py_IsImmortal
Line
Count
Source
122
34.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
34.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
34.9M
}
setobject.c:_Py_IsImmortal
Line
Count
Source
122
1.12M
{
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.12M
    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.12M
}
sliceobject.c:_Py_IsImmortal
Line
Count
Source
122
145M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
145M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
145M
}
structseq.c:_Py_IsImmortal
Line
Count
Source
122
92.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
92.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
92.8k
}
Unexecuted instantiation: templateobject.c:_Py_IsImmortal
tupleobject.c:_Py_IsImmortal
Line
Count
Source
122
979M
{
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
979M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
979M
}
typeobject.c:_Py_IsImmortal
Line
Count
Source
122
785M
{
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
785M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
785M
}
Unexecuted instantiation: typevarobject.c:_Py_IsImmortal
unicodeobject.c:_Py_IsImmortal
Line
Count
Source
122
220M
{
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
220M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
220M
}
Unexecuted instantiation: unicodectype.c:_Py_IsImmortal
unionobject.c:_Py_IsImmortal
Line
Count
Source
122
864
{
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
864
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
864
}
weakrefobject.c:_Py_IsImmortal
Line
Count
Source
122
12.3k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
12.3k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
12.3k
}
_warnings.c:_Py_IsImmortal
Line
Count
Source
122
152k
{
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
152k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
152k
}
bltinmodule.c:_Py_IsImmortal
Line
Count
Source
122
125M
{
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
125M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
125M
}
ceval.c:_Py_IsImmortal
Line
Count
Source
122
5.86G
{
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.86G
    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.86G
}
codecs.c:_Py_IsImmortal
Line
Count
Source
122
6.87M
{
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.87M
    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.87M
}
codegen.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
}
compile.c:_Py_IsImmortal
Line
Count
Source
122
504k
{
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
504k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
504k
}
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
78.0M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
78.0M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
78.0M
}
flowgraph.c:_Py_IsImmortal
Line
Count
Source
122
61.3k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
61.3k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
61.3k
}
frame.c:_Py_IsImmortal
Line
Count
Source
122
37.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
37.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
37.2M
}
Unexecuted instantiation: future.c:_Py_IsImmortal
gc.c:_Py_IsImmortal
Line
Count
Source
122
1.32G
{
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.32G
    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.32G
}
Unexecuted instantiation: gc_gil.c:_Py_IsImmortal
getargs.c:_Py_IsImmortal
Line
Count
Source
122
1.55M
{
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.55M
    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.55M
}
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
163k
{
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
163k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
163k
}
importdl.c:_Py_IsImmortal
Line
Count
Source
122
1.22k
{
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.22k
    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.22k
}
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
}
Unexecuted instantiation: instruction_sequence.c:_Py_IsImmortal
intrinsics.c:_Py_IsImmortal
Line
Count
Source
122
27.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
27.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
27.2k
}
Unexecuted instantiation: legacy_tracing.c:_Py_IsImmortal
Unexecuted instantiation: lock.c:_Py_IsImmortal
marshal.c:_Py_IsImmortal
Line
Count
Source
122
299k
{
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
299k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
299k
}
modsupport.c:_Py_IsImmortal
Line
Count
Source
122
16.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
16.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
16.7k
}
Unexecuted instantiation: mysnprintf.c:_Py_IsImmortal
Unexecuted instantiation: parking_lot.c:_Py_IsImmortal
Unexecuted instantiation: preconfig.c:_Py_IsImmortal
pyarena.c:_Py_IsImmortal
Line
Count
Source
122
4.22M
{
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.22M
    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.22M
}
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
155
{
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
155
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
155
}
Unexecuted instantiation: pytime.c:_Py_IsImmortal
Unexecuted instantiation: qsbr.c:_Py_IsImmortal
Unexecuted instantiation: bootstrap_hash.c:_Py_IsImmortal
specialize.c:_Py_IsImmortal
Line
Count
Source
122
521k
{
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
521k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
521k
}
symtable.c:_Py_IsImmortal
Line
Count
Source
122
648k
{
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
648k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
648k
}
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
68.3M
{
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
68.3M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
68.3M
}
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
10.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
10.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
10.4k
}
Unexecuted instantiation: suggestions.c:_Py_IsImmortal
Unexecuted instantiation: perf_trampoline.c:_Py_IsImmortal
Unexecuted instantiation: perf_jit_trampoline.c:_Py_IsImmortal
Unexecuted instantiation: remote_debugging.c:_Py_IsImmortal
Unexecuted instantiation: dynload_shlib.c:_Py_IsImmortal
Unexecuted instantiation: config.c:_Py_IsImmortal
Unexecuted instantiation: gcmodule.c:_Py_IsImmortal
Unexecuted instantiation: _asynciomodule.c:_Py_IsImmortal
Unexecuted instantiation: atexitmodule.c:_Py_IsImmortal
Unexecuted instantiation: faulthandler.c:_Py_IsImmortal
posixmodule.c:_Py_IsImmortal
Line
Count
Source
122
50.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
50.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
50.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
Unexecuted instantiation: _codecsmodule.c:_Py_IsImmortal
_collectionsmodule.c:_Py_IsImmortal
Line
Count
Source
122
108k
{
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
108k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
108k
}
Unexecuted instantiation: errnomodule.c:_Py_IsImmortal
_iomodule.c:_Py_IsImmortal
Line
Count
Source
122
6.00k
{
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.00k
    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.00k
}
iobase.c:_Py_IsImmortal
Line
Count
Source
122
118k
{
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
118k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
118k
}
fileio.c:_Py_IsImmortal
Line
Count
Source
122
3.26k
{
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.26k
    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.26k
}
bytesio.c:_Py_IsImmortal
Line
Count
Source
122
27.0k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
27.0k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
27.0k
}
bufferedio.c:_Py_IsImmortal
Line
Count
Source
122
6.76k
{
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.76k
    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.76k
}
textio.c:_Py_IsImmortal
Line
Count
Source
122
49.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
49.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
49.6k
}
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
2
{
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
    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
}
sre.c:_Py_IsImmortal
Line
Count
Source
122
545M
{
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
545M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
545M
}
Unexecuted instantiation: _sysconfig.c:_Py_IsImmortal
_threadmodule.c:_Py_IsImmortal
Line
Count
Source
122
5.29k
{
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.29k
    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.29k
}
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
28.0k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
28.0k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
28.0k
}
_functoolsmodule.c:_Py_IsImmortal
Line
Count
Source
122
92
{
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
92
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
92
}
Unexecuted instantiation: _localemodule.c:_Py_IsImmortal
Unexecuted instantiation: _opcode.c:_Py_IsImmortal
_operator.c:_Py_IsImmortal
Line
Count
Source
122
588k
{
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
588k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
588k
}
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
20.0k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
20.0k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
20.0k
}
Unexecuted instantiation: myreadline.c:_Py_IsImmortal
abstract.c:_Py_IsImmortal
Line
Count
Source
122
466M
{
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
466M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
466M
}
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
328k
{
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
328k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
328k
}
classobject.c:_Py_IsImmortal
Line
Count
Source
122
44.3M
{
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
44.3M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
44.3M
}
codeobject.c:_Py_IsImmortal
Line
Count
Source
122
112k
{
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
112k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
112k
}
Unexecuted instantiation: complexobject.c:_Py_IsImmortal
descrobject.c:_Py_IsImmortal
Line
Count
Source
122
120M
{
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
120M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
120M
}
enumobject.c:_Py_IsImmortal
Line
Count
Source
122
240M
{
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
240M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
240M
}
genobject.c:_Py_IsImmortal
Line
Count
Source
122
139M
{
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
139M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
139M
}
fileobject.c:_Py_IsImmortal
Line
Count
Source
122
12.0k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
12.0k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
12.0k
}
frameobject.c:_Py_IsImmortal
Line
Count
Source
122
12.2M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
12.2M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
12.2M
}
funcobject.c:_Py_IsImmortal
Line
Count
Source
122
153M
{
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
153M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
153M
}
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
997k
{
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
997k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
997k
}
Unexecuted instantiation: odictobject.c:_Py_IsImmortal
methodobject.c:_Py_IsImmortal
Line
Count
Source
122
275M
{
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
275M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
275M
}
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.11M
{
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.11M
    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.11M
}
Unexecuted instantiation: Python-tokenize.c:_Py_IsImmortal
Unexecuted instantiation: asdl.c:_Py_IsImmortal
assemble.c:_Py_IsImmortal
Line
Count
Source
122
40.3k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
40.3k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
40.3k
}
Unexecuted instantiation: ast.c:_Py_IsImmortal
ast_preprocess.c:_Py_IsImmortal
Line
Count
Source
122
2.31k
{
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.31k
    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.31k
}
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
558
{
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
558
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
558
}
pegen.c:_Py_IsImmortal
Line
Count
Source
122
129k
{
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
129k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
129k
}
pegen_errors.c:_Py_IsImmortal
Line
Count
Source
122
46.3k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
46.3k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
46.3k
}
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
21.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
21.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
21.5k
}
Unexecuted instantiation: readline_tokenizer.c:_Py_IsImmortal
Unexecuted instantiation: string_tokenizer.c:_Py_IsImmortal
Unexecuted instantiation: utf8_tokenizer.c:_Py_IsImmortal
Unexecuted instantiation: getcompiler.c:_Py_IsImmortal
Unexecuted instantiation: mystrtoul.c:_Py_IsImmortal
Unexecuted instantiation: token.c:_Py_IsImmortal
Unexecuted instantiation: action_helpers.c:_Py_IsImmortal
string_parser.c:_Py_IsImmortal
Line
Count
Source
122
41.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
41.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
41.9k
}
132
18.0G
#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: _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
608M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
608M
    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
608M
    if (_Py_IsImmortal(ob)) {
161
439
        return;
162
439
    }
163
608M
#ifndef Py_GIL_DISABLED
164
608M
#if SIZEOF_VOID_P > 4
165
608M
    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
608M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
608M
}
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
537M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
537M
    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
537M
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
537M
#ifndef Py_GIL_DISABLED
164
537M
#if SIZEOF_VOID_P > 4
165
537M
    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
537M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
537M
}
Unexecuted instantiation: memoryobject.c:Py_SET_REFCNT
moduleobject.c:Py_SET_REFCNT
Line
Count
Source
149
439
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
439
    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
439
    if (_Py_IsImmortal(ob)) {
161
439
        return;
162
439
    }
163
0
#ifndef Py_GIL_DISABLED
164
0
#if SIZEOF_VOID_P > 4
165
0
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
166
#else
167
    ob->ob_refcnt = refcnt;
168
#endif
169
#else
170
    if (_Py_IsOwnedByCurrentThread(ob)) {
171
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
172
            // On overflow, make the object immortal
173
            ob->ob_tid = _Py_UNOWNED_TID;
174
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
175
            ob->ob_ref_shared = 0;
176
        }
177
        else {
178
            // Set local refcount to desired refcount and shared refcount
179
            // to zero, but preserve the shared refcount flags.
180
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
181
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
182
        }
183
    }
184
    else {
185
        // Set local refcount to zero and shared refcount to desired refcount.
186
        // Mark the object as merged.
187
        ob->ob_tid = _Py_UNOWNED_TID;
188
        ob->ob_ref_local = 0;
189
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
190
    }
191
#endif  // Py_GIL_DISABLED
192
0
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
0
}
object.c:Py_SET_REFCNT
Line
Count
Source
149
41.9M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
41.9M
    assert(refcnt >= 0);
151
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
152
    // Stable ABI implements Py_SET_REFCNT() as a function call
153
    // on limited C API version 3.13 and newer.
154
    _Py_SetRefcnt(ob, refcnt);
155
#else
156
    // This immortal check is for code that is unaware of immortal objects.
157
    // The runtime tracks these objects and we should avoid as much
158
    // as possible having extensions inadvertently change the refcnt
159
    // of an immortalized object.
160
41.9M
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
41.9M
#ifndef Py_GIL_DISABLED
164
41.9M
#if SIZEOF_VOID_P > 4
165
41.9M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
166
#else
167
    ob->ob_refcnt = refcnt;
168
#endif
169
#else
170
    if (_Py_IsOwnedByCurrentThread(ob)) {
171
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
172
            // On overflow, make the object immortal
173
            ob->ob_tid = _Py_UNOWNED_TID;
174
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
175
            ob->ob_ref_shared = 0;
176
        }
177
        else {
178
            // Set local refcount to desired refcount and shared refcount
179
            // to zero, but preserve the shared refcount flags.
180
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
181
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
182
        }
183
    }
184
    else {
185
        // Set local refcount to zero and shared refcount to desired refcount.
186
        // Mark the object as merged.
187
        ob->ob_tid = _Py_UNOWNED_TID;
188
        ob->ob_ref_local = 0;
189
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
190
    }
191
#endif  // Py_GIL_DISABLED
192
41.9M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
41.9M
}
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.18M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
1.18M
    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.18M
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
1.18M
#ifndef Py_GIL_DISABLED
164
1.18M
#if SIZEOF_VOID_P > 4
165
1.18M
    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.18M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
1.18M
}
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: _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
15.3k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
15.3k
    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
15.3k
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
15.3k
#ifndef Py_GIL_DISABLED
164
15.3k
#if SIZEOF_VOID_P > 4
165
15.3k
    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
15.3k
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
15.3k
}
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
27.7M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
27.7M
    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
27.7M
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
27.7M
#ifndef Py_GIL_DISABLED
164
27.7M
#if SIZEOF_VOID_P > 4
165
27.7M
    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
27.7M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
27.7M
}
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
608M
#  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.60G
{
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.60G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
8.60G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
4.25G
        _Py_INCREF_IMMORTAL_STAT_INC();
283
4.25G
        return;
284
4.25G
    }
285
4.34G
    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.34G
    _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.34G
#endif
301
4.34G
}
bytesobject.c:Py_INCREF
Line
Count
Source
250
24.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
24.6M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
24.6M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
23.1M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
23.1M
        return;
284
23.1M
    }
285
1.48M
    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.48M
    _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.48M
#endif
301
1.48M
}
call.c:Py_INCREF
Line
Count
Source
250
23.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
23.7M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
23.7M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
8.35M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
8.35M
        return;
284
8.35M
    }
285
15.3M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
15.3M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
15.3M
#endif
301
15.3M
}
exceptions.c:Py_INCREF
Line
Count
Source
250
87.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
87.0M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
87.0M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
35.1M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
35.1M
        return;
284
35.1M
    }
285
51.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
51.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
51.8M
#endif
301
51.8M
}
genericaliasobject.c:Py_INCREF
Line
Count
Source
250
782
{
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
782
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
782
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
782
        _Py_INCREF_IMMORTAL_STAT_INC();
283
782
        return;
284
782
    }
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
}
floatobject.c:Py_INCREF
Line
Count
Source
250
747k
{
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
747k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
747k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
747k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
747k
        return;
284
747k
    }
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.49G
{
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.49G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.49G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
246M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
246M
        return;
284
246M
    }
285
1.24G
    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.24G
    _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.24G
#endif
301
1.24G
}
longobject.c:Py_INCREF
Line
Count
Source
250
101M
{
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
101M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
101M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
101M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
101M
        return;
284
101M
    }
285
4.58k
    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.58k
    _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.58k
#endif
301
4.58k
}
dictobject.c:Py_INCREF
Line
Count
Source
250
999M
{
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
999M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
999M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
353M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
353M
        return;
284
353M
    }
285
645M
    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
645M
    _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
645M
#endif
301
645M
}
memoryobject.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
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
593k
    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
593k
    _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
593k
#endif
301
593k
}
moduleobject.c:Py_INCREF
Line
Count
Source
250
1.39k
{
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.39k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.39k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
819
        _Py_INCREF_IMMORTAL_STAT_INC();
283
819
        return;
284
819
    }
285
578
    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
578
    _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
578
#endif
301
578
}
object.c:Py_INCREF
Line
Count
Source
250
556M
{
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
556M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
556M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
397M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
397M
        return;
284
397M
    }
285
158M
    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
158M
    _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
158M
#endif
301
158M
}
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.35M
{
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.35M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.35M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
415k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
415k
        return;
284
415k
    }
285
937k
    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
937k
    _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
937k
#endif
301
937k
}
sliceobject.c:Py_INCREF
Line
Count
Source
250
48.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
48.6M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
48.6M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
48.6M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
48.6M
        return;
284
48.6M
    }
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
Unexecuted instantiation: templateobject.c:Py_INCREF
tupleobject.c:Py_INCREF
Line
Count
Source
250
640M
{
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
640M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
640M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
461M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
461M
        return;
284
461M
    }
285
179M
    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
179M
    _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
179M
#endif
301
179M
}
typeobject.c:Py_INCREF
Line
Count
Source
250
291M
{
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
291M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
291M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
93.6M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
93.6M
        return;
284
93.6M
    }
285
198M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
198M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
198M
#endif
301
198M
}
Unexecuted instantiation: typevarobject.c:Py_INCREF
unicodeobject.c:Py_INCREF
Line
Count
Source
250
789M
{
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
789M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
789M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
688M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
688M
        return;
284
688M
    }
285
101M
    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
101M
    _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
101M
#endif
301
101M
}
Unexecuted instantiation: unicodectype.c:Py_INCREF
Unexecuted instantiation: unionobject.c:Py_INCREF
weakrefobject.c:Py_INCREF
Line
Count
Source
250
275k
{
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
275k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
275k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
1.24k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
1.24k
        return;
284
1.24k
    }
285
274k
    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
274k
    _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
274k
#endif
301
274k
}
_warnings.c:Py_INCREF
Line
Count
Source
250
64.1k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
64.1k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
64.1k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
20.1k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
20.1k
        return;
284
20.1k
    }
285
44.0k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
44.0k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
44.0k
#endif
301
44.0k
}
bltinmodule.c:Py_INCREF
Line
Count
Source
250
55.2M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
55.2M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
55.2M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
19.1M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
19.1M
        return;
284
19.1M
    }
285
36.1M
    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.1M
    _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.1M
#endif
301
36.1M
}
ceval.c:Py_INCREF
Line
Count
Source
250
1.41G
{
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.41G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.41G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
810M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
810M
        return;
284
810M
    }
285
608M
    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
608M
    _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
608M
#endif
301
608M
}
codecs.c:Py_INCREF
Line
Count
Source
250
3.23M
{
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.23M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
3.23M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
617k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
617k
        return;
284
617k
    }
285
2.61M
    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.61M
    _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.61M
#endif
301
2.61M
}
codegen.c:Py_INCREF
Line
Count
Source
250
2.10k
{
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.10k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
2.10k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
2.10k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
2.10k
        return;
284
2.10k
    }
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
94.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
94.3k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
94.3k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
41.0k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
41.0k
        return;
284
41.0k
    }
285
53.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
53.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
53.3k
#endif
301
53.3k
}
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
63.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
63.5M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
63.5M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
31.1M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
31.1M
        return;
284
31.1M
    }
285
32.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
32.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
32.4M
#endif
301
32.4M
}
flowgraph.c:Py_INCREF
Line
Count
Source
250
82.9k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
82.9k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
82.9k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
39.1k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
39.1k
        return;
284
39.1k
    }
285
43.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
43.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
43.8k
#endif
301
43.8k
}
frame.c:Py_INCREF
Line
Count
Source
250
12.8M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
12.8M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
12.8M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
12.8M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
12.8M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
12.8M
#endif
301
12.8M
}
Unexecuted instantiation: future.c:Py_INCREF
gc.c:Py_INCREF
Line
Count
Source
250
370M
{
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
370M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
370M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
278M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
278M
        return;
284
278M
    }
285
91.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
91.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
91.9M
#endif
301
91.9M
}
Unexecuted instantiation: gc_gil.c:Py_INCREF
getargs.c:Py_INCREF
Line
Count
Source
250
740k
{
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
740k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
740k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
130k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
130k
        return;
284
130k
    }
285
610k
    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
610k
    _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
610k
#endif
301
610k
}
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
80.5k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
80.5k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
80.5k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
12.3k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
12.3k
        return;
284
12.3k
    }
285
68.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
68.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
68.1k
#endif
301
68.1k
}
importdl.c:Py_INCREF
Line
Count
Source
250
533
{
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
533
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
533
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
420
        _Py_INCREF_IMMORTAL_STAT_INC();
283
420
        return;
284
420
    }
285
113
    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
113
    _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
113
#endif
301
113
}
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
24.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
24.2k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
24.2k
    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
24.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
24.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
24.2k
#endif
301
24.2k
}
Unexecuted instantiation: legacy_tracing.c:Py_INCREF
Unexecuted instantiation: lock.c:Py_INCREF
marshal.c:Py_INCREF
Line
Count
Source
250
305k
{
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
305k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
305k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
264k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
264k
        return;
284
264k
    }
285
40.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
40.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
40.2k
#endif
301
40.2k
}
modsupport.c:Py_INCREF
Line
Count
Source
250
274k
{
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
274k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
274k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
15.5k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
15.5k
        return;
284
15.5k
    }
285
259k
    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
259k
    _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
259k
#endif
301
259k
}
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.30k
{
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.30k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
2.30k
    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.30k
    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.30k
    _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.30k
#endif
301
2.30k
}
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
215k
{
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
215k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
215k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
215k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
215k
        return;
284
215k
    }
285
570
    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
570
    _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
570
#endif
301
570
}
sysmodule.c:Py_INCREF
Line
Count
Source
250
1.17k
{
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.17k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.17k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
803
        _Py_INCREF_IMMORTAL_STAT_INC();
283
803
        return;
284
803
    }
285
375
    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
375
    _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
375
#endif
301
375
}
Unexecuted instantiation: thread.c:Py_INCREF
traceback.c:Py_INCREF
Line
Count
Source
250
34.1M
{
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
34.1M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
34.1M
    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
34.1M
    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
34.1M
    _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
34.1M
#endif
301
34.1M
}
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
41.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
41.7k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
41.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
41.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
41.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
41.6k
#endif
301
41.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
Unexecuted instantiation: _codecsmodule.c:Py_INCREF
_collectionsmodule.c:Py_INCREF
Line
Count
Source
250
18.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
18.8M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
18.8M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
15.6M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
15.6M
        return;
284
15.6M
    }
285
3.27M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
3.27M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
3.27M
#endif
301
3.27M
}
Unexecuted instantiation: errnomodule.c:Py_INCREF
_iomodule.c:Py_INCREF
Line
Count
Source
250
48
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
48
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
48
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
48
        _Py_INCREF_IMMORTAL_STAT_INC();
283
48
        return;
284
48
    }
285
0
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
0
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
0
#endif
301
0
}
iobase.c:Py_INCREF
Line
Count
Source
250
40.4k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
40.4k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
40.4k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
40.4k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
40.4k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
40.4k
#endif
301
40.4k
}
Unexecuted instantiation: fileio.c:Py_INCREF
bytesio.c:Py_INCREF
Line
Count
Source
250
9.66k
{
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.66k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
9.66k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
25
        _Py_INCREF_IMMORTAL_STAT_INC();
283
25
        return;
284
25
    }
285
9.63k
    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
9.63k
    _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
9.63k
#endif
301
9.63k
}
bufferedio.c:Py_INCREF
Line
Count
Source
250
1.93k
{
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.93k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.93k
    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
1.93k
    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.93k
    _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.93k
#endif
301
1.93k
}
textio.c:Py_INCREF
Line
Count
Source
250
82.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
82.2k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
82.2k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
20.3k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
20.3k
        return;
284
20.3k
    }
285
61.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
61.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
61.8k
#endif
301
61.8k
}
stringio.c:Py_INCREF
Line
Count
Source
250
16.4k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
16.4k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
16.4k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
55
        _Py_INCREF_IMMORTAL_STAT_INC();
283
55
        return;
284
55
    }
285
16.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
16.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
16.3k
#endif
301
16.3k
}
itertoolsmodule.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
4
        _Py_INCREF_IMMORTAL_STAT_INC();
283
4
        return;
284
4
    }
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
}
sre.c:Py_INCREF
Line
Count
Source
250
393M
{
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
393M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
393M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
132M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
132M
        return;
284
132M
    }
285
260M
    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
260M
    _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
260M
#endif
301
260M
}
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.21k
{
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.21k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
9.21k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
9.12k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
9.12k
        return;
284
9.12k
    }
285
94
    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
94
    _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
94
#endif
301
94
}
_functoolsmodule.c:Py_INCREF
Line
Count
Source
250
291
{
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
291
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
291
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
42
        _Py_INCREF_IMMORTAL_STAT_INC();
283
42
        return;
284
42
    }
285
249
    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
249
    _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
249
#endif
301
249
}
Unexecuted instantiation: _localemodule.c:Py_INCREF
Unexecuted instantiation: _opcode.c:Py_INCREF
_operator.c:Py_INCREF
Line
Count
Source
250
1.56M
{
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.56M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.56M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
1.51M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
1.51M
        return;
284
1.51M
    }
285
47.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
47.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
47.3k
#endif
301
47.3k
}
Unexecuted instantiation: _stat.c:Py_INCREF
Unexecuted instantiation: symtablemodule.c:Py_INCREF
Unexecuted instantiation: pwdmodule.c:Py_INCREF
getpath.c:Py_INCREF
Line
Count
Source
250
176
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
176
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
176
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
176
        _Py_INCREF_IMMORTAL_STAT_INC();
283
176
        return;
284
176
    }
285
0
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
0
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
0
#endif
301
0
}
Unexecuted instantiation: frozen.c:Py_INCREF
Unexecuted instantiation: getbuildinfo.c:Py_INCREF
Unexecuted instantiation: peg_api.c:Py_INCREF
Unexecuted instantiation: file_tokenizer.c:Py_INCREF
Unexecuted instantiation: helpers.c:Py_INCREF
Unexecuted instantiation: myreadline.c:Py_INCREF
abstract.c:Py_INCREF
Line
Count
Source
250
603M
{
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
603M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
603M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
416M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
416M
        return;
284
416M
    }
285
187M
    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
187M
    _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
187M
#endif
301
187M
}
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
65.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
65.6k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
65.6k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
18.8k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
18.8k
        return;
284
18.8k
    }
285
46.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
46.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
46.7k
#endif
301
46.7k
}
classobject.c:Py_INCREF
Line
Count
Source
250
44.3M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
44.3M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
44.3M
    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
44.3M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
44.3M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
44.3M
#endif
301
44.3M
}
codeobject.c:Py_INCREF
Line
Count
Source
250
446k
{
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
446k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
446k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
230k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
230k
        return;
284
230k
    }
285
216k
    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
216k
    _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
216k
#endif
301
216k
}
complexobject.c:Py_INCREF
Line
Count
Source
250
4.24k
{
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.24k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
4.24k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
4.24k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
4.24k
        return;
284
4.24k
    }
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
24.1M
{
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.1M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
24.1M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
28.8k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
28.8k
        return;
284
28.8k
    }
285
24.1M
    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
24.1M
    _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
24.1M
#endif
301
24.1M
}
enumobject.c:Py_INCREF
Line
Count
Source
250
94.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
94.0M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
94.0M
    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
94.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
94.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
94.0M
#endif
301
94.0M
}
genobject.c:Py_INCREF
Line
Count
Source
250
42.2M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
42.2M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
42.2M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
42.2M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
42.2M
        return;
284
42.2M
    }
285
80.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
80.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
80.5k
#endif
301
80.5k
}
Unexecuted instantiation: fileobject.c:Py_INCREF
frameobject.c:Py_INCREF
Line
Count
Source
250
5.36k
{
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.36k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
5.36k
    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.36k
    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.36k
    _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.36k
#endif
301
5.36k
}
funcobject.c:Py_INCREF
Line
Count
Source
250
81.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
81.4M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
81.4M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
41.6M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
41.6M
        return;
284
41.6M
    }
285
39.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
39.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
39.8M
#endif
301
39.8M
}
Unexecuted instantiation: interpolationobject.c:Py_INCREF
iterobject.c:Py_INCREF
Line
Count
Source
250
665k
{
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
665k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
665k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
332k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
332k
        return;
284
332k
    }
285
333k
    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
333k
    _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
333k
#endif
301
333k
}
Unexecuted instantiation: odictobject.c:Py_INCREF
methodobject.c:Py_INCREF
Line
Count
Source
250
275M
{
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
275M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
275M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
4.80M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
4.80M
        return;
284
4.80M
    }
285
270M
    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
270M
    _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
270M
#endif
301
270M
}
Unexecuted instantiation: namespaceobject.c:Py_INCREF
Unexecuted instantiation: _contextvars.c:Py_INCREF
Python-ast.c:Py_INCREF
Line
Count
Source
250
574k
{
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
574k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
574k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
224k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
224k
        return;
284
224k
    }
285
350k
    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
350k
    _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
350k
#endif
301
350k
}
Unexecuted instantiation: Python-tokenize.c:Py_INCREF
Unexecuted instantiation: asdl.c:Py_INCREF
assemble.c:Py_INCREF
Line
Count
Source
250
37.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
37.2k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
37.2k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
37.1k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
37.1k
        return;
284
37.1k
    }
285
94
    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
94
    _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
94
#endif
301
94
}
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
89.9k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
89.9k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
89.9k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
33.1k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
33.1k
        return;
284
33.1k
    }
285
56.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
56.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
56.7k
#endif
301
56.7k
}
pegen.c:Py_INCREF
Line
Count
Source
250
20.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
20.6k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
20.6k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
1.67k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
1.67k
        return;
284
1.67k
    }
285
19.0k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
19.0k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
19.0k
#endif
301
19.0k
}
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.60G
#  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.49G
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
7.49G
    if (_Py_IsImmortal(op)) {
413
3.16G
        _Py_DECREF_IMMORTAL_STAT_INC();
414
3.16G
        return;
415
3.16G
    }
416
4.32G
    _Py_DECREF_STAT_INC();
417
4.32G
    if (--op->ob_refcnt == 0) {
418
1.05G
        _Py_Dealloc(op);
419
1.05G
    }
420
4.32G
}
bytesobject.c:Py_DECREF
Line
Count
Source
409
4.79M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.79M
    if (_Py_IsImmortal(op)) {
413
4.61M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
4.61M
        return;
415
4.61M
    }
416
178k
    _Py_DECREF_STAT_INC();
417
178k
    if (--op->ob_refcnt == 0) {
418
106k
        _Py_Dealloc(op);
419
106k
    }
420
178k
}
call.c:Py_DECREF
Line
Count
Source
409
137M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
137M
    if (_Py_IsImmortal(op)) {
413
58.0M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
58.0M
        return;
415
58.0M
    }
416
79.6M
    _Py_DECREF_STAT_INC();
417
79.6M
    if (--op->ob_refcnt == 0) {
418
62.5M
        _Py_Dealloc(op);
419
62.5M
    }
420
79.6M
}
exceptions.c:Py_DECREF
Line
Count
Source
409
114M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
114M
    if (_Py_IsImmortal(op)) {
413
35.2M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
35.2M
        return;
415
35.2M
    }
416
79.6M
    _Py_DECREF_STAT_INC();
417
79.6M
    if (--op->ob_refcnt == 0) {
418
68.9M
        _Py_Dealloc(op);
419
68.9M
    }
420
79.6M
}
genericaliasobject.c:Py_DECREF
Line
Count
Source
409
84
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
84
    if (_Py_IsImmortal(op)) {
413
42
        _Py_DECREF_IMMORTAL_STAT_INC();
414
42
        return;
415
42
    }
416
42
    _Py_DECREF_STAT_INC();
417
42
    if (--op->ob_refcnt == 0) {
418
42
        _Py_Dealloc(op);
419
42
    }
420
42
}
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.89G
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.89G
    if (_Py_IsImmortal(op)) {
413
441M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
441M
        return;
415
441M
    }
416
1.45G
    _Py_DECREF_STAT_INC();
417
1.45G
    if (--op->ob_refcnt == 0) {
418
276M
        _Py_Dealloc(op);
419
276M
    }
420
1.45G
}
longobject.c:Py_DECREF
Line
Count
Source
409
4.15M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.15M
    if (_Py_IsImmortal(op)) {
413
3.68M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
3.68M
        return;
415
3.68M
    }
416
471k
    _Py_DECREF_STAT_INC();
417
471k
    if (--op->ob_refcnt == 0) {
418
3.43k
        _Py_Dealloc(op);
419
3.43k
    }
420
471k
}
dictobject.c:Py_DECREF
Line
Count
Source
409
987M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
987M
    if (_Py_IsImmortal(op)) {
413
485M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
485M
        return;
415
485M
    }
416
501M
    _Py_DECREF_STAT_INC();
417
501M
    if (--op->ob_refcnt == 0) {
418
77.7M
        _Py_Dealloc(op);
419
77.7M
    }
420
501M
}
memoryobject.c:Py_DECREF
Line
Count
Source
409
688k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
688k
    if (_Py_IsImmortal(op)) {
413
4
        _Py_DECREF_IMMORTAL_STAT_INC();
414
4
        return;
415
4
    }
416
688k
    _Py_DECREF_STAT_INC();
417
688k
    if (--op->ob_refcnt == 0) {
418
344k
        _Py_Dealloc(op);
419
344k
    }
420
688k
}
moduleobject.c:Py_DECREF
Line
Count
Source
409
44.3k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
44.3k
    if (_Py_IsImmortal(op)) {
413
32.7k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
32.7k
        return;
415
32.7k
    }
416
11.5k
    _Py_DECREF_STAT_INC();
417
11.5k
    if (--op->ob_refcnt == 0) {
418
8
        _Py_Dealloc(op);
419
8
    }
420
11.5k
}
object.c:Py_DECREF
Line
Count
Source
409
401M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
401M
    if (_Py_IsImmortal(op)) {
413
360M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
360M
        return;
415
360M
    }
416
40.9M
    _Py_DECREF_STAT_INC();
417
40.9M
    if (--op->ob_refcnt == 0) {
418
224
        _Py_Dealloc(op);
419
224
    }
420
40.9M
}
Unexecuted instantiation: obmalloc.c:Py_DECREF
Unexecuted instantiation: picklebufobject.c:Py_DECREF
rangeobject.c:Py_DECREF
Line
Count
Source
409
34.9M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
34.9M
    if (_Py_IsImmortal(op)) {
413
32.4M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
32.4M
        return;
415
32.4M
    }
416
2.53M
    _Py_DECREF_STAT_INC();
417
2.53M
    if (--op->ob_refcnt == 0) {
418
1.25M
        _Py_Dealloc(op);
419
1.25M
    }
420
2.53M
}
setobject.c:Py_DECREF
Line
Count
Source
409
1.12M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.12M
    if (_Py_IsImmortal(op)) {
413
303k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
303k
        return;
415
303k
    }
416
823k
    _Py_DECREF_STAT_INC();
417
823k
    if (--op->ob_refcnt == 0) {
418
30.0k
        _Py_Dealloc(op);
419
30.0k
    }
420
823k
}
sliceobject.c:Py_DECREF
Line
Count
Source
409
145M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
145M
    if (_Py_IsImmortal(op)) {
413
135M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
135M
        return;
415
135M
    }
416
10.0M
    _Py_DECREF_STAT_INC();
417
10.0M
    if (--op->ob_refcnt == 0) {
418
907k
        _Py_Dealloc(op);
419
907k
    }
420
10.0M
}
structseq.c:Py_DECREF
Line
Count
Source
409
92.8k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
92.8k
    if (_Py_IsImmortal(op)) {
413
23.7k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
23.7k
        return;
415
23.7k
    }
416
69.1k
    _Py_DECREF_STAT_INC();
417
69.1k
    if (--op->ob_refcnt == 0) {
418
60.1k
        _Py_Dealloc(op);
419
60.1k
    }
420
69.1k
}
Unexecuted instantiation: templateobject.c:Py_DECREF
tupleobject.c:Py_DECREF
Line
Count
Source
409
979M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
979M
    if (_Py_IsImmortal(op)) {
413
602M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
602M
        return;
415
602M
    }
416
377M
    _Py_DECREF_STAT_INC();
417
377M
    if (--op->ob_refcnt == 0) {
418
108M
        _Py_Dealloc(op);
419
108M
    }
420
377M
}
typeobject.c:Py_DECREF
Line
Count
Source
409
366M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
366M
    if (_Py_IsImmortal(op)) {
413
44.1M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
44.1M
        return;
415
44.1M
    }
416
322M
    _Py_DECREF_STAT_INC();
417
322M
    if (--op->ob_refcnt == 0) {
418
15.3M
        _Py_Dealloc(op);
419
15.3M
    }
420
322M
}
Unexecuted instantiation: typevarobject.c:Py_DECREF
unicodeobject.c:Py_DECREF
Line
Count
Source
409
215M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
215M
    if (_Py_IsImmortal(op)) {
413
125M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
125M
        return;
415
125M
    }
416
89.5M
    _Py_DECREF_STAT_INC();
417
89.5M
    if (--op->ob_refcnt == 0) {
418
21.6M
        _Py_Dealloc(op);
419
21.6M
    }
420
89.5M
}
Unexecuted instantiation: unicodectype.c:Py_DECREF
unionobject.c:Py_DECREF
Line
Count
Source
409
864
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
864
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
864
    _Py_DECREF_STAT_INC();
417
864
    if (--op->ob_refcnt == 0) {
418
864
        _Py_Dealloc(op);
419
864
    }
420
864
}
weakrefobject.c:Py_DECREF
Line
Count
Source
409
12.3k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
12.3k
    if (_Py_IsImmortal(op)) {
413
6.50k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
6.50k
        return;
415
6.50k
    }
416
5.88k
    _Py_DECREF_STAT_INC();
417
5.88k
    if (--op->ob_refcnt == 0) {
418
5.63k
        _Py_Dealloc(op);
419
5.63k
    }
420
5.88k
}
_warnings.c:Py_DECREF
Line
Count
Source
409
152k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
152k
    if (_Py_IsImmortal(op)) {
413
39.8k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
39.8k
        return;
415
39.8k
    }
416
113k
    _Py_DECREF_STAT_INC();
417
113k
    if (--op->ob_refcnt == 0) {
418
31.2k
        _Py_Dealloc(op);
419
31.2k
    }
420
113k
}
bltinmodule.c:Py_DECREF
Line
Count
Source
409
125M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
125M
    if (_Py_IsImmortal(op)) {
413
63.3M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
63.3M
        return;
415
63.3M
    }
416
61.7M
    _Py_DECREF_STAT_INC();
417
61.7M
    if (--op->ob_refcnt == 0) {
418
36.0M
        _Py_Dealloc(op);
419
36.0M
    }
420
61.7M
}
ceval.c:Py_DECREF
Line
Count
Source
409
4.71k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.71k
    if (_Py_IsImmortal(op)) {
413
397
        _Py_DECREF_IMMORTAL_STAT_INC();
414
397
        return;
415
397
    }
416
4.31k
    _Py_DECREF_STAT_INC();
417
4.31k
    if (--op->ob_refcnt == 0) {
418
256
        _Py_Dealloc(op);
419
256
    }
420
4.31k
}
codecs.c:Py_DECREF
Line
Count
Source
409
6.87M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
6.87M
    if (_Py_IsImmortal(op)) {
413
2.33M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.33M
        return;
415
2.33M
    }
416
4.53M
    _Py_DECREF_STAT_INC();
417
4.53M
    if (--op->ob_refcnt == 0) {
418
2.14M
        _Py_Dealloc(op);
419
2.14M
    }
420
4.53M
}
codegen.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
107k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
107k
        return;
415
107k
    }
416
13.8k
    _Py_DECREF_STAT_INC();
417
13.8k
    if (--op->ob_refcnt == 0) {
418
776
        _Py_Dealloc(op);
419
776
    }
420
13.8k
}
compile.c:Py_DECREF
Line
Count
Source
409
504k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
504k
    if (_Py_IsImmortal(op)) {
413
257k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
257k
        return;
415
257k
    }
416
247k
    _Py_DECREF_STAT_INC();
417
247k
    if (--op->ob_refcnt == 0) {
418
82.1k
        _Py_Dealloc(op);
419
82.1k
    }
420
247k
}
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
78.0M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
78.0M
    if (_Py_IsImmortal(op)) {
413
31.1M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
31.1M
        return;
415
31.1M
    }
416
46.9M
    _Py_DECREF_STAT_INC();
417
46.9M
    if (--op->ob_refcnt == 0) {
418
10.9M
        _Py_Dealloc(op);
419
10.9M
    }
420
46.9M
}
flowgraph.c:Py_DECREF
Line
Count
Source
409
61.3k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
61.3k
    if (_Py_IsImmortal(op)) {
413
33.9k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
33.9k
        return;
415
33.9k
    }
416
27.4k
    _Py_DECREF_STAT_INC();
417
27.4k
    if (--op->ob_refcnt == 0) {
418
26
        _Py_Dealloc(op);
419
26
    }
420
27.4k
}
frame.c:Py_DECREF
Line
Count
Source
409
25.0M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
25.0M
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
25.0M
    _Py_DECREF_STAT_INC();
417
25.0M
    if (--op->ob_refcnt == 0) {
418
12.7M
        _Py_Dealloc(op);
419
12.7M
    }
420
25.0M
}
Unexecuted instantiation: future.c:Py_DECREF
gc.c:Py_DECREF
Line
Count
Source
409
637k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
637k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
637k
    _Py_DECREF_STAT_INC();
417
637k
    if (--op->ob_refcnt == 0) {
418
388k
        _Py_Dealloc(op);
419
388k
    }
420
637k
}
Unexecuted instantiation: gc_gil.c:Py_DECREF
getargs.c:Py_DECREF
Line
Count
Source
409
1.55M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.55M
    if (_Py_IsImmortal(op)) {
413
841k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
841k
        return;
415
841k
    }
416
716k
    _Py_DECREF_STAT_INC();
417
716k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
716k
}
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
163k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
163k
    if (_Py_IsImmortal(op)) {
413
12.8k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
12.8k
        return;
415
12.8k
    }
416
150k
    _Py_DECREF_STAT_INC();
417
150k
    if (--op->ob_refcnt == 0) {
418
11.1k
        _Py_Dealloc(op);
419
11.1k
    }
420
150k
}
importdl.c:Py_DECREF
Line
Count
Source
409
1.22k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.22k
    if (_Py_IsImmortal(op)) {
413
498
        _Py_DECREF_IMMORTAL_STAT_INC();
414
498
        return;
415
498
    }
416
726
    _Py_DECREF_STAT_INC();
417
726
    if (--op->ob_refcnt == 0) {
418
454
        _Py_Dealloc(op);
419
454
    }
420
726
}
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
}
Unexecuted instantiation: instruction_sequence.c:Py_DECREF
intrinsics.c:Py_DECREF
Line
Count
Source
409
27.2k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
27.2k
    if (_Py_IsImmortal(op)) {
413
15.4k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
15.4k
        return;
415
15.4k
    }
416
11.8k
    _Py_DECREF_STAT_INC();
417
11.8k
    if (--op->ob_refcnt == 0) {
418
120
        _Py_Dealloc(op);
419
120
    }
420
11.8k
}
Unexecuted instantiation: legacy_tracing.c:Py_DECREF
Unexecuted instantiation: lock.c:Py_DECREF
marshal.c:Py_DECREF
Line
Count
Source
409
299k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
299k
    if (_Py_IsImmortal(op)) {
413
129k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
129k
        return;
415
129k
    }
416
169k
    _Py_DECREF_STAT_INC();
417
169k
    if (--op->ob_refcnt == 0) {
418
2.43k
        _Py_Dealloc(op);
419
2.43k
    }
420
169k
}
modsupport.c:Py_DECREF
Line
Count
Source
409
16.7k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
16.7k
    if (_Py_IsImmortal(op)) {
413
11.0k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
11.0k
        return;
415
11.0k
    }
416
5.71k
    _Py_DECREF_STAT_INC();
417
5.71k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
5.71k
}
Unexecuted instantiation: mysnprintf.c:Py_DECREF
Unexecuted instantiation: parking_lot.c:Py_DECREF
Unexecuted instantiation: preconfig.c:Py_DECREF
pyarena.c:Py_DECREF
Line
Count
Source
409
4.22M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.22M
    if (_Py_IsImmortal(op)) {
413
3.61M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
3.61M
        return;
415
3.61M
    }
416
607k
    _Py_DECREF_STAT_INC();
417
607k
    if (--op->ob_refcnt == 0) {
418
20.8k
        _Py_Dealloc(op);
419
20.8k
    }
420
607k
}
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
155
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
155
    if (_Py_IsImmortal(op)) {
413
32
        _Py_DECREF_IMMORTAL_STAT_INC();
414
32
        return;
415
32
    }
416
123
    _Py_DECREF_STAT_INC();
417
123
    if (--op->ob_refcnt == 0) {
418
91
        _Py_Dealloc(op);
419
91
    }
420
123
}
Unexecuted instantiation: pytime.c:Py_DECREF
Unexecuted instantiation: qsbr.c:Py_DECREF
Unexecuted instantiation: bootstrap_hash.c:Py_DECREF
specialize.c:Py_DECREF
Line
Count
Source
409
521k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
521k
    if (_Py_IsImmortal(op)) {
413
100k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
100k
        return;
415
100k
    }
416
420k
    _Py_DECREF_STAT_INC();
417
420k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
420k
}
symtable.c:Py_DECREF
Line
Count
Source
409
648k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
648k
    if (_Py_IsImmortal(op)) {
413
293k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
293k
        return;
415
293k
    }
416
355k
    _Py_DECREF_STAT_INC();
417
355k
    if (--op->ob_refcnt == 0) {
418
170k
        _Py_Dealloc(op);
419
170k
    }
420
355k
}
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
68.3M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
68.3M
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
68.3M
    _Py_DECREF_STAT_INC();
417
68.3M
    if (--op->ob_refcnt == 0) {
418
13.4M
        _Py_Dealloc(op);
419
13.4M
    }
420
68.3M
}
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
10.4k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
10.4k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
10.4k
    _Py_DECREF_STAT_INC();
417
10.4k
    if (--op->ob_refcnt == 0) {
418
10.4k
        _Py_Dealloc(op);
419
10.4k
    }
420
10.4k
}
Unexecuted instantiation: suggestions.c:Py_DECREF
Unexecuted instantiation: perf_trampoline.c:Py_DECREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_DECREF
Unexecuted instantiation: remote_debugging.c:Py_DECREF
Unexecuted instantiation: dynload_shlib.c:Py_DECREF
Unexecuted instantiation: config.c:Py_DECREF
Unexecuted instantiation: gcmodule.c:Py_DECREF
Unexecuted instantiation: _asynciomodule.c:Py_DECREF
Unexecuted instantiation: atexitmodule.c:Py_DECREF
Unexecuted instantiation: faulthandler.c:Py_DECREF
posixmodule.c:Py_DECREF
Line
Count
Source
409
50.1k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
50.1k
    if (_Py_IsImmortal(op)) {
413
2.59k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.59k
        return;
415
2.59k
    }
416
47.5k
    _Py_DECREF_STAT_INC();
417
47.5k
    if (--op->ob_refcnt == 0) {
418
33.1k
        _Py_Dealloc(op);
419
33.1k
    }
420
47.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
Unexecuted instantiation: _codecsmodule.c:Py_DECREF
_collectionsmodule.c:Py_DECREF
Line
Count
Source
409
108k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
108k
    if (_Py_IsImmortal(op)) {
413
48.9k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
48.9k
        return;
415
48.9k
    }
416
59.5k
    _Py_DECREF_STAT_INC();
417
59.5k
    if (--op->ob_refcnt == 0) {
418
43.0k
        _Py_Dealloc(op);
419
43.0k
    }
420
59.5k
}
_iomodule.c:Py_DECREF
Line
Count
Source
409
6.00k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
6.00k
    if (_Py_IsImmortal(op)) {
413
2.04k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.04k
        return;
415
2.04k
    }
416
3.95k
    _Py_DECREF_STAT_INC();
417
3.95k
    if (--op->ob_refcnt == 0) {
418
1.98k
        _Py_Dealloc(op);
419
1.98k
    }
420
3.95k
}
iobase.c:Py_DECREF
Line
Count
Source
409
118k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
118k
    if (_Py_IsImmortal(op)) {
413
100k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
100k
        return;
415
100k
    }
416
18.0k
    _Py_DECREF_STAT_INC();
417
18.0k
    if (--op->ob_refcnt == 0) {
418
9.00k
        _Py_Dealloc(op);
419
9.00k
    }
420
18.0k
}
fileio.c:Py_DECREF
Line
Count
Source
409
3.26k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
3.26k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
3.26k
    _Py_DECREF_STAT_INC();
417
3.26k
    if (--op->ob_refcnt == 0) {
418
2.10k
        _Py_Dealloc(op);
419
2.10k
    }
420
3.26k
}
bytesio.c:Py_DECREF
Line
Count
Source
409
27.0k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
27.0k
    if (_Py_IsImmortal(op)) {
413
9.02k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
9.02k
        return;
415
9.02k
    }
416
17.9k
    _Py_DECREF_STAT_INC();
417
17.9k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
17.9k
}
bufferedio.c:Py_DECREF
Line
Count
Source
409
6.76k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
6.76k
    if (_Py_IsImmortal(op)) {
413
1.96k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
1.96k
        return;
415
1.96k
    }
416
4.80k
    _Py_DECREF_STAT_INC();
417
4.80k
    if (--op->ob_refcnt == 0) {
418
1.92k
        _Py_Dealloc(op);
419
1.92k
    }
420
4.80k
}
textio.c:Py_DECREF
Line
Count
Source
409
49.6k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
49.6k
    if (_Py_IsImmortal(op)) {
413
33.0k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
33.0k
        return;
415
33.0k
    }
416
16.5k
    _Py_DECREF_STAT_INC();
417
16.5k
    if (--op->ob_refcnt == 0) {
418
16
        _Py_Dealloc(op);
419
16
    }
420
16.5k
}
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
154k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
154k
        return;
415
154k
    }
416
143k
    _Py_DECREF_STAT_INC();
417
143k
    if (--op->ob_refcnt == 0) {
418
32.8k
        _Py_Dealloc(op);
419
32.8k
    }
420
143k
}
itertoolsmodule.c:Py_DECREF
Line
Count
Source
409
2
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
2
    if (_Py_IsImmortal(op)) {
413
2
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2
        return;
415
2
    }
416
0
    _Py_DECREF_STAT_INC();
417
0
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
0
}
sre.c:Py_DECREF
Line
Count
Source
409
545M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
545M
    if (_Py_IsImmortal(op)) {
413
110M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
110M
        return;
415
110M
    }
416
434M
    _Py_DECREF_STAT_INC();
417
434M
    if (--op->ob_refcnt == 0) {
418
7.94M
        _Py_Dealloc(op);
419
7.94M
    }
420
434M
}
Unexecuted instantiation: _sysconfig.c:Py_DECREF
_threadmodule.c:Py_DECREF
Line
Count
Source
409
5.29k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
5.29k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
5.29k
    _Py_DECREF_STAT_INC();
417
5.29k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
5.29k
}
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
28.0k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
28.0k
    if (_Py_IsImmortal(op)) {
413
9.86k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
9.86k
        return;
415
9.86k
    }
416
18.2k
    _Py_DECREF_STAT_INC();
417
18.2k
    if (--op->ob_refcnt == 0) {
418
2.43k
        _Py_Dealloc(op);
419
2.43k
    }
420
18.2k
}
_functoolsmodule.c:Py_DECREF
Line
Count
Source
409
92
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
92
    if (_Py_IsImmortal(op)) {
413
14
        _Py_DECREF_IMMORTAL_STAT_INC();
414
14
        return;
415
14
    }
416
78
    _Py_DECREF_STAT_INC();
417
78
    if (--op->ob_refcnt == 0) {
418
28
        _Py_Dealloc(op);
419
28
    }
420
78
}
Unexecuted instantiation: _localemodule.c:Py_DECREF
Unexecuted instantiation: _opcode.c:Py_DECREF
_operator.c:Py_DECREF
Line
Count
Source
409
588k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
588k
    if (_Py_IsImmortal(op)) {
413
294k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
294k
        return;
415
294k
    }
416
294k
    _Py_DECREF_STAT_INC();
417
294k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
294k
}
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
20.0k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
20.0k
    if (_Py_IsImmortal(op)) {
413
408
        _Py_DECREF_IMMORTAL_STAT_INC();
414
408
        return;
415
408
    }
416
19.6k
    _Py_DECREF_STAT_INC();
417
19.6k
    if (--op->ob_refcnt == 0) {
418
14.3k
        _Py_Dealloc(op);
419
14.3k
    }
420
19.6k
}
Unexecuted instantiation: myreadline.c:Py_DECREF
abstract.c:Py_DECREF
Line
Count
Source
409
466M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
466M
    if (_Py_IsImmortal(op)) {
413
386M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
386M
        return;
415
386M
    }
416
79.2M
    _Py_DECREF_STAT_INC();
417
79.2M
    if (--op->ob_refcnt == 0) {
418
1.76M
        _Py_Dealloc(op);
419
1.76M
    }
420
79.2M
}
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
328k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
328k
    if (_Py_IsImmortal(op)) {
413
23.3k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
23.3k
        return;
415
23.3k
    }
416
304k
    _Py_DECREF_STAT_INC();
417
304k
    if (--op->ob_refcnt == 0) {
418
208k
        _Py_Dealloc(op);
419
208k
    }
420
304k
}
classobject.c:Py_DECREF
Line
Count
Source
409
44.3M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
44.3M
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
44.3M
    _Py_DECREF_STAT_INC();
417
44.3M
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
44.3M
}
codeobject.c:Py_DECREF
Line
Count
Source
409
96.9k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
96.9k
    if (_Py_IsImmortal(op)) {
413
39.1k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
39.1k
        return;
415
39.1k
    }
416
57.8k
    _Py_DECREF_STAT_INC();
417
57.8k
    if (--op->ob_refcnt == 0) {
418
28.4k
        _Py_Dealloc(op);
419
28.4k
    }
420
57.8k
}
Unexecuted instantiation: complexobject.c:Py_DECREF
descrobject.c:Py_DECREF
Line
Count
Source
409
120M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
120M
    if (_Py_IsImmortal(op)) {
413
10.9M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
10.9M
        return;
415
10.9M
    }
416
109M
    _Py_DECREF_STAT_INC();
417
109M
    if (--op->ob_refcnt == 0) {
418
77.9M
        _Py_Dealloc(op);
419
77.9M
    }
420
109M
}
enumobject.c:Py_DECREF
Line
Count
Source
409
240M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
240M
    if (_Py_IsImmortal(op)) {
413
93.6M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
93.6M
        return;
415
93.6M
    }
416
146M
    _Py_DECREF_STAT_INC();
417
146M
    if (--op->ob_refcnt == 0) {
418
52.0M
        _Py_Dealloc(op);
419
52.0M
    }
420
146M
}
genobject.c:Py_DECREF
Line
Count
Source
409
55.4M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
55.4M
    if (_Py_IsImmortal(op)) {
413
55.3M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
55.3M
        return;
415
55.3M
    }
416
78.3k
    _Py_DECREF_STAT_INC();
417
78.3k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
78.3k
}
fileobject.c:Py_DECREF
Line
Count
Source
409
12.0k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
12.0k
    if (_Py_IsImmortal(op)) {
413
11.1k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
11.1k
        return;
415
11.1k
    }
416
944
    _Py_DECREF_STAT_INC();
417
944
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
944
}
frameobject.c:Py_DECREF
Line
Count
Source
409
12.2M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
12.2M
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
12.2M
    _Py_DECREF_STAT_INC();
417
12.2M
    if (--op->ob_refcnt == 0) {
418
21.0k
        _Py_Dealloc(op);
419
21.0k
    }
420
12.2M
}
funcobject.c:Py_DECREF
Line
Count
Source
409
125M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
125M
    if (_Py_IsImmortal(op)) {
413
71.2M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
71.2M
        return;
415
71.2M
    }
416
54.1M
    _Py_DECREF_STAT_INC();
417
54.1M
    if (--op->ob_refcnt == 0) {
418
362k
        _Py_Dealloc(op);
419
362k
    }
420
54.1M
}
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
997k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
997k
    if (_Py_IsImmortal(op)) {
413
664k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
664k
        return;
415
664k
    }
416
333k
    _Py_DECREF_STAT_INC();
417
333k
    if (--op->ob_refcnt == 0) {
418
332k
        _Py_Dealloc(op);
419
332k
    }
420
333k
}
Unexecuted instantiation: odictobject.c:Py_DECREF
methodobject.c:Py_DECREF
Line
Count
Source
409
275M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
275M
    if (_Py_IsImmortal(op)) {
413
4.79M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
4.79M
        return;
415
4.79M
    }
416
270M
    _Py_DECREF_STAT_INC();
417
270M
    if (--op->ob_refcnt == 0) {
418
206M
        _Py_Dealloc(op);
419
206M
    }
420
270M
}
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.11M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.11M
    if (_Py_IsImmortal(op)) {
413
1.81M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
1.81M
        return;
415
1.81M
    }
416
2.29M
    _Py_DECREF_STAT_INC();
417
2.29M
    if (--op->ob_refcnt == 0) {
418
511k
        _Py_Dealloc(op);
419
511k
    }
420
2.29M
}
Unexecuted instantiation: Python-tokenize.c:Py_DECREF
Unexecuted instantiation: asdl.c:Py_DECREF
assemble.c:Py_DECREF
Line
Count
Source
409
40.3k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
40.3k
    if (_Py_IsImmortal(op)) {
413
6.94k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
6.94k
        return;
415
6.94k
    }
416
33.3k
    _Py_DECREF_STAT_INC();
417
33.3k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
33.3k
}
Unexecuted instantiation: ast.c:Py_DECREF
ast_preprocess.c:Py_DECREF
Line
Count
Source
409
2.31k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
2.31k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
2.31k
    _Py_DECREF_STAT_INC();
417
2.31k
    if (--op->ob_refcnt == 0) {
418
2.31k
        _Py_Dealloc(op);
419
2.31k
    }
420
2.31k
}
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
558
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
558
    if (_Py_IsImmortal(op)) {
413
372
        _Py_DECREF_IMMORTAL_STAT_INC();
414
372
        return;
415
372
    }
416
186
    _Py_DECREF_STAT_INC();
417
186
    if (--op->ob_refcnt == 0) {
418
12
        _Py_Dealloc(op);
419
12
    }
420
186
}
pegen.c:Py_DECREF
Line
Count
Source
409
129k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
129k
    if (_Py_IsImmortal(op)) {
413
49.1k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
49.1k
        return;
415
49.1k
    }
416
80.8k
    _Py_DECREF_STAT_INC();
417
80.8k
    if (--op->ob_refcnt == 0) {
418
65.2k
        _Py_Dealloc(op);
419
65.2k
    }
420
80.8k
}
pegen_errors.c:Py_DECREF
Line
Count
Source
409
46.3k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
46.3k
    if (_Py_IsImmortal(op)) {
413
3.89k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
3.89k
        return;
415
3.89k
    }
416
42.4k
    _Py_DECREF_STAT_INC();
417
42.4k
    if (--op->ob_refcnt == 0) {
418
6.06k
        _Py_Dealloc(op);
419
6.06k
    }
420
42.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
736
        _Py_DECREF_IMMORTAL_STAT_INC();
414
736
        return;
415
736
    }
416
13.2k
    _Py_DECREF_STAT_INC();
417
13.2k
    if (--op->ob_refcnt == 0) {
418
13.2k
        _Py_Dealloc(op);
419
13.2k
    }
420
13.2k
}
state.c:Py_DECREF
Line
Count
Source
409
21.5k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
21.5k
    if (_Py_IsImmortal(op)) {
413
114
        _Py_DECREF_IMMORTAL_STAT_INC();
414
114
        return;
415
114
    }
416
21.4k
    _Py_DECREF_STAT_INC();
417
21.4k
    if (--op->ob_refcnt == 0) {
418
2.44k
        _Py_Dealloc(op);
419
2.44k
    }
420
21.4k
}
Unexecuted instantiation: readline_tokenizer.c:Py_DECREF
Unexecuted instantiation: string_tokenizer.c:Py_DECREF
Unexecuted instantiation: utf8_tokenizer.c:Py_DECREF
Unexecuted instantiation: getcompiler.c:Py_DECREF
Unexecuted instantiation: mystrtoul.c:Py_DECREF
Unexecuted instantiation: token.c:Py_DECREF
Unexecuted instantiation: action_helpers.c:Py_DECREF
string_parser.c:Py_DECREF
Line
Count
Source
409
41.9k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
41.9k
    if (_Py_IsImmortal(op)) {
413
2.94k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.94k
        return;
415
2.94k
    }
416
39.0k
    _Py_DECREF_STAT_INC();
417
39.0k
    if (--op->ob_refcnt == 0) {
418
39.0k
        _Py_Dealloc(op);
419
39.0k
    }
420
39.0k
}
421
7.49G
#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.53G
    do { \
476
1.53G
        _Py_TYPEOF(op)* _tmp_op_ptr = &(op); \
477
1.53G
        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
478
1.53G
        if (_tmp_old_op != NULL) { \
479
473M
            *_tmp_op_ptr = _Py_NULL; \
480
473M
            Py_DECREF(_tmp_old_op); \
481
473M
        } \
482
1.53G
    } 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.55G
{
500
1.55G
    if (op != _Py_NULL) {
501
681M
        Py_INCREF(op);
502
681M
    }
503
1.55G
}
Unexecuted instantiation: bytesobject.c:Py_XINCREF
Unexecuted instantiation: call.c:Py_XINCREF
exceptions.c:Py_XINCREF
Line
Count
Source
499
65.1M
{
500
65.1M
    if (op != _Py_NULL) {
501
1.49M
        Py_INCREF(op);
502
1.49M
    }
503
65.1M
}
Unexecuted instantiation: genericaliasobject.c:Py_XINCREF
Unexecuted instantiation: floatobject.c:Py_XINCREF
listobject.c:Py_XINCREF
Line
Count
Source
499
991k
{
500
991k
    if (op != _Py_NULL) {
501
991k
        Py_INCREF(op);
502
991k
    }
503
991k
}
Unexecuted instantiation: longobject.c:Py_XINCREF
dictobject.c:Py_XINCREF
Line
Count
Source
499
566M
{
500
566M
    if (op != _Py_NULL) {
501
207M
        Py_INCREF(op);
502
207M
    }
503
566M
}
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
47.6M
{
500
47.6M
    if (op != _Py_NULL) {
501
47.4M
        Py_INCREF(op);
502
47.4M
    }
503
47.6M
}
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
274k
{
500
274k
    if (op != _Py_NULL) {
501
6.40k
        Py_INCREF(op);
502
6.40k
    }
503
274k
}
Unexecuted instantiation: _warnings.c:Py_XINCREF
bltinmodule.c:Py_XINCREF
Line
Count
Source
499
301
{
500
301
    if (op != _Py_NULL) {
501
301
        Py_INCREF(op);
502
301
    }
503
301
}
ceval.c:Py_XINCREF
Line
Count
Source
499
216M
{
500
216M
    if (op != _Py_NULL) {
501
75.4M
        Py_INCREF(op);
502
75.4M
    }
503
216M
}
Unexecuted instantiation: codecs.c:Py_XINCREF
Unexecuted instantiation: codegen.c:Py_XINCREF
compile.c:Py_XINCREF
Line
Count
Source
499
8.36k
{
500
8.36k
    if (op != _Py_NULL) {
501
3.99k
        Py_INCREF(op);
502
3.99k
    }
503
8.36k
}
context.c:Py_XINCREF
Line
Count
Source
499
15.4k
{
500
15.4k
    if (op != _Py_NULL) {
501
0
        Py_INCREF(op);
502
0
    }
503
15.4k
}
errors.c:Py_XINCREF
Line
Count
Source
499
31.6M
{
500
31.6M
    if (op != _Py_NULL) {
501
31.5M
        Py_INCREF(op);
502
31.5M
    }
503
31.6M
}
Unexecuted instantiation: flowgraph.c:Py_XINCREF
Unexecuted instantiation: frame.c:Py_XINCREF
Unexecuted instantiation: future.c:Py_XINCREF
Unexecuted instantiation: gc.c:Py_XINCREF
Unexecuted instantiation: gc_gil.c:Py_XINCREF
Unexecuted instantiation: getargs.c:Py_XINCREF
Unexecuted instantiation: ceval_gil.c:Py_XINCREF
Unexecuted instantiation: hamt.c:Py_XINCREF
Unexecuted instantiation: hashtable.c:Py_XINCREF
import.c:Py_XINCREF
Line
Count
Source
499
2.89k
{
500
2.89k
    if (op != _Py_NULL) {
501
1.47k
        Py_INCREF(op);
502
1.47k
    }
503
2.89k
}
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.30k
{
500
2.30k
    if (op != _Py_NULL) {
501
2.30k
        Py_INCREF(op);
502
2.30k
    }
503
2.30k
}
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
65.8M
{
500
65.8M
    if (op != _Py_NULL) {
501
34.1M
        Py_INCREF(op);
502
34.1M
    }
503
65.8M
}
Unexecuted instantiation: tracemalloc.c:Py_XINCREF
Unexecuted instantiation: getopt.c:Py_XINCREF
Unexecuted instantiation: pystrcmp.c:Py_XINCREF
Unexecuted instantiation: pystrtod.c:Py_XINCREF
Unexecuted instantiation: pystrhex.c:Py_XINCREF
Unexecuted instantiation: dtoa.c:Py_XINCREF
Unexecuted instantiation: formatter_unicode.c:Py_XINCREF
Unexecuted instantiation: fileutils.c:Py_XINCREF
Unexecuted instantiation: suggestions.c:Py_XINCREF
Unexecuted instantiation: perf_trampoline.c:Py_XINCREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_XINCREF
Unexecuted instantiation: remote_debugging.c:Py_XINCREF
Unexecuted instantiation: dynload_shlib.c:Py_XINCREF
Unexecuted instantiation: config.c:Py_XINCREF
Unexecuted instantiation: gcmodule.c:Py_XINCREF
Unexecuted instantiation: _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
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
942
{
500
942
    if (op != _Py_NULL) {
501
942
        Py_INCREF(op);
502
942
    }
503
942
}
Unexecuted instantiation: textio.c:Py_XINCREF
Unexecuted instantiation: stringio.c:Py_XINCREF
Unexecuted instantiation: itertoolsmodule.c:Py_XINCREF
Unexecuted instantiation: sre.c:Py_XINCREF
Unexecuted instantiation: _sysconfig.c:Py_XINCREF
Unexecuted instantiation: _threadmodule.c:Py_XINCREF
Unexecuted instantiation: timemodule.c:Py_XINCREF
Unexecuted instantiation: _typesmodule.c:Py_XINCREF
Unexecuted instantiation: _typingmodule.c:Py_XINCREF
Unexecuted instantiation: _weakref.c:Py_XINCREF
_abc.c:Py_XINCREF
Line
Count
Source
499
590
{
500
590
    if (op != _Py_NULL) {
501
590
        Py_INCREF(op);
502
590
    }
503
590
}
Unexecuted instantiation: _functoolsmodule.c:Py_XINCREF
Unexecuted instantiation: _localemodule.c:Py_XINCREF
Unexecuted instantiation: _opcode.c:Py_XINCREF
Unexecuted instantiation: _operator.c:Py_XINCREF
Unexecuted instantiation: _stat.c:Py_XINCREF
Unexecuted instantiation: symtablemodule.c:Py_XINCREF
Unexecuted instantiation: pwdmodule.c:Py_XINCREF
getpath.c:Py_XINCREF
Line
Count
Source
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.1M
{
500
14.1M
    if (op != _Py_NULL) {
501
13.8M
        Py_INCREF(op);
502
13.8M
    }
503
14.1M
}
Unexecuted instantiation: boolobject.c:Py_XINCREF
Unexecuted instantiation: bytes_methods.c:Py_XINCREF
Unexecuted instantiation: bytearrayobject.c:Py_XINCREF
Unexecuted instantiation: capsule.c:Py_XINCREF
cellobject.c:Py_XINCREF
Line
Count
Source
499
6.35M
{
500
6.35M
    if (op != _Py_NULL) {
501
65.6k
        Py_INCREF(op);
502
65.6k
    }
503
6.35M
}
Unexecuted instantiation: classobject.c:Py_XINCREF
codeobject.c:Py_XINCREF
Line
Count
Source
499
5.54k
{
500
5.54k
    if (op != _Py_NULL) {
501
5.54k
        Py_INCREF(op);
502
5.54k
    }
503
5.54k
}
Unexecuted instantiation: complexobject.c:Py_XINCREF
descrobject.c:Py_XINCREF
Line
Count
Source
499
46.8k
{
500
46.8k
    if (op != _Py_NULL) {
501
44.9k
        Py_INCREF(op);
502
44.9k
    }
503
46.8k
}
Unexecuted instantiation: enumobject.c:Py_XINCREF
genobject.c:Py_XINCREF
Line
Count
Source
499
4.32k
{
500
4.32k
    if (op != _Py_NULL) {
501
0
        Py_INCREF(op);
502
0
    }
503
4.32k
}
Unexecuted instantiation: fileobject.c:Py_XINCREF
Unexecuted instantiation: frameobject.c:Py_XINCREF
funcobject.c:Py_XINCREF
Line
Count
Source
499
3.09k
{
500
3.09k
    if (op != _Py_NULL) {
501
0
        Py_INCREF(op);
502
0
    }
503
3.09k
}
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
538M
{
500
538M
    if (op != _Py_NULL) {
501
269M
        Py_INCREF(op);
502
269M
    }
503
538M
}
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.10k
{
500
7.10k
    if (op != _Py_NULL) {
501
7.10k
        Py_INCREF(op);
502
7.10k
    }
503
7.10k
}
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.55G
#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
506
#endif
507
508
static inline void Py_XDECREF(PyObject *op)
509
4.97G
{
510
4.97G
    if (op != _Py_NULL) {
511
4.10G
        Py_DECREF(op);
512
4.10G
    }
513
4.97G
}
bytesobject.c:Py_XDECREF
Line
Count
Source
509
51
{
510
51
    if (op != _Py_NULL) {
511
16
        Py_DECREF(op);
512
16
    }
513
51
}
Unexecuted instantiation: call.c:Py_XDECREF
exceptions.c:Py_XDECREF
Line
Count
Source
509
53.4M
{
510
53.4M
    if (op != _Py_NULL) {
511
20.6M
        Py_DECREF(op);
512
20.6M
    }
513
53.4M
}
genericaliasobject.c:Py_XDECREF
Line
Count
Source
509
126
{
510
126
    if (op != _Py_NULL) {
511
84
        Py_DECREF(op);
512
84
    }
513
126
}
floatobject.c:Py_XDECREF
Line
Count
Source
509
773k
{
510
773k
    if (op != _Py_NULL) {
511
8
        Py_DECREF(op);
512
8
    }
513
773k
}
listobject.c:Py_XDECREF
Line
Count
Source
509
1.82G
{
510
1.82G
    if (op != _Py_NULL) {
511
1.79G
        Py_DECREF(op);
512
1.79G
    }
513
1.82G
}
longobject.c:Py_XDECREF
Line
Count
Source
509
992
{
510
992
    if (op != _Py_NULL) {
511
277
        Py_DECREF(op);
512
277
    }
513
992
}
dictobject.c:Py_XDECREF
Line
Count
Source
509
710M
{
510
710M
    if (op != _Py_NULL) {
511
704M
        Py_DECREF(op);
512
704M
    }
513
710M
}
Unexecuted instantiation: memoryobject.c:Py_XDECREF
moduleobject.c:Py_XDECREF
Line
Count
Source
509
2.09k
{
510
2.09k
    if (op != _Py_NULL) {
511
493
        Py_DECREF(op);
512
493
    }
513
2.09k
}
object.c:Py_XDECREF
Line
Count
Source
509
32.2k
{
510
32.2k
    if (op != _Py_NULL) {
511
350
        Py_DECREF(op);
512
350
    }
513
32.2k
}
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
266k
{
510
266k
    if (op != _Py_NULL) {
511
16
        Py_DECREF(op);
512
16
    }
513
266k
}
Unexecuted instantiation: sliceobject.c:Py_XDECREF
structseq.c:Py_XDECREF
Line
Count
Source
509
87.1k
{
510
87.1k
    if (op != _Py_NULL) {
511
87.1k
        Py_DECREF(op);
512
87.1k
    }
513
87.1k
}
Unexecuted instantiation: templateobject.c:Py_XDECREF
tupleobject.c:Py_XDECREF
Line
Count
Source
509
977M
{
510
977M
    if (op != _Py_NULL) {
511
975M
        Py_DECREF(op);
512
975M
    }
513
977M
}
typeobject.c:Py_XDECREF
Line
Count
Source
509
17.8M
{
510
17.8M
    if (op != _Py_NULL) {
511
14.3M
        Py_DECREF(op);
512
14.3M
    }
513
17.8M
}
Unexecuted instantiation: typevarobject.c:Py_XDECREF
unicodeobject.c:Py_XDECREF
Line
Count
Source
509
80.1M
{
510
80.1M
    if (op != _Py_NULL) {
511
54.9M
        Py_DECREF(op);
512
54.9M
    }
513
80.1M
}
Unexecuted instantiation: unicodectype.c:Py_XDECREF
unionobject.c:Py_XDECREF
Line
Count
Source
509
465
{
510
465
    if (op != _Py_NULL) {
511
22
        Py_DECREF(op);
512
22
    }
513
465
}
weakrefobject.c:Py_XDECREF
Line
Count
Source
509
268k
{
510
268k
    if (op != _Py_NULL) {
511
160
        Py_DECREF(op);
512
160
    }
513
268k
}
_warnings.c:Py_XDECREF
Line
Count
Source
509
79.5k
{
510
79.5k
    if (op != _Py_NULL) {
511
79.5k
        Py_DECREF(op);
512
79.5k
    }
513
79.5k
}
bltinmodule.c:Py_XDECREF
Line
Count
Source
509
6.38M
{
510
6.38M
    if (op != _Py_NULL) {
511
635k
        Py_DECREF(op);
512
635k
    }
513
6.38M
}
ceval.c:Py_XDECREF
Line
Count
Source
509
268k
{
510
268k
    if (op != _Py_NULL) {
511
4.71k
        Py_DECREF(op);
512
4.71k
    }
513
268k
}
codecs.c:Py_XDECREF
Line
Count
Source
509
151k
{
510
151k
    if (op != _Py_NULL) {
511
101k
        Py_DECREF(op);
512
101k
    }
513
151k
}
Unexecuted instantiation: codegen.c:Py_XDECREF
compile.c:Py_XDECREF
Line
Count
Source
509
23.0k
{
510
23.0k
    if (op != _Py_NULL) {
511
6.73k
        Py_DECREF(op);
512
6.73k
    }
513
23.0k
}
Unexecuted instantiation: context.c:Py_XDECREF
errors.c:Py_XDECREF
Line
Count
Source
509
164M
{
510
164M
    if (op != _Py_NULL) {
511
26.4M
        Py_DECREF(op);
512
26.4M
    }
513
164M
}
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
130k
{
510
130k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
130k
}
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
92.6k
{
510
92.6k
    if (op != _Py_NULL) {
511
69.6k
        Py_DECREF(op);
512
69.6k
    }
513
92.6k
}
Unexecuted instantiation: importdl.c:Py_XDECREF
Unexecuted instantiation: initconfig.c:Py_XDECREF
Unexecuted instantiation: instrumentation.c:Py_XDECREF
instruction_sequence.c:Py_XDECREF
Line
Count
Source
509
11.5k
{
510
11.5k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
11.5k
}
intrinsics.c:Py_XDECREF
Line
Count
Source
509
13.0k
{
510
13.0k
    if (op != _Py_NULL) {
511
13.0k
        Py_DECREF(op);
512
13.0k
    }
513
13.0k
}
Unexecuted instantiation: legacy_tracing.c:Py_XDECREF
Unexecuted instantiation: lock.c:Py_XDECREF
marshal.c:Py_XDECREF
Line
Count
Source
509
290k
{
510
290k
    if (op != _Py_NULL) {
511
290k
        Py_DECREF(op);
512
290k
    }
513
290k
}
modsupport.c:Py_XDECREF
Line
Count
Source
509
6.71k
{
510
6.71k
    if (op != _Py_NULL) {
511
6.71k
        Py_DECREF(op);
512
6.71k
    }
513
6.71k
}
Unexecuted instantiation: mysnprintf.c:Py_XDECREF
Unexecuted instantiation: parking_lot.c:Py_XDECREF
Unexecuted instantiation: preconfig.c:Py_XDECREF
Unexecuted instantiation: pyarena.c:Py_XDECREF
Unexecuted instantiation: pyctype.c:Py_XDECREF
Unexecuted instantiation: pyhash.c:Py_XDECREF
pylifecycle.c:Py_XDECREF
Line
Count
Source
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
91
{
510
91
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
91
}
Unexecuted instantiation: pytime.c:Py_XDECREF
Unexecuted instantiation: qsbr.c:Py_XDECREF
Unexecuted instantiation: bootstrap_hash.c:Py_XDECREF
specialize.c:Py_XDECREF
Line
Count
Source
509
982k
{
510
982k
    if (op != _Py_NULL) {
511
520k
        Py_DECREF(op);
512
520k
    }
513
982k
}
symtable.c:Py_XDECREF
Line
Count
Source
509
140k
{
510
140k
    if (op != _Py_NULL) {
511
110k
        Py_DECREF(op);
512
110k
    }
513
140k
}
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
131M
{
510
131M
    if (op != _Py_NULL) {
511
68.3M
        Py_DECREF(op);
512
68.3M
    }
513
131M
}
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
687
{
510
687
    if (op != _Py_NULL) {
511
256
        Py_DECREF(op);
512
256
    }
513
687
}
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
68.7k
{
510
68.7k
    if (op != _Py_NULL) {
511
27.5k
        Py_DECREF(op);
512
27.5k
    }
513
68.7k
}
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
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.00k
{
510
9.00k
    if (op != _Py_NULL) {
511
9.00k
        Py_DECREF(op);
512
9.00k
    }
513
9.00k
}
bufferedio.c:Py_XDECREF
Line
Count
Source
509
3.81k
{
510
3.81k
    if (op != _Py_NULL) {
511
942
        Py_DECREF(op);
512
942
    }
513
3.81k
}
textio.c:Py_XDECREF
Line
Count
Source
509
32.9k
{
510
32.9k
    if (op != _Py_NULL) {
511
32
        Py_DECREF(op);
512
32
    }
513
32.9k
}
Unexecuted instantiation: stringio.c:Py_XDECREF
Unexecuted instantiation: itertoolsmodule.c:Py_XDECREF
sre.c:Py_XDECREF
Line
Count
Source
509
106M
{
510
106M
    if (op != _Py_NULL) {
511
106M
        Py_DECREF(op);
512
106M
    }
513
106M
}
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.25k
{
510
3.25k
    if (op != _Py_NULL) {
511
2.35k
        Py_DECREF(op);
512
2.35k
    }
513
3.25k
}
_functoolsmodule.c:Py_XDECREF
Line
Count
Source
509
14
{
510
14
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
14
}
Unexecuted instantiation: _localemodule.c:Py_XDECREF
Unexecuted instantiation: _opcode.c:Py_XDECREF
Unexecuted instantiation: _operator.c:Py_XDECREF
Unexecuted instantiation: _stat.c:Py_XDECREF
Unexecuted instantiation: symtablemodule.c:Py_XDECREF
Unexecuted instantiation: pwdmodule.c:Py_XDECREF
Unexecuted instantiation: getpath.c:Py_XDECREF
Unexecuted instantiation: frozen.c:Py_XDECREF
Unexecuted instantiation: getbuildinfo.c:Py_XDECREF
Unexecuted instantiation: peg_api.c:Py_XDECREF
Unexecuted instantiation: file_tokenizer.c:Py_XDECREF
helpers.c:Py_XDECREF
Line
Count
Source
509
2.59k
{
510
2.59k
    if (op != _Py_NULL) {
511
2.59k
        Py_DECREF(op);
512
2.59k
    }
513
2.59k
}
Unexecuted instantiation: myreadline.c:Py_XDECREF
abstract.c:Py_XDECREF
Line
Count
Source
509
241k
{
510
241k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
241k
}
Unexecuted instantiation: boolobject.c:Py_XDECREF
Unexecuted instantiation: bytes_methods.c:Py_XDECREF
bytearrayobject.c:Py_XDECREF
Line
Count
Source
509
16
{
510
16
    if (op != _Py_NULL) {
511
16
        Py_DECREF(op);
512
16
    }
513
16
}
capsule.c:Py_XDECREF
Line
Count
Source
509
5
{
510
5
    if (op != _Py_NULL) {
511
5
        Py_DECREF(op);
512
5
    }
513
5
}
cellobject.c:Py_XDECREF
Line
Count
Source
509
6.34M
{
510
6.34M
    if (op != _Py_NULL) {
511
327k
        Py_DECREF(op);
512
327k
    }
513
6.34M
}
classobject.c:Py_XDECREF
Line
Count
Source
509
22.1M
{
510
22.1M
    if (op != _Py_NULL) {
511
22.1M
        Py_DECREF(op);
512
22.1M
    }
513
22.1M
}
codeobject.c:Py_XDECREF
Line
Count
Source
509
107k
{
510
107k
    if (op != _Py_NULL) {
511
72.3k
        Py_DECREF(op);
512
72.3k
    }
513
107k
}
Unexecuted instantiation: complexobject.c:Py_XDECREF
descrobject.c:Py_XDECREF
Line
Count
Source
509
33.5M
{
510
33.5M
    if (op != _Py_NULL) {
511
24.1M
        Py_DECREF(op);
512
24.1M
    }
513
33.5M
}
enumobject.c:Py_XDECREF
Line
Count
Source
509
19.6M
{
510
19.6M
    if (op != _Py_NULL) {
511
13.1M
        Py_DECREF(op);
512
13.1M
    }
513
19.6M
}
genobject.c:Py_XDECREF
Line
Count
Source
509
2.16k
{
510
2.16k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
2.16k
}
Unexecuted instantiation: fileobject.c:Py_XDECREF
Unexecuted instantiation: frameobject.c:Py_XDECREF
funcobject.c:Py_XDECREF
Line
Count
Source
509
2.43k
{
510
2.43k
    if (op != _Py_NULL) {
511
815
        Py_DECREF(op);
512
815
    }
513
2.43k
}
Unexecuted instantiation: interpolationobject.c:Py_XDECREF
iterobject.c:Py_XDECREF
Line
Count
Source
509
997k
{
510
997k
    if (op != _Py_NULL) {
511
332k
        Py_DECREF(op);
512
332k
    }
513
997k
}
Unexecuted instantiation: odictobject.c:Py_XDECREF
methodobject.c:Py_XDECREF
Line
Count
Source
509
807M
{
510
807M
    if (op != _Py_NULL) {
511
275M
        Py_DECREF(op);
512
275M
    }
513
807M
}
Unexecuted instantiation: namespaceobject.c:Py_XDECREF
Unexecuted instantiation: _contextvars.c:Py_XDECREF
Unexecuted instantiation: Python-ast.c:Py_XDECREF
Unexecuted instantiation: Python-tokenize.c:Py_XDECREF
Unexecuted instantiation: asdl.c:Py_XDECREF
assemble.c:Py_XDECREF
Line
Count
Source
509
40.3k
{
510
40.3k
    if (op != _Py_NULL) {
511
40.3k
        Py_DECREF(op);
512
40.3k
    }
513
40.3k
}
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.77k
{
510
6.77k
    if (op != _Py_NULL) {
511
558
        Py_DECREF(op);
512
558
    }
513
6.77k
}
pegen.c:Py_XDECREF
Line
Count
Source
509
30.9k
{
510
30.9k
    if (op != _Py_NULL) {
511
1.58k
        Py_DECREF(op);
512
1.58k
    }
513
30.9k
}
pegen_errors.c:Py_XDECREF
Line
Count
Source
509
15.0k
{
510
15.0k
    if (op != _Py_NULL) {
511
12.0k
        Py_DECREF(op);
512
12.0k
    }
513
15.0k
}
Unexecuted instantiation: parser.c:Py_XDECREF
Unexecuted instantiation: buffer.c:Py_XDECREF
Unexecuted instantiation: lexer.c:Py_XDECREF
state.c:Py_XDECREF
Line
Count
Source
509
90.9k
{
510
90.9k
    if (op != _Py_NULL) {
511
21.5k
        Py_DECREF(op);
512
21.5k
    }
513
90.9k
}
Unexecuted instantiation: readline_tokenizer.c:Py_XDECREF
Unexecuted instantiation: string_tokenizer.c:Py_XDECREF
Unexecuted instantiation: utf8_tokenizer.c:Py_XDECREF
Unexecuted instantiation: getcompiler.c:Py_XDECREF
Unexecuted instantiation: mystrtoul.c:Py_XDECREF
Unexecuted instantiation: token.c:Py_XDECREF
Unexecuted instantiation: action_helpers.c:Py_XDECREF
string_parser.c:Py_XDECREF
Line
Count
Source
509
31.1k
{
510
31.1k
    if (op != _Py_NULL) {
511
31.1k
        Py_DECREF(op);
512
31.1k
    }
513
31.1k
}
514
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
515
4.97G
#  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.74G
{
527
5.74G
    Py_INCREF(obj);
528
5.74G
    return obj;
529
5.74G
}
bytesobject.c:_Py_NewRef
Line
Count
Source
526
379k
{
527
379k
    Py_INCREF(obj);
528
379k
    return obj;
529
379k
}
call.c:_Py_NewRef
Line
Count
Source
526
23.7M
{
527
23.7M
    Py_INCREF(obj);
528
23.7M
    return obj;
529
23.7M
}
exceptions.c:_Py_NewRef
Line
Count
Source
526
85.3M
{
527
85.3M
    Py_INCREF(obj);
528
85.3M
    return obj;
529
85.3M
}
genericaliasobject.c:_Py_NewRef
Line
Count
Source
526
782
{
527
782
    Py_INCREF(obj);
528
782
    return obj;
529
782
}
Unexecuted instantiation: floatobject.c:_Py_NewRef
listobject.c:_Py_NewRef
Line
Count
Source
526
1.47G
{
527
1.47G
    Py_INCREF(obj);
528
1.47G
    return obj;
529
1.47G
}
longobject.c:_Py_NewRef
Line
Count
Source
526
4.12M
{
527
4.12M
    Py_INCREF(obj);
528
4.12M
    return obj;
529
4.12M
}
dictobject.c:_Py_NewRef
Line
Count
Source
526
663M
{
527
663M
    Py_INCREF(obj);
528
663M
    return obj;
529
663M
}
memoryobject.c:_Py_NewRef
Line
Count
Source
526
593k
{
527
593k
    Py_INCREF(obj);
528
593k
    return obj;
529
593k
}
moduleobject.c:_Py_NewRef
Line
Count
Source
526
1.39k
{
527
1.39k
    Py_INCREF(obj);
528
1.39k
    return obj;
529
1.39k
}
object.c:_Py_NewRef
Line
Count
Source
526
161M
{
527
161M
    Py_INCREF(obj);
528
161M
    return obj;
529
161M
}
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.35M
{
527
1.35M
    Py_INCREF(obj);
528
1.35M
    return obj;
529
1.35M
}
sliceobject.c:_Py_NewRef
Line
Count
Source
526
48.6M
{
527
48.6M
    Py_INCREF(obj);
528
48.6M
    return obj;
529
48.6M
}
Unexecuted instantiation: structseq.c:_Py_NewRef
Unexecuted instantiation: templateobject.c:_Py_NewRef
tupleobject.c:_Py_NewRef
Line
Count
Source
526
640M
{
527
640M
    Py_INCREF(obj);
528
640M
    return obj;
529
640M
}
typeobject.c:_Py_NewRef
Line
Count
Source
526
71.7M
{
527
71.7M
    Py_INCREF(obj);
528
71.7M
    return obj;
529
71.7M
}
Unexecuted instantiation: typevarobject.c:_Py_NewRef
unicodeobject.c:_Py_NewRef
Line
Count
Source
526
227M
{
527
227M
    Py_INCREF(obj);
528
227M
    return obj;
529
227M
}
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
30.9k
{
527
30.9k
    Py_INCREF(obj);
528
30.9k
    return obj;
529
30.9k
}
bltinmodule.c:_Py_NewRef
Line
Count
Source
526
11.9M
{
527
11.9M
    Py_INCREF(obj);
528
11.9M
    return obj;
529
11.9M
}
ceval.c:_Py_NewRef
Line
Count
Source
526
1.21G
{
527
1.21G
    Py_INCREF(obj);
528
1.21G
    return obj;
529
1.21G
}
codecs.c:_Py_NewRef
Line
Count
Source
526
3.23M
{
527
3.23M
    Py_INCREF(obj);
528
3.23M
    return obj;
529
3.23M
}
codegen.c:_Py_NewRef
Line
Count
Source
526
2.10k
{
527
2.10k
    Py_INCREF(obj);
528
2.10k
    return obj;
529
2.10k
}
compile.c:_Py_NewRef
Line
Count
Source
526
90.3k
{
527
90.3k
    Py_INCREF(obj);
528
90.3k
    return obj;
529
90.3k
}
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
31.6M
{
527
31.6M
    Py_INCREF(obj);
528
31.6M
    return obj;
529
31.6M
}
flowgraph.c:_Py_NewRef
Line
Count
Source
526
82.9k
{
527
82.9k
    Py_INCREF(obj);
528
82.9k
    return obj;
529
82.9k
}
frame.c:_Py_NewRef
Line
Count
Source
526
12.2M
{
527
12.2M
    Py_INCREF(obj);
528
12.2M
    return obj;
529
12.2M
}
Unexecuted instantiation: future.c:_Py_NewRef
Unexecuted instantiation: gc.c:_Py_NewRef
Unexecuted instantiation: gc_gil.c:_Py_NewRef
getargs.c:_Py_NewRef
Line
Count
Source
526
740k
{
527
740k
    Py_INCREF(obj);
528
740k
    return obj;
529
740k
}
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
32.9k
{
527
32.9k
    Py_INCREF(obj);
528
32.9k
    return obj;
529
32.9k
}
importdl.c:_Py_NewRef
Line
Count
Source
526
454
{
527
454
    Py_INCREF(obj);
528
454
    return obj;
529
454
}
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
24.2k
{
527
24.2k
    Py_INCREF(obj);
528
24.2k
    return obj;
529
24.2k
}
Unexecuted instantiation: legacy_tracing.c:_Py_NewRef
Unexecuted instantiation: lock.c:_Py_NewRef
marshal.c:_Py_NewRef
Line
Count
Source
526
305k
{
527
305k
    Py_INCREF(obj);
528
305k
    return obj;
529
305k
}
Unexecuted instantiation: modsupport.c:_Py_NewRef
Unexecuted instantiation: mysnprintf.c:_Py_NewRef
Unexecuted instantiation: parking_lot.c:_Py_NewRef
Unexecuted instantiation: preconfig.c:_Py_NewRef
Unexecuted instantiation: pyarena.c:_Py_NewRef
Unexecuted instantiation: pyctype.c:_Py_NewRef
Unexecuted instantiation: pyhash.c:_Py_NewRef
pylifecycle.c:_Py_NewRef
Line
Count
Source
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
215k
{
527
215k
    Py_INCREF(obj);
528
215k
    return obj;
529
215k
}
sysmodule.c:_Py_NewRef
Line
Count
Source
526
763
{
527
763
    Py_INCREF(obj);
528
763
    return obj;
529
763
}
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
35.9k
{
527
35.9k
    Py_INCREF(obj);
528
35.9k
    return obj;
529
35.9k
}
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
Unexecuted instantiation: _codecsmodule.c:_Py_NewRef
_collectionsmodule.c:_Py_NewRef
Line
Count
Source
526
18.8M
{
527
18.8M
    Py_INCREF(obj);
528
18.8M
    return obj;
529
18.8M
}
Unexecuted instantiation: errnomodule.c:_Py_NewRef
_iomodule.c:_Py_NewRef
Line
Count
Source
526
48
{
527
48
    Py_INCREF(obj);
528
48
    return obj;
529
48
}
iobase.c:_Py_NewRef
Line
Count
Source
526
40.4k
{
527
40.4k
    Py_INCREF(obj);
528
40.4k
    return obj;
529
40.4k
}
Unexecuted instantiation: fileio.c:_Py_NewRef
bytesio.c:_Py_NewRef
Line
Count
Source
526
9.66k
{
527
9.66k
    Py_INCREF(obj);
528
9.66k
    return obj;
529
9.66k
}
bufferedio.c:_Py_NewRef
Line
Count
Source
526
960
{
527
960
    Py_INCREF(obj);
528
960
    return obj;
529
960
}
textio.c:_Py_NewRef
Line
Count
Source
526
82.2k
{
527
82.2k
    Py_INCREF(obj);
528
82.2k
    return obj;
529
82.2k
}
stringio.c:_Py_NewRef
Line
Count
Source
526
16.4k
{
527
16.4k
    Py_INCREF(obj);
528
16.4k
    return obj;
529
16.4k
}
Unexecuted instantiation: itertoolsmodule.c:_Py_NewRef
sre.c:_Py_NewRef
Line
Count
Source
526
302M
{
527
302M
    Py_INCREF(obj);
528
302M
    return obj;
529
302M
}
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
590
{
527
590
    Py_INCREF(obj);
528
590
    return obj;
529
590
}
_functoolsmodule.c:_Py_NewRef
Line
Count
Source
526
291
{
527
291
    Py_INCREF(obj);
528
291
    return obj;
529
291
}
Unexecuted instantiation: _localemodule.c:_Py_NewRef
Unexecuted instantiation: _opcode.c:_Py_NewRef
_operator.c:_Py_NewRef
Line
Count
Source
526
1.56M
{
527
1.56M
    Py_INCREF(obj);
528
1.56M
    return obj;
529
1.56M
}
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
590M
{
527
590M
    Py_INCREF(obj);
528
590M
    return obj;
529
590M
}
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
44.3M
{
527
44.3M
    Py_INCREF(obj);
528
44.3M
    return obj;
529
44.3M
}
codeobject.c:_Py_NewRef
Line
Count
Source
526
441k
{
527
441k
    Py_INCREF(obj);
528
441k
    return obj;
529
441k
}
Unexecuted instantiation: complexobject.c:_Py_NewRef
descrobject.c:_Py_NewRef
Line
Count
Source
526
24.1M
{
527
24.1M
    Py_INCREF(obj);
528
24.1M
    return obj;
529
24.1M
}
Unexecuted instantiation: enumobject.c:_Py_NewRef
genobject.c:_Py_NewRef
Line
Count
Source
526
42.2M
{
527
42.2M
    Py_INCREF(obj);
528
42.2M
    return obj;
529
42.2M
}
Unexecuted instantiation: fileobject.c:_Py_NewRef
frameobject.c:_Py_NewRef
Line
Count
Source
526
5.36k
{
527
5.36k
    Py_INCREF(obj);
528
5.36k
    return obj;
529
5.36k
}
funcobject.c:_Py_NewRef
Line
Count
Source
526
25.8M
{
527
25.8M
    Py_INCREF(obj);
528
25.8M
    return obj;
529
25.8M
}
Unexecuted instantiation: interpolationobject.c:_Py_NewRef
iterobject.c:_Py_NewRef
Line
Count
Source
526
665k
{
527
665k
    Py_INCREF(obj);
528
665k
    return obj;
529
665k
}
Unexecuted instantiation: odictobject.c:_Py_NewRef
methodobject.c:_Py_NewRef
Line
Count
Source
526
6.54M
{
527
6.54M
    Py_INCREF(obj);
528
6.54M
    return obj;
529
6.54M
}
Unexecuted instantiation: namespaceobject.c:_Py_NewRef
Unexecuted instantiation: _contextvars.c:_Py_NewRef
Python-ast.c:_Py_NewRef
Line
Count
Source
526
573k
{
527
573k
    Py_INCREF(obj);
528
573k
    return obj;
529
573k
}
Unexecuted instantiation: Python-tokenize.c:_Py_NewRef
Unexecuted instantiation: asdl.c:_Py_NewRef
assemble.c:_Py_NewRef
Line
Count
Source
526
37.2k
{
527
37.2k
    Py_INCREF(obj);
528
37.2k
    return obj;
529
37.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
19.0k
{
527
19.0k
    Py_INCREF(obj);
528
19.0k
    return obj;
529
19.0k
}
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.33G
{
533
1.33G
    Py_XINCREF(obj);
534
1.33G
    return obj;
535
1.33G
}
Unexecuted instantiation: bytesobject.c:_Py_XNewRef
Unexecuted instantiation: call.c:_Py_XNewRef
exceptions.c:_Py_XNewRef
Line
Count
Source
532
65.0M
{
533
65.0M
    Py_XINCREF(obj);
534
65.0M
    return obj;
535
65.0M
}
Unexecuted instantiation: genericaliasobject.c:_Py_XNewRef
Unexecuted instantiation: floatobject.c:_Py_XNewRef
listobject.c:_Py_XNewRef
Line
Count
Source
532
991k
{
533
991k
    Py_XINCREF(obj);
534
991k
    return obj;
535
991k
}
Unexecuted instantiation: longobject.c:_Py_XNewRef
dictobject.c:_Py_XNewRef
Line
Count
Source
532
566M
{
533
566M
    Py_XINCREF(obj);
534
566M
    return obj;
535
566M
}
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
269k
{
533
269k
    Py_XINCREF(obj);
534
269k
    return obj;
535
269k
}
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
274k
{
533
274k
    Py_XINCREF(obj);
534
274k
    return obj;
535
274k
}
Unexecuted instantiation: _warnings.c:_Py_XNewRef
bltinmodule.c:_Py_XNewRef
Line
Count
Source
532
301
{
533
301
    Py_XINCREF(obj);
534
301
    return obj;
535
301
}
ceval.c:_Py_XNewRef
Line
Count
Source
532
75.4M
{
533
75.4M
    Py_XINCREF(obj);
534
75.4M
    return obj;
535
75.4M
}
Unexecuted instantiation: codecs.c:_Py_XNewRef
Unexecuted instantiation: codegen.c:_Py_XNewRef
compile.c:_Py_XNewRef
Line
Count
Source
532
8.36k
{
533
8.36k
    Py_XINCREF(obj);
534
8.36k
    return obj;
535
8.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.89k
{
533
2.89k
    Py_XINCREF(obj);
534
2.89k
    return obj;
535
2.89k
}
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.30k
{
533
2.30k
    Py_XINCREF(obj);
534
2.30k
    return obj;
535
2.30k
}
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
65.8M
{
533
65.8M
    Py_XINCREF(obj);
534
65.8M
    return obj;
535
65.8M
}
Unexecuted instantiation: tracemalloc.c:_Py_XNewRef
Unexecuted instantiation: getopt.c:_Py_XNewRef
Unexecuted instantiation: pystrcmp.c:_Py_XNewRef
Unexecuted instantiation: pystrtod.c:_Py_XNewRef
Unexecuted instantiation: pystrhex.c:_Py_XNewRef
Unexecuted instantiation: dtoa.c:_Py_XNewRef
Unexecuted instantiation: formatter_unicode.c:_Py_XNewRef
Unexecuted instantiation: fileutils.c:_Py_XNewRef
Unexecuted instantiation: suggestions.c:_Py_XNewRef
Unexecuted instantiation: perf_trampoline.c:_Py_XNewRef
Unexecuted instantiation: perf_jit_trampoline.c:_Py_XNewRef
Unexecuted instantiation: remote_debugging.c:_Py_XNewRef
Unexecuted instantiation: dynload_shlib.c:_Py_XNewRef
Unexecuted instantiation: config.c:_Py_XNewRef
Unexecuted instantiation: gcmodule.c:_Py_XNewRef
Unexecuted instantiation: _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
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
590
{
533
590
    Py_XINCREF(obj);
534
590
    return obj;
535
590
}
Unexecuted instantiation: _functoolsmodule.c:_Py_XNewRef
Unexecuted instantiation: _localemodule.c:_Py_XNewRef
Unexecuted instantiation: _opcode.c:_Py_XNewRef
Unexecuted instantiation: _operator.c:_Py_XNewRef
Unexecuted instantiation: _stat.c:_Py_XNewRef
Unexecuted instantiation: symtablemodule.c:_Py_XNewRef
Unexecuted instantiation: pwdmodule.c:_Py_XNewRef
getpath.c:_Py_XNewRef
Line
Count
Source
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.1M
{
533
14.1M
    Py_XINCREF(obj);
534
14.1M
    return obj;
535
14.1M
}
Unexecuted instantiation: boolobject.c:_Py_XNewRef
Unexecuted instantiation: bytes_methods.c:_Py_XNewRef
Unexecuted instantiation: bytearrayobject.c:_Py_XNewRef
Unexecuted instantiation: capsule.c:_Py_XNewRef
cellobject.c:_Py_XNewRef
Line
Count
Source
532
6.35M
{
533
6.35M
    Py_XINCREF(obj);
534
6.35M
    return obj;
535
6.35M
}
Unexecuted instantiation: classobject.c:_Py_XNewRef
codeobject.c:_Py_XNewRef
Line
Count
Source
532
5.54k
{
533
5.54k
    Py_XINCREF(obj);
534
5.54k
    return obj;
535
5.54k
}
Unexecuted instantiation: complexobject.c:_Py_XNewRef
descrobject.c:_Py_XNewRef
Line
Count
Source
532
46.8k
{
533
46.8k
    Py_XINCREF(obj);
534
46.8k
    return obj;
535
46.8k
}
Unexecuted instantiation: enumobject.c:_Py_XNewRef
Unexecuted instantiation: genobject.c:_Py_XNewRef
Unexecuted instantiation: fileobject.c:_Py_XNewRef
Unexecuted instantiation: frameobject.c:_Py_XNewRef
funcobject.c:_Py_XNewRef
Line
Count
Source
532
3.09k
{
533
3.09k
    Py_XINCREF(obj);
534
3.09k
    return obj;
535
3.09k
}
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
538M
{
533
538M
    Py_XINCREF(obj);
534
538M
    return obj;
535
538M
}
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.77k
{
533
6.77k
    Py_XINCREF(obj);
534
6.77k
    return obj;
535
6.77k
}
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.63G
#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
542
1.31G
#  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