Coverage Report

Created: 2025-07-11 06:24

/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
7.02G
#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
47
0
#define _Py_IMMORTAL_MINIMUM_REFCNT (1ULL << 31)
48
226M
#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
49
226M
#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
819M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
819M
    #if !defined(Py_GIL_DISABLED)
104
819M
        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
819M
    }
bytesobject.c:_Py_REFCNT
Line
Count
Source
102
197k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
197k
    #if !defined(Py_GIL_DISABLED)
104
197k
        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
197k
    }
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
15
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
15
    #if !defined(Py_GIL_DISABLED)
104
15
        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
    }
dictobject.c:_Py_REFCNT
Line
Count
Source
102
478M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
478M
    #if !defined(Py_GIL_DISABLED)
104
478M
        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
478M
    }
Unexecuted instantiation: memoryobject.c:_Py_REFCNT
Unexecuted instantiation: moduleobject.c:_Py_REFCNT
object.c:_Py_REFCNT
Line
Count
Source
102
55.8M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
55.8M
    #if !defined(Py_GIL_DISABLED)
104
55.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
55.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
68.7k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
68.7k
    #if !defined(Py_GIL_DISABLED)
104
68.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
68.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
55.4M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
55.4M
    #if !defined(Py_GIL_DISABLED)
104
55.4M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
55.4M
    }
Unexecuted instantiation: unicodectype.c:_Py_REFCNT
Unexecuted instantiation: unionobject.c:_Py_REFCNT
weakrefobject.c:_Py_REFCNT
Line
Count
Source
102
35.8M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
35.8M
    #if !defined(Py_GIL_DISABLED)
104
35.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
35.8M
    }
Unexecuted instantiation: _warnings.c:_Py_REFCNT
bltinmodule.c:_Py_REFCNT
Line
Count
Source
102
19.2M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
19.2M
    #if !defined(Py_GIL_DISABLED)
104
19.2M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
19.2M
    }
Unexecuted instantiation: ceval.c:_Py_REFCNT
Unexecuted instantiation: codecs.c:_Py_REFCNT
Unexecuted instantiation: codegen.c:_Py_REFCNT
Unexecuted instantiation: compile.c:_Py_REFCNT
Unexecuted instantiation: context.c:_Py_REFCNT
Unexecuted instantiation: errors.c:_Py_REFCNT
Unexecuted instantiation: flowgraph.c:_Py_REFCNT
frame.c:_Py_REFCNT
Line
Count
Source
102
22.1M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
22.1M
    #if !defined(Py_GIL_DISABLED)
104
22.1M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
22.1M
    }
Unexecuted instantiation: future.c:_Py_REFCNT
gc.c:_Py_REFCNT
Line
Count
Source
102
40.2M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
40.2M
    #if !defined(Py_GIL_DISABLED)
104
40.2M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
40.2M
    }
Unexecuted instantiation: gc_gil.c:_Py_REFCNT
Unexecuted instantiation: getargs.c:_Py_REFCNT
Unexecuted instantiation: ceval_gil.c:_Py_REFCNT
Unexecuted instantiation: hamt.c:_Py_REFCNT
Unexecuted instantiation: hashtable.c:_Py_REFCNT
import.c:_Py_REFCNT
Line
Count
Source
102
16
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
16
    #if !defined(Py_GIL_DISABLED)
104
16
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
16
    }
Unexecuted instantiation: importdl.c:_Py_REFCNT
Unexecuted instantiation: initconfig.c:_Py_REFCNT
Unexecuted instantiation: instrumentation.c:_Py_REFCNT
Unexecuted instantiation: instruction_sequence.c:_Py_REFCNT
Unexecuted instantiation: intrinsics.c:_Py_REFCNT
Unexecuted instantiation: legacy_tracing.c:_Py_REFCNT
Unexecuted instantiation: lock.c:_Py_REFCNT
marshal.c:_Py_REFCNT
Line
Count
Source
102
135k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
135k
    #if !defined(Py_GIL_DISABLED)
104
135k
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
135k
    }
Unexecuted instantiation: modsupport.c:_Py_REFCNT
Unexecuted instantiation: mysnprintf.c:_Py_REFCNT
Unexecuted instantiation: parking_lot.c:_Py_REFCNT
Unexecuted instantiation: preconfig.c:_Py_REFCNT
Unexecuted instantiation: pyarena.c:_Py_REFCNT
Unexecuted instantiation: pyctype.c:_Py_REFCNT
Unexecuted instantiation: pyhash.c:_Py_REFCNT
Unexecuted instantiation: pylifecycle.c:_Py_REFCNT
Unexecuted instantiation: pymath.c:_Py_REFCNT
Unexecuted instantiation: pystate.c:_Py_REFCNT
Unexecuted instantiation: pythonrun.c:_Py_REFCNT
Unexecuted instantiation: pytime.c:_Py_REFCNT
Unexecuted instantiation: qsbr.c:_Py_REFCNT
Unexecuted instantiation: bootstrap_hash.c:_Py_REFCNT
Unexecuted instantiation: specialize.c:_Py_REFCNT
Unexecuted instantiation: symtable.c:_Py_REFCNT
Unexecuted instantiation: sysmodule.c:_Py_REFCNT
Unexecuted instantiation: thread.c:_Py_REFCNT
Unexecuted instantiation: traceback.c:_Py_REFCNT
Unexecuted instantiation: tracemalloc.c:_Py_REFCNT
Unexecuted instantiation: getopt.c:_Py_REFCNT
Unexecuted instantiation: pystrcmp.c:_Py_REFCNT
Unexecuted instantiation: pystrtod.c:_Py_REFCNT
Unexecuted instantiation: pystrhex.c:_Py_REFCNT
Unexecuted instantiation: dtoa.c:_Py_REFCNT
Unexecuted instantiation: formatter_unicode.c:_Py_REFCNT
Unexecuted instantiation: fileutils.c:_Py_REFCNT
Unexecuted instantiation: suggestions.c:_Py_REFCNT
Unexecuted instantiation: perf_trampoline.c:_Py_REFCNT
Unexecuted instantiation: perf_jit_trampoline.c:_Py_REFCNT
Unexecuted instantiation: remote_debugging.c:_Py_REFCNT
Unexecuted instantiation: dynload_shlib.c:_Py_REFCNT
Unexecuted instantiation: config.c:_Py_REFCNT
Unexecuted instantiation: gcmodule.c:_Py_REFCNT
Unexecuted instantiation: atexitmodule.c:_Py_REFCNT
Unexecuted instantiation: faulthandler.c:_Py_REFCNT
Unexecuted instantiation: posixmodule.c:_Py_REFCNT
Unexecuted instantiation: signalmodule.c:_Py_REFCNT
Unexecuted instantiation: _tracemalloc.c:_Py_REFCNT
Unexecuted instantiation: _suggestions.c:_Py_REFCNT
Unexecuted instantiation: _codecsmodule.c:_Py_REFCNT
Unexecuted instantiation: _collectionsmodule.c:_Py_REFCNT
Unexecuted instantiation: errnomodule.c:_Py_REFCNT
Unexecuted instantiation: _iomodule.c:_Py_REFCNT
iobase.c:_Py_REFCNT
Line
Count
Source
102
9.79k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
9.79k
    #if !defined(Py_GIL_DISABLED)
104
9.79k
        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
9.79k
    }
Unexecuted instantiation: fileio.c:_Py_REFCNT
Unexecuted instantiation: bytesio.c:_Py_REFCNT
Unexecuted instantiation: bufferedio.c:_Py_REFCNT
Unexecuted instantiation: textio.c:_Py_REFCNT
Unexecuted instantiation: stringio.c:_Py_REFCNT
Unexecuted instantiation: itertoolsmodule.c:_Py_REFCNT
Unexecuted instantiation: sre.c:_Py_REFCNT
Unexecuted instantiation: _sysconfig.c:_Py_REFCNT
Unexecuted instantiation: _threadmodule.c:_Py_REFCNT
Unexecuted instantiation: timemodule.c:_Py_REFCNT
Unexecuted instantiation: _typesmodule.c:_Py_REFCNT
Unexecuted instantiation: _typingmodule.c:_Py_REFCNT
Unexecuted instantiation: _weakref.c:_Py_REFCNT
Unexecuted instantiation: _abc.c:_Py_REFCNT
_functoolsmodule.c:_Py_REFCNT
Line
Count
Source
102
14
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
14
    #if !defined(Py_GIL_DISABLED)
104
14
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
14
    }
Unexecuted instantiation: _localemodule.c:_Py_REFCNT
Unexecuted instantiation: _opcode.c:_Py_REFCNT
Unexecuted instantiation: _operator.c:_Py_REFCNT
Unexecuted instantiation: _stat.c:_Py_REFCNT
Unexecuted instantiation: symtablemodule.c:_Py_REFCNT
Unexecuted instantiation: pwdmodule.c:_Py_REFCNT
Unexecuted instantiation: getpath.c:_Py_REFCNT
Unexecuted instantiation: frozen.c:_Py_REFCNT
Unexecuted instantiation: getbuildinfo.c:_Py_REFCNT
Unexecuted instantiation: peg_api.c:_Py_REFCNT
Unexecuted instantiation: file_tokenizer.c:_Py_REFCNT
Unexecuted instantiation: helpers.c:_Py_REFCNT
Unexecuted instantiation: myreadline.c:_Py_REFCNT
Unexecuted instantiation: abstract.c:_Py_REFCNT
Unexecuted instantiation: boolobject.c:_Py_REFCNT
Unexecuted instantiation: bytes_methods.c:_Py_REFCNT
Unexecuted instantiation: bytearrayobject.c:_Py_REFCNT
Unexecuted instantiation: capsule.c:_Py_REFCNT
Unexecuted instantiation: cellobject.c:_Py_REFCNT
Unexecuted instantiation: classobject.c:_Py_REFCNT
codeobject.c:_Py_REFCNT
Line
Count
Source
102
15.4k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
15.4k
    #if !defined(Py_GIL_DISABLED)
104
15.4k
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
15.4k
    }
Unexecuted instantiation: complexobject.c:_Py_REFCNT
Unexecuted instantiation: descrobject.c:_Py_REFCNT
enumobject.c:_Py_REFCNT
Line
Count
Source
102
86.6M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
86.6M
    #if !defined(Py_GIL_DISABLED)
104
86.6M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
86.6M
    }
Unexecuted instantiation: genobject.c:_Py_REFCNT
Unexecuted instantiation: fileobject.c:_Py_REFCNT
Unexecuted instantiation: frameobject.c:_Py_REFCNT
funcobject.c:_Py_REFCNT
Line
Count
Source
102
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: 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
549M
    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
117
    #endif
118
#endif
119
120
static inline Py_ALWAYS_INLINE int _Py_IsImmortal(PyObject *op)
121
12.8G
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
12.8G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
12.8G
}
bytesobject.c:_Py_IsImmortal
Line
Count
Source
121
4.78M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
4.78M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
4.78M
}
call.c:_Py_IsImmortal
Line
Count
Source
121
122M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
122M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
122M
}
exceptions.c:_Py_IsImmortal
Line
Count
Source
121
98.2M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
98.2M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
98.2M
}
genericaliasobject.c:_Py_IsImmortal
Line
Count
Source
121
84
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
84
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
84
}
floatobject.c:_Py_IsImmortal
Line
Count
Source
121
8
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
8
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
8
}
listobject.c:_Py_IsImmortal
Line
Count
Source
121
1.59G
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
1.59G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
1.59G
}
longobject.c:_Py_IsImmortal
Line
Count
Source
121
17.7M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
17.7M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
17.7M
}
dictobject.c:_Py_IsImmortal
Line
Count
Source
121
996M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
996M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
996M
}
memoryobject.c:_Py_IsImmortal
Line
Count
Source
121
596k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
596k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
596k
}
moduleobject.c:_Py_IsImmortal
Line
Count
Source
121
46.3k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
46.3k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
46.3k
}
object.c:_Py_IsImmortal
Line
Count
Source
121
397M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
397M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
397M
}
Unexecuted instantiation: obmalloc.c:_Py_IsImmortal
Unexecuted instantiation: picklebufobject.c:_Py_IsImmortal
rangeobject.c:_Py_IsImmortal
Line
Count
Source
121
27.4M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
27.4M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
27.4M
}
setobject.c:_Py_IsImmortal
Line
Count
Source
121
984k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
984k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
984k
}
sliceobject.c:_Py_IsImmortal
Line
Count
Source
121
114M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
114M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
114M
}
structseq.c:_Py_IsImmortal
Line
Count
Source
121
88.9k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
88.9k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
88.9k
}
Unexecuted instantiation: templateobject.c:_Py_IsImmortal
tupleobject.c:_Py_IsImmortal
Line
Count
Source
121
777M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
777M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
777M
}
typeobject.c:_Py_IsImmortal
Line
Count
Source
121
711M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
711M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
711M
}
Unexecuted instantiation: typevarobject.c:_Py_IsImmortal
unicodeobject.c:_Py_IsImmortal
Line
Count
Source
121
204M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
204M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
204M
}
Unexecuted instantiation: unicodectype.c:_Py_IsImmortal
unionobject.c:_Py_IsImmortal
Line
Count
Source
121
864
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
864
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
864
}
weakrefobject.c:_Py_IsImmortal
Line
Count
Source
121
11.5k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
11.5k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
11.5k
}
_warnings.c:_Py_IsImmortal
Line
Count
Source
121
172k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
172k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
172k
}
bltinmodule.c:_Py_IsImmortal
Line
Count
Source
121
110M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
110M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
110M
}
ceval.c:_Py_IsImmortal
Line
Count
Source
121
4.87G
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
4.87G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
4.87G
}
codecs.c:_Py_IsImmortal
Line
Count
Source
121
5.78M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
5.78M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
5.78M
}
codegen.c:_Py_IsImmortal
Line
Count
Source
121
120k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
120k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
120k
}
compile.c:_Py_IsImmortal
Line
Count
Source
121
506k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
506k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
506k
}
context.c:_Py_IsImmortal
Line
Count
Source
121
32
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
32
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
32
}
errors.c:_Py_IsImmortal
Line
Count
Source
121
64.8M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
64.8M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
64.8M
}
flowgraph.c:_Py_IsImmortal
Line
Count
Source
121
62.7k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
62.7k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
62.7k
}
frame.c:_Py_IsImmortal
Line
Count
Source
121
33.1M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
33.1M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
33.1M
}
Unexecuted instantiation: future.c:_Py_IsImmortal
gc.c:_Py_IsImmortal
Line
Count
Source
121
938M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
938M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
938M
}
Unexecuted instantiation: gc_gil.c:_Py_IsImmortal
getargs.c:_Py_IsImmortal
Line
Count
Source
121
1.43M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
1.43M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
1.43M
}
Unexecuted instantiation: ceval_gil.c:_Py_IsImmortal
Unexecuted instantiation: hamt.c:_Py_IsImmortal
Unexecuted instantiation: hashtable.c:_Py_IsImmortal
import.c:_Py_IsImmortal
Line
Count
Source
121
161k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
161k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
161k
}
importdl.c:_Py_IsImmortal
Line
Count
Source
121
1.22k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
1.22k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
1.22k
}
initconfig.c:_Py_IsImmortal
Line
Count
Source
121
2.20k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
2.20k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
2.20k
}
instrumentation.c:_Py_IsImmortal
Line
Count
Source
121
384
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
384
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
384
}
Unexecuted instantiation: instruction_sequence.c:_Py_IsImmortal
intrinsics.c:_Py_IsImmortal
Line
Count
Source
121
27.2k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
27.2k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
27.2k
}
Unexecuted instantiation: legacy_tracing.c:_Py_IsImmortal
Unexecuted instantiation: lock.c:_Py_IsImmortal
marshal.c:_Py_IsImmortal
Line
Count
Source
121
301k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
301k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
301k
}
modsupport.c:_Py_IsImmortal
Line
Count
Source
121
16.7k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
16.7k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
16.7k
}
Unexecuted instantiation: mysnprintf.c:_Py_IsImmortal
Unexecuted instantiation: parking_lot.c:_Py_IsImmortal
Unexecuted instantiation: preconfig.c:_Py_IsImmortal
pyarena.c:_Py_IsImmortal
Line
Count
Source
121
4.53M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
4.53M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
4.53M
}
Unexecuted instantiation: pyctype.c:_Py_IsImmortal
Unexecuted instantiation: pyhash.c:_Py_IsImmortal
pylifecycle.c:_Py_IsImmortal
Line
Count
Source
121
576
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
576
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
576
}
Unexecuted instantiation: pymath.c:_Py_IsImmortal
Unexecuted instantiation: pystate.c:_Py_IsImmortal
pythonrun.c:_Py_IsImmortal
Line
Count
Source
121
155
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
155
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
155
}
Unexecuted instantiation: pytime.c:_Py_IsImmortal
Unexecuted instantiation: qsbr.c:_Py_IsImmortal
Unexecuted instantiation: bootstrap_hash.c:_Py_IsImmortal
specialize.c:_Py_IsImmortal
Line
Count
Source
121
481k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
481k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
481k
}
symtable.c:_Py_IsImmortal
Line
Count
Source
121
643k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
643k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
643k
}
sysmodule.c:_Py_IsImmortal
Line
Count
Source
121
1.90k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
1.90k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
1.90k
}
Unexecuted instantiation: thread.c:_Py_IsImmortal
traceback.c:_Py_IsImmortal
Line
Count
Source
121
58.3M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
58.3M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
58.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
121
256
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
256
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
256
}
fileutils.c:_Py_IsImmortal
Line
Count
Source
121
11.6k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
11.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
11.6k
}
Unexecuted instantiation: suggestions.c:_Py_IsImmortal
Unexecuted instantiation: perf_trampoline.c:_Py_IsImmortal
Unexecuted instantiation: perf_jit_trampoline.c:_Py_IsImmortal
Unexecuted instantiation: remote_debugging.c:_Py_IsImmortal
Unexecuted instantiation: dynload_shlib.c:_Py_IsImmortal
Unexecuted instantiation: config.c:_Py_IsImmortal
Unexecuted instantiation: gcmodule.c:_Py_IsImmortal
Unexecuted instantiation: atexitmodule.c:_Py_IsImmortal
Unexecuted instantiation: faulthandler.c:_Py_IsImmortal
posixmodule.c:_Py_IsImmortal
Line
Count
Source
121
48.6k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
48.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
48.6k
}
signalmodule.c:_Py_IsImmortal
Line
Count
Source
121
32
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
32
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
32
}
Unexecuted instantiation: _tracemalloc.c:_Py_IsImmortal
Unexecuted instantiation: _suggestions.c:_Py_IsImmortal
Unexecuted instantiation: _codecsmodule.c:_Py_IsImmortal
_collectionsmodule.c:_Py_IsImmortal
Line
Count
Source
121
96.7k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
96.7k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
96.7k
}
Unexecuted instantiation: errnomodule.c:_Py_IsImmortal
_iomodule.c:_Py_IsImmortal
Line
Count
Source
121
6.04k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
6.04k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
6.04k
}
iobase.c:_Py_IsImmortal
Line
Count
Source
121
104k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
104k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
104k
}
fileio.c:_Py_IsImmortal
Line
Count
Source
121
3.30k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
3.30k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
3.30k
}
bytesio.c:_Py_IsImmortal
Line
Count
Source
121
23.0k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
23.0k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
23.0k
}
bufferedio.c:_Py_IsImmortal
Line
Count
Source
121
6.82k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
6.82k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
6.82k
}
textio.c:_Py_IsImmortal
Line
Count
Source
121
46.0k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
46.0k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
46.0k
}
stringio.c:_Py_IsImmortal
Line
Count
Source
121
269k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
269k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
269k
}
itertoolsmodule.c:_Py_IsImmortal
Line
Count
Source
121
2
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
2
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
2
}
sre.c:_Py_IsImmortal
Line
Count
Source
121
426M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
426M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
426M
}
Unexecuted instantiation: _sysconfig.c:_Py_IsImmortal
_threadmodule.c:_Py_IsImmortal
Line
Count
Source
121
4.87k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
4.87k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
4.87k
}
Unexecuted instantiation: timemodule.c:_Py_IsImmortal
Unexecuted instantiation: _typesmodule.c:_Py_IsImmortal
Unexecuted instantiation: _typingmodule.c:_Py_IsImmortal
Unexecuted instantiation: _weakref.c:_Py_IsImmortal
_abc.c:_Py_IsImmortal
Line
Count
Source
121
28.0k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
28.0k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
28.0k
}
_functoolsmodule.c:_Py_IsImmortal
Line
Count
Source
121
92
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
92
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
92
}
Unexecuted instantiation: _localemodule.c:_Py_IsImmortal
Unexecuted instantiation: _opcode.c:_Py_IsImmortal
_operator.c:_Py_IsImmortal
Line
Count
Source
121
533k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
533k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
533k
}
Unexecuted instantiation: _stat.c:_Py_IsImmortal
Unexecuted instantiation: symtablemodule.c:_Py_IsImmortal
Unexecuted instantiation: pwdmodule.c:_Py_IsImmortal
getpath.c:_Py_IsImmortal
Line
Count
Source
121
528
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
528
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
528
}
Unexecuted instantiation: frozen.c:_Py_IsImmortal
Unexecuted instantiation: getbuildinfo.c:_Py_IsImmortal
Unexecuted instantiation: peg_api.c:_Py_IsImmortal
Unexecuted instantiation: file_tokenizer.c:_Py_IsImmortal
helpers.c:_Py_IsImmortal
Line
Count
Source
121
22.0k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
22.0k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
22.0k
}
Unexecuted instantiation: myreadline.c:_Py_IsImmortal
abstract.c:_Py_IsImmortal
Line
Count
Source
121
362M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
362M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
362M
}
Unexecuted instantiation: boolobject.c:_Py_IsImmortal
Unexecuted instantiation: bytes_methods.c:_Py_IsImmortal
bytearrayobject.c:_Py_IsImmortal
Line
Count
Source
121
16
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
16
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
16
}
capsule.c:_Py_IsImmortal
Line
Count
Source
121
10
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
10
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
10
}
cellobject.c:_Py_IsImmortal
Line
Count
Source
121
281k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
281k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
281k
}
classobject.c:_Py_IsImmortal
Line
Count
Source
121
38.9M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
38.9M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
38.9M
}
codeobject.c:_Py_IsImmortal
Line
Count
Source
121
112k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
112k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
112k
}
Unexecuted instantiation: complexobject.c:_Py_IsImmortal
descrobject.c:_Py_IsImmortal
Line
Count
Source
121
95.6M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
95.6M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
95.6M
}
enumobject.c:_Py_IsImmortal
Line
Count
Source
121
220M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
220M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
220M
}
genobject.c:_Py_IsImmortal
Line
Count
Source
121
123M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
123M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
123M
}
fileobject.c:_Py_IsImmortal
Line
Count
Source
121
10.7k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
10.7k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
10.7k
}
frameobject.c:_Py_IsImmortal
Line
Count
Source
121
10.9M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
10.9M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
10.9M
}
funcobject.c:_Py_IsImmortal
Line
Count
Source
121
137M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
137M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
137M
}
interpolationobject.c:_Py_IsImmortal
Line
Count
Source
121
16
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
16
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
16
}
iterobject.c:_Py_IsImmortal
Line
Count
Source
121
686k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
686k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
686k
}
Unexecuted instantiation: odictobject.c:_Py_IsImmortal
methodobject.c:_Py_IsImmortal
Line
Count
Source
121
245M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
245M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
245M
}
namespaceobject.c:_Py_IsImmortal
Line
Count
Source
121
16
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
16
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
16
}
Unexecuted instantiation: _contextvars.c:_Py_IsImmortal
Python-ast.c:_Py_IsImmortal
Line
Count
Source
121
3.96M
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
3.96M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
3.96M
}
Unexecuted instantiation: Python-tokenize.c:_Py_IsImmortal
Unexecuted instantiation: asdl.c:_Py_IsImmortal
assemble.c:_Py_IsImmortal
Line
Count
Source
121
40.0k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
40.0k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
40.0k
}
Unexecuted instantiation: ast.c:_Py_IsImmortal
ast_preprocess.c:_Py_IsImmortal
Line
Count
Source
121
2.36k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
2.36k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
2.36k
}
Unexecuted instantiation: ast_unparse.c:_Py_IsImmortal
Unexecuted instantiation: critical_section.c:_Py_IsImmortal
Unexecuted instantiation: crossinterp.c:_Py_IsImmortal
Unexecuted instantiation: getcopyright.c:_Py_IsImmortal
Unexecuted instantiation: getplatform.c:_Py_IsImmortal
Unexecuted instantiation: getversion.c:_Py_IsImmortal
Unexecuted instantiation: optimizer.c:_Py_IsImmortal
Unexecuted instantiation: pathconfig.c:_Py_IsImmortal
structmember.c:_Py_IsImmortal
Line
Count
Source
121
558
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
558
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
558
}
pegen.c:_Py_IsImmortal
Line
Count
Source
121
135k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
135k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
135k
}
pegen_errors.c:_Py_IsImmortal
Line
Count
Source
121
49.4k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
49.4k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
49.4k
}
Unexecuted instantiation: parser.c:_Py_IsImmortal
Unexecuted instantiation: buffer.c:_Py_IsImmortal
lexer.c:_Py_IsImmortal
Line
Count
Source
121
13.0k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
13.0k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
13.0k
}
state.c:_Py_IsImmortal
Line
Count
Source
121
23.6k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
23.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
23.6k
}
Unexecuted instantiation: readline_tokenizer.c:_Py_IsImmortal
Unexecuted instantiation: string_tokenizer.c:_Py_IsImmortal
Unexecuted instantiation: utf8_tokenizer.c:_Py_IsImmortal
Unexecuted instantiation: getcompiler.c:_Py_IsImmortal
Unexecuted instantiation: mystrtoul.c:_Py_IsImmortal
Unexecuted instantiation: token.c:_Py_IsImmortal
Unexecuted instantiation: action_helpers.c:_Py_IsImmortal
string_parser.c:_Py_IsImmortal
Line
Count
Source
121
40.8k
{
122
#if defined(Py_GIL_DISABLED)
123
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
124
            _Py_IMMORTAL_REFCNT_LOCAL);
125
#elif SIZEOF_VOID_P > 4
126
40.8k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
127
#else
128
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
129
#endif
130
40.8k
}
131
14.5G
#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
132
133
134
static inline Py_ALWAYS_INLINE int _Py_IsStaticImmortal(PyObject *op)
135
0
{
136
0
#if defined(Py_GIL_DISABLED) || SIZEOF_VOID_P > 4
137
0
    return (op->ob_flags & _Py_STATICALLY_ALLOCATED_FLAG) != 0;
138
0
#else
139
0
    return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT;
140
0
#endif
141
0
}
Unexecuted instantiation: bytesobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: call.c:_Py_IsStaticImmortal
Unexecuted instantiation: exceptions.c:_Py_IsStaticImmortal
Unexecuted instantiation: genericaliasobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: floatobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: listobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: longobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: dictobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: memoryobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: moduleobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: object.c:_Py_IsStaticImmortal
Unexecuted instantiation: obmalloc.c:_Py_IsStaticImmortal
Unexecuted instantiation: picklebufobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: rangeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: setobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: sliceobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: structseq.c:_Py_IsStaticImmortal
Unexecuted instantiation: templateobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: tupleobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: typeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: typevarobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicodeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicodectype.c:_Py_IsStaticImmortal
Unexecuted instantiation: unionobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: weakrefobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: _warnings.c:_Py_IsStaticImmortal
Unexecuted instantiation: bltinmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: ceval.c:_Py_IsStaticImmortal
Unexecuted instantiation: codecs.c:_Py_IsStaticImmortal
Unexecuted instantiation: codegen.c:_Py_IsStaticImmortal
Unexecuted instantiation: compile.c:_Py_IsStaticImmortal
Unexecuted instantiation: context.c:_Py_IsStaticImmortal
Unexecuted instantiation: errors.c:_Py_IsStaticImmortal
Unexecuted instantiation: flowgraph.c:_Py_IsStaticImmortal
Unexecuted instantiation: frame.c:_Py_IsStaticImmortal
Unexecuted instantiation: future.c:_Py_IsStaticImmortal
Unexecuted instantiation: gc.c:_Py_IsStaticImmortal
Unexecuted instantiation: gc_gil.c:_Py_IsStaticImmortal
Unexecuted instantiation: getargs.c:_Py_IsStaticImmortal
Unexecuted instantiation: ceval_gil.c:_Py_IsStaticImmortal
Unexecuted instantiation: hamt.c:_Py_IsStaticImmortal
Unexecuted instantiation: hashtable.c:_Py_IsStaticImmortal
Unexecuted instantiation: import.c:_Py_IsStaticImmortal
Unexecuted instantiation: importdl.c:_Py_IsStaticImmortal
Unexecuted instantiation: initconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: instrumentation.c:_Py_IsStaticImmortal
Unexecuted instantiation: instruction_sequence.c:_Py_IsStaticImmortal
Unexecuted instantiation: intrinsics.c:_Py_IsStaticImmortal
Unexecuted instantiation: legacy_tracing.c:_Py_IsStaticImmortal
Unexecuted instantiation: lock.c:_Py_IsStaticImmortal
Unexecuted instantiation: marshal.c:_Py_IsStaticImmortal
Unexecuted instantiation: modsupport.c:_Py_IsStaticImmortal
Unexecuted instantiation: mysnprintf.c:_Py_IsStaticImmortal
Unexecuted instantiation: parking_lot.c:_Py_IsStaticImmortal
Unexecuted instantiation: preconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: pyarena.c:_Py_IsStaticImmortal
Unexecuted instantiation: pyctype.c:_Py_IsStaticImmortal
Unexecuted instantiation: pyhash.c:_Py_IsStaticImmortal
Unexecuted instantiation: pylifecycle.c:_Py_IsStaticImmortal
Unexecuted instantiation: pymath.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystate.c:_Py_IsStaticImmortal
Unexecuted instantiation: pythonrun.c:_Py_IsStaticImmortal
Unexecuted instantiation: pytime.c:_Py_IsStaticImmortal
Unexecuted instantiation: qsbr.c:_Py_IsStaticImmortal
Unexecuted instantiation: bootstrap_hash.c:_Py_IsStaticImmortal
Unexecuted instantiation: specialize.c:_Py_IsStaticImmortal
Unexecuted instantiation: symtable.c:_Py_IsStaticImmortal
Unexecuted instantiation: sysmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: thread.c:_Py_IsStaticImmortal
Unexecuted instantiation: traceback.c:_Py_IsStaticImmortal
Unexecuted instantiation: tracemalloc.c:_Py_IsStaticImmortal
Unexecuted instantiation: getopt.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystrcmp.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystrtod.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystrhex.c:_Py_IsStaticImmortal
Unexecuted instantiation: dtoa.c:_Py_IsStaticImmortal
Unexecuted instantiation: formatter_unicode.c:_Py_IsStaticImmortal
Unexecuted instantiation: fileutils.c:_Py_IsStaticImmortal
Unexecuted instantiation: suggestions.c:_Py_IsStaticImmortal
Unexecuted instantiation: perf_trampoline.c:_Py_IsStaticImmortal
Unexecuted instantiation: perf_jit_trampoline.c:_Py_IsStaticImmortal
Unexecuted instantiation: remote_debugging.c:_Py_IsStaticImmortal
Unexecuted instantiation: dynload_shlib.c:_Py_IsStaticImmortal
Unexecuted instantiation: config.c:_Py_IsStaticImmortal
Unexecuted instantiation: gcmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: atexitmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: faulthandler.c:_Py_IsStaticImmortal
Unexecuted instantiation: posixmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: signalmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _tracemalloc.c:_Py_IsStaticImmortal
Unexecuted instantiation: _suggestions.c:_Py_IsStaticImmortal
Unexecuted instantiation: _codecsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _collectionsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: errnomodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _iomodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: iobase.c:_Py_IsStaticImmortal
Unexecuted instantiation: fileio.c:_Py_IsStaticImmortal
Unexecuted instantiation: bytesio.c:_Py_IsStaticImmortal
Unexecuted instantiation: bufferedio.c:_Py_IsStaticImmortal
Unexecuted instantiation: textio.c:_Py_IsStaticImmortal
Unexecuted instantiation: stringio.c:_Py_IsStaticImmortal
Unexecuted instantiation: itertoolsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: sre.c:_Py_IsStaticImmortal
Unexecuted instantiation: _sysconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: _threadmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: timemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _typesmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _typingmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _weakref.c:_Py_IsStaticImmortal
Unexecuted instantiation: _abc.c:_Py_IsStaticImmortal
Unexecuted instantiation: _functoolsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _localemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _opcode.c:_Py_IsStaticImmortal
Unexecuted instantiation: _operator.c:_Py_IsStaticImmortal
Unexecuted instantiation: _stat.c:_Py_IsStaticImmortal
Unexecuted instantiation: symtablemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: pwdmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: getpath.c:_Py_IsStaticImmortal
Unexecuted instantiation: frozen.c:_Py_IsStaticImmortal
Unexecuted instantiation: getbuildinfo.c:_Py_IsStaticImmortal
Unexecuted instantiation: peg_api.c:_Py_IsStaticImmortal
Unexecuted instantiation: file_tokenizer.c:_Py_IsStaticImmortal
Unexecuted instantiation: helpers.c:_Py_IsStaticImmortal
Unexecuted instantiation: myreadline.c:_Py_IsStaticImmortal
Unexecuted instantiation: abstract.c:_Py_IsStaticImmortal
Unexecuted instantiation: boolobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: bytes_methods.c:_Py_IsStaticImmortal
Unexecuted instantiation: bytearrayobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: capsule.c:_Py_IsStaticImmortal
Unexecuted instantiation: cellobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: classobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: codeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: complexobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: descrobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: enumobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: genobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: fileobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: frameobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: funcobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: interpolationobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: iterobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: odictobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: methodobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: namespaceobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: _contextvars.c:_Py_IsStaticImmortal
Unexecuted instantiation: Python-ast.c:_Py_IsStaticImmortal
Unexecuted instantiation: Python-tokenize.c:_Py_IsStaticImmortal
Unexecuted instantiation: asdl.c:_Py_IsStaticImmortal
Unexecuted instantiation: assemble.c:_Py_IsStaticImmortal
Unexecuted instantiation: ast.c:_Py_IsStaticImmortal
Unexecuted instantiation: ast_preprocess.c:_Py_IsStaticImmortal
Unexecuted instantiation: ast_unparse.c:_Py_IsStaticImmortal
Unexecuted instantiation: critical_section.c:_Py_IsStaticImmortal
Unexecuted instantiation: crossinterp.c:_Py_IsStaticImmortal
Unexecuted instantiation: getcopyright.c:_Py_IsStaticImmortal
Unexecuted instantiation: getplatform.c:_Py_IsStaticImmortal
Unexecuted instantiation: getversion.c:_Py_IsStaticImmortal
Unexecuted instantiation: optimizer.c:_Py_IsStaticImmortal
Unexecuted instantiation: pathconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: structmember.c:_Py_IsStaticImmortal
Unexecuted instantiation: pegen.c:_Py_IsStaticImmortal
Unexecuted instantiation: pegen_errors.c:_Py_IsStaticImmortal
Unexecuted instantiation: parser.c:_Py_IsStaticImmortal
Unexecuted instantiation: buffer.c:_Py_IsStaticImmortal
Unexecuted instantiation: lexer.c:_Py_IsStaticImmortal
Unexecuted instantiation: state.c:_Py_IsStaticImmortal
Unexecuted instantiation: readline_tokenizer.c:_Py_IsStaticImmortal
Unexecuted instantiation: string_tokenizer.c:_Py_IsStaticImmortal
Unexecuted instantiation: utf8_tokenizer.c:_Py_IsStaticImmortal
Unexecuted instantiation: getcompiler.c:_Py_IsStaticImmortal
Unexecuted instantiation: mystrtoul.c:_Py_IsStaticImmortal
Unexecuted instantiation: token.c:_Py_IsStaticImmortal
Unexecuted instantiation: action_helpers.c:_Py_IsStaticImmortal
Unexecuted instantiation: string_parser.c:_Py_IsStaticImmortal
142
#define _Py_IsStaticImmortal(op) _Py_IsStaticImmortal(_PyObject_CAST(op))
143
144
// Py_SET_REFCNT() implementation for stable ABI
145
PyAPI_FUNC(void) _Py_SetRefcnt(PyObject *ob, Py_ssize_t refcnt);
146
147
539M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
148
539M
    assert(refcnt >= 0);
149
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
150
    // Stable ABI implements Py_SET_REFCNT() as a function call
151
    // on limited C API version 3.13 and newer.
152
    _Py_SetRefcnt(ob, refcnt);
153
#else
154
    // This immortal check is for code that is unaware of immortal objects.
155
    // The runtime tracks these objects and we should avoid as much
156
    // as possible having extensions inadvertently change the refcnt
157
    // of an immortalized object.
158
539M
    if (_Py_IsImmortal(ob)) {
159
439
        return;
160
439
    }
161
539M
#ifndef Py_GIL_DISABLED
162
539M
#if SIZEOF_VOID_P > 4
163
539M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
164
#else
165
    ob->ob_refcnt = refcnt;
166
#endif
167
#else
168
    if (_Py_IsOwnedByCurrentThread(ob)) {
169
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
170
            // On overflow, make the object immortal
171
            ob->ob_tid = _Py_UNOWNED_TID;
172
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
173
            ob->ob_ref_shared = 0;
174
        }
175
        else {
176
            // Set local refcount to desired refcount and shared refcount
177
            // to zero, but preserve the shared refcount flags.
178
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
179
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
180
        }
181
    }
182
    else {
183
        // Set local refcount to zero and shared refcount to desired refcount.
184
        // Mark the object as merged.
185
        ob->ob_tid = _Py_UNOWNED_TID;
186
        ob->ob_ref_local = 0;
187
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
188
    }
189
#endif  // Py_GIL_DISABLED
190
539M
#endif  // Py_LIMITED_API+0 < 0x030d0000
191
539M
}
Unexecuted instantiation: bytesobject.c:Py_SET_REFCNT
Unexecuted instantiation: call.c:Py_SET_REFCNT
Unexecuted instantiation: exceptions.c:Py_SET_REFCNT
Unexecuted instantiation: genericaliasobject.c:Py_SET_REFCNT
Unexecuted instantiation: floatobject.c:Py_SET_REFCNT
Unexecuted instantiation: listobject.c:Py_SET_REFCNT
Unexecuted instantiation: longobject.c:Py_SET_REFCNT
dictobject.c:Py_SET_REFCNT
Line
Count
Source
147
476M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
148
476M
    assert(refcnt >= 0);
149
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
150
    // Stable ABI implements Py_SET_REFCNT() as a function call
151
    // on limited C API version 3.13 and newer.
152
    _Py_SetRefcnt(ob, refcnt);
153
#else
154
    // This immortal check is for code that is unaware of immortal objects.
155
    // The runtime tracks these objects and we should avoid as much
156
    // as possible having extensions inadvertently change the refcnt
157
    // of an immortalized object.
158
476M
    if (_Py_IsImmortal(ob)) {
159
0
        return;
160
0
    }
161
476M
#ifndef Py_GIL_DISABLED
162
476M
#if SIZEOF_VOID_P > 4
163
476M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
164
#else
165
    ob->ob_refcnt = refcnt;
166
#endif
167
#else
168
    if (_Py_IsOwnedByCurrentThread(ob)) {
169
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
170
            // On overflow, make the object immortal
171
            ob->ob_tid = _Py_UNOWNED_TID;
172
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
173
            ob->ob_ref_shared = 0;
174
        }
175
        else {
176
            // Set local refcount to desired refcount and shared refcount
177
            // to zero, but preserve the shared refcount flags.
178
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
179
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
180
        }
181
    }
182
    else {
183
        // Set local refcount to zero and shared refcount to desired refcount.
184
        // Mark the object as merged.
185
        ob->ob_tid = _Py_UNOWNED_TID;
186
        ob->ob_ref_local = 0;
187
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
188
    }
189
#endif  // Py_GIL_DISABLED
190
476M
#endif  // Py_LIMITED_API+0 < 0x030d0000
191
476M
}
Unexecuted instantiation: memoryobject.c:Py_SET_REFCNT
moduleobject.c:Py_SET_REFCNT
Line
Count
Source
147
439
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
148
439
    assert(refcnt >= 0);
149
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
150
    // Stable ABI implements Py_SET_REFCNT() as a function call
151
    // on limited C API version 3.13 and newer.
152
    _Py_SetRefcnt(ob, refcnt);
153
#else
154
    // This immortal check is for code that is unaware of immortal objects.
155
    // The runtime tracks these objects and we should avoid as much
156
    // as possible having extensions inadvertently change the refcnt
157
    // of an immortalized object.
158
439
    if (_Py_IsImmortal(ob)) {
159
439
        return;
160
439
    }
161
0
#ifndef Py_GIL_DISABLED
162
0
#if SIZEOF_VOID_P > 4
163
0
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
164
#else
165
    ob->ob_refcnt = refcnt;
166
#endif
167
#else
168
    if (_Py_IsOwnedByCurrentThread(ob)) {
169
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
170
            // On overflow, make the object immortal
171
            ob->ob_tid = _Py_UNOWNED_TID;
172
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
173
            ob->ob_ref_shared = 0;
174
        }
175
        else {
176
            // Set local refcount to desired refcount and shared refcount
177
            // to zero, but preserve the shared refcount flags.
178
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
179
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
180
        }
181
    }
182
    else {
183
        // Set local refcount to zero and shared refcount to desired refcount.
184
        // Mark the object as merged.
185
        ob->ob_tid = _Py_UNOWNED_TID;
186
        ob->ob_ref_local = 0;
187
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
188
    }
189
#endif  // Py_GIL_DISABLED
190
0
#endif  // Py_LIMITED_API+0 < 0x030d0000
191
0
}
object.c:Py_SET_REFCNT
Line
Count
Source
147
37.2M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
148
37.2M
    assert(refcnt >= 0);
149
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
150
    // Stable ABI implements Py_SET_REFCNT() as a function call
151
    // on limited C API version 3.13 and newer.
152
    _Py_SetRefcnt(ob, refcnt);
153
#else
154
    // This immortal check is for code that is unaware of immortal objects.
155
    // The runtime tracks these objects and we should avoid as much
156
    // as possible having extensions inadvertently change the refcnt
157
    // of an immortalized object.
158
37.2M
    if (_Py_IsImmortal(ob)) {
159
0
        return;
160
0
    }
161
37.2M
#ifndef Py_GIL_DISABLED
162
37.2M
#if SIZEOF_VOID_P > 4
163
37.2M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
164
#else
165
    ob->ob_refcnt = refcnt;
166
#endif
167
#else
168
    if (_Py_IsOwnedByCurrentThread(ob)) {
169
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
170
            // On overflow, make the object immortal
171
            ob->ob_tid = _Py_UNOWNED_TID;
172
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
173
            ob->ob_ref_shared = 0;
174
        }
175
        else {
176
            // Set local refcount to desired refcount and shared refcount
177
            // to zero, but preserve the shared refcount flags.
178
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
179
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
180
        }
181
    }
182
    else {
183
        // Set local refcount to zero and shared refcount to desired refcount.
184
        // Mark the object as merged.
185
        ob->ob_tid = _Py_UNOWNED_TID;
186
        ob->ob_ref_local = 0;
187
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
188
    }
189
#endif  // Py_GIL_DISABLED
190
37.2M
#endif  // Py_LIMITED_API+0 < 0x030d0000
191
37.2M
}
Unexecuted instantiation: obmalloc.c:Py_SET_REFCNT
Unexecuted instantiation: picklebufobject.c:Py_SET_REFCNT
Unexecuted instantiation: rangeobject.c:Py_SET_REFCNT
Unexecuted instantiation: setobject.c:Py_SET_REFCNT
Unexecuted instantiation: sliceobject.c:Py_SET_REFCNT
Unexecuted instantiation: structseq.c:Py_SET_REFCNT
Unexecuted instantiation: templateobject.c:Py_SET_REFCNT
Unexecuted instantiation: tupleobject.c:Py_SET_REFCNT
Unexecuted instantiation: typeobject.c:Py_SET_REFCNT
Unexecuted instantiation: typevarobject.c:Py_SET_REFCNT
unicodeobject.c:Py_SET_REFCNT
Line
Count
Source
147
913k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
148
913k
    assert(refcnt >= 0);
149
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
150
    // Stable ABI implements Py_SET_REFCNT() as a function call
151
    // on limited C API version 3.13 and newer.
152
    _Py_SetRefcnt(ob, refcnt);
153
#else
154
    // This immortal check is for code that is unaware of immortal objects.
155
    // The runtime tracks these objects and we should avoid as much
156
    // as possible having extensions inadvertently change the refcnt
157
    // of an immortalized object.
158
913k
    if (_Py_IsImmortal(ob)) {
159
0
        return;
160
0
    }
161
913k
#ifndef Py_GIL_DISABLED
162
913k
#if SIZEOF_VOID_P > 4
163
913k
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
164
#else
165
    ob->ob_refcnt = refcnt;
166
#endif
167
#else
168
    if (_Py_IsOwnedByCurrentThread(ob)) {
169
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
170
            // On overflow, make the object immortal
171
            ob->ob_tid = _Py_UNOWNED_TID;
172
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
173
            ob->ob_ref_shared = 0;
174
        }
175
        else {
176
            // Set local refcount to desired refcount and shared refcount
177
            // to zero, but preserve the shared refcount flags.
178
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
179
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
180
        }
181
    }
182
    else {
183
        // Set local refcount to zero and shared refcount to desired refcount.
184
        // Mark the object as merged.
185
        ob->ob_tid = _Py_UNOWNED_TID;
186
        ob->ob_ref_local = 0;
187
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
188
    }
189
#endif  // Py_GIL_DISABLED
190
913k
#endif  // Py_LIMITED_API+0 < 0x030d0000
191
913k
}
Unexecuted instantiation: unicodectype.c:Py_SET_REFCNT
Unexecuted instantiation: unionobject.c:Py_SET_REFCNT
Unexecuted instantiation: weakrefobject.c:Py_SET_REFCNT
Unexecuted instantiation: _warnings.c:Py_SET_REFCNT
Unexecuted instantiation: bltinmodule.c:Py_SET_REFCNT
Unexecuted instantiation: ceval.c:Py_SET_REFCNT
Unexecuted instantiation: codecs.c:Py_SET_REFCNT
Unexecuted instantiation: codegen.c:Py_SET_REFCNT
Unexecuted instantiation: compile.c:Py_SET_REFCNT
Unexecuted instantiation: context.c:Py_SET_REFCNT
Unexecuted instantiation: errors.c:Py_SET_REFCNT
Unexecuted instantiation: flowgraph.c:Py_SET_REFCNT
Unexecuted instantiation: frame.c:Py_SET_REFCNT
Unexecuted instantiation: future.c:Py_SET_REFCNT
Unexecuted instantiation: gc.c:Py_SET_REFCNT
Unexecuted instantiation: gc_gil.c:Py_SET_REFCNT
Unexecuted instantiation: getargs.c:Py_SET_REFCNT
Unexecuted instantiation: ceval_gil.c:Py_SET_REFCNT
Unexecuted instantiation: hamt.c:Py_SET_REFCNT
Unexecuted instantiation: hashtable.c:Py_SET_REFCNT
Unexecuted instantiation: import.c:Py_SET_REFCNT
Unexecuted instantiation: importdl.c:Py_SET_REFCNT
Unexecuted instantiation: initconfig.c:Py_SET_REFCNT
Unexecuted instantiation: instrumentation.c:Py_SET_REFCNT
Unexecuted instantiation: instruction_sequence.c:Py_SET_REFCNT
Unexecuted instantiation: intrinsics.c:Py_SET_REFCNT
Unexecuted instantiation: legacy_tracing.c:Py_SET_REFCNT
Unexecuted instantiation: lock.c:Py_SET_REFCNT
Unexecuted instantiation: marshal.c:Py_SET_REFCNT
Unexecuted instantiation: modsupport.c:Py_SET_REFCNT
Unexecuted instantiation: mysnprintf.c:Py_SET_REFCNT
Unexecuted instantiation: parking_lot.c:Py_SET_REFCNT
Unexecuted instantiation: preconfig.c:Py_SET_REFCNT
Unexecuted instantiation: pyarena.c:Py_SET_REFCNT
Unexecuted instantiation: pyctype.c:Py_SET_REFCNT
Unexecuted instantiation: pyhash.c:Py_SET_REFCNT
Unexecuted instantiation: pylifecycle.c:Py_SET_REFCNT
Unexecuted instantiation: pymath.c:Py_SET_REFCNT
Unexecuted instantiation: pystate.c:Py_SET_REFCNT
Unexecuted instantiation: pythonrun.c:Py_SET_REFCNT
Unexecuted instantiation: pytime.c:Py_SET_REFCNT
Unexecuted instantiation: qsbr.c:Py_SET_REFCNT
Unexecuted instantiation: bootstrap_hash.c:Py_SET_REFCNT
Unexecuted instantiation: specialize.c:Py_SET_REFCNT
Unexecuted instantiation: symtable.c:Py_SET_REFCNT
Unexecuted instantiation: sysmodule.c:Py_SET_REFCNT
Unexecuted instantiation: thread.c:Py_SET_REFCNT
Unexecuted instantiation: traceback.c:Py_SET_REFCNT
Unexecuted instantiation: tracemalloc.c:Py_SET_REFCNT
Unexecuted instantiation: getopt.c:Py_SET_REFCNT
Unexecuted instantiation: pystrcmp.c:Py_SET_REFCNT
Unexecuted instantiation: pystrtod.c:Py_SET_REFCNT
Unexecuted instantiation: pystrhex.c:Py_SET_REFCNT
Unexecuted instantiation: dtoa.c:Py_SET_REFCNT
Unexecuted instantiation: formatter_unicode.c:Py_SET_REFCNT
Unexecuted instantiation: fileutils.c:Py_SET_REFCNT
Unexecuted instantiation: suggestions.c:Py_SET_REFCNT
Unexecuted instantiation: perf_trampoline.c:Py_SET_REFCNT
Unexecuted instantiation: perf_jit_trampoline.c:Py_SET_REFCNT
Unexecuted instantiation: remote_debugging.c:Py_SET_REFCNT
Unexecuted instantiation: dynload_shlib.c:Py_SET_REFCNT
Unexecuted instantiation: config.c:Py_SET_REFCNT
Unexecuted instantiation: gcmodule.c:Py_SET_REFCNT
Unexecuted instantiation: atexitmodule.c:Py_SET_REFCNT
Unexecuted instantiation: faulthandler.c:Py_SET_REFCNT
Unexecuted instantiation: posixmodule.c:Py_SET_REFCNT
Unexecuted instantiation: signalmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _tracemalloc.c:Py_SET_REFCNT
Unexecuted instantiation: _suggestions.c:Py_SET_REFCNT
Unexecuted instantiation: _codecsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _collectionsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: errnomodule.c:Py_SET_REFCNT
Unexecuted instantiation: _iomodule.c:Py_SET_REFCNT
Unexecuted instantiation: iobase.c:Py_SET_REFCNT
Unexecuted instantiation: fileio.c:Py_SET_REFCNT
Unexecuted instantiation: bytesio.c:Py_SET_REFCNT
Unexecuted instantiation: bufferedio.c:Py_SET_REFCNT
Unexecuted instantiation: textio.c:Py_SET_REFCNT
Unexecuted instantiation: stringio.c:Py_SET_REFCNT
Unexecuted instantiation: itertoolsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: sre.c:Py_SET_REFCNT
Unexecuted instantiation: _sysconfig.c:Py_SET_REFCNT
Unexecuted instantiation: _threadmodule.c:Py_SET_REFCNT
Unexecuted instantiation: timemodule.c:Py_SET_REFCNT
Unexecuted instantiation: _typesmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _typingmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _weakref.c:Py_SET_REFCNT
Unexecuted instantiation: _abc.c:Py_SET_REFCNT
Unexecuted instantiation: _functoolsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _localemodule.c:Py_SET_REFCNT
Unexecuted instantiation: _opcode.c:Py_SET_REFCNT
Unexecuted instantiation: _operator.c:Py_SET_REFCNT
Unexecuted instantiation: _stat.c:Py_SET_REFCNT
Unexecuted instantiation: symtablemodule.c:Py_SET_REFCNT
Unexecuted instantiation: pwdmodule.c:Py_SET_REFCNT
Unexecuted instantiation: getpath.c:Py_SET_REFCNT
Unexecuted instantiation: frozen.c:Py_SET_REFCNT
Unexecuted instantiation: getbuildinfo.c:Py_SET_REFCNT
Unexecuted instantiation: peg_api.c:Py_SET_REFCNT
Unexecuted instantiation: file_tokenizer.c:Py_SET_REFCNT
Unexecuted instantiation: helpers.c:Py_SET_REFCNT
Unexecuted instantiation: myreadline.c:Py_SET_REFCNT
Unexecuted instantiation: abstract.c:Py_SET_REFCNT
Unexecuted instantiation: boolobject.c:Py_SET_REFCNT
Unexecuted instantiation: bytes_methods.c:Py_SET_REFCNT
Unexecuted instantiation: bytearrayobject.c:Py_SET_REFCNT
Unexecuted instantiation: capsule.c:Py_SET_REFCNT
Unexecuted instantiation: cellobject.c:Py_SET_REFCNT
Unexecuted instantiation: classobject.c:Py_SET_REFCNT
codeobject.c:Py_SET_REFCNT
Line
Count
Source
147
15.4k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
148
15.4k
    assert(refcnt >= 0);
149
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
150
    // Stable ABI implements Py_SET_REFCNT() as a function call
151
    // on limited C API version 3.13 and newer.
152
    _Py_SetRefcnt(ob, refcnt);
153
#else
154
    // This immortal check is for code that is unaware of immortal objects.
155
    // The runtime tracks these objects and we should avoid as much
156
    // as possible having extensions inadvertently change the refcnt
157
    // of an immortalized object.
158
15.4k
    if (_Py_IsImmortal(ob)) {
159
0
        return;
160
0
    }
161
15.4k
#ifndef Py_GIL_DISABLED
162
15.4k
#if SIZEOF_VOID_P > 4
163
15.4k
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
164
#else
165
    ob->ob_refcnt = refcnt;
166
#endif
167
#else
168
    if (_Py_IsOwnedByCurrentThread(ob)) {
169
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
170
            // On overflow, make the object immortal
171
            ob->ob_tid = _Py_UNOWNED_TID;
172
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
173
            ob->ob_ref_shared = 0;
174
        }
175
        else {
176
            // Set local refcount to desired refcount and shared refcount
177
            // to zero, but preserve the shared refcount flags.
178
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
179
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
180
        }
181
    }
182
    else {
183
        // Set local refcount to zero and shared refcount to desired refcount.
184
        // Mark the object as merged.
185
        ob->ob_tid = _Py_UNOWNED_TID;
186
        ob->ob_ref_local = 0;
187
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
188
    }
189
#endif  // Py_GIL_DISABLED
190
15.4k
#endif  // Py_LIMITED_API+0 < 0x030d0000
191
15.4k
}
Unexecuted instantiation: complexobject.c:Py_SET_REFCNT
Unexecuted instantiation: descrobject.c:Py_SET_REFCNT
Unexecuted instantiation: enumobject.c:Py_SET_REFCNT
Unexecuted instantiation: genobject.c:Py_SET_REFCNT
Unexecuted instantiation: fileobject.c:Py_SET_REFCNT
Unexecuted instantiation: frameobject.c:Py_SET_REFCNT
funcobject.c:Py_SET_REFCNT
Line
Count
Source
147
24.9M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
148
24.9M
    assert(refcnt >= 0);
149
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
150
    // Stable ABI implements Py_SET_REFCNT() as a function call
151
    // on limited C API version 3.13 and newer.
152
    _Py_SetRefcnt(ob, refcnt);
153
#else
154
    // This immortal check is for code that is unaware of immortal objects.
155
    // The runtime tracks these objects and we should avoid as much
156
    // as possible having extensions inadvertently change the refcnt
157
    // of an immortalized object.
158
24.9M
    if (_Py_IsImmortal(ob)) {
159
0
        return;
160
0
    }
161
24.9M
#ifndef Py_GIL_DISABLED
162
24.9M
#if SIZEOF_VOID_P > 4
163
24.9M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
164
#else
165
    ob->ob_refcnt = refcnt;
166
#endif
167
#else
168
    if (_Py_IsOwnedByCurrentThread(ob)) {
169
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
170
            // On overflow, make the object immortal
171
            ob->ob_tid = _Py_UNOWNED_TID;
172
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
173
            ob->ob_ref_shared = 0;
174
        }
175
        else {
176
            // Set local refcount to desired refcount and shared refcount
177
            // to zero, but preserve the shared refcount flags.
178
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
179
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
180
        }
181
    }
182
    else {
183
        // Set local refcount to zero and shared refcount to desired refcount.
184
        // Mark the object as merged.
185
        ob->ob_tid = _Py_UNOWNED_TID;
186
        ob->ob_ref_local = 0;
187
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
188
    }
189
#endif  // Py_GIL_DISABLED
190
24.9M
#endif  // Py_LIMITED_API+0 < 0x030d0000
191
24.9M
}
Unexecuted instantiation: interpolationobject.c:Py_SET_REFCNT
Unexecuted instantiation: iterobject.c:Py_SET_REFCNT
Unexecuted instantiation: odictobject.c:Py_SET_REFCNT
Unexecuted instantiation: methodobject.c:Py_SET_REFCNT
Unexecuted instantiation: namespaceobject.c:Py_SET_REFCNT
Unexecuted instantiation: _contextvars.c:Py_SET_REFCNT
Unexecuted instantiation: Python-ast.c:Py_SET_REFCNT
Unexecuted instantiation: Python-tokenize.c:Py_SET_REFCNT
Unexecuted instantiation: asdl.c:Py_SET_REFCNT
Unexecuted instantiation: assemble.c:Py_SET_REFCNT
Unexecuted instantiation: ast.c:Py_SET_REFCNT
Unexecuted instantiation: ast_preprocess.c:Py_SET_REFCNT
Unexecuted instantiation: ast_unparse.c:Py_SET_REFCNT
Unexecuted instantiation: critical_section.c:Py_SET_REFCNT
Unexecuted instantiation: crossinterp.c:Py_SET_REFCNT
Unexecuted instantiation: getcopyright.c:Py_SET_REFCNT
Unexecuted instantiation: getplatform.c:Py_SET_REFCNT
Unexecuted instantiation: getversion.c:Py_SET_REFCNT
Unexecuted instantiation: optimizer.c:Py_SET_REFCNT
Unexecuted instantiation: pathconfig.c:Py_SET_REFCNT
Unexecuted instantiation: structmember.c:Py_SET_REFCNT
Unexecuted instantiation: pegen.c:Py_SET_REFCNT
Unexecuted instantiation: pegen_errors.c:Py_SET_REFCNT
Unexecuted instantiation: parser.c:Py_SET_REFCNT
Unexecuted instantiation: buffer.c:Py_SET_REFCNT
Unexecuted instantiation: lexer.c:Py_SET_REFCNT
Unexecuted instantiation: state.c:Py_SET_REFCNT
Unexecuted instantiation: readline_tokenizer.c:Py_SET_REFCNT
Unexecuted instantiation: string_tokenizer.c:Py_SET_REFCNT
Unexecuted instantiation: utf8_tokenizer.c:Py_SET_REFCNT
Unexecuted instantiation: getcompiler.c:Py_SET_REFCNT
Unexecuted instantiation: mystrtoul.c:Py_SET_REFCNT
Unexecuted instantiation: token.c:Py_SET_REFCNT
Unexecuted instantiation: action_helpers.c:Py_SET_REFCNT
Unexecuted instantiation: string_parser.c:Py_SET_REFCNT
192
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
193
539M
#  define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt))
194
#endif
195
196
197
/*
198
The macros Py_INCREF(op) and Py_DECREF(op) are used to increment or decrement
199
reference counts.  Py_DECREF calls the object's deallocator function when
200
the refcount falls to 0; for
201
objects that don't contain references to other objects or heap memory
202
this can be the standard function free().  Both macros can be used
203
wherever a void expression is allowed.  The argument must not be a
204
NULL pointer.  If it may be NULL, use Py_XINCREF/Py_XDECREF instead.
205
The macro _Py_NewReference(op) initialize reference counts to 1, and
206
in special builds (Py_REF_DEBUG, Py_TRACE_REFS) performs additional
207
bookkeeping appropriate to the special build.
208
209
We assume that the reference count field can never overflow; this can
210
be proven when the size of the field is the same as the pointer size, so
211
we ignore the possibility.  Provided a C int is at least 32 bits (which
212
is implicitly assumed in many parts of this code), that's enough for
213
about 2**31 references to an object.
214
215
XXX The following became out of date in Python 2.2, but I'm not sure
216
XXX what the full truth is now.  Certainly, heap-allocated type objects
217
XXX can and should be deallocated.
218
Type objects should never be deallocated; the type pointer in an object
219
is not considered to be a reference to the type object, to save
220
complications in the deallocation function.  (This is actually a
221
decision that's up to the implementer of each new type so if you want,
222
you can count such references to the type object.)
223
*/
224
225
#if defined(Py_REF_DEBUG) && !defined(Py_LIMITED_API)
226
PyAPI_FUNC(void) _Py_NegativeRefcount(const char *filename, int lineno,
227
                                      PyObject *op);
228
PyAPI_FUNC(void) _Py_INCREF_IncRefTotal(void);
229
PyAPI_FUNC(void) _Py_DECREF_DecRefTotal(void);
230
#endif  // Py_REF_DEBUG && !Py_LIMITED_API
231
232
PyAPI_FUNC(void) _Py_Dealloc(PyObject *);
233
234
235
/*
236
These are provided as conveniences to Python runtime embedders, so that
237
they can have object code that is not dependent on Python compilation flags.
238
*/
239
PyAPI_FUNC(void) Py_IncRef(PyObject *);
240
PyAPI_FUNC(void) Py_DecRef(PyObject *);
241
242
// Similar to Py_IncRef() and Py_DecRef() but the argument must be non-NULL.
243
// Private functions used by Py_INCREF() and Py_DECREF().
244
PyAPI_FUNC(void) _Py_IncRef(PyObject *);
245
PyAPI_FUNC(void) _Py_DecRef(PyObject *);
246
247
static inline Py_ALWAYS_INLINE void Py_INCREF(PyObject *op)
248
6.80G
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
6.80G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
6.80G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
3.31G
        _Py_INCREF_IMMORTAL_STAT_INC();
281
3.31G
        return;
282
3.31G
    }
283
3.48G
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
3.48G
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
#endif
299
3.48G
}
bytesobject.c:Py_INCREF
Line
Count
Source
248
19.4M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
19.4M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
19.4M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
18.3M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
18.3M
        return;
282
18.3M
    }
283
1.13M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
1.13M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
1.13M
#endif
299
1.13M
}
call.c:Py_INCREF
Line
Count
Source
248
20.8M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
20.8M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
20.8M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
7.36M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
7.36M
        return;
282
7.36M
    }
283
13.5M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
13.5M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
13.5M
#endif
299
13.5M
}
exceptions.c:Py_INCREF
Line
Count
Source
248
75.6M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
75.6M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
75.6M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
30.8M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
30.8M
        return;
282
30.8M
    }
283
44.8M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
44.8M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
44.8M
#endif
299
44.8M
}
genericaliasobject.c:Py_INCREF
Line
Count
Source
248
782
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
782
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
782
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
782
        _Py_INCREF_IMMORTAL_STAT_INC();
281
782
        return;
282
782
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
0
}
floatobject.c:Py_INCREF
Line
Count
Source
248
514k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
514k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
514k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
514k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
514k
        return;
282
514k
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
0
}
listobject.c:Py_INCREF
Line
Count
Source
248
1.24G
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
1.24G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
1.24G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
234M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
234M
        return;
282
234M
    }
283
1.01G
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
1.01G
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
1.01G
#endif
299
1.01G
}
longobject.c:Py_INCREF
Line
Count
Source
248
90.4M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
90.4M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
90.4M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
90.4M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
90.4M
        return;
282
90.4M
    }
283
4.61k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
4.61k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
4.61k
#endif
299
4.61k
}
dictobject.c:Py_INCREF
Line
Count
Source
248
668M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
668M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
668M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
170M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
170M
        return;
282
170M
    }
283
498M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
498M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
498M
#endif
299
498M
}
memoryobject.c:Py_INCREF
Line
Count
Source
248
514k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
514k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
514k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
514k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
514k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
514k
#endif
299
514k
}
moduleobject.c:Py_INCREF
Line
Count
Source
248
1.40k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
1.40k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
1.40k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
819
        _Py_INCREF_IMMORTAL_STAT_INC();
281
819
        return;
282
819
    }
283
581
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
581
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
581
#endif
299
581
}
object.c:Py_INCREF
Line
Count
Source
248
498M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
498M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
498M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
354M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
354M
        return;
282
354M
    }
283
144M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
144M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
144M
#endif
299
144M
}
Unexecuted instantiation: obmalloc.c:Py_INCREF
Unexecuted instantiation: picklebufobject.c:Py_INCREF
rangeobject.c:Py_INCREF
Line
Count
Source
248
64
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
64
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
64
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
48
        _Py_INCREF_IMMORTAL_STAT_INC();
281
48
        return;
282
48
    }
283
16
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
16
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
16
#endif
299
16
}
setobject.c:Py_INCREF
Line
Count
Source
248
1.17M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
1.17M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
1.17M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
437k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
437k
        return;
282
437k
    }
283
732k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
732k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
732k
#endif
299
732k
}
sliceobject.c:Py_INCREF
Line
Count
Source
248
38.0M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
38.0M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
38.0M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
38.0M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
38.0M
        return;
282
38.0M
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
0
}
Unexecuted instantiation: structseq.c:Py_INCREF
Unexecuted instantiation: templateobject.c:Py_INCREF
tupleobject.c:Py_INCREF
Line
Count
Source
248
523M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
523M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
523M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
363M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
363M
        return;
282
363M
    }
283
160M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
160M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
160M
#endif
299
160M
}
typeobject.c:Py_INCREF
Line
Count
Source
248
262M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
262M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
262M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
81.6M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
81.6M
        return;
282
81.6M
    }
283
180M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
180M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
180M
#endif
299
180M
}
Unexecuted instantiation: typevarobject.c:Py_INCREF
unicodeobject.c:Py_INCREF
Line
Count
Source
248
653M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
653M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
653M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
566M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
566M
        return;
282
566M
    }
283
86.8M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
86.8M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
86.8M
#endif
299
86.8M
}
Unexecuted instantiation: unicodectype.c:Py_INCREF
Unexecuted instantiation: unionobject.c:Py_INCREF
weakrefobject.c:Py_INCREF
Line
Count
Source
248
255k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
255k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
255k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
1.24k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
1.24k
        return;
282
1.24k
    }
283
254k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
254k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
254k
#endif
299
254k
}
_warnings.c:Py_INCREF
Line
Count
Source
248
72.7k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
72.7k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
72.7k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
22.3k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
22.3k
        return;
282
22.3k
    }
283
50.3k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
50.3k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
50.3k
#endif
299
50.3k
}
bltinmodule.c:Py_INCREF
Line
Count
Source
248
48.8M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
48.8M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
48.8M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
17.5M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
17.5M
        return;
282
17.5M
    }
283
31.3M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
31.3M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
31.3M
#endif
299
31.3M
}
ceval.c:Py_INCREF
Line
Count
Source
248
963M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
963M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
963M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
577M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
577M
        return;
282
577M
    }
283
385M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
385M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
385M
#endif
299
385M
}
codecs.c:Py_INCREF
Line
Count
Source
248
2.70M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
2.70M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
2.70M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
525k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
525k
        return;
282
525k
    }
283
2.17M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
2.17M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
2.17M
#endif
299
2.17M
}
codegen.c:Py_INCREF
Line
Count
Source
248
2.00k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
2.00k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
2.00k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
2.00k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
2.00k
        return;
282
2.00k
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
0
}
compile.c:Py_INCREF
Line
Count
Source
248
94.7k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
94.7k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
94.7k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
40.8k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
40.8k
        return;
282
40.8k
    }
283
53.9k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
53.9k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
53.9k
#endif
299
53.9k
}
context.c:Py_INCREF
Line
Count
Source
248
24
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
24
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
24
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
7
        _Py_INCREF_IMMORTAL_STAT_INC();
281
7
        return;
282
7
    }
283
17
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
17
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
17
#endif
299
17
}
errors.c:Py_INCREF
Line
Count
Source
248
53.3M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
53.3M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
53.3M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
26.0M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
26.0M
        return;
282
26.0M
    }
283
27.3M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
27.3M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
27.3M
#endif
299
27.3M
}
flowgraph.c:Py_INCREF
Line
Count
Source
248
84.3k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
84.3k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
84.3k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
39.0k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
39.0k
        return;
282
39.0k
    }
283
45.3k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
45.3k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
45.3k
#endif
299
45.3k
}
frame.c:Py_INCREF
Line
Count
Source
248
11.6M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
11.6M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
11.6M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
11.6M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
11.6M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
11.6M
#endif
299
11.6M
}
Unexecuted instantiation: future.c:Py_INCREF
gc.c:Py_INCREF
Line
Count
Source
248
300M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
300M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
300M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
231M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
231M
        return;
282
231M
    }
283
69.1M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
69.1M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
69.1M
#endif
299
69.1M
}
Unexecuted instantiation: gc_gil.c:Py_INCREF
getargs.c:Py_INCREF
Line
Count
Source
248
672k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
672k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
672k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
153k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
153k
        return;
282
153k
    }
283
519k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
519k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
519k
#endif
299
519k
}
Unexecuted instantiation: ceval_gil.c:Py_INCREF
Unexecuted instantiation: hamt.c:Py_INCREF
Unexecuted instantiation: hashtable.c:Py_INCREF
import.c:Py_INCREF
Line
Count
Source
248
79.8k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
79.8k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
79.8k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
11.7k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
11.7k
        return;
282
11.7k
    }
283
68.1k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
68.1k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
68.1k
#endif
299
68.1k
}
importdl.c:Py_INCREF
Line
Count
Source
248
533
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
533
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
533
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
420
        _Py_INCREF_IMMORTAL_STAT_INC();
281
420
        return;
282
420
    }
283
113
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
113
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
113
#endif
299
113
}
initconfig.c:Py_INCREF
Line
Count
Source
248
272
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
272
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
272
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
272
        _Py_INCREF_IMMORTAL_STAT_INC();
281
272
        return;
282
272
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
0
}
Unexecuted instantiation: instrumentation.c:Py_INCREF
Unexecuted instantiation: instruction_sequence.c:Py_INCREF
intrinsics.c:Py_INCREF
Line
Count
Source
248
27.9k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
27.9k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
27.9k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
27.9k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
27.9k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
27.9k
#endif
299
27.9k
}
Unexecuted instantiation: legacy_tracing.c:Py_INCREF
Unexecuted instantiation: lock.c:Py_INCREF
marshal.c:Py_INCREF
Line
Count
Source
248
306k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
306k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
306k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
265k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
265k
        return;
282
265k
    }
283
41.1k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
41.1k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
41.1k
#endif
299
41.1k
}
modsupport.c:Py_INCREF
Line
Count
Source
248
270k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
270k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
270k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
15.8k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
15.8k
        return;
282
15.8k
    }
283
254k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
254k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
254k
#endif
299
254k
}
Unexecuted instantiation: mysnprintf.c:Py_INCREF
Unexecuted instantiation: parking_lot.c:Py_INCREF
Unexecuted instantiation: preconfig.c:Py_INCREF
Unexecuted instantiation: pyarena.c:Py_INCREF
Unexecuted instantiation: pyctype.c:Py_INCREF
Unexecuted instantiation: pyhash.c:Py_INCREF
pylifecycle.c:Py_INCREF
Line
Count
Source
248
16
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
16
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
16
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
16
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
16
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
16
#endif
299
16
}
Unexecuted instantiation: pymath.c:Py_INCREF
pystate.c:Py_INCREF
Line
Count
Source
248
2.36k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
2.36k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
2.36k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
2.36k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
2.36k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
2.36k
#endif
299
2.36k
}
Unexecuted instantiation: pythonrun.c:Py_INCREF
Unexecuted instantiation: pytime.c:Py_INCREF
Unexecuted instantiation: qsbr.c:Py_INCREF
Unexecuted instantiation: bootstrap_hash.c:Py_INCREF
Unexecuted instantiation: specialize.c:Py_INCREF
symtable.c:Py_INCREF
Line
Count
Source
248
214k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
214k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
214k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
213k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
213k
        return;
282
213k
    }
283
571
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
571
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
571
#endif
299
571
}
sysmodule.c:Py_INCREF
Line
Count
Source
248
1.14k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
1.14k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
1.14k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
771
        _Py_INCREF_IMMORTAL_STAT_INC();
281
771
        return;
282
771
    }
283
375
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
375
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
375
#endif
299
375
}
Unexecuted instantiation: thread.c:Py_INCREF
traceback.c:Py_INCREF
Line
Count
Source
248
29.1M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
29.1M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
29.1M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
29.1M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
29.1M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
29.1M
#endif
299
29.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: atexitmodule.c:Py_INCREF
Unexecuted instantiation: faulthandler.c:Py_INCREF
posixmodule.c:Py_INCREF
Line
Count
Source
248
44.8k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
44.8k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
44.8k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
96
        _Py_INCREF_IMMORTAL_STAT_INC();
281
96
        return;
282
96
    }
283
44.7k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
44.7k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
44.7k
#endif
299
44.7k
}
signalmodule.c:Py_INCREF
Line
Count
Source
248
1.02k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
1.02k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
1.02k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
1.02k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
1.02k
        return;
282
1.02k
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
0
}
Unexecuted instantiation: _tracemalloc.c:Py_INCREF
Unexecuted instantiation: _suggestions.c:Py_INCREF
Unexecuted instantiation: _codecsmodule.c:Py_INCREF
_collectionsmodule.c:Py_INCREF
Line
Count
Source
248
16.3M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
16.3M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
16.3M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
13.8M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
13.8M
        return;
282
13.8M
    }
283
2.50M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
2.50M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
2.50M
#endif
299
2.50M
}
Unexecuted instantiation: errnomodule.c:Py_INCREF
_iomodule.c:Py_INCREF
Line
Count
Source
248
48
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
48
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
48
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
48
        _Py_INCREF_IMMORTAL_STAT_INC();
281
48
        return;
282
48
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
0
}
iobase.c:Py_INCREF
Line
Count
Source
248
35.9k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
35.9k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
35.9k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
35.9k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
35.9k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
35.9k
#endif
299
35.9k
}
Unexecuted instantiation: fileio.c:Py_INCREF
bytesio.c:Py_INCREF
Line
Count
Source
248
8.26k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
8.26k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
8.26k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
22
        _Py_INCREF_IMMORTAL_STAT_INC();
281
22
        return;
282
22
    }
283
8.24k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
8.24k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
8.24k
#endif
299
8.24k
}
bufferedio.c:Py_INCREF
Line
Count
Source
248
1.95k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
1.95k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
1.95k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
3
        _Py_INCREF_IMMORTAL_STAT_INC();
281
3
        return;
282
3
    }
283
1.94k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
1.94k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
1.94k
#endif
299
1.94k
}
textio.c:Py_INCREF
Line
Count
Source
248
73.8k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
73.8k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
73.8k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
18.9k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
18.9k
        return;
282
18.9k
    }
283
54.8k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
54.8k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
54.8k
#endif
299
54.8k
}
stringio.c:Py_INCREF
Line
Count
Source
248
15.2k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
15.2k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
15.2k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
53
        _Py_INCREF_IMMORTAL_STAT_INC();
281
53
        return;
282
53
    }
283
15.1k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
15.1k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
15.1k
#endif
299
15.1k
}
itertoolsmodule.c:Py_INCREF
Line
Count
Source
248
4
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
4
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
4
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
4
        _Py_INCREF_IMMORTAL_STAT_INC();
281
4
        return;
282
4
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
0
}
sre.c:Py_INCREF
Line
Count
Source
248
292M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
292M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
292M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
97.9M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
97.9M
        return;
282
97.9M
    }
283
194M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
194M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
194M
#endif
299
194M
}
Unexecuted instantiation: _sysconfig.c:Py_INCREF
Unexecuted instantiation: _threadmodule.c:Py_INCREF
Unexecuted instantiation: timemodule.c:Py_INCREF
Unexecuted instantiation: _typesmodule.c:Py_INCREF
Unexecuted instantiation: _typingmodule.c:Py_INCREF
Unexecuted instantiation: _weakref.c:Py_INCREF
_abc.c:Py_INCREF
Line
Count
Source
248
9.21k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
9.21k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
9.21k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
9.12k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
9.12k
        return;
282
9.12k
    }
283
94
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
94
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
94
#endif
299
94
}
_functoolsmodule.c:Py_INCREF
Line
Count
Source
248
291
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
291
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
291
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
42
        _Py_INCREF_IMMORTAL_STAT_INC();
281
42
        return;
282
42
    }
283
249
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
249
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
249
#endif
299
249
}
Unexecuted instantiation: _localemodule.c:Py_INCREF
Unexecuted instantiation: _opcode.c:Py_INCREF
_operator.c:Py_INCREF
Line
Count
Source
248
1.36M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
1.36M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
1.36M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
1.32M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
1.32M
        return;
282
1.32M
    }
283
43.6k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
43.6k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
43.6k
#endif
299
43.6k
}
Unexecuted instantiation: _stat.c:Py_INCREF
Unexecuted instantiation: symtablemodule.c:Py_INCREF
Unexecuted instantiation: pwdmodule.c:Py_INCREF
getpath.c:Py_INCREF
Line
Count
Source
248
176
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
176
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
176
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
176
        _Py_INCREF_IMMORTAL_STAT_INC();
281
176
        return;
282
176
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
0
}
Unexecuted instantiation: frozen.c:Py_INCREF
Unexecuted instantiation: getbuildinfo.c:Py_INCREF
Unexecuted instantiation: peg_api.c:Py_INCREF
Unexecuted instantiation: file_tokenizer.c:Py_INCREF
Unexecuted instantiation: helpers.c:Py_INCREF
Unexecuted instantiation: myreadline.c:Py_INCREF
abstract.c:Py_INCREF
Line
Count
Source
248
469M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
469M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
469M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
315M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
315M
        return;
282
315M
    }
283
153M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
153M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
153M
#endif
299
153M
}
Unexecuted instantiation: boolobject.c:Py_INCREF
Unexecuted instantiation: bytes_methods.c:Py_INCREF
bytearrayobject.c:Py_INCREF
Line
Count
Source
248
36
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
36
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
36
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
36
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
36
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
36
#endif
299
36
}
Unexecuted instantiation: capsule.c:Py_INCREF
cellobject.c:Py_INCREF
Line
Count
Source
248
67.6k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
67.6k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
67.6k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
21.6k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
21.6k
        return;
282
21.6k
    }
283
45.9k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
45.9k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
45.9k
#endif
299
45.9k
}
classobject.c:Py_INCREF
Line
Count
Source
248
38.9M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
38.9M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
38.9M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
38.9M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
38.9M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
38.9M
#endif
299
38.9M
}
codeobject.c:Py_INCREF
Line
Count
Source
248
448k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
448k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
448k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
230k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
230k
        return;
282
230k
    }
283
218k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
218k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
218k
#endif
299
218k
}
complexobject.c:Py_INCREF
Line
Count
Source
248
3.64k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
3.64k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
3.64k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
3.64k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
3.64k
        return;
282
3.64k
    }
283
0
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
0
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
0
#endif
299
0
}
descrobject.c:Py_INCREF
Line
Count
Source
248
21.8M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
21.8M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
21.8M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
28.8k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
28.8k
        return;
282
28.8k
    }
283
21.8M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
21.8M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
21.8M
#endif
299
21.8M
}
enumobject.c:Py_INCREF
Line
Count
Source
248
86.6M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
86.6M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
86.6M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
86.6M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
86.6M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
86.6M
#endif
299
86.6M
}
genobject.c:Py_INCREF
Line
Count
Source
248
37.5M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
37.5M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
37.5M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
37.4M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
37.4M
        return;
282
37.4M
    }
283
86.6k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
86.6k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
86.6k
#endif
299
86.6k
}
Unexecuted instantiation: fileobject.c:Py_INCREF
frameobject.c:Py_INCREF
Line
Count
Source
248
4.99k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
4.99k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
4.99k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
0
        _Py_INCREF_IMMORTAL_STAT_INC();
281
0
        return;
282
0
    }
283
4.99k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
4.99k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
4.99k
#endif
299
4.99k
}
funcobject.c:Py_INCREF
Line
Count
Source
248
73.7M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
73.7M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
73.7M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
37.3M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
37.3M
        return;
282
37.3M
    }
283
36.3M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
36.3M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
36.3M
#endif
299
36.3M
}
Unexecuted instantiation: interpolationobject.c:Py_INCREF
iterobject.c:Py_INCREF
Line
Count
Source
248
458k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
458k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
458k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
228k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
228k
        return;
282
228k
    }
283
229k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
229k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
229k
#endif
299
229k
}
Unexecuted instantiation: odictobject.c:Py_INCREF
methodobject.c:Py_INCREF
Line
Count
Source
248
245M
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
245M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
245M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
4.33M
        _Py_INCREF_IMMORTAL_STAT_INC();
281
4.33M
        return;
282
4.33M
    }
283
241M
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
241M
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
241M
#endif
299
241M
}
Unexecuted instantiation: namespaceobject.c:Py_INCREF
Unexecuted instantiation: _contextvars.c:Py_INCREF
Python-ast.c:Py_INCREF
Line
Count
Source
248
559k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
559k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
559k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
227k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
227k
        return;
282
227k
    }
283
332k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
332k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
332k
#endif
299
332k
}
Unexecuted instantiation: Python-tokenize.c:Py_INCREF
Unexecuted instantiation: asdl.c:Py_INCREF
assemble.c:Py_INCREF
Line
Count
Source
248
36.9k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
36.9k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
36.9k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
36.8k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
36.8k
        return;
282
36.8k
    }
283
94
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
94
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
94
#endif
299
94
}
Unexecuted instantiation: ast.c:Py_INCREF
Unexecuted instantiation: ast_preprocess.c:Py_INCREF
Unexecuted instantiation: ast_unparse.c:Py_INCREF
Unexecuted instantiation: critical_section.c:Py_INCREF
Unexecuted instantiation: crossinterp.c:Py_INCREF
Unexecuted instantiation: getcopyright.c:Py_INCREF
Unexecuted instantiation: getplatform.c:Py_INCREF
Unexecuted instantiation: getversion.c:Py_INCREF
Unexecuted instantiation: optimizer.c:Py_INCREF
Unexecuted instantiation: pathconfig.c:Py_INCREF
structmember.c:Py_INCREF
Line
Count
Source
248
95.5k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
95.5k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
95.5k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
35.4k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
35.4k
        return;
282
35.4k
    }
283
60.0k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
60.0k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
60.0k
#endif
299
60.0k
}
pegen.c:Py_INCREF
Line
Count
Source
248
22.5k
{
249
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
250
    // Stable ABI implements Py_INCREF() as a function call on limited C API
251
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
252
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
253
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
254
#  if Py_LIMITED_API+0 >= 0x030a00A7
255
    _Py_IncRef(op);
256
#  else
257
    Py_IncRef(op);
258
#  endif
259
#else
260
    // Non-limited C API and limited C API for Python 3.9 and older access
261
    // directly PyObject.ob_refcnt.
262
#if defined(Py_GIL_DISABLED)
263
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
264
    uint32_t new_local = local + 1;
265
    if (new_local == 0) {
266
        _Py_INCREF_IMMORTAL_STAT_INC();
267
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
268
        return;
269
    }
270
    if (_Py_IsOwnedByCurrentThread(op)) {
271
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
272
    }
273
    else {
274
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
275
    }
276
#elif SIZEOF_VOID_P > 4
277
22.5k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
278
22.5k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
279
        // the object is immortal
280
1.46k
        _Py_INCREF_IMMORTAL_STAT_INC();
281
1.46k
        return;
282
1.46k
    }
283
21.0k
    op->ob_refcnt = cur_refcnt + 1;
284
#else
285
    if (_Py_IsImmortal(op)) {
286
        _Py_INCREF_IMMORTAL_STAT_INC();
287
        return;
288
    }
289
    op->ob_refcnt++;
290
#endif
291
21.0k
    _Py_INCREF_STAT_INC();
292
#ifdef Py_REF_DEBUG
293
    // Don't count the incref if the object is immortal.
294
    if (!_Py_IsImmortal(op)) {
295
        _Py_INCREF_IncRefTotal();
296
    }
297
#endif
298
21.0k
#endif
299
21.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
300
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
301
6.80G
#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
302
#endif
303
304
305
#if !defined(Py_LIMITED_API) && defined(Py_GIL_DISABLED)
306
// Implements Py_DECREF on objects not owned by the current thread.
307
PyAPI_FUNC(void) _Py_DecRefShared(PyObject *);
308
PyAPI_FUNC(void) _Py_DecRefSharedDebug(PyObject *, const char *, int);
309
310
// Called from Py_DECREF by the owning thread when the local refcount reaches
311
// zero. The call will deallocate the object if the shared refcount is also
312
// zero. Otherwise, the thread gives up ownership and merges the reference
313
// count fields.
314
PyAPI_FUNC(void) _Py_MergeZeroLocalRefcount(PyObject *);
315
#endif
316
317
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
318
// Stable ABI implements Py_DECREF() as a function call on limited C API
319
// version 3.12 and newer, and on Python built in debug mode. _Py_DecRef() was
320
// added to Python 3.10.0a7, use Py_DecRef() on older Python versions.
321
// Py_DecRef() accepts NULL whereas _Py_DecRef() doesn't.
322
4.40k
static inline void Py_DECREF(PyObject *op) {
323
4.40k
#  if Py_LIMITED_API+0 >= 0x030a00A7
324
4.40k
    _Py_DecRef(op);
325
#  else
326
    Py_DecRef(op);
327
#  endif
328
4.40k
}
errnomodule.c:Py_DECREF
Line
Count
Source
322
4.40k
static inline void Py_DECREF(PyObject *op) {
323
4.40k
#  if Py_LIMITED_API+0 >= 0x030a00A7
324
4.40k
    _Py_DecRef(op);
325
#  else
326
    Py_DecRef(op);
327
#  endif
328
4.40k
}
Unexecuted instantiation: _stat.c:Py_DECREF
Unexecuted instantiation: pwdmodule.c:Py_DECREF
329
4.40k
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
330
331
#elif defined(Py_GIL_DISABLED) && defined(Py_REF_DEBUG)
332
static inline void Py_DECREF(const char *filename, int lineno, PyObject *op)
333
{
334
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
335
    if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
336
        _Py_DECREF_IMMORTAL_STAT_INC();
337
        return;
338
    }
339
    _Py_DECREF_STAT_INC();
340
    _Py_DECREF_DecRefTotal();
341
    if (_Py_IsOwnedByCurrentThread(op)) {
342
        if (local == 0) {
343
            _Py_NegativeRefcount(filename, lineno, op);
344
        }
345
        local--;
346
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, local);
347
        if (local == 0) {
348
            _Py_MergeZeroLocalRefcount(op);
349
        }
350
    }
351
    else {
352
        _Py_DecRefSharedDebug(op, filename, lineno);
353
    }
354
}
355
#define Py_DECREF(op) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
356
357
#elif defined(Py_GIL_DISABLED)
358
static inline void Py_DECREF(PyObject *op)
359
{
360
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
361
    if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
362
        _Py_DECREF_IMMORTAL_STAT_INC();
363
        return;
364
    }
365
    _Py_DECREF_STAT_INC();
366
    if (_Py_IsOwnedByCurrentThread(op)) {
367
        local--;
368
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, local);
369
        if (local == 0) {
370
            _Py_MergeZeroLocalRefcount(op);
371
        }
372
    }
373
    else {
374
        _Py_DecRefShared(op);
375
    }
376
}
377
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
378
379
#elif defined(Py_REF_DEBUG)
380
381
static inline void Py_DECREF(const char *filename, int lineno, PyObject *op)
382
{
383
#if SIZEOF_VOID_P > 4
384
    /* If an object has been freed, it will have a negative full refcnt
385
     * If it has not it been freed, will have a very large refcnt */
386
    if (op->ob_refcnt_full <= 0 || op->ob_refcnt > (((PY_UINT32_T)-1) - (1<<20))) {
387
#else
388
    if (op->ob_refcnt <= 0) {
389
#endif
390
        _Py_NegativeRefcount(filename, lineno, op);
391
    }
392
    if (_Py_IsImmortal(op)) {
393
        _Py_DECREF_IMMORTAL_STAT_INC();
394
        return;
395
    }
396
    _Py_DECREF_STAT_INC();
397
    _Py_DECREF_DecRefTotal();
398
    if (--op->ob_refcnt == 0) {
399
        _Py_Dealloc(op);
400
    }
401
}
402
#define Py_DECREF(op) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
403
404
#else
405
406
static inline Py_ALWAYS_INLINE void Py_DECREF(PyObject *op)
407
5.98G
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
5.98G
    if (_Py_IsImmortal(op)) {
411
2.56G
        _Py_DECREF_IMMORTAL_STAT_INC();
412
2.56G
        return;
413
2.56G
    }
414
3.41G
    _Py_DECREF_STAT_INC();
415
3.41G
    if (--op->ob_refcnt == 0) {
416
904M
        _Py_Dealloc(op);
417
904M
    }
418
3.41G
}
bytesobject.c:Py_DECREF
Line
Count
Source
407
4.78M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
4.78M
    if (_Py_IsImmortal(op)) {
411
4.63M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
4.63M
        return;
413
4.63M
    }
414
156k
    _Py_DECREF_STAT_INC();
415
156k
    if (--op->ob_refcnt == 0) {
416
89.0k
        _Py_Dealloc(op);
417
89.0k
    }
418
156k
}
call.c:Py_DECREF
Line
Count
Source
407
122M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
122M
    if (_Py_IsImmortal(op)) {
411
50.7M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
50.7M
        return;
413
50.7M
    }
414
71.7M
    _Py_DECREF_STAT_INC();
415
71.7M
    if (--op->ob_refcnt == 0) {
416
56.5M
        _Py_Dealloc(op);
417
56.5M
    }
418
71.7M
}
exceptions.c:Py_DECREF
Line
Count
Source
407
98.2M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
98.2M
    if (_Py_IsImmortal(op)) {
411
30.9M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
30.9M
        return;
413
30.9M
    }
414
67.3M
    _Py_DECREF_STAT_INC();
415
67.3M
    if (--op->ob_refcnt == 0) {
416
57.6M
        _Py_Dealloc(op);
417
57.6M
    }
418
67.3M
}
genericaliasobject.c:Py_DECREF
Line
Count
Source
407
84
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
84
    if (_Py_IsImmortal(op)) {
411
42
        _Py_DECREF_IMMORTAL_STAT_INC();
412
42
        return;
413
42
    }
414
42
    _Py_DECREF_STAT_INC();
415
42
    if (--op->ob_refcnt == 0) {
416
42
        _Py_Dealloc(op);
417
42
    }
418
42
}
floatobject.c:Py_DECREF
Line
Count
Source
407
8
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
8
    if (_Py_IsImmortal(op)) {
411
5
        _Py_DECREF_IMMORTAL_STAT_INC();
412
5
        return;
413
5
    }
414
3
    _Py_DECREF_STAT_INC();
415
3
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
3
}
listobject.c:Py_DECREF
Line
Count
Source
407
1.59G
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
1.59G
    if (_Py_IsImmortal(op)) {
411
406M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
406M
        return;
413
406M
    }
414
1.18G
    _Py_DECREF_STAT_INC();
415
1.18G
    if (--op->ob_refcnt == 0) {
416
235M
        _Py_Dealloc(op);
417
235M
    }
418
1.18G
}
longobject.c:Py_DECREF
Line
Count
Source
407
3.38M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
3.38M
    if (_Py_IsImmortal(op)) {
411
2.96M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
2.96M
        return;
413
2.96M
    }
414
418k
    _Py_DECREF_STAT_INC();
415
418k
    if (--op->ob_refcnt == 0) {
416
3.08k
        _Py_Dealloc(op);
417
3.08k
    }
418
418k
}
dictobject.c:Py_DECREF
Line
Count
Source
407
507M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
507M
    if (_Py_IsImmortal(op)) {
411
296M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
296M
        return;
413
296M
    }
414
210M
    _Py_DECREF_STAT_INC();
415
210M
    if (--op->ob_refcnt == 0) {
416
69.9M
        _Py_Dealloc(op);
417
69.9M
    }
418
210M
}
memoryobject.c:Py_DECREF
Line
Count
Source
407
596k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
596k
    if (_Py_IsImmortal(op)) {
411
4
        _Py_DECREF_IMMORTAL_STAT_INC();
412
4
        return;
413
4
    }
414
596k
    _Py_DECREF_STAT_INC();
415
596k
    if (--op->ob_refcnt == 0) {
416
297k
        _Py_Dealloc(op);
417
297k
    }
418
596k
}
moduleobject.c:Py_DECREF
Line
Count
Source
407
45.8k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
45.8k
    if (_Py_IsImmortal(op)) {
411
34.3k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
34.3k
        return;
413
34.3k
    }
414
11.5k
    _Py_DECREF_STAT_INC();
415
11.5k
    if (--op->ob_refcnt == 0) {
416
8
        _Py_Dealloc(op);
417
8
    }
418
11.5k
}
object.c:Py_DECREF
Line
Count
Source
407
360M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
360M
    if (_Py_IsImmortal(op)) {
411
321M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
321M
        return;
413
321M
    }
414
38.6M
    _Py_DECREF_STAT_INC();
415
38.6M
    if (--op->ob_refcnt == 0) {
416
224
        _Py_Dealloc(op);
417
224
    }
418
38.6M
}
Unexecuted instantiation: obmalloc.c:Py_DECREF
Unexecuted instantiation: picklebufobject.c:Py_DECREF
rangeobject.c:Py_DECREF
Line
Count
Source
407
27.4M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
27.4M
    if (_Py_IsImmortal(op)) {
411
25.2M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
25.2M
        return;
413
25.2M
    }
414
2.28M
    _Py_DECREF_STAT_INC();
415
2.28M
    if (--op->ob_refcnt == 0) {
416
1.08M
        _Py_Dealloc(op);
417
1.08M
    }
418
2.28M
}
setobject.c:Py_DECREF
Line
Count
Source
407
984k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
984k
    if (_Py_IsImmortal(op)) {
411
318k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
318k
        return;
413
318k
    }
414
665k
    _Py_DECREF_STAT_INC();
415
665k
    if (--op->ob_refcnt == 0) {
416
33.1k
        _Py_Dealloc(op);
417
33.1k
    }
418
665k
}
sliceobject.c:Py_DECREF
Line
Count
Source
407
114M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
114M
    if (_Py_IsImmortal(op)) {
411
105M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
105M
        return;
413
105M
    }
414
8.80M
    _Py_DECREF_STAT_INC();
415
8.80M
    if (--op->ob_refcnt == 0) {
416
848k
        _Py_Dealloc(op);
417
848k
    }
418
8.80M
}
structseq.c:Py_DECREF
Line
Count
Source
407
88.9k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
88.9k
    if (_Py_IsImmortal(op)) {
411
22.7k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
22.7k
        return;
413
22.7k
    }
414
66.1k
    _Py_DECREF_STAT_INC();
415
66.1k
    if (--op->ob_refcnt == 0) {
416
57.6k
        _Py_Dealloc(op);
417
57.6k
    }
418
66.1k
}
Unexecuted instantiation: templateobject.c:Py_DECREF
tupleobject.c:Py_DECREF
Line
Count
Source
407
777M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
777M
    if (_Py_IsImmortal(op)) {
411
463M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
463M
        return;
413
463M
    }
414
313M
    _Py_DECREF_STAT_INC();
415
313M
    if (--op->ob_refcnt == 0) {
416
83.0M
        _Py_Dealloc(op);
417
83.0M
    }
418
313M
}
typeobject.c:Py_DECREF
Line
Count
Source
407
335M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
335M
    if (_Py_IsImmortal(op)) {
411
39.7M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
39.7M
        return;
413
39.7M
    }
414
295M
    _Py_DECREF_STAT_INC();
415
295M
    if (--op->ob_refcnt == 0) {
416
14.4M
        _Py_Dealloc(op);
417
14.4M
    }
418
295M
}
Unexecuted instantiation: typevarobject.c:Py_DECREF
unicodeobject.c:Py_DECREF
Line
Count
Source
407
199M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
199M
    if (_Py_IsImmortal(op)) {
411
117M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
117M
        return;
413
117M
    }
414
82.6M
    _Py_DECREF_STAT_INC();
415
82.6M
    if (--op->ob_refcnt == 0) {
416
19.4M
        _Py_Dealloc(op);
417
19.4M
    }
418
82.6M
}
Unexecuted instantiation: unicodectype.c:Py_DECREF
unionobject.c:Py_DECREF
Line
Count
Source
407
864
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
864
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
864
    _Py_DECREF_STAT_INC();
415
864
    if (--op->ob_refcnt == 0) {
416
864
        _Py_Dealloc(op);
417
864
    }
418
864
}
weakrefobject.c:Py_DECREF
Line
Count
Source
407
11.5k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
11.5k
    if (_Py_IsImmortal(op)) {
411
6.07k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
6.07k
        return;
413
6.07k
    }
414
5.46k
    _Py_DECREF_STAT_INC();
415
5.46k
    if (--op->ob_refcnt == 0) {
416
5.21k
        _Py_Dealloc(op);
417
5.21k
    }
418
5.46k
}
_warnings.c:Py_DECREF
Line
Count
Source
407
172k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
172k
    if (_Py_IsImmortal(op)) {
411
44.3k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
44.3k
        return;
413
44.3k
    }
414
128k
    _Py_DECREF_STAT_INC();
415
128k
    if (--op->ob_refcnt == 0) {
416
35.5k
        _Py_Dealloc(op);
417
35.5k
    }
418
128k
}
bltinmodule.c:Py_DECREF
Line
Count
Source
407
110M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
110M
    if (_Py_IsImmortal(op)) {
411
54.7M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
54.7M
        return;
413
54.7M
    }
414
55.7M
    _Py_DECREF_STAT_INC();
415
55.7M
    if (--op->ob_refcnt == 0) {
416
32.8M
        _Py_Dealloc(op);
417
32.8M
    }
418
55.7M
}
ceval.c:Py_DECREF
Line
Count
Source
407
5.61k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
5.61k
    if (_Py_IsImmortal(op)) {
411
647
        _Py_DECREF_IMMORTAL_STAT_INC();
412
647
        return;
413
647
    }
414
4.96k
    _Py_DECREF_STAT_INC();
415
4.96k
    if (--op->ob_refcnt == 0) {
416
405
        _Py_Dealloc(op);
417
405
    }
418
4.96k
}
codecs.c:Py_DECREF
Line
Count
Source
407
5.78M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
5.78M
    if (_Py_IsImmortal(op)) {
411
1.96M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
1.96M
        return;
413
1.96M
    }
414
3.81M
    _Py_DECREF_STAT_INC();
415
3.81M
    if (--op->ob_refcnt == 0) {
416
1.78M
        _Py_Dealloc(op);
417
1.78M
    }
418
3.81M
}
codegen.c:Py_DECREF
Line
Count
Source
407
120k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
120k
    if (_Py_IsImmortal(op)) {
411
106k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
106k
        return;
413
106k
    }
414
13.7k
    _Py_DECREF_STAT_INC();
415
13.7k
    if (--op->ob_refcnt == 0) {
416
763
        _Py_Dealloc(op);
417
763
    }
418
13.7k
}
compile.c:Py_DECREF
Line
Count
Source
407
506k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
506k
    if (_Py_IsImmortal(op)) {
411
257k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
257k
        return;
413
257k
    }
414
249k
    _Py_DECREF_STAT_INC();
415
249k
    if (--op->ob_refcnt == 0) {
416
81.5k
        _Py_Dealloc(op);
417
81.5k
    }
418
249k
}
context.c:Py_DECREF
Line
Count
Source
407
32
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
32
    if (_Py_IsImmortal(op)) {
411
16
        _Py_DECREF_IMMORTAL_STAT_INC();
412
16
        return;
413
16
    }
414
16
    _Py_DECREF_STAT_INC();
415
16
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
16
}
errors.c:Py_DECREF
Line
Count
Source
407
64.8M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
64.8M
    if (_Py_IsImmortal(op)) {
411
26.0M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
26.0M
        return;
413
26.0M
    }
414
38.8M
    _Py_DECREF_STAT_INC();
415
38.8M
    if (--op->ob_refcnt == 0) {
416
9.69M
        _Py_Dealloc(op);
417
9.69M
    }
418
38.8M
}
flowgraph.c:Py_DECREF
Line
Count
Source
407
62.7k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
62.7k
    if (_Py_IsImmortal(op)) {
411
33.8k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
33.8k
        return;
413
33.8k
    }
414
28.8k
    _Py_DECREF_STAT_INC();
415
28.8k
    if (--op->ob_refcnt == 0) {
416
26
        _Py_Dealloc(op);
417
26
    }
418
28.8k
}
frame.c:Py_DECREF
Line
Count
Source
407
22.1M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
22.1M
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
22.1M
    _Py_DECREF_STAT_INC();
415
22.1M
    if (--op->ob_refcnt == 0) {
416
11.1M
        _Py_Dealloc(op);
417
11.1M
    }
418
22.1M
}
Unexecuted instantiation: future.c:Py_DECREF
gc.c:Py_DECREF
Line
Count
Source
407
573k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
573k
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
573k
    _Py_DECREF_STAT_INC();
415
573k
    if (--op->ob_refcnt == 0) {
416
342k
        _Py_Dealloc(op);
417
342k
    }
418
573k
}
Unexecuted instantiation: gc_gil.c:Py_DECREF
getargs.c:Py_DECREF
Line
Count
Source
407
1.43M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
1.43M
    if (_Py_IsImmortal(op)) {
411
824k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
824k
        return;
413
824k
    }
414
613k
    _Py_DECREF_STAT_INC();
415
613k
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
613k
}
Unexecuted instantiation: ceval_gil.c:Py_DECREF
Unexecuted instantiation: hamt.c:Py_DECREF
Unexecuted instantiation: hashtable.c:Py_DECREF
import.c:Py_DECREF
Line
Count
Source
407
161k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
161k
    if (_Py_IsImmortal(op)) {
411
12.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
12.2k
        return;
413
12.2k
    }
414
149k
    _Py_DECREF_STAT_INC();
415
149k
    if (--op->ob_refcnt == 0) {
416
10.7k
        _Py_Dealloc(op);
417
10.7k
    }
418
149k
}
importdl.c:Py_DECREF
Line
Count
Source
407
1.22k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
1.22k
    if (_Py_IsImmortal(op)) {
411
498
        _Py_DECREF_IMMORTAL_STAT_INC();
412
498
        return;
413
498
    }
414
726
    _Py_DECREF_STAT_INC();
415
726
    if (--op->ob_refcnt == 0) {
416
454
        _Py_Dealloc(op);
417
454
    }
418
726
}
initconfig.c:Py_DECREF
Line
Count
Source
407
2.20k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
2.20k
    if (_Py_IsImmortal(op)) {
411
1.77k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
1.77k
        return;
413
1.77k
    }
414
432
    _Py_DECREF_STAT_INC();
415
432
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
432
}
instrumentation.c:Py_DECREF
Line
Count
Source
407
384
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
384
    if (_Py_IsImmortal(op)) {
411
208
        _Py_DECREF_IMMORTAL_STAT_INC();
412
208
        return;
413
208
    }
414
176
    _Py_DECREF_STAT_INC();
415
176
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
176
}
Unexecuted instantiation: instruction_sequence.c:Py_DECREF
intrinsics.c:Py_DECREF
Line
Count
Source
407
27.2k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
27.2k
    if (_Py_IsImmortal(op)) {
411
15.4k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
15.4k
        return;
413
15.4k
    }
414
11.8k
    _Py_DECREF_STAT_INC();
415
11.8k
    if (--op->ob_refcnt == 0) {
416
120
        _Py_Dealloc(op);
417
120
    }
418
11.8k
}
Unexecuted instantiation: legacy_tracing.c:Py_DECREF
Unexecuted instantiation: lock.c:Py_DECREF
marshal.c:Py_DECREF
Line
Count
Source
407
301k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
301k
    if (_Py_IsImmortal(op)) {
411
130k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
130k
        return;
413
130k
    }
414
171k
    _Py_DECREF_STAT_INC();
415
171k
    if (--op->ob_refcnt == 0) {
416
2.43k
        _Py_Dealloc(op);
417
2.43k
    }
418
171k
}
modsupport.c:Py_DECREF
Line
Count
Source
407
16.7k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
16.7k
    if (_Py_IsImmortal(op)) {
411
11.0k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
11.0k
        return;
413
11.0k
    }
414
5.71k
    _Py_DECREF_STAT_INC();
415
5.71k
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
5.71k
}
Unexecuted instantiation: mysnprintf.c:Py_DECREF
Unexecuted instantiation: parking_lot.c:Py_DECREF
Unexecuted instantiation: preconfig.c:Py_DECREF
pyarena.c:Py_DECREF
Line
Count
Source
407
4.53M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
4.53M
    if (_Py_IsImmortal(op)) {
411
3.90M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
3.90M
        return;
413
3.90M
    }
414
632k
    _Py_DECREF_STAT_INC();
415
632k
    if (--op->ob_refcnt == 0) {
416
22.8k
        _Py_Dealloc(op);
417
22.8k
    }
418
632k
}
Unexecuted instantiation: pyctype.c:Py_DECREF
Unexecuted instantiation: pyhash.c:Py_DECREF
pylifecycle.c:Py_DECREF
Line
Count
Source
407
576
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
576
    if (_Py_IsImmortal(op)) {
411
112
        _Py_DECREF_IMMORTAL_STAT_INC();
412
112
        return;
413
112
    }
414
464
    _Py_DECREF_STAT_INC();
415
464
    if (--op->ob_refcnt == 0) {
416
48
        _Py_Dealloc(op);
417
48
    }
418
464
}
Unexecuted instantiation: pymath.c:Py_DECREF
Unexecuted instantiation: pystate.c:Py_DECREF
pythonrun.c:Py_DECREF
Line
Count
Source
407
155
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
155
    if (_Py_IsImmortal(op)) {
411
32
        _Py_DECREF_IMMORTAL_STAT_INC();
412
32
        return;
413
32
    }
414
123
    _Py_DECREF_STAT_INC();
415
123
    if (--op->ob_refcnt == 0) {
416
91
        _Py_Dealloc(op);
417
91
    }
418
123
}
Unexecuted instantiation: pytime.c:Py_DECREF
Unexecuted instantiation: qsbr.c:Py_DECREF
Unexecuted instantiation: bootstrap_hash.c:Py_DECREF
specialize.c:Py_DECREF
Line
Count
Source
407
481k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
481k
    if (_Py_IsImmortal(op)) {
411
77.4k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
77.4k
        return;
413
77.4k
    }
414
404k
    _Py_DECREF_STAT_INC();
415
404k
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
404k
}
symtable.c:Py_DECREF
Line
Count
Source
407
643k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
643k
    if (_Py_IsImmortal(op)) {
411
291k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
291k
        return;
413
291k
    }
414
352k
    _Py_DECREF_STAT_INC();
415
352k
    if (--op->ob_refcnt == 0) {
416
168k
        _Py_Dealloc(op);
417
168k
    }
418
352k
}
sysmodule.c:Py_DECREF
Line
Count
Source
407
1.90k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
1.90k
    if (_Py_IsImmortal(op)) {
411
1.02k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
1.02k
        return;
413
1.02k
    }
414
880
    _Py_DECREF_STAT_INC();
415
880
    if (--op->ob_refcnt == 0) {
416
64
        _Py_Dealloc(op);
417
64
    }
418
880
}
Unexecuted instantiation: thread.c:Py_DECREF
traceback.c:Py_DECREF
Line
Count
Source
407
58.3M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
58.3M
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
58.3M
    _Py_DECREF_STAT_INC();
415
58.3M
    if (--op->ob_refcnt == 0) {
416
12.2M
        _Py_Dealloc(op);
417
12.2M
    }
418
58.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
407
256
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
256
    if (_Py_IsImmortal(op)) {
411
192
        _Py_DECREF_IMMORTAL_STAT_INC();
412
192
        return;
413
192
    }
414
64
    _Py_DECREF_STAT_INC();
415
64
    if (--op->ob_refcnt == 0) {
416
64
        _Py_Dealloc(op);
417
64
    }
418
64
}
fileutils.c:Py_DECREF
Line
Count
Source
407
11.6k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
11.6k
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
11.6k
    _Py_DECREF_STAT_INC();
415
11.6k
    if (--op->ob_refcnt == 0) {
416
11.6k
        _Py_Dealloc(op);
417
11.6k
    }
418
11.6k
}
Unexecuted instantiation: suggestions.c:Py_DECREF
Unexecuted instantiation: perf_trampoline.c:Py_DECREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_DECREF
Unexecuted instantiation: remote_debugging.c:Py_DECREF
Unexecuted instantiation: dynload_shlib.c:Py_DECREF
Unexecuted instantiation: config.c:Py_DECREF
Unexecuted instantiation: gcmodule.c:Py_DECREF
Unexecuted instantiation: atexitmodule.c:Py_DECREF
Unexecuted instantiation: faulthandler.c:Py_DECREF
posixmodule.c:Py_DECREF
Line
Count
Source
407
48.6k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
48.6k
    if (_Py_IsImmortal(op)) {
411
2.59k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
2.59k
        return;
413
2.59k
    }
414
46.0k
    _Py_DECREF_STAT_INC();
415
46.0k
    if (--op->ob_refcnt == 0) {
416
31.8k
        _Py_Dealloc(op);
417
31.8k
    }
418
46.0k
}
signalmodule.c:Py_DECREF
Line
Count
Source
407
32
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
32
    if (_Py_IsImmortal(op)) {
411
16
        _Py_DECREF_IMMORTAL_STAT_INC();
412
16
        return;
413
16
    }
414
16
    _Py_DECREF_STAT_INC();
415
16
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
16
}
Unexecuted instantiation: _tracemalloc.c:Py_DECREF
Unexecuted instantiation: _suggestions.c:Py_DECREF
Unexecuted instantiation: _codecsmodule.c:Py_DECREF
_collectionsmodule.c:Py_DECREF
Line
Count
Source
407
96.7k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
96.7k
    if (_Py_IsImmortal(op)) {
411
44.1k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
44.1k
        return;
413
44.1k
    }
414
52.6k
    _Py_DECREF_STAT_INC();
415
52.6k
    if (--op->ob_refcnt == 0) {
416
37.4k
        _Py_Dealloc(op);
417
37.4k
    }
418
52.6k
}
_iomodule.c:Py_DECREF
Line
Count
Source
407
6.04k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
6.04k
    if (_Py_IsImmortal(op)) {
411
2.06k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
2.06k
        return;
413
2.06k
    }
414
3.98k
    _Py_DECREF_STAT_INC();
415
3.98k
    if (--op->ob_refcnt == 0) {
416
2.00k
        _Py_Dealloc(op);
417
2.00k
    }
418
3.98k
}
iobase.c:Py_DECREF
Line
Count
Source
407
104k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
104k
    if (_Py_IsImmortal(op)) {
411
89.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
89.2k
        return;
413
89.2k
    }
414
15.3k
    _Py_DECREF_STAT_INC();
415
15.3k
    if (--op->ob_refcnt == 0) {
416
7.67k
        _Py_Dealloc(op);
417
7.67k
    }
418
15.3k
}
fileio.c:Py_DECREF
Line
Count
Source
407
3.30k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
3.30k
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
3.30k
    _Py_DECREF_STAT_INC();
415
3.30k
    if (--op->ob_refcnt == 0) {
416
2.12k
        _Py_Dealloc(op);
417
2.12k
    }
418
3.30k
}
bytesio.c:Py_DECREF
Line
Count
Source
407
23.0k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
23.0k
    if (_Py_IsImmortal(op)) {
411
7.69k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
7.69k
        return;
413
7.69k
    }
414
15.3k
    _Py_DECREF_STAT_INC();
415
15.3k
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
15.3k
}
bufferedio.c:Py_DECREF
Line
Count
Source
407
6.82k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
6.82k
    if (_Py_IsImmortal(op)) {
411
1.97k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
1.97k
        return;
413
1.97k
    }
414
4.84k
    _Py_DECREF_STAT_INC();
415
4.84k
    if (--op->ob_refcnt == 0) {
416
1.94k
        _Py_Dealloc(op);
417
1.94k
    }
418
4.84k
}
textio.c:Py_DECREF
Line
Count
Source
407
46.0k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
46.0k
    if (_Py_IsImmortal(op)) {
411
30.7k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
30.7k
        return;
413
30.7k
    }
414
15.3k
    _Py_DECREF_STAT_INC();
415
15.3k
    if (--op->ob_refcnt == 0) {
416
16
        _Py_Dealloc(op);
417
16
    }
418
15.3k
}
stringio.c:Py_DECREF
Line
Count
Source
407
269k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
269k
    if (_Py_IsImmortal(op)) {
411
138k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
138k
        return;
413
138k
    }
414
130k
    _Py_DECREF_STAT_INC();
415
130k
    if (--op->ob_refcnt == 0) {
416
30.4k
        _Py_Dealloc(op);
417
30.4k
    }
418
130k
}
itertoolsmodule.c:Py_DECREF
Line
Count
Source
407
2
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
2
    if (_Py_IsImmortal(op)) {
411
2
        _Py_DECREF_IMMORTAL_STAT_INC();
412
2
        return;
413
2
    }
414
0
    _Py_DECREF_STAT_INC();
415
0
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
0
}
sre.c:Py_DECREF
Line
Count
Source
407
426M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
426M
    if (_Py_IsImmortal(op)) {
411
101M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
101M
        return;
413
101M
    }
414
325M
    _Py_DECREF_STAT_INC();
415
325M
    if (--op->ob_refcnt == 0) {
416
5.87M
        _Py_Dealloc(op);
417
5.87M
    }
418
325M
}
Unexecuted instantiation: _sysconfig.c:Py_DECREF
_threadmodule.c:Py_DECREF
Line
Count
Source
407
4.87k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
4.87k
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
4.87k
    _Py_DECREF_STAT_INC();
415
4.87k
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
4.87k
}
Unexecuted instantiation: timemodule.c:Py_DECREF
Unexecuted instantiation: _typesmodule.c:Py_DECREF
Unexecuted instantiation: _typingmodule.c:Py_DECREF
Unexecuted instantiation: _weakref.c:Py_DECREF
_abc.c:Py_DECREF
Line
Count
Source
407
28.0k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
28.0k
    if (_Py_IsImmortal(op)) {
411
9.86k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
9.86k
        return;
413
9.86k
    }
414
18.2k
    _Py_DECREF_STAT_INC();
415
18.2k
    if (--op->ob_refcnt == 0) {
416
2.43k
        _Py_Dealloc(op);
417
2.43k
    }
418
18.2k
}
_functoolsmodule.c:Py_DECREF
Line
Count
Source
407
92
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
92
    if (_Py_IsImmortal(op)) {
411
14
        _Py_DECREF_IMMORTAL_STAT_INC();
412
14
        return;
413
14
    }
414
78
    _Py_DECREF_STAT_INC();
415
78
    if (--op->ob_refcnt == 0) {
416
28
        _Py_Dealloc(op);
417
28
    }
418
78
}
Unexecuted instantiation: _localemodule.c:Py_DECREF
Unexecuted instantiation: _opcode.c:Py_DECREF
_operator.c:Py_DECREF
Line
Count
Source
407
533k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
533k
    if (_Py_IsImmortal(op)) {
411
266k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
266k
        return;
413
266k
    }
414
266k
    _Py_DECREF_STAT_INC();
415
266k
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
266k
}
Unexecuted instantiation: symtablemodule.c:Py_DECREF
getpath.c:Py_DECREF
Line
Count
Source
407
528
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
528
    if (_Py_IsImmortal(op)) {
411
192
        _Py_DECREF_IMMORTAL_STAT_INC();
412
192
        return;
413
192
    }
414
336
    _Py_DECREF_STAT_INC();
415
336
    if (--op->ob_refcnt == 0) {
416
16
        _Py_Dealloc(op);
417
16
    }
418
336
}
Unexecuted instantiation: frozen.c:Py_DECREF
Unexecuted instantiation: getbuildinfo.c:Py_DECREF
Unexecuted instantiation: peg_api.c:Py_DECREF
Unexecuted instantiation: file_tokenizer.c:Py_DECREF
helpers.c:Py_DECREF
Line
Count
Source
407
22.0k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
22.0k
    if (_Py_IsImmortal(op)) {
411
517
        _Py_DECREF_IMMORTAL_STAT_INC();
412
517
        return;
413
517
    }
414
21.5k
    _Py_DECREF_STAT_INC();
415
21.5k
    if (--op->ob_refcnt == 0) {
416
16.3k
        _Py_Dealloc(op);
417
16.3k
    }
418
21.5k
}
Unexecuted instantiation: myreadline.c:Py_DECREF
abstract.c:Py_DECREF
Line
Count
Source
407
362M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
362M
    if (_Py_IsImmortal(op)) {
411
294M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
294M
        return;
413
294M
    }
414
68.6M
    _Py_DECREF_STAT_INC();
415
68.6M
    if (--op->ob_refcnt == 0) {
416
1.64M
        _Py_Dealloc(op);
417
1.64M
    }
418
68.6M
}
Unexecuted instantiation: boolobject.c:Py_DECREF
Unexecuted instantiation: bytes_methods.c:Py_DECREF
bytearrayobject.c:Py_DECREF
Line
Count
Source
407
16
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
16
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
16
    _Py_DECREF_STAT_INC();
415
16
    if (--op->ob_refcnt == 0) {
416
16
        _Py_Dealloc(op);
417
16
    }
418
16
}
capsule.c:Py_DECREF
Line
Count
Source
407
10
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
10
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
10
    _Py_DECREF_STAT_INC();
415
10
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
10
}
cellobject.c:Py_DECREF
Line
Count
Source
407
281k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
281k
    if (_Py_IsImmortal(op)) {
411
27.4k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
27.4k
        return;
413
27.4k
    }
414
254k
    _Py_DECREF_STAT_INC();
415
254k
    if (--op->ob_refcnt == 0) {
416
167k
        _Py_Dealloc(op);
417
167k
    }
418
254k
}
classobject.c:Py_DECREF
Line
Count
Source
407
38.9M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
38.9M
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
38.9M
    _Py_DECREF_STAT_INC();
415
38.9M
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
38.9M
}
codeobject.c:Py_DECREF
Line
Count
Source
407
97.2k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
97.2k
    if (_Py_IsImmortal(op)) {
411
39.3k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
39.3k
        return;
413
39.3k
    }
414
57.8k
    _Py_DECREF_STAT_INC();
415
57.8k
    if (--op->ob_refcnt == 0) {
416
28.6k
        _Py_Dealloc(op);
417
28.6k
    }
418
57.8k
}
Unexecuted instantiation: complexobject.c:Py_DECREF
descrobject.c:Py_DECREF
Line
Count
Source
407
95.6M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
95.6M
    if (_Py_IsImmortal(op)) {
411
10.1M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
10.1M
        return;
413
10.1M
    }
414
85.5M
    _Py_DECREF_STAT_INC();
415
85.5M
    if (--op->ob_refcnt == 0) {
416
57.5M
        _Py_Dealloc(op);
417
57.5M
    }
418
85.5M
}
enumobject.c:Py_DECREF
Line
Count
Source
407
220M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
220M
    if (_Py_IsImmortal(op)) {
411
87.7M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
87.7M
        return;
413
87.7M
    }
414
132M
    _Py_DECREF_STAT_INC();
415
132M
    if (--op->ob_refcnt == 0) {
416
46.8M
        _Py_Dealloc(op);
417
46.8M
    }
418
132M
}
genobject.c:Py_DECREF
Line
Count
Source
407
49.3M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
49.3M
    if (_Py_IsImmortal(op)) {
411
49.3M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
49.3M
        return;
413
49.3M
    }
414
84.0k
    _Py_DECREF_STAT_INC();
415
84.0k
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
84.0k
}
fileobject.c:Py_DECREF
Line
Count
Source
407
10.7k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
10.7k
    if (_Py_IsImmortal(op)) {
411
9.79k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
9.79k
        return;
413
9.79k
    }
414
952
    _Py_DECREF_STAT_INC();
415
952
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
952
}
frameobject.c:Py_DECREF
Line
Count
Source
407
10.9M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
10.9M
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
10.9M
    _Py_DECREF_STAT_INC();
415
10.9M
    if (--op->ob_refcnt == 0) {
416
27.7k
        _Py_Dealloc(op);
417
27.7k
    }
418
10.9M
}
funcobject.c:Py_DECREF
Line
Count
Source
407
112M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
112M
    if (_Py_IsImmortal(op)) {
411
63.8M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
63.8M
        return;
413
63.8M
    }
414
48.7M
    _Py_DECREF_STAT_INC();
415
48.7M
    if (--op->ob_refcnt == 0) {
416
323k
        _Py_Dealloc(op);
417
323k
    }
418
48.7M
}
interpolationobject.c:Py_DECREF
Line
Count
Source
407
16
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
16
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
16
    _Py_DECREF_STAT_INC();
415
16
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
16
}
iterobject.c:Py_DECREF
Line
Count
Source
407
686k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
686k
    if (_Py_IsImmortal(op)) {
411
457k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
457k
        return;
413
457k
    }
414
229k
    _Py_DECREF_STAT_INC();
415
229k
    if (--op->ob_refcnt == 0) {
416
228k
        _Py_Dealloc(op);
417
228k
    }
418
229k
}
Unexecuted instantiation: odictobject.c:Py_DECREF
methodobject.c:Py_DECREF
Line
Count
Source
407
245M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
245M
    if (_Py_IsImmortal(op)) {
411
4.32M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
4.32M
        return;
413
4.32M
    }
414
241M
    _Py_DECREF_STAT_INC();
415
241M
    if (--op->ob_refcnt == 0) {
416
183M
        _Py_Dealloc(op);
417
183M
    }
418
241M
}
namespaceobject.c:Py_DECREF
Line
Count
Source
407
16
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
16
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
16
    _Py_DECREF_STAT_INC();
415
16
    if (--op->ob_refcnt == 0) {
416
16
        _Py_Dealloc(op);
417
16
    }
418
16
}
Unexecuted instantiation: _contextvars.c:Py_DECREF
Python-ast.c:Py_DECREF
Line
Count
Source
407
3.96M
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
3.96M
    if (_Py_IsImmortal(op)) {
411
1.77M
        _Py_DECREF_IMMORTAL_STAT_INC();
412
1.77M
        return;
413
1.77M
    }
414
2.18M
    _Py_DECREF_STAT_INC();
415
2.18M
    if (--op->ob_refcnt == 0) {
416
493k
        _Py_Dealloc(op);
417
493k
    }
418
2.18M
}
Unexecuted instantiation: Python-tokenize.c:Py_DECREF
Unexecuted instantiation: asdl.c:Py_DECREF
assemble.c:Py_DECREF
Line
Count
Source
407
40.0k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
40.0k
    if (_Py_IsImmortal(op)) {
411
6.95k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
6.95k
        return;
413
6.95k
    }
414
33.0k
    _Py_DECREF_STAT_INC();
415
33.0k
    if (--op->ob_refcnt == 0) {
416
0
        _Py_Dealloc(op);
417
0
    }
418
33.0k
}
Unexecuted instantiation: ast.c:Py_DECREF
ast_preprocess.c:Py_DECREF
Line
Count
Source
407
2.36k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
2.36k
    if (_Py_IsImmortal(op)) {
411
0
        _Py_DECREF_IMMORTAL_STAT_INC();
412
0
        return;
413
0
    }
414
2.36k
    _Py_DECREF_STAT_INC();
415
2.36k
    if (--op->ob_refcnt == 0) {
416
2.36k
        _Py_Dealloc(op);
417
2.36k
    }
418
2.36k
}
Unexecuted instantiation: ast_unparse.c:Py_DECREF
Unexecuted instantiation: critical_section.c:Py_DECREF
Unexecuted instantiation: crossinterp.c:Py_DECREF
Unexecuted instantiation: getcopyright.c:Py_DECREF
Unexecuted instantiation: getplatform.c:Py_DECREF
Unexecuted instantiation: getversion.c:Py_DECREF
Unexecuted instantiation: optimizer.c:Py_DECREF
Unexecuted instantiation: pathconfig.c:Py_DECREF
structmember.c:Py_DECREF
Line
Count
Source
407
558
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
558
    if (_Py_IsImmortal(op)) {
411
372
        _Py_DECREF_IMMORTAL_STAT_INC();
412
372
        return;
413
372
    }
414
186
    _Py_DECREF_STAT_INC();
415
186
    if (--op->ob_refcnt == 0) {
416
12
        _Py_Dealloc(op);
417
12
    }
418
186
}
pegen.c:Py_DECREF
Line
Count
Source
407
135k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
135k
    if (_Py_IsImmortal(op)) {
411
49.6k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
49.6k
        return;
413
49.6k
    }
414
85.8k
    _Py_DECREF_STAT_INC();
415
85.8k
    if (--op->ob_refcnt == 0) {
416
69.6k
        _Py_Dealloc(op);
417
69.6k
    }
418
85.8k
}
pegen_errors.c:Py_DECREF
Line
Count
Source
407
49.4k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
49.4k
    if (_Py_IsImmortal(op)) {
411
3.66k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
3.66k
        return;
413
3.66k
    }
414
45.7k
    _Py_DECREF_STAT_INC();
415
45.7k
    if (--op->ob_refcnt == 0) {
416
5.73k
        _Py_Dealloc(op);
417
5.73k
    }
418
45.7k
}
Unexecuted instantiation: parser.c:Py_DECREF
Unexecuted instantiation: buffer.c:Py_DECREF
lexer.c:Py_DECREF
Line
Count
Source
407
13.0k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
13.0k
    if (_Py_IsImmortal(op)) {
411
617
        _Py_DECREF_IMMORTAL_STAT_INC();
412
617
        return;
413
617
    }
414
12.4k
    _Py_DECREF_STAT_INC();
415
12.4k
    if (--op->ob_refcnt == 0) {
416
12.4k
        _Py_Dealloc(op);
417
12.4k
    }
418
12.4k
}
state.c:Py_DECREF
Line
Count
Source
407
23.6k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
23.6k
    if (_Py_IsImmortal(op)) {
411
120
        _Py_DECREF_IMMORTAL_STAT_INC();
412
120
        return;
413
120
    }
414
23.5k
    _Py_DECREF_STAT_INC();
415
23.5k
    if (--op->ob_refcnt == 0) {
416
2.48k
        _Py_Dealloc(op);
417
2.48k
    }
418
23.5k
}
Unexecuted instantiation: readline_tokenizer.c:Py_DECREF
Unexecuted instantiation: string_tokenizer.c:Py_DECREF
Unexecuted instantiation: utf8_tokenizer.c:Py_DECREF
Unexecuted instantiation: getcompiler.c:Py_DECREF
Unexecuted instantiation: mystrtoul.c:Py_DECREF
Unexecuted instantiation: token.c:Py_DECREF
Unexecuted instantiation: action_helpers.c:Py_DECREF
string_parser.c:Py_DECREF
Line
Count
Source
407
40.8k
{
408
    // Non-limited C API and limited C API for Python 3.9 and older access
409
    // directly PyObject.ob_refcnt.
410
40.8k
    if (_Py_IsImmortal(op)) {
411
2.89k
        _Py_DECREF_IMMORTAL_STAT_INC();
412
2.89k
        return;
413
2.89k
    }
414
37.9k
    _Py_DECREF_STAT_INC();
415
37.9k
    if (--op->ob_refcnt == 0) {
416
37.9k
        _Py_Dealloc(op);
417
37.9k
    }
418
37.9k
}
419
5.98G
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
420
#endif
421
422
423
/* Safely decref `op` and set `op` to NULL, especially useful in tp_clear
424
 * and tp_dealloc implementations.
425
 *
426
 * Note that "the obvious" code can be deadly:
427
 *
428
 *     Py_XDECREF(op);
429
 *     op = NULL;
430
 *
431
 * Typically, `op` is something like self->containee, and `self` is done
432
 * using its `containee` member.  In the code sequence above, suppose
433
 * `containee` is non-NULL with a refcount of 1.  Its refcount falls to
434
 * 0 on the first line, which can trigger an arbitrary amount of code,
435
 * possibly including finalizers (like __del__ methods or weakref callbacks)
436
 * coded in Python, which in turn can release the GIL and allow other threads
437
 * to run, etc.  Such code may even invoke methods of `self` again, or cause
438
 * cyclic gc to trigger, but-- oops! --self->containee still points to the
439
 * object being torn down, and it may be in an insane state while being torn
440
 * down.  This has in fact been a rich historic source of miserable (rare &
441
 * hard-to-diagnose) segfaulting (and other) bugs.
442
 *
443
 * The safe way is:
444
 *
445
 *      Py_CLEAR(op);
446
 *
447
 * That arranges to set `op` to NULL _before_ decref'ing, so that any code
448
 * triggered as a side-effect of `op` getting torn down no longer believes
449
 * `op` points to a valid object.
450
 *
451
 * There are cases where it's safe to use the naive code, but they're brittle.
452
 * For example, if `op` points to a Python integer, you know that destroying
453
 * one of those can't cause problems -- but in part that relies on that
454
 * Python integers aren't currently weakly referencable.  Best practice is
455
 * to use Py_CLEAR() even if you can't think of a reason for why you need to.
456
 *
457
 * gh-98724: Use a temporary variable to only evaluate the macro argument once,
458
 * to avoid the duplication of side effects if the argument has side effects.
459
 *
460
 * gh-99701: If the PyObject* type is used with casting arguments to PyObject*,
461
 * the code can be miscompiled with strict aliasing because of type punning.
462
 * With strict aliasing, a compiler considers that two pointers of different
463
 * types cannot read or write the same memory which enables optimization
464
 * opportunities.
465
 *
466
 * If available, use _Py_TYPEOF() to use the 'op' type for temporary variables,
467
 * and so avoid type punning. Otherwise, use memcpy() which causes type erasure
468
 * and so prevents the compiler to reuse an old cached 'op' value after
469
 * Py_CLEAR().
470
 */
471
#ifdef _Py_TYPEOF
472
#define Py_CLEAR(op) \
473
1.31G
    do { \
474
1.31G
        _Py_TYPEOF(op)* _tmp_op_ptr = &(op); \
475
1.31G
        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
476
1.31G
        if (_tmp_old_op != NULL) { \
477
392M
            *_tmp_op_ptr = _Py_NULL; \
478
392M
            Py_DECREF(_tmp_old_op); \
479
392M
        } \
480
1.31G
    } while (0)
481
#else
482
#define Py_CLEAR(op) \
483
    do { \
484
        PyObject **_tmp_op_ptr = _Py_CAST(PyObject**, &(op)); \
485
        PyObject *_tmp_old_op = (*_tmp_op_ptr); \
486
        if (_tmp_old_op != NULL) { \
487
            PyObject *_null_ptr = _Py_NULL; \
488
            memcpy(_tmp_op_ptr, &_null_ptr, sizeof(PyObject*)); \
489
            Py_DECREF(_tmp_old_op); \
490
        } \
491
    } while (0)
492
#endif
493
494
495
/* Function to use in case the object pointer can be NULL: */
496
static inline void Py_XINCREF(PyObject *op)
497
1.22G
{
498
1.22G
    if (op != _Py_NULL) {
499
531M
        Py_INCREF(op);
500
531M
    }
501
1.22G
}
Unexecuted instantiation: bytesobject.c:Py_XINCREF
Unexecuted instantiation: call.c:Py_XINCREF
exceptions.c:Py_XINCREF
Line
Count
Source
497
55.0M
{
498
55.0M
    if (op != _Py_NULL) {
499
1.56M
        Py_INCREF(op);
500
1.56M
    }
501
55.0M
}
Unexecuted instantiation: genericaliasobject.c:Py_XINCREF
Unexecuted instantiation: floatobject.c:Py_XINCREF
listobject.c:Py_XINCREF
Line
Count
Source
497
840k
{
498
840k
    if (op != _Py_NULL) {
499
840k
        Py_INCREF(op);
500
840k
    }
501
840k
}
Unexecuted instantiation: longobject.c:Py_XINCREF
dictobject.c:Py_XINCREF
Line
Count
Source
497
356M
{
498
356M
    if (op != _Py_NULL) {
499
110M
        Py_INCREF(op);
500
110M
    }
501
356M
}
Unexecuted instantiation: memoryobject.c:Py_XINCREF
Unexecuted instantiation: moduleobject.c:Py_XINCREF
Unexecuted instantiation: object.c:Py_XINCREF
Unexecuted instantiation: obmalloc.c:Py_XINCREF
Unexecuted instantiation: picklebufobject.c:Py_XINCREF
Unexecuted instantiation: rangeobject.c:Py_XINCREF
Unexecuted instantiation: setobject.c:Py_XINCREF
Unexecuted instantiation: sliceobject.c:Py_XINCREF
Unexecuted instantiation: structseq.c:Py_XINCREF
Unexecuted instantiation: templateobject.c:Py_XINCREF
Unexecuted instantiation: tupleobject.c:Py_XINCREF
typeobject.c:Py_XINCREF
Line
Count
Source
497
43.1M
{
498
43.1M
    if (op != _Py_NULL) {
499
42.9M
        Py_INCREF(op);
500
42.9M
    }
501
43.1M
}
Unexecuted instantiation: typevarobject.c:Py_XINCREF
Unexecuted instantiation: unicodeobject.c:Py_XINCREF
Unexecuted instantiation: unicodectype.c:Py_XINCREF
Unexecuted instantiation: unionobject.c:Py_XINCREF
weakrefobject.c:Py_XINCREF
Line
Count
Source
497
255k
{
498
255k
    if (op != _Py_NULL) {
499
5.97k
        Py_INCREF(op);
500
5.97k
    }
501
255k
}
Unexecuted instantiation: _warnings.c:Py_XINCREF
bltinmodule.c:Py_XINCREF
Line
Count
Source
497
301
{
498
301
    if (op != _Py_NULL) {
499
301
        Py_INCREF(op);
500
301
    }
501
301
}
ceval.c:Py_XINCREF
Line
Count
Source
497
193M
{
498
193M
    if (op != _Py_NULL) {
499
68.7M
        Py_INCREF(op);
500
68.7M
    }
501
193M
}
Unexecuted instantiation: codecs.c:Py_XINCREF
Unexecuted instantiation: codegen.c:Py_XINCREF
compile.c:Py_XINCREF
Line
Count
Source
497
8.34k
{
498
8.34k
    if (op != _Py_NULL) {
499
3.92k
        Py_INCREF(op);
500
3.92k
    }
501
8.34k
}
context.c:Py_XINCREF
Line
Count
Source
497
17.6k
{
498
17.6k
    if (op != _Py_NULL) {
499
0
        Py_INCREF(op);
500
0
    }
501
17.6k
}
errors.c:Py_XINCREF
Line
Count
Source
497
26.5M
{
498
26.5M
    if (op != _Py_NULL) {
499
26.4M
        Py_INCREF(op);
500
26.4M
    }
501
26.5M
}
Unexecuted instantiation: flowgraph.c:Py_XINCREF
Unexecuted instantiation: frame.c:Py_XINCREF
Unexecuted instantiation: future.c:Py_XINCREF
Unexecuted instantiation: gc.c:Py_XINCREF
Unexecuted instantiation: gc_gil.c:Py_XINCREF
Unexecuted instantiation: getargs.c:Py_XINCREF
Unexecuted instantiation: ceval_gil.c:Py_XINCREF
Unexecuted instantiation: hamt.c:Py_XINCREF
Unexecuted instantiation: hashtable.c:Py_XINCREF
import.c:Py_XINCREF
Line
Count
Source
497
2.47k
{
498
2.47k
    if (op != _Py_NULL) {
499
1.25k
        Py_INCREF(op);
500
1.25k
    }
501
2.47k
}
Unexecuted instantiation: importdl.c:Py_XINCREF
Unexecuted instantiation: initconfig.c:Py_XINCREF
Unexecuted instantiation: instrumentation.c:Py_XINCREF
Unexecuted instantiation: instruction_sequence.c:Py_XINCREF
Unexecuted instantiation: intrinsics.c:Py_XINCREF
Unexecuted instantiation: legacy_tracing.c:Py_XINCREF
Unexecuted instantiation: lock.c:Py_XINCREF
Unexecuted instantiation: marshal.c:Py_XINCREF
Unexecuted instantiation: modsupport.c:Py_XINCREF
Unexecuted instantiation: mysnprintf.c:Py_XINCREF
Unexecuted instantiation: parking_lot.c:Py_XINCREF
Unexecuted instantiation: preconfig.c:Py_XINCREF
Unexecuted instantiation: pyarena.c:Py_XINCREF
Unexecuted instantiation: pyctype.c:Py_XINCREF
Unexecuted instantiation: pyhash.c:Py_XINCREF
Unexecuted instantiation: pylifecycle.c:Py_XINCREF
Unexecuted instantiation: pymath.c:Py_XINCREF
pystate.c:Py_XINCREF
Line
Count
Source
497
2.36k
{
498
2.36k
    if (op != _Py_NULL) {
499
2.36k
        Py_INCREF(op);
500
2.36k
    }
501
2.36k
}
Unexecuted instantiation: pythonrun.c:Py_XINCREF
Unexecuted instantiation: pytime.c:Py_XINCREF
Unexecuted instantiation: qsbr.c:Py_XINCREF
Unexecuted instantiation: bootstrap_hash.c:Py_XINCREF
Unexecuted instantiation: specialize.c:Py_XINCREF
Unexecuted instantiation: symtable.c:Py_XINCREF
sysmodule.c:Py_XINCREF
Line
Count
Source
497
16
{
498
16
    if (op != _Py_NULL) {
499
16
        Py_INCREF(op);
500
16
    }
501
16
}
Unexecuted instantiation: thread.c:Py_XINCREF
traceback.c:Py_XINCREF
Line
Count
Source
497
55.7M
{
498
55.7M
    if (op != _Py_NULL) {
499
29.1M
        Py_INCREF(op);
500
29.1M
    }
501
55.7M
}
Unexecuted instantiation: tracemalloc.c:Py_XINCREF
Unexecuted instantiation: getopt.c:Py_XINCREF
Unexecuted instantiation: pystrcmp.c:Py_XINCREF
Unexecuted instantiation: pystrtod.c:Py_XINCREF
Unexecuted instantiation: pystrhex.c:Py_XINCREF
Unexecuted instantiation: dtoa.c:Py_XINCREF
Unexecuted instantiation: formatter_unicode.c:Py_XINCREF
Unexecuted instantiation: fileutils.c:Py_XINCREF
Unexecuted instantiation: suggestions.c:Py_XINCREF
Unexecuted instantiation: perf_trampoline.c:Py_XINCREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_XINCREF
Unexecuted instantiation: remote_debugging.c:Py_XINCREF
Unexecuted instantiation: dynload_shlib.c:Py_XINCREF
Unexecuted instantiation: config.c:Py_XINCREF
Unexecuted instantiation: gcmodule.c:Py_XINCREF
Unexecuted instantiation: atexitmodule.c:Py_XINCREF
Unexecuted instantiation: faulthandler.c:Py_XINCREF
Unexecuted instantiation: posixmodule.c:Py_XINCREF
Unexecuted instantiation: signalmodule.c:Py_XINCREF
Unexecuted instantiation: _tracemalloc.c:Py_XINCREF
Unexecuted instantiation: _suggestions.c:Py_XINCREF
Unexecuted instantiation: _codecsmodule.c:Py_XINCREF
Unexecuted instantiation: _collectionsmodule.c:Py_XINCREF
Unexecuted instantiation: errnomodule.c:Py_XINCREF
Unexecuted instantiation: _iomodule.c:Py_XINCREF
Unexecuted instantiation: iobase.c:Py_XINCREF
Unexecuted instantiation: fileio.c:Py_XINCREF
Unexecuted instantiation: bytesio.c:Py_XINCREF
bufferedio.c:Py_XINCREF
Line
Count
Source
497
950
{
498
950
    if (op != _Py_NULL) {
499
950
        Py_INCREF(op);
500
950
    }
501
950
}
Unexecuted instantiation: textio.c:Py_XINCREF
Unexecuted instantiation: stringio.c:Py_XINCREF
Unexecuted instantiation: itertoolsmodule.c:Py_XINCREF
Unexecuted instantiation: sre.c:Py_XINCREF
Unexecuted instantiation: _sysconfig.c:Py_XINCREF
Unexecuted instantiation: _threadmodule.c:Py_XINCREF
Unexecuted instantiation: timemodule.c:Py_XINCREF
Unexecuted instantiation: _typesmodule.c:Py_XINCREF
Unexecuted instantiation: _typingmodule.c:Py_XINCREF
Unexecuted instantiation: _weakref.c:Py_XINCREF
_abc.c:Py_XINCREF
Line
Count
Source
497
590
{
498
590
    if (op != _Py_NULL) {
499
590
        Py_INCREF(op);
500
590
    }
501
590
}
Unexecuted instantiation: _functoolsmodule.c:Py_XINCREF
Unexecuted instantiation: _localemodule.c:Py_XINCREF
Unexecuted instantiation: _opcode.c:Py_XINCREF
Unexecuted instantiation: _operator.c:Py_XINCREF
Unexecuted instantiation: _stat.c:Py_XINCREF
Unexecuted instantiation: symtablemodule.c:Py_XINCREF
Unexecuted instantiation: pwdmodule.c:Py_XINCREF
getpath.c:Py_XINCREF
Line
Count
Source
497
48
{
498
48
    if (op != _Py_NULL) {
499
48
        Py_INCREF(op);
500
48
    }
501
48
}
Unexecuted instantiation: frozen.c:Py_XINCREF
Unexecuted instantiation: getbuildinfo.c:Py_XINCREF
Unexecuted instantiation: peg_api.c:Py_XINCREF
Unexecuted instantiation: file_tokenizer.c:Py_XINCREF
Unexecuted instantiation: helpers.c:Py_XINCREF
Unexecuted instantiation: myreadline.c:Py_XINCREF
abstract.c:Py_XINCREF
Line
Count
Source
497
11.4M
{
498
11.4M
    if (op != _Py_NULL) {
499
11.1M
        Py_INCREF(op);
500
11.1M
    }
501
11.4M
}
Unexecuted instantiation: boolobject.c:Py_XINCREF
Unexecuted instantiation: bytes_methods.c:Py_XINCREF
Unexecuted instantiation: bytearrayobject.c:Py_XINCREF
Unexecuted instantiation: capsule.c:Py_XINCREF
cellobject.c:Py_XINCREF
Line
Count
Source
497
5.51M
{
498
5.51M
    if (op != _Py_NULL) {
499
67.6k
        Py_INCREF(op);
500
67.6k
    }
501
5.51M
}
Unexecuted instantiation: classobject.c:Py_XINCREF
codeobject.c:Py_XINCREF
Line
Count
Source
497
5.50k
{
498
5.50k
    if (op != _Py_NULL) {
499
5.50k
        Py_INCREF(op);
500
5.50k
    }
501
5.50k
}
Unexecuted instantiation: complexobject.c:Py_XINCREF
descrobject.c:Py_XINCREF
Line
Count
Source
497
46.8k
{
498
46.8k
    if (op != _Py_NULL) {
499
44.9k
        Py_INCREF(op);
500
44.9k
    }
501
46.8k
}
Unexecuted instantiation: enumobject.c:Py_XINCREF
genobject.c:Py_XINCREF
Line
Count
Source
497
5.01k
{
498
5.01k
    if (op != _Py_NULL) {
499
0
        Py_INCREF(op);
500
0
    }
501
5.01k
}
Unexecuted instantiation: fileobject.c:Py_XINCREF
Unexecuted instantiation: frameobject.c:Py_XINCREF
funcobject.c:Py_XINCREF
Line
Count
Source
497
3.10k
{
498
3.10k
    if (op != _Py_NULL) {
499
0
        Py_INCREF(op);
500
0
    }
501
3.10k
}
Unexecuted instantiation: interpolationobject.c:Py_XINCREF
Unexecuted instantiation: iterobject.c:Py_XINCREF
Unexecuted instantiation: odictobject.c:Py_XINCREF
methodobject.c:Py_XINCREF
Line
Count
Source
497
479M
{
498
479M
    if (op != _Py_NULL) {
499
239M
        Py_INCREF(op);
500
239M
    }
501
479M
}
Unexecuted instantiation: namespaceobject.c:Py_XINCREF
Unexecuted instantiation: _contextvars.c:Py_XINCREF
Unexecuted instantiation: Python-ast.c:Py_XINCREF
Unexecuted instantiation: Python-tokenize.c:Py_XINCREF
Unexecuted instantiation: asdl.c:Py_XINCREF
Unexecuted instantiation: assemble.c:Py_XINCREF
Unexecuted instantiation: ast.c:Py_XINCREF
Unexecuted instantiation: ast_preprocess.c:Py_XINCREF
Unexecuted instantiation: ast_unparse.c:Py_XINCREF
Unexecuted instantiation: critical_section.c:Py_XINCREF
Unexecuted instantiation: crossinterp.c:Py_XINCREF
Unexecuted instantiation: getcopyright.c:Py_XINCREF
Unexecuted instantiation: getplatform.c:Py_XINCREF
Unexecuted instantiation: getversion.c:Py_XINCREF
Unexecuted instantiation: optimizer.c:Py_XINCREF
Unexecuted instantiation: pathconfig.c:Py_XINCREF
structmember.c:Py_XINCREF
Line
Count
Source
497
6.65k
{
498
6.65k
    if (op != _Py_NULL) {
499
6.65k
        Py_INCREF(op);
500
6.65k
    }
501
6.65k
}
Unexecuted instantiation: pegen.c:Py_XINCREF
Unexecuted instantiation: pegen_errors.c:Py_XINCREF
Unexecuted instantiation: parser.c:Py_XINCREF
Unexecuted instantiation: buffer.c:Py_XINCREF
Unexecuted instantiation: lexer.c:Py_XINCREF
Unexecuted instantiation: state.c:Py_XINCREF
Unexecuted instantiation: readline_tokenizer.c:Py_XINCREF
Unexecuted instantiation: string_tokenizer.c:Py_XINCREF
Unexecuted instantiation: utf8_tokenizer.c:Py_XINCREF
Unexecuted instantiation: getcompiler.c:Py_XINCREF
Unexecuted instantiation: mystrtoul.c:Py_XINCREF
Unexecuted instantiation: token.c:Py_XINCREF
Unexecuted instantiation: action_helpers.c:Py_XINCREF
Unexecuted instantiation: string_parser.c:Py_XINCREF
502
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
503
1.22G
#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
504
#endif
505
506
static inline void Py_XDECREF(PyObject *op)
507
3.91G
{
508
3.91G
    if (op != _Py_NULL) {
509
3.15G
        Py_DECREF(op);
510
3.15G
    }
511
3.91G
}
bytesobject.c:Py_XDECREF
Line
Count
Source
507
51
{
508
51
    if (op != _Py_NULL) {
509
16
        Py_DECREF(op);
510
16
    }
511
51
}
Unexecuted instantiation: call.c:Py_XDECREF
exceptions.c:Py_XDECREF
Line
Count
Source
507
46.1M
{
508
46.1M
    if (op != _Py_NULL) {
509
18.3M
        Py_DECREF(op);
510
18.3M
    }
511
46.1M
}
genericaliasobject.c:Py_XDECREF
Line
Count
Source
507
126
{
508
126
    if (op != _Py_NULL) {
509
84
        Py_DECREF(op);
510
84
    }
511
126
}
floatobject.c:Py_XDECREF
Line
Count
Source
507
538k
{
508
538k
    if (op != _Py_NULL) {
509
8
        Py_DECREF(op);
510
8
    }
511
538k
}
listobject.c:Py_XDECREF
Line
Count
Source
507
1.53G
{
508
1.53G
    if (op != _Py_NULL) {
509
1.50G
        Py_DECREF(op);
510
1.50G
    }
511
1.53G
}
longobject.c:Py_XDECREF
Line
Count
Source
507
961
{
508
961
    if (op != _Py_NULL) {
509
272
        Py_DECREF(op);
510
272
    }
511
961
}
dictobject.c:Py_XDECREF
Line
Count
Source
507
338M
{
508
338M
    if (op != _Py_NULL) {
509
333M
        Py_DECREF(op);
510
333M
    }
511
338M
}
Unexecuted instantiation: memoryobject.c:Py_XDECREF
moduleobject.c:Py_XDECREF
Line
Count
Source
507
2.10k
{
508
2.10k
    if (op != _Py_NULL) {
509
501
        Py_DECREF(op);
510
501
    }
511
2.10k
}
object.c:Py_XDECREF
Line
Count
Source
507
28.2k
{
508
28.2k
    if (op != _Py_NULL) {
509
350
        Py_DECREF(op);
510
350
    }
511
28.2k
}
Unexecuted instantiation: obmalloc.c:Py_XDECREF
Unexecuted instantiation: picklebufobject.c:Py_XDECREF
rangeobject.c:Py_XDECREF
Line
Count
Source
507
48
{
508
48
    if (op != _Py_NULL) {
509
48
        Py_DECREF(op);
510
48
    }
511
48
}
setobject.c:Py_XDECREF
Line
Count
Source
507
227k
{
508
227k
    if (op != _Py_NULL) {
509
16
        Py_DECREF(op);
510
16
    }
511
227k
}
Unexecuted instantiation: sliceobject.c:Py_XDECREF
structseq.c:Py_XDECREF
Line
Count
Source
507
83.4k
{
508
83.4k
    if (op != _Py_NULL) {
509
83.4k
        Py_DECREF(op);
510
83.4k
    }
511
83.4k
}
Unexecuted instantiation: templateobject.c:Py_XDECREF
tupleobject.c:Py_XDECREF
Line
Count
Source
507
776M
{
508
776M
    if (op != _Py_NULL) {
509
773M
        Py_DECREF(op);
510
773M
    }
511
776M
}
typeobject.c:Py_XDECREF
Line
Count
Source
507
16.8M
{
508
16.8M
    if (op != _Py_NULL) {
509
13.5M
        Py_DECREF(op);
510
13.5M
    }
511
16.8M
}
Unexecuted instantiation: typevarobject.c:Py_XDECREF
unicodeobject.c:Py_XDECREF
Line
Count
Source
507
72.7M
{
508
72.7M
    if (op != _Py_NULL) {
509
49.6M
        Py_DECREF(op);
510
49.6M
    }
511
72.7M
}
Unexecuted instantiation: unicodectype.c:Py_XDECREF
unionobject.c:Py_XDECREF
Line
Count
Source
507
465
{
508
465
    if (op != _Py_NULL) {
509
22
        Py_DECREF(op);
510
22
    }
511
465
}
weakrefobject.c:Py_XDECREF
Line
Count
Source
507
248k
{
508
248k
    if (op != _Py_NULL) {
509
160
        Py_DECREF(op);
510
160
    }
511
248k
}
_warnings.c:Py_XDECREF
Line
Count
Source
507
90.2k
{
508
90.2k
    if (op != _Py_NULL) {
509
90.2k
        Py_DECREF(op);
510
90.2k
    }
511
90.2k
}
bltinmodule.c:Py_XDECREF
Line
Count
Source
507
5.76M
{
508
5.76M
    if (op != _Py_NULL) {
509
571k
        Py_DECREF(op);
510
571k
    }
511
5.76M
}
ceval.c:Py_XDECREF
Line
Count
Source
507
220k
{
508
220k
    if (op != _Py_NULL) {
509
5.61k
        Py_DECREF(op);
510
5.61k
    }
511
220k
}
codecs.c:Py_XDECREF
Line
Count
Source
507
187k
{
508
187k
    if (op != _Py_NULL) {
509
124k
        Py_DECREF(op);
510
124k
    }
511
187k
}
Unexecuted instantiation: codegen.c:Py_XDECREF
compile.c:Py_XDECREF
Line
Count
Source
507
22.8k
{
508
22.8k
    if (op != _Py_NULL) {
509
6.70k
        Py_DECREF(op);
510
6.70k
    }
511
22.8k
}
Unexecuted instantiation: context.c:Py_XDECREF
errors.c:Py_XDECREF
Line
Count
Source
507
139M
{
508
139M
    if (op != _Py_NULL) {
509
22.0M
        Py_DECREF(op);
510
22.0M
    }
511
139M
}
Unexecuted instantiation: flowgraph.c:Py_XDECREF
Unexecuted instantiation: frame.c:Py_XDECREF
Unexecuted instantiation: future.c:Py_XDECREF
gc.c:Py_XDECREF
Line
Count
Source
507
104k
{
508
104k
    if (op != _Py_NULL) {
509
0
        Py_DECREF(op);
510
0
    }
511
104k
}
Unexecuted instantiation: gc_gil.c:Py_XDECREF
Unexecuted instantiation: getargs.c:Py_XDECREF
Unexecuted instantiation: ceval_gil.c:Py_XDECREF
Unexecuted instantiation: hamt.c:Py_XDECREF
Unexecuted instantiation: hashtable.c:Py_XDECREF
import.c:Py_XDECREF
Line
Count
Source
507
87.9k
{
508
87.9k
    if (op != _Py_NULL) {
509
66.2k
        Py_DECREF(op);
510
66.2k
    }
511
87.9k
}
Unexecuted instantiation: importdl.c:Py_XDECREF
Unexecuted instantiation: initconfig.c:Py_XDECREF
Unexecuted instantiation: instrumentation.c:Py_XDECREF
instruction_sequence.c:Py_XDECREF
Line
Count
Source
507
11.4k
{
508
11.4k
    if (op != _Py_NULL) {
509
0
        Py_DECREF(op);
510
0
    }
511
11.4k
}
intrinsics.c:Py_XDECREF
Line
Count
Source
507
13.0k
{
508
13.0k
    if (op != _Py_NULL) {
509
13.0k
        Py_DECREF(op);
510
13.0k
    }
511
13.0k
}
Unexecuted instantiation: legacy_tracing.c:Py_XDECREF
Unexecuted instantiation: lock.c:Py_XDECREF
marshal.c:Py_XDECREF
Line
Count
Source
507
291k
{
508
291k
    if (op != _Py_NULL) {
509
291k
        Py_DECREF(op);
510
291k
    }
511
291k
}
modsupport.c:Py_XDECREF
Line
Count
Source
507
6.71k
{
508
6.71k
    if (op != _Py_NULL) {
509
6.71k
        Py_DECREF(op);
510
6.71k
    }
511
6.71k
}
Unexecuted instantiation: mysnprintf.c:Py_XDECREF
Unexecuted instantiation: parking_lot.c:Py_XDECREF
Unexecuted instantiation: preconfig.c:Py_XDECREF
Unexecuted instantiation: pyarena.c:Py_XDECREF
Unexecuted instantiation: pyctype.c:Py_XDECREF
Unexecuted instantiation: pyhash.c:Py_XDECREF
pylifecycle.c:Py_XDECREF
Line
Count
Source
507
96
{
508
96
    if (op != _Py_NULL) {
509
96
        Py_DECREF(op);
510
96
    }
511
96
}
Unexecuted instantiation: pymath.c:Py_XDECREF
Unexecuted instantiation: pystate.c:Py_XDECREF
pythonrun.c:Py_XDECREF
Line
Count
Source
507
91
{
508
91
    if (op != _Py_NULL) {
509
0
        Py_DECREF(op);
510
0
    }
511
91
}
Unexecuted instantiation: pytime.c:Py_XDECREF
Unexecuted instantiation: qsbr.c:Py_XDECREF
Unexecuted instantiation: bootstrap_hash.c:Py_XDECREF
specialize.c:Py_XDECREF
Line
Count
Source
507
907k
{
508
907k
    if (op != _Py_NULL) {
509
481k
        Py_DECREF(op);
510
481k
    }
511
907k
}
symtable.c:Py_XDECREF
Line
Count
Source
507
139k
{
508
139k
    if (op != _Py_NULL) {
509
109k
        Py_DECREF(op);
510
109k
    }
511
139k
}
sysmodule.c:Py_XDECREF
Line
Count
Source
507
720
{
508
720
    if (op != _Py_NULL) {
509
384
        Py_DECREF(op);
510
384
    }
511
720
}
Unexecuted instantiation: thread.c:Py_XDECREF
traceback.c:Py_XDECREF
Line
Count
Source
507
111M
{
508
111M
    if (op != _Py_NULL) {
509
58.3M
        Py_DECREF(op);
510
58.3M
    }
511
111M
}
Unexecuted instantiation: tracemalloc.c:Py_XDECREF
Unexecuted instantiation: getopt.c:Py_XDECREF
Unexecuted instantiation: pystrcmp.c:Py_XDECREF
Unexecuted instantiation: pystrtod.c:Py_XDECREF
Unexecuted instantiation: pystrhex.c:Py_XDECREF
Unexecuted instantiation: dtoa.c:Py_XDECREF
formatter_unicode.c:Py_XDECREF
Line
Count
Source
507
631
{
508
631
    if (op != _Py_NULL) {
509
256
        Py_DECREF(op);
510
256
    }
511
631
}
Unexecuted instantiation: fileutils.c:Py_XDECREF
Unexecuted instantiation: suggestions.c:Py_XDECREF
Unexecuted instantiation: perf_trampoline.c:Py_XDECREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_XDECREF
Unexecuted instantiation: remote_debugging.c:Py_XDECREF
Unexecuted instantiation: dynload_shlib.c:Py_XDECREF
Unexecuted instantiation: config.c:Py_XDECREF
Unexecuted instantiation: gcmodule.c:Py_XDECREF
Unexecuted instantiation: atexitmodule.c:Py_XDECREF
Unexecuted instantiation: faulthandler.c:Py_XDECREF
posixmodule.c:Py_XDECREF
Line
Count
Source
507
65.8k
{
508
65.8k
    if (op != _Py_NULL) {
509
26.3k
        Py_DECREF(op);
510
26.3k
    }
511
65.8k
}
signalmodule.c:Py_XDECREF
Line
Count
Source
507
1.02k
{
508
1.02k
    if (op != _Py_NULL) {
509
0
        Py_DECREF(op);
510
0
    }
511
1.02k
}
Unexecuted instantiation: _tracemalloc.c:Py_XDECREF
Unexecuted instantiation: _suggestions.c:Py_XDECREF
Unexecuted instantiation: _codecsmodule.c:Py_XDECREF
Unexecuted instantiation: _collectionsmodule.c:Py_XDECREF
Unexecuted instantiation: errnomodule.c:Py_XDECREF
Unexecuted instantiation: _iomodule.c:Py_XDECREF
Unexecuted instantiation: iobase.c:Py_XDECREF
Unexecuted instantiation: fileio.c:Py_XDECREF
bytesio.c:Py_XDECREF
Line
Count
Source
507
7.67k
{
508
7.67k
    if (op != _Py_NULL) {
509
7.67k
        Py_DECREF(op);
510
7.67k
    }
511
7.67k
}
bufferedio.c:Py_XDECREF
Line
Count
Source
507
3.85k
{
508
3.85k
    if (op != _Py_NULL) {
509
950
        Py_DECREF(op);
510
950
    }
511
3.85k
}
textio.c:Py_XDECREF
Line
Count
Source
507
30.6k
{
508
30.6k
    if (op != _Py_NULL) {
509
32
        Py_DECREF(op);
510
32
    }
511
30.6k
}
Unexecuted instantiation: stringio.c:Py_XDECREF
Unexecuted instantiation: itertoolsmodule.c:Py_XDECREF
sre.c:Py_XDECREF
Line
Count
Source
507
82.1M
{
508
82.1M
    if (op != _Py_NULL) {
509
82.1M
        Py_DECREF(op);
510
82.1M
    }
511
82.1M
}
Unexecuted instantiation: _sysconfig.c:Py_XDECREF
Unexecuted instantiation: _threadmodule.c:Py_XDECREF
Unexecuted instantiation: timemodule.c:Py_XDECREF
Unexecuted instantiation: _typesmodule.c:Py_XDECREF
Unexecuted instantiation: _typingmodule.c:Py_XDECREF
Unexecuted instantiation: _weakref.c:Py_XDECREF
_abc.c:Py_XDECREF
Line
Count
Source
507
3.25k
{
508
3.25k
    if (op != _Py_NULL) {
509
2.35k
        Py_DECREF(op);
510
2.35k
    }
511
3.25k
}
_functoolsmodule.c:Py_XDECREF
Line
Count
Source
507
14
{
508
14
    if (op != _Py_NULL) {
509
0
        Py_DECREF(op);
510
0
    }
511
14
}
Unexecuted instantiation: _localemodule.c:Py_XDECREF
Unexecuted instantiation: _opcode.c:Py_XDECREF
Unexecuted instantiation: _operator.c:Py_XDECREF
Unexecuted instantiation: _stat.c:Py_XDECREF
Unexecuted instantiation: symtablemodule.c:Py_XDECREF
Unexecuted instantiation: pwdmodule.c:Py_XDECREF
Unexecuted instantiation: getpath.c:Py_XDECREF
Unexecuted instantiation: frozen.c:Py_XDECREF
Unexecuted instantiation: getbuildinfo.c:Py_XDECREF
Unexecuted instantiation: peg_api.c:Py_XDECREF
Unexecuted instantiation: file_tokenizer.c:Py_XDECREF
helpers.c:Py_XDECREF
Line
Count
Source
507
2.58k
{
508
2.58k
    if (op != _Py_NULL) {
509
2.58k
        Py_DECREF(op);
510
2.58k
    }
511
2.58k
}
Unexecuted instantiation: myreadline.c:Py_XDECREF
abstract.c:Py_XDECREF
Line
Count
Source
507
190k
{
508
190k
    if (op != _Py_NULL) {
509
0
        Py_DECREF(op);
510
0
    }
511
190k
}
Unexecuted instantiation: boolobject.c:Py_XDECREF
Unexecuted instantiation: bytes_methods.c:Py_XDECREF
bytearrayobject.c:Py_XDECREF
Line
Count
Source
507
16
{
508
16
    if (op != _Py_NULL) {
509
16
        Py_DECREF(op);
510
16
    }
511
16
}
capsule.c:Py_XDECREF
Line
Count
Source
507
5
{
508
5
    if (op != _Py_NULL) {
509
5
        Py_DECREF(op);
510
5
    }
511
5
}
cellobject.c:Py_XDECREF
Line
Count
Source
507
5.51M
{
508
5.51M
    if (op != _Py_NULL) {
509
281k
        Py_DECREF(op);
510
281k
    }
511
5.51M
}
classobject.c:Py_XDECREF
Line
Count
Source
507
19.4M
{
508
19.4M
    if (op != _Py_NULL) {
509
19.4M
        Py_DECREF(op);
510
19.4M
    }
511
19.4M
}
codeobject.c:Py_XDECREF
Line
Count
Source
507
108k
{
508
108k
    if (op != _Py_NULL) {
509
72.6k
        Py_DECREF(op);
510
72.6k
    }
511
108k
}
Unexecuted instantiation: complexobject.c:Py_XDECREF
descrobject.c:Py_XDECREF
Line
Count
Source
507
30.5M
{
508
30.5M
    if (op != _Py_NULL) {
509
21.8M
        Py_DECREF(op);
510
21.8M
    }
511
30.5M
}
enumobject.c:Py_XDECREF
Line
Count
Source
507
17.0M
{
508
17.0M
    if (op != _Py_NULL) {
509
11.3M
        Py_DECREF(op);
510
11.3M
    }
511
17.0M
}
genobject.c:Py_XDECREF
Line
Count
Source
507
2.50k
{
508
2.50k
    if (op != _Py_NULL) {
509
0
        Py_DECREF(op);
510
0
    }
511
2.50k
}
Unexecuted instantiation: fileobject.c:Py_XDECREF
Unexecuted instantiation: frameobject.c:Py_XDECREF
funcobject.c:Py_XDECREF
Line
Count
Source
507
2.43k
{
508
2.43k
    if (op != _Py_NULL) {
509
815
        Py_DECREF(op);
510
815
    }
511
2.43k
}
Unexecuted instantiation: interpolationobject.c:Py_XDECREF
iterobject.c:Py_XDECREF
Line
Count
Source
507
686k
{
508
686k
    if (op != _Py_NULL) {
509
228k
        Py_DECREF(op);
510
228k
    }
511
686k
}
Unexecuted instantiation: odictobject.c:Py_XDECREF
methodobject.c:Py_XDECREF
Line
Count
Source
507
719M
{
508
719M
    if (op != _Py_NULL) {
509
245M
        Py_DECREF(op);
510
245M
    }
511
719M
}
Unexecuted instantiation: namespaceobject.c:Py_XDECREF
Unexecuted instantiation: _contextvars.c:Py_XDECREF
Unexecuted instantiation: Python-ast.c:Py_XDECREF
Unexecuted instantiation: Python-tokenize.c:Py_XDECREF
Unexecuted instantiation: asdl.c:Py_XDECREF
assemble.c:Py_XDECREF
Line
Count
Source
507
40.0k
{
508
40.0k
    if (op != _Py_NULL) {
509
40.0k
        Py_DECREF(op);
510
40.0k
    }
511
40.0k
}
Unexecuted instantiation: ast.c:Py_XDECREF
Unexecuted instantiation: ast_preprocess.c:Py_XDECREF
Unexecuted instantiation: ast_unparse.c:Py_XDECREF
Unexecuted instantiation: critical_section.c:Py_XDECREF
Unexecuted instantiation: crossinterp.c:Py_XDECREF
Unexecuted instantiation: getcopyright.c:Py_XDECREF
Unexecuted instantiation: getplatform.c:Py_XDECREF
Unexecuted instantiation: getversion.c:Py_XDECREF
Unexecuted instantiation: optimizer.c:Py_XDECREF
Unexecuted instantiation: pathconfig.c:Py_XDECREF
structmember.c:Py_XDECREF
Line
Count
Source
507
6.32k
{
508
6.32k
    if (op != _Py_NULL) {
509
558
        Py_DECREF(op);
510
558
    }
511
6.32k
}
pegen.c:Py_XDECREF
Line
Count
Source
507
34.3k
{
508
34.3k
    if (op != _Py_NULL) {
509
1.56k
        Py_DECREF(op);
510
1.56k
    }
511
34.3k
}
pegen_errors.c:Py_XDECREF
Line
Count
Source
507
14.3k
{
508
14.3k
    if (op != _Py_NULL) {
509
11.5k
        Py_DECREF(op);
510
11.5k
    }
511
14.3k
}
Unexecuted instantiation: parser.c:Py_XDECREF
Unexecuted instantiation: buffer.c:Py_XDECREF
Unexecuted instantiation: lexer.c:Py_XDECREF
state.c:Py_XDECREF
Line
Count
Source
507
100k
{
508
100k
    if (op != _Py_NULL) {
509
23.6k
        Py_DECREF(op);
510
23.6k
    }
511
100k
}
Unexecuted instantiation: readline_tokenizer.c:Py_XDECREF
Unexecuted instantiation: string_tokenizer.c:Py_XDECREF
Unexecuted instantiation: utf8_tokenizer.c:Py_XDECREF
Unexecuted instantiation: getcompiler.c:Py_XDECREF
Unexecuted instantiation: mystrtoul.c:Py_XDECREF
Unexecuted instantiation: token.c:Py_XDECREF
Unexecuted instantiation: action_helpers.c:Py_XDECREF
string_parser.c:Py_XDECREF
Line
Count
Source
507
31.6k
{
508
31.6k
    if (op != _Py_NULL) {
509
31.6k
        Py_DECREF(op);
510
31.6k
    }
511
31.6k
}
512
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
513
3.92G
#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
514
#endif
515
516
// Create a new strong reference to an object:
517
// increment the reference count of the object and return the object.
518
PyAPI_FUNC(PyObject*) Py_NewRef(PyObject *obj);
519
520
// Similar to Py_NewRef(), but the object can be NULL.
521
PyAPI_FUNC(PyObject*) Py_XNewRef(PyObject *obj);
522
523
static inline PyObject* _Py_NewRef(PyObject *obj)
524
4.48G
{
525
4.48G
    Py_INCREF(obj);
526
4.48G
    return obj;
527
4.48G
}
bytesobject.c:_Py_NewRef
Line
Count
Source
524
357k
{
525
357k
    Py_INCREF(obj);
526
357k
    return obj;
527
357k
}
call.c:_Py_NewRef
Line
Count
Source
524
20.8M
{
525
20.8M
    Py_INCREF(obj);
526
20.8M
    return obj;
527
20.8M
}
exceptions.c:_Py_NewRef
Line
Count
Source
524
73.9M
{
525
73.9M
    Py_INCREF(obj);
526
73.9M
    return obj;
527
73.9M
}
genericaliasobject.c:_Py_NewRef
Line
Count
Source
524
782
{
525
782
    Py_INCREF(obj);
526
782
    return obj;
527
782
}
Unexecuted instantiation: floatobject.c:_Py_NewRef
listobject.c:_Py_NewRef
Line
Count
Source
524
1.23G
{
525
1.23G
    Py_INCREF(obj);
526
1.23G
    return obj;
527
1.23G
}
longobject.c:_Py_NewRef
Line
Count
Source
524
3.17M
{
525
3.17M
    Py_INCREF(obj);
526
3.17M
    return obj;
527
3.17M
}
dictobject.c:_Py_NewRef
Line
Count
Source
524
523M
{
525
523M
    Py_INCREF(obj);
526
523M
    return obj;
527
523M
}
memoryobject.c:_Py_NewRef
Line
Count
Source
524
514k
{
525
514k
    Py_INCREF(obj);
526
514k
    return obj;
527
514k
}
moduleobject.c:_Py_NewRef
Line
Count
Source
524
1.40k
{
525
1.40k
    Py_INCREF(obj);
526
1.40k
    return obj;
527
1.40k
}
object.c:_Py_NewRef
Line
Count
Source
524
143M
{
525
143M
    Py_INCREF(obj);
526
143M
    return obj;
527
143M
}
Unexecuted instantiation: obmalloc.c:_Py_NewRef
Unexecuted instantiation: picklebufobject.c:_Py_NewRef
rangeobject.c:_Py_NewRef
Line
Count
Source
524
48
{
525
48
    Py_INCREF(obj);
526
48
    return obj;
527
48
}
setobject.c:_Py_NewRef
Line
Count
Source
524
1.16M
{
525
1.16M
    Py_INCREF(obj);
526
1.16M
    return obj;
527
1.16M
}
sliceobject.c:_Py_NewRef
Line
Count
Source
524
38.0M
{
525
38.0M
    Py_INCREF(obj);
526
38.0M
    return obj;
527
38.0M
}
Unexecuted instantiation: structseq.c:_Py_NewRef
Unexecuted instantiation: templateobject.c:_Py_NewRef
tupleobject.c:_Py_NewRef
Line
Count
Source
524
523M
{
525
523M
    Py_INCREF(obj);
526
523M
    return obj;
527
523M
}
typeobject.c:_Py_NewRef
Line
Count
Source
524
65.3M
{
525
65.3M
    Py_INCREF(obj);
526
65.3M
    return obj;
527
65.3M
}
Unexecuted instantiation: typevarobject.c:_Py_NewRef
unicodeobject.c:_Py_NewRef
Line
Count
Source
524
192M
{
525
192M
    Py_INCREF(obj);
526
192M
    return obj;
527
192M
}
Unexecuted instantiation: unicodectype.c:_Py_NewRef
Unexecuted instantiation: unionobject.c:_Py_NewRef
Unexecuted instantiation: weakrefobject.c:_Py_NewRef
_warnings.c:_Py_NewRef
Line
Count
Source
524
35.2k
{
525
35.2k
    Py_INCREF(obj);
526
35.2k
    return obj;
527
35.2k
}
bltinmodule.c:_Py_NewRef
Line
Count
Source
524
10.7M
{
525
10.7M
    Py_INCREF(obj);
526
10.7M
    return obj;
527
10.7M
}
ceval.c:_Py_NewRef
Line
Count
Source
524
782M
{
525
782M
    Py_INCREF(obj);
526
782M
    return obj;
527
782M
}
codecs.c:_Py_NewRef
Line
Count
Source
524
2.70M
{
525
2.70M
    Py_INCREF(obj);
526
2.70M
    return obj;
527
2.70M
}
codegen.c:_Py_NewRef
Line
Count
Source
524
2.00k
{
525
2.00k
    Py_INCREF(obj);
526
2.00k
    return obj;
527
2.00k
}
compile.c:_Py_NewRef
Line
Count
Source
524
90.8k
{
525
90.8k
    Py_INCREF(obj);
526
90.8k
    return obj;
527
90.8k
}
context.c:_Py_NewRef
Line
Count
Source
524
24
{
525
24
    Py_INCREF(obj);
526
24
    return obj;
527
24
}
errors.c:_Py_NewRef
Line
Count
Source
524
26.5M
{
525
26.5M
    Py_INCREF(obj);
526
26.5M
    return obj;
527
26.5M
}
flowgraph.c:_Py_NewRef
Line
Count
Source
524
84.3k
{
525
84.3k
    Py_INCREF(obj);
526
84.3k
    return obj;
527
84.3k
}
frame.c:_Py_NewRef
Line
Count
Source
524
10.9M
{
525
10.9M
    Py_INCREF(obj);
526
10.9M
    return obj;
527
10.9M
}
Unexecuted instantiation: future.c:_Py_NewRef
Unexecuted instantiation: gc.c:_Py_NewRef
Unexecuted instantiation: gc_gil.c:_Py_NewRef
getargs.c:_Py_NewRef
Line
Count
Source
524
672k
{
525
672k
    Py_INCREF(obj);
526
672k
    return obj;
527
672k
}
Unexecuted instantiation: ceval_gil.c:_Py_NewRef
Unexecuted instantiation: hamt.c:_Py_NewRef
Unexecuted instantiation: hashtable.c:_Py_NewRef
import.c:_Py_NewRef
Line
Count
Source
524
31.7k
{
525
31.7k
    Py_INCREF(obj);
526
31.7k
    return obj;
527
31.7k
}
importdl.c:_Py_NewRef
Line
Count
Source
524
454
{
525
454
    Py_INCREF(obj);
526
454
    return obj;
527
454
}
initconfig.c:_Py_NewRef
Line
Count
Source
524
272
{
525
272
    Py_INCREF(obj);
526
272
    return obj;
527
272
}
Unexecuted instantiation: instrumentation.c:_Py_NewRef
Unexecuted instantiation: instruction_sequence.c:_Py_NewRef
intrinsics.c:_Py_NewRef
Line
Count
Source
524
27.9k
{
525
27.9k
    Py_INCREF(obj);
526
27.9k
    return obj;
527
27.9k
}
Unexecuted instantiation: legacy_tracing.c:_Py_NewRef
Unexecuted instantiation: lock.c:_Py_NewRef
marshal.c:_Py_NewRef
Line
Count
Source
524
306k
{
525
306k
    Py_INCREF(obj);
526
306k
    return obj;
527
306k
}
Unexecuted instantiation: modsupport.c:_Py_NewRef
Unexecuted instantiation: mysnprintf.c:_Py_NewRef
Unexecuted instantiation: parking_lot.c:_Py_NewRef
Unexecuted instantiation: preconfig.c:_Py_NewRef
Unexecuted instantiation: pyarena.c:_Py_NewRef
Unexecuted instantiation: pyctype.c:_Py_NewRef
Unexecuted instantiation: pyhash.c:_Py_NewRef
pylifecycle.c:_Py_NewRef
Line
Count
Source
524
16
{
525
16
    Py_INCREF(obj);
526
16
    return obj;
527
16
}
Unexecuted instantiation: pymath.c:_Py_NewRef
Unexecuted instantiation: pystate.c:_Py_NewRef
Unexecuted instantiation: pythonrun.c:_Py_NewRef
Unexecuted instantiation: pytime.c:_Py_NewRef
Unexecuted instantiation: qsbr.c:_Py_NewRef
Unexecuted instantiation: bootstrap_hash.c:_Py_NewRef
Unexecuted instantiation: specialize.c:_Py_NewRef
symtable.c:_Py_NewRef
Line
Count
Source
524
214k
{
525
214k
    Py_INCREF(obj);
526
214k
    return obj;
527
214k
}
sysmodule.c:_Py_NewRef
Line
Count
Source
524
731
{
525
731
    Py_INCREF(obj);
526
731
    return obj;
527
731
}
Unexecuted instantiation: thread.c:_Py_NewRef
Unexecuted instantiation: traceback.c:_Py_NewRef
Unexecuted instantiation: tracemalloc.c:_Py_NewRef
Unexecuted instantiation: getopt.c:_Py_NewRef
Unexecuted instantiation: pystrcmp.c:_Py_NewRef
Unexecuted instantiation: pystrtod.c:_Py_NewRef
Unexecuted instantiation: pystrhex.c:_Py_NewRef
Unexecuted instantiation: dtoa.c:_Py_NewRef
Unexecuted instantiation: formatter_unicode.c:_Py_NewRef
Unexecuted instantiation: fileutils.c:_Py_NewRef
Unexecuted instantiation: suggestions.c:_Py_NewRef
Unexecuted instantiation: perf_trampoline.c:_Py_NewRef
Unexecuted instantiation: perf_jit_trampoline.c:_Py_NewRef
Unexecuted instantiation: remote_debugging.c:_Py_NewRef
Unexecuted instantiation: dynload_shlib.c:_Py_NewRef
Unexecuted instantiation: config.c:_Py_NewRef
Unexecuted instantiation: gcmodule.c:_Py_NewRef
Unexecuted instantiation: atexitmodule.c:_Py_NewRef
Unexecuted instantiation: faulthandler.c:_Py_NewRef
posixmodule.c:_Py_NewRef
Line
Count
Source
524
39.2k
{
525
39.2k
    Py_INCREF(obj);
526
39.2k
    return obj;
527
39.2k
}
signalmodule.c:_Py_NewRef
Line
Count
Source
524
1.02k
{
525
1.02k
    Py_INCREF(obj);
526
1.02k
    return obj;
527
1.02k
}
Unexecuted instantiation: _tracemalloc.c:_Py_NewRef
Unexecuted instantiation: _suggestions.c:_Py_NewRef
Unexecuted instantiation: _codecsmodule.c:_Py_NewRef
_collectionsmodule.c:_Py_NewRef
Line
Count
Source
524
16.3M
{
525
16.3M
    Py_INCREF(obj);
526
16.3M
    return obj;
527
16.3M
}
Unexecuted instantiation: errnomodule.c:_Py_NewRef
_iomodule.c:_Py_NewRef
Line
Count
Source
524
48
{
525
48
    Py_INCREF(obj);
526
48
    return obj;
527
48
}
iobase.c:_Py_NewRef
Line
Count
Source
524
35.9k
{
525
35.9k
    Py_INCREF(obj);
526
35.9k
    return obj;
527
35.9k
}
Unexecuted instantiation: fileio.c:_Py_NewRef
bytesio.c:_Py_NewRef
Line
Count
Source
524
8.26k
{
525
8.26k
    Py_INCREF(obj);
526
8.26k
    return obj;
527
8.26k
}
bufferedio.c:_Py_NewRef
Line
Count
Source
524
968
{
525
968
    Py_INCREF(obj);
526
968
    return obj;
527
968
}
textio.c:_Py_NewRef
Line
Count
Source
524
73.8k
{
525
73.8k
    Py_INCREF(obj);
526
73.8k
    return obj;
527
73.8k
}
stringio.c:_Py_NewRef
Line
Count
Source
524
15.2k
{
525
15.2k
    Py_INCREF(obj);
526
15.2k
    return obj;
527
15.2k
}
Unexecuted instantiation: itertoolsmodule.c:_Py_NewRef
sre.c:_Py_NewRef
Line
Count
Source
524
224M
{
525
224M
    Py_INCREF(obj);
526
224M
    return obj;
527
224M
}
Unexecuted instantiation: _sysconfig.c:_Py_NewRef
Unexecuted instantiation: _threadmodule.c:_Py_NewRef
Unexecuted instantiation: timemodule.c:_Py_NewRef
Unexecuted instantiation: _typesmodule.c:_Py_NewRef
Unexecuted instantiation: _typingmodule.c:_Py_NewRef
Unexecuted instantiation: _weakref.c:_Py_NewRef
_abc.c:_Py_NewRef
Line
Count
Source
524
590
{
525
590
    Py_INCREF(obj);
526
590
    return obj;
527
590
}
_functoolsmodule.c:_Py_NewRef
Line
Count
Source
524
291
{
525
291
    Py_INCREF(obj);
526
291
    return obj;
527
291
}
Unexecuted instantiation: _localemodule.c:_Py_NewRef
Unexecuted instantiation: _opcode.c:_Py_NewRef
_operator.c:_Py_NewRef
Line
Count
Source
524
1.36M
{
525
1.36M
    Py_INCREF(obj);
526
1.36M
    return obj;
527
1.36M
}
Unexecuted instantiation: _stat.c:_Py_NewRef
Unexecuted instantiation: symtablemodule.c:_Py_NewRef
Unexecuted instantiation: pwdmodule.c:_Py_NewRef
getpath.c:_Py_NewRef
Line
Count
Source
524
128
{
525
128
    Py_INCREF(obj);
526
128
    return obj;
527
128
}
Unexecuted instantiation: frozen.c:_Py_NewRef
Unexecuted instantiation: getbuildinfo.c:_Py_NewRef
Unexecuted instantiation: peg_api.c:_Py_NewRef
Unexecuted instantiation: file_tokenizer.c:_Py_NewRef
Unexecuted instantiation: helpers.c:_Py_NewRef
Unexecuted instantiation: myreadline.c:_Py_NewRef
abstract.c:_Py_NewRef
Line
Count
Source
524
458M
{
525
458M
    Py_INCREF(obj);
526
458M
    return obj;
527
458M
}
Unexecuted instantiation: boolobject.c:_Py_NewRef
Unexecuted instantiation: bytes_methods.c:_Py_NewRef
bytearrayobject.c:_Py_NewRef
Line
Count
Source
524
36
{
525
36
    Py_INCREF(obj);
526
36
    return obj;
527
36
}
Unexecuted instantiation: capsule.c:_Py_NewRef
Unexecuted instantiation: cellobject.c:_Py_NewRef
classobject.c:_Py_NewRef
Line
Count
Source
524
38.9M
{
525
38.9M
    Py_INCREF(obj);
526
38.9M
    return obj;
527
38.9M
}
codeobject.c:_Py_NewRef
Line
Count
Source
524
443k
{
525
443k
    Py_INCREF(obj);
526
443k
    return obj;
527
443k
}
Unexecuted instantiation: complexobject.c:_Py_NewRef
descrobject.c:_Py_NewRef
Line
Count
Source
524
21.8M
{
525
21.8M
    Py_INCREF(obj);
526
21.8M
    return obj;
527
21.8M
}
Unexecuted instantiation: enumobject.c:_Py_NewRef
genobject.c:_Py_NewRef
Line
Count
Source
524
37.5M
{
525
37.5M
    Py_INCREF(obj);
526
37.5M
    return obj;
527
37.5M
}
Unexecuted instantiation: fileobject.c:_Py_NewRef
frameobject.c:_Py_NewRef
Line
Count
Source
524
4.99k
{
525
4.99k
    Py_INCREF(obj);
526
4.99k
    return obj;
527
4.99k
}
funcobject.c:_Py_NewRef
Line
Count
Source
524
23.8M
{
525
23.8M
    Py_INCREF(obj);
526
23.8M
    return obj;
527
23.8M
}
Unexecuted instantiation: interpolationobject.c:_Py_NewRef
iterobject.c:_Py_NewRef
Line
Count
Source
524
458k
{
525
458k
    Py_INCREF(obj);
526
458k
    return obj;
527
458k
}
Unexecuted instantiation: odictobject.c:_Py_NewRef
methodobject.c:_Py_NewRef
Line
Count
Source
524
5.61M
{
525
5.61M
    Py_INCREF(obj);
526
5.61M
    return obj;
527
5.61M
}
Unexecuted instantiation: namespaceobject.c:_Py_NewRef
Unexecuted instantiation: _contextvars.c:_Py_NewRef
Python-ast.c:_Py_NewRef
Line
Count
Source
524
558k
{
525
558k
    Py_INCREF(obj);
526
558k
    return obj;
527
558k
}
Unexecuted instantiation: Python-tokenize.c:_Py_NewRef
Unexecuted instantiation: asdl.c:_Py_NewRef
assemble.c:_Py_NewRef
Line
Count
Source
524
36.9k
{
525
36.9k
    Py_INCREF(obj);
526
36.9k
    return obj;
527
36.9k
}
Unexecuted instantiation: ast.c:_Py_NewRef
Unexecuted instantiation: ast_preprocess.c:_Py_NewRef
Unexecuted instantiation: ast_unparse.c:_Py_NewRef
Unexecuted instantiation: critical_section.c:_Py_NewRef
Unexecuted instantiation: crossinterp.c:_Py_NewRef
Unexecuted instantiation: getcopyright.c:_Py_NewRef
Unexecuted instantiation: getplatform.c:_Py_NewRef
Unexecuted instantiation: getversion.c:_Py_NewRef
Unexecuted instantiation: optimizer.c:_Py_NewRef
Unexecuted instantiation: pathconfig.c:_Py_NewRef
Unexecuted instantiation: structmember.c:_Py_NewRef
pegen.c:_Py_NewRef
Line
Count
Source
524
21.1k
{
525
21.1k
    Py_INCREF(obj);
526
21.1k
    return obj;
527
21.1k
}
Unexecuted instantiation: pegen_errors.c:_Py_NewRef
Unexecuted instantiation: parser.c:_Py_NewRef
Unexecuted instantiation: buffer.c:_Py_NewRef
Unexecuted instantiation: lexer.c:_Py_NewRef
Unexecuted instantiation: state.c:_Py_NewRef
Unexecuted instantiation: readline_tokenizer.c:_Py_NewRef
Unexecuted instantiation: string_tokenizer.c:_Py_NewRef
Unexecuted instantiation: utf8_tokenizer.c:_Py_NewRef
Unexecuted instantiation: getcompiler.c:_Py_NewRef
Unexecuted instantiation: mystrtoul.c:_Py_NewRef
Unexecuted instantiation: token.c:_Py_NewRef
Unexecuted instantiation: action_helpers.c:_Py_NewRef
Unexecuted instantiation: string_parser.c:_Py_NewRef
528
529
static inline PyObject* _Py_XNewRef(PyObject *obj)
530
1.03G
{
531
1.03G
    Py_XINCREF(obj);
532
1.03G
    return obj;
533
1.03G
}
Unexecuted instantiation: bytesobject.c:_Py_XNewRef
Unexecuted instantiation: call.c:_Py_XNewRef
exceptions.c:_Py_XNewRef
Line
Count
Source
530
55.0M
{
531
55.0M
    Py_XINCREF(obj);
532
55.0M
    return obj;
533
55.0M
}
Unexecuted instantiation: genericaliasobject.c:_Py_XNewRef
Unexecuted instantiation: floatobject.c:_Py_XNewRef
listobject.c:_Py_XNewRef
Line
Count
Source
530
840k
{
531
840k
    Py_XINCREF(obj);
532
840k
    return obj;
533
840k
}
Unexecuted instantiation: longobject.c:_Py_XNewRef
dictobject.c:_Py_XNewRef
Line
Count
Source
530
356M
{
531
356M
    Py_XINCREF(obj);
532
356M
    return obj;
533
356M
}
Unexecuted instantiation: memoryobject.c:_Py_XNewRef
Unexecuted instantiation: moduleobject.c:_Py_XNewRef
Unexecuted instantiation: object.c:_Py_XNewRef
Unexecuted instantiation: obmalloc.c:_Py_XNewRef
Unexecuted instantiation: picklebufobject.c:_Py_XNewRef
Unexecuted instantiation: rangeobject.c:_Py_XNewRef
Unexecuted instantiation: setobject.c:_Py_XNewRef
Unexecuted instantiation: sliceobject.c:_Py_XNewRef
Unexecuted instantiation: structseq.c:_Py_XNewRef
Unexecuted instantiation: templateobject.c:_Py_XNewRef
Unexecuted instantiation: tupleobject.c:_Py_XNewRef
typeobject.c:_Py_XNewRef
Line
Count
Source
530
251k
{
531
251k
    Py_XINCREF(obj);
532
251k
    return obj;
533
251k
}
Unexecuted instantiation: typevarobject.c:_Py_XNewRef
Unexecuted instantiation: unicodeobject.c:_Py_XNewRef
Unexecuted instantiation: unicodectype.c:_Py_XNewRef
Unexecuted instantiation: unionobject.c:_Py_XNewRef
weakrefobject.c:_Py_XNewRef
Line
Count
Source
530
255k
{
531
255k
    Py_XINCREF(obj);
532
255k
    return obj;
533
255k
}
Unexecuted instantiation: _warnings.c:_Py_XNewRef
bltinmodule.c:_Py_XNewRef
Line
Count
Source
530
301
{
531
301
    Py_XINCREF(obj);
532
301
    return obj;
533
301
}
ceval.c:_Py_XNewRef
Line
Count
Source
530
68.7M
{
531
68.7M
    Py_XINCREF(obj);
532
68.7M
    return obj;
533
68.7M
}
Unexecuted instantiation: codecs.c:_Py_XNewRef
Unexecuted instantiation: codegen.c:_Py_XNewRef
compile.c:_Py_XNewRef
Line
Count
Source
530
8.34k
{
531
8.34k
    Py_XINCREF(obj);
532
8.34k
    return obj;
533
8.34k
}
context.c:_Py_XNewRef
Line
Count
Source
530
24
{
531
24
    Py_XINCREF(obj);
532
24
    return obj;
533
24
}
Unexecuted instantiation: errors.c:_Py_XNewRef
Unexecuted instantiation: flowgraph.c:_Py_XNewRef
Unexecuted instantiation: frame.c:_Py_XNewRef
Unexecuted instantiation: future.c:_Py_XNewRef
Unexecuted instantiation: gc.c:_Py_XNewRef
Unexecuted instantiation: gc_gil.c:_Py_XNewRef
Unexecuted instantiation: getargs.c:_Py_XNewRef
Unexecuted instantiation: ceval_gil.c:_Py_XNewRef
Unexecuted instantiation: hamt.c:_Py_XNewRef
Unexecuted instantiation: hashtable.c:_Py_XNewRef
import.c:_Py_XNewRef
Line
Count
Source
530
2.47k
{
531
2.47k
    Py_XINCREF(obj);
532
2.47k
    return obj;
533
2.47k
}
Unexecuted instantiation: importdl.c:_Py_XNewRef
Unexecuted instantiation: initconfig.c:_Py_XNewRef
Unexecuted instantiation: instrumentation.c:_Py_XNewRef
Unexecuted instantiation: instruction_sequence.c:_Py_XNewRef
Unexecuted instantiation: intrinsics.c:_Py_XNewRef
Unexecuted instantiation: legacy_tracing.c:_Py_XNewRef
Unexecuted instantiation: lock.c:_Py_XNewRef
Unexecuted instantiation: marshal.c:_Py_XNewRef
Unexecuted instantiation: modsupport.c:_Py_XNewRef
Unexecuted instantiation: mysnprintf.c:_Py_XNewRef
Unexecuted instantiation: parking_lot.c:_Py_XNewRef
Unexecuted instantiation: preconfig.c:_Py_XNewRef
Unexecuted instantiation: pyarena.c:_Py_XNewRef
Unexecuted instantiation: pyctype.c:_Py_XNewRef
Unexecuted instantiation: pyhash.c:_Py_XNewRef
Unexecuted instantiation: pylifecycle.c:_Py_XNewRef
Unexecuted instantiation: pymath.c:_Py_XNewRef
pystate.c:_Py_XNewRef
Line
Count
Source
530
2.36k
{
531
2.36k
    Py_XINCREF(obj);
532
2.36k
    return obj;
533
2.36k
}
Unexecuted instantiation: pythonrun.c:_Py_XNewRef
Unexecuted instantiation: pytime.c:_Py_XNewRef
Unexecuted instantiation: qsbr.c:_Py_XNewRef
Unexecuted instantiation: bootstrap_hash.c:_Py_XNewRef
Unexecuted instantiation: specialize.c:_Py_XNewRef
Unexecuted instantiation: symtable.c:_Py_XNewRef
sysmodule.c:_Py_XNewRef
Line
Count
Source
530
16
{
531
16
    Py_XINCREF(obj);
532
16
    return obj;
533
16
}
Unexecuted instantiation: thread.c:_Py_XNewRef
traceback.c:_Py_XNewRef
Line
Count
Source
530
55.7M
{
531
55.7M
    Py_XINCREF(obj);
532
55.7M
    return obj;
533
55.7M
}
Unexecuted instantiation: tracemalloc.c:_Py_XNewRef
Unexecuted instantiation: getopt.c:_Py_XNewRef
Unexecuted instantiation: pystrcmp.c:_Py_XNewRef
Unexecuted instantiation: pystrtod.c:_Py_XNewRef
Unexecuted instantiation: pystrhex.c:_Py_XNewRef
Unexecuted instantiation: dtoa.c:_Py_XNewRef
Unexecuted instantiation: formatter_unicode.c:_Py_XNewRef
Unexecuted instantiation: fileutils.c:_Py_XNewRef
Unexecuted instantiation: suggestions.c:_Py_XNewRef
Unexecuted instantiation: perf_trampoline.c:_Py_XNewRef
Unexecuted instantiation: perf_jit_trampoline.c:_Py_XNewRef
Unexecuted instantiation: remote_debugging.c:_Py_XNewRef
Unexecuted instantiation: dynload_shlib.c:_Py_XNewRef
Unexecuted instantiation: config.c:_Py_XNewRef
Unexecuted instantiation: gcmodule.c:_Py_XNewRef
Unexecuted instantiation: atexitmodule.c:_Py_XNewRef
Unexecuted instantiation: faulthandler.c:_Py_XNewRef
Unexecuted instantiation: posixmodule.c:_Py_XNewRef
Unexecuted instantiation: signalmodule.c:_Py_XNewRef
Unexecuted instantiation: _tracemalloc.c:_Py_XNewRef
Unexecuted instantiation: _suggestions.c:_Py_XNewRef
Unexecuted instantiation: _codecsmodule.c:_Py_XNewRef
Unexecuted instantiation: _collectionsmodule.c:_Py_XNewRef
Unexecuted instantiation: errnomodule.c:_Py_XNewRef
Unexecuted instantiation: _iomodule.c:_Py_XNewRef
Unexecuted instantiation: iobase.c:_Py_XNewRef
Unexecuted instantiation: fileio.c:_Py_XNewRef
Unexecuted instantiation: bytesio.c:_Py_XNewRef
Unexecuted instantiation: bufferedio.c:_Py_XNewRef
Unexecuted instantiation: textio.c:_Py_XNewRef
Unexecuted instantiation: stringio.c:_Py_XNewRef
Unexecuted instantiation: itertoolsmodule.c:_Py_XNewRef
Unexecuted instantiation: sre.c:_Py_XNewRef
Unexecuted instantiation: _sysconfig.c:_Py_XNewRef
Unexecuted instantiation: _threadmodule.c:_Py_XNewRef
Unexecuted instantiation: timemodule.c:_Py_XNewRef
Unexecuted instantiation: _typesmodule.c:_Py_XNewRef
Unexecuted instantiation: _typingmodule.c:_Py_XNewRef
Unexecuted instantiation: _weakref.c:_Py_XNewRef
_abc.c:_Py_XNewRef
Line
Count
Source
530
590
{
531
590
    Py_XINCREF(obj);
532
590
    return obj;
533
590
}
Unexecuted instantiation: _functoolsmodule.c:_Py_XNewRef
Unexecuted instantiation: _localemodule.c:_Py_XNewRef
Unexecuted instantiation: _opcode.c:_Py_XNewRef
Unexecuted instantiation: _operator.c:_Py_XNewRef
Unexecuted instantiation: _stat.c:_Py_XNewRef
Unexecuted instantiation: symtablemodule.c:_Py_XNewRef
Unexecuted instantiation: pwdmodule.c:_Py_XNewRef
getpath.c:_Py_XNewRef
Line
Count
Source
530
48
{
531
48
    Py_XINCREF(obj);
532
48
    return obj;
533
48
}
Unexecuted instantiation: frozen.c:_Py_XNewRef
Unexecuted instantiation: getbuildinfo.c:_Py_XNewRef
Unexecuted instantiation: peg_api.c:_Py_XNewRef
Unexecuted instantiation: file_tokenizer.c:_Py_XNewRef
Unexecuted instantiation: helpers.c:_Py_XNewRef
Unexecuted instantiation: myreadline.c:_Py_XNewRef
abstract.c:_Py_XNewRef
Line
Count
Source
530
11.4M
{
531
11.4M
    Py_XINCREF(obj);
532
11.4M
    return obj;
533
11.4M
}
Unexecuted instantiation: boolobject.c:_Py_XNewRef
Unexecuted instantiation: bytes_methods.c:_Py_XNewRef
Unexecuted instantiation: bytearrayobject.c:_Py_XNewRef
Unexecuted instantiation: capsule.c:_Py_XNewRef
cellobject.c:_Py_XNewRef
Line
Count
Source
530
5.51M
{
531
5.51M
    Py_XINCREF(obj);
532
5.51M
    return obj;
533
5.51M
}
Unexecuted instantiation: classobject.c:_Py_XNewRef
codeobject.c:_Py_XNewRef
Line
Count
Source
530
5.50k
{
531
5.50k
    Py_XINCREF(obj);
532
5.50k
    return obj;
533
5.50k
}
Unexecuted instantiation: complexobject.c:_Py_XNewRef
descrobject.c:_Py_XNewRef
Line
Count
Source
530
46.8k
{
531
46.8k
    Py_XINCREF(obj);
532
46.8k
    return obj;
533
46.8k
}
Unexecuted instantiation: enumobject.c:_Py_XNewRef
Unexecuted instantiation: genobject.c:_Py_XNewRef
Unexecuted instantiation: fileobject.c:_Py_XNewRef
Unexecuted instantiation: frameobject.c:_Py_XNewRef
funcobject.c:_Py_XNewRef
Line
Count
Source
530
3.10k
{
531
3.10k
    Py_XINCREF(obj);
532
3.10k
    return obj;
533
3.10k
}
Unexecuted instantiation: interpolationobject.c:_Py_XNewRef
Unexecuted instantiation: iterobject.c:_Py_XNewRef
Unexecuted instantiation: odictobject.c:_Py_XNewRef
methodobject.c:_Py_XNewRef
Line
Count
Source
530
479M
{
531
479M
    Py_XINCREF(obj);
532
479M
    return obj;
533
479M
}
Unexecuted instantiation: namespaceobject.c:_Py_XNewRef
Unexecuted instantiation: _contextvars.c:_Py_XNewRef
Unexecuted instantiation: Python-ast.c:_Py_XNewRef
Unexecuted instantiation: Python-tokenize.c:_Py_XNewRef
Unexecuted instantiation: asdl.c:_Py_XNewRef
Unexecuted instantiation: assemble.c:_Py_XNewRef
Unexecuted instantiation: ast.c:_Py_XNewRef
Unexecuted instantiation: ast_preprocess.c:_Py_XNewRef
Unexecuted instantiation: ast_unparse.c:_Py_XNewRef
Unexecuted instantiation: critical_section.c:_Py_XNewRef
Unexecuted instantiation: crossinterp.c:_Py_XNewRef
Unexecuted instantiation: getcopyright.c:_Py_XNewRef
Unexecuted instantiation: getplatform.c:_Py_XNewRef
Unexecuted instantiation: getversion.c:_Py_XNewRef
Unexecuted instantiation: optimizer.c:_Py_XNewRef
Unexecuted instantiation: pathconfig.c:_Py_XNewRef
structmember.c:_Py_XNewRef
Line
Count
Source
530
6.32k
{
531
6.32k
    Py_XINCREF(obj);
532
6.32k
    return obj;
533
6.32k
}
Unexecuted instantiation: pegen.c:_Py_XNewRef
Unexecuted instantiation: pegen_errors.c:_Py_XNewRef
Unexecuted instantiation: parser.c:_Py_XNewRef
Unexecuted instantiation: buffer.c:_Py_XNewRef
Unexecuted instantiation: lexer.c:_Py_XNewRef
Unexecuted instantiation: state.c:_Py_XNewRef
Unexecuted instantiation: readline_tokenizer.c:_Py_XNewRef
Unexecuted instantiation: string_tokenizer.c:_Py_XNewRef
Unexecuted instantiation: utf8_tokenizer.c:_Py_XNewRef
Unexecuted instantiation: getcompiler.c:_Py_XNewRef
Unexecuted instantiation: mystrtoul.c:_Py_XNewRef
Unexecuted instantiation: token.c:_Py_XNewRef
Unexecuted instantiation: action_helpers.c:_Py_XNewRef
Unexecuted instantiation: string_parser.c:_Py_XNewRef
534
535
// Py_NewRef() and Py_XNewRef() are exported as functions for the stable ABI.
536
// Names overridden with macros by static inline functions for best
537
// performances.
538
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
539
4.39G
#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
540
1.01G
#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
541
#else
542
#  define Py_NewRef(obj) _Py_NewRef(obj)
543
#  define Py_XNewRef(obj) _Py_XNewRef(obj)
544
#endif
545
546
547
#ifdef __cplusplus
548
}
549
#endif
550
#endif   // !_Py_REFCOUNT_H