Coverage Report

Created: 2025-09-04 06:25

/src/cpython/Include/refcount.h
Line
Count
Source (jump to first uncovered line)
1
#ifndef _Py_REFCOUNT_H
2
#define _Py_REFCOUNT_H
3
#ifdef __cplusplus
4
extern "C" {
5
#endif
6
7
8
/*
9
Immortalization:
10
11
The following indicates the immortalization strategy depending on the amount
12
of available bits in the reference count field. All strategies are backwards
13
compatible but the specific reference count value or immortalization check
14
might change depending on the specializations for the underlying system.
15
16
Proper deallocation of immortal instances requires distinguishing between
17
statically allocated immortal instances vs those promoted by the runtime to be
18
immortal. The latter should be the only instances that require
19
cleanup during runtime finalization.
20
*/
21
22
#if SIZEOF_VOID_P > 4
23
/*
24
In 64+ bit systems, any object whose 32 bit reference count is >= 2**31
25
will be treated as immortal.
26
27
Using the lower 32 bits makes the value backwards compatible by allowing
28
C-Extensions without the updated checks in Py_INCREF and Py_DECREF to safely
29
increase and decrease the objects reference count.
30
31
In order to offer sufficient resilience to C extensions using the stable ABI
32
compiled against 3.11 or earlier, we set the initial value near the
33
middle of the range (2**31, 2**32). That way the refcount can be
34
off by ~1 billion without affecting immortality.
35
36
Reference count increases will use saturated arithmetic, taking advantage of
37
having all the lower 32 bits set, which will avoid the reference count to go
38
beyond the refcount limit. Immortality checks for reference count decreases will
39
be done by checking the bit sign flag in the lower 32 bits.
40
41
To ensure that once an object becomes immortal, it remains immortal, the threshold
42
for omitting increfs is much higher than for omitting decrefs. Consequently, once
43
the refcount for an object exceeds _Py_IMMORTAL_MINIMUM_REFCNT it will gradually
44
increase over time until it reaches _Py_IMMORTAL_INITIAL_REFCNT.
45
*/
46
8.42G
#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
47
0
#define _Py_IMMORTAL_MINIMUM_REFCNT (1ULL << 31)
48
261M
#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
49
261M
#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
967M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
967M
    #if !defined(Py_GIL_DISABLED)
104
967M
        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
967M
    }
bytesobject.c:_Py_REFCNT
Line
Count
Source
102
248k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
248k
    #if !defined(Py_GIL_DISABLED)
104
248k
        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
248k
    }
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
11
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
11
    #if !defined(Py_GIL_DISABLED)
104
11
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
11
    }
dictobject.c:_Py_REFCNT
Line
Count
Source
102
598M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
598M
    #if !defined(Py_GIL_DISABLED)
104
598M
        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
598M
    }
Unexecuted instantiation: memoryobject.c:_Py_REFCNT
Unexecuted instantiation: moduleobject.c:_Py_REFCNT
object.c:_Py_REFCNT
Line
Count
Source
102
56.0M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
56.0M
    #if !defined(Py_GIL_DISABLED)
104
56.0M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
56.0M
    }
Unexecuted instantiation: obmalloc.c:_Py_REFCNT
Unexecuted instantiation: picklebufobject.c:_Py_REFCNT
Unexecuted instantiation: rangeobject.c:_Py_REFCNT
setobject.c:_Py_REFCNT
Line
Count
Source
102
1.32k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
1.32k
    #if !defined(Py_GIL_DISABLED)
104
1.32k
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
1.32k
    }
Unexecuted instantiation: sliceobject.c:_Py_REFCNT
Unexecuted instantiation: structseq.c:_Py_REFCNT
Unexecuted instantiation: templateobject.c:_Py_REFCNT
tupleobject.c:_Py_REFCNT
Line
Count
Source
102
71.7k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
71.7k
    #if !defined(Py_GIL_DISABLED)
104
71.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
71.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
59.3M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
59.3M
    #if !defined(Py_GIL_DISABLED)
104
59.3M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
59.3M
    }
Unexecuted instantiation: unicodectype.c:_Py_REFCNT
Unexecuted instantiation: unionobject.c:_Py_REFCNT
weakrefobject.c:_Py_REFCNT
Line
Count
Source
102
34.0M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
34.0M
    #if !defined(Py_GIL_DISABLED)
104
34.0M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
34.0M
    }
Unexecuted instantiation: _warnings.c:_Py_REFCNT
bltinmodule.c:_Py_REFCNT
Line
Count
Source
102
24.3M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
24.3M
    #if !defined(Py_GIL_DISABLED)
104
24.3M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
24.3M
    }
Unexecuted instantiation: ceval.c:_Py_REFCNT
Unexecuted instantiation: codecs.c:_Py_REFCNT
Unexecuted instantiation: codegen.c:_Py_REFCNT
Unexecuted instantiation: compile.c:_Py_REFCNT
Unexecuted instantiation: context.c:_Py_REFCNT
Unexecuted instantiation: errors.c:_Py_REFCNT
Unexecuted instantiation: flowgraph.c:_Py_REFCNT
frame.c:_Py_REFCNT
Line
Count
Source
102
22.9M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
22.9M
    #if !defined(Py_GIL_DISABLED)
104
22.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
22.9M
    }
Unexecuted instantiation: future.c:_Py_REFCNT
gc.c:_Py_REFCNT
Line
Count
Source
102
39.4M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
39.4M
    #if !defined(Py_GIL_DISABLED)
104
39.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
39.4M
    }
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
154k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
154k
    #if !defined(Py_GIL_DISABLED)
104
154k
        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
154k
    }
Unexecuted instantiation: modsupport.c:_Py_REFCNT
Unexecuted instantiation: mysnprintf.c:_Py_REFCNT
Unexecuted instantiation: parking_lot.c:_Py_REFCNT
Unexecuted instantiation: preconfig.c:_Py_REFCNT
Unexecuted instantiation: pyarena.c:_Py_REFCNT
Unexecuted instantiation: pyctype.c:_Py_REFCNT
Unexecuted instantiation: pyhash.c:_Py_REFCNT
Unexecuted instantiation: pylifecycle.c:_Py_REFCNT
Unexecuted instantiation: pymath.c:_Py_REFCNT
Unexecuted instantiation: pystate.c:_Py_REFCNT
Unexecuted instantiation: pythonrun.c:_Py_REFCNT
Unexecuted instantiation: pytime.c:_Py_REFCNT
Unexecuted instantiation: qsbr.c:_Py_REFCNT
Unexecuted instantiation: bootstrap_hash.c:_Py_REFCNT
Unexecuted instantiation: specialize.c:_Py_REFCNT
Unexecuted instantiation: symtable.c:_Py_REFCNT
Unexecuted instantiation: sysmodule.c:_Py_REFCNT
Unexecuted instantiation: thread.c:_Py_REFCNT
Unexecuted instantiation: traceback.c:_Py_REFCNT
Unexecuted instantiation: tracemalloc.c:_Py_REFCNT
Unexecuted instantiation: getopt.c:_Py_REFCNT
Unexecuted instantiation: pystrcmp.c:_Py_REFCNT
Unexecuted instantiation: pystrtod.c:_Py_REFCNT
Unexecuted instantiation: pystrhex.c:_Py_REFCNT
Unexecuted instantiation: dtoa.c:_Py_REFCNT
Unexecuted instantiation: formatter_unicode.c:_Py_REFCNT
Unexecuted instantiation: fileutils.c:_Py_REFCNT
Unexecuted instantiation: suggestions.c:_Py_REFCNT
Unexecuted instantiation: perf_trampoline.c:_Py_REFCNT
Unexecuted instantiation: perf_jit_trampoline.c:_Py_REFCNT
Unexecuted instantiation: remote_debugging.c:_Py_REFCNT
Unexecuted instantiation: dynload_shlib.c:_Py_REFCNT
Unexecuted instantiation: config.c:_Py_REFCNT
Unexecuted instantiation: gcmodule.c:_Py_REFCNT
Unexecuted instantiation: _asynciomodule.c:_Py_REFCNT
Unexecuted instantiation: atexitmodule.c:_Py_REFCNT
Unexecuted instantiation: faulthandler.c:_Py_REFCNT
Unexecuted instantiation: posixmodule.c:_Py_REFCNT
Unexecuted instantiation: signalmodule.c:_Py_REFCNT
Unexecuted instantiation: _tracemalloc.c:_Py_REFCNT
Unexecuted instantiation: _suggestions.c:_Py_REFCNT
Unexecuted instantiation: _datetimemodule.c:_Py_REFCNT
Unexecuted instantiation: _codecsmodule.c:_Py_REFCNT
Unexecuted instantiation: _collectionsmodule.c:_Py_REFCNT
Unexecuted instantiation: errnomodule.c:_Py_REFCNT
Unexecuted instantiation: _iomodule.c:_Py_REFCNT
iobase.c:_Py_REFCNT
Line
Count
Source
102
11.8k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
11.8k
    #if !defined(Py_GIL_DISABLED)
104
11.8k
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
11.8k
    }
Unexecuted instantiation: fileio.c:_Py_REFCNT
Unexecuted instantiation: bytesio.c:_Py_REFCNT
Unexecuted instantiation: bufferedio.c:_Py_REFCNT
Unexecuted instantiation: textio.c:_Py_REFCNT
Unexecuted instantiation: stringio.c:_Py_REFCNT
itertoolsmodule.c:_Py_REFCNT
Line
Count
Source
102
270
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
270
    #if !defined(Py_GIL_DISABLED)
104
270
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
270
    }
Unexecuted instantiation: sre.c:_Py_REFCNT
Unexecuted instantiation: _sysconfig.c:_Py_REFCNT
Unexecuted instantiation: _threadmodule.c:_Py_REFCNT
Unexecuted instantiation: timemodule.c:_Py_REFCNT
Unexecuted instantiation: _typesmodule.c:_Py_REFCNT
Unexecuted instantiation: _typingmodule.c:_Py_REFCNT
Unexecuted instantiation: _weakref.c:_Py_REFCNT
Unexecuted instantiation: _abc.c:_Py_REFCNT
_functoolsmodule.c:_Py_REFCNT
Line
Count
Source
102
39
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
39
    #if !defined(Py_GIL_DISABLED)
104
39
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
39
    }
Unexecuted instantiation: _localemodule.c:_Py_REFCNT
Unexecuted instantiation: _opcode.c:_Py_REFCNT
Unexecuted instantiation: _operator.c:_Py_REFCNT
Unexecuted instantiation: _stat.c:_Py_REFCNT
Unexecuted instantiation: symtablemodule.c:_Py_REFCNT
Unexecuted instantiation: pwdmodule.c:_Py_REFCNT
Unexecuted instantiation: getpath.c:_Py_REFCNT
Unexecuted instantiation: frozen.c:_Py_REFCNT
Unexecuted instantiation: getbuildinfo.c:_Py_REFCNT
Unexecuted instantiation: peg_api.c:_Py_REFCNT
Unexecuted instantiation: file_tokenizer.c:_Py_REFCNT
Unexecuted instantiation: helpers.c:_Py_REFCNT
Unexecuted instantiation: myreadline.c:_Py_REFCNT
Unexecuted instantiation: abstract.c:_Py_REFCNT
Unexecuted instantiation: boolobject.c:_Py_REFCNT
Unexecuted instantiation: bytes_methods.c:_Py_REFCNT
Unexecuted instantiation: bytearrayobject.c:_Py_REFCNT
Unexecuted instantiation: capsule.c:_Py_REFCNT
Unexecuted instantiation: cellobject.c:_Py_REFCNT
Unexecuted instantiation: classobject.c:_Py_REFCNT
codeobject.c:_Py_REFCNT
Line
Count
Source
102
16.1k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
16.1k
    #if !defined(Py_GIL_DISABLED)
104
16.1k
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
16.1k
    }
Unexecuted instantiation: complexobject.c:_Py_REFCNT
Unexecuted instantiation: descrobject.c:_Py_REFCNT
enumobject.c:_Py_REFCNT
Line
Count
Source
102
107M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
107M
    #if !defined(Py_GIL_DISABLED)
104
107M
        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
107M
    }
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.7M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
24.7M
    #if !defined(Py_GIL_DISABLED)
104
24.7M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
24.7M
    }
Unexecuted instantiation: interpolationobject.c:_Py_REFCNT
Unexecuted instantiation: iterobject.c:_Py_REFCNT
Unexecuted instantiation: odictobject.c:_Py_REFCNT
Unexecuted instantiation: methodobject.c:_Py_REFCNT
Unexecuted instantiation: namespaceobject.c:_Py_REFCNT
Unexecuted instantiation: _contextvars.c:_Py_REFCNT
Unexecuted instantiation: Python-ast.c:_Py_REFCNT
Unexecuted instantiation: Python-tokenize.c:_Py_REFCNT
Unexecuted instantiation: asdl.c:_Py_REFCNT
Unexecuted instantiation: assemble.c:_Py_REFCNT
Unexecuted instantiation: ast.c:_Py_REFCNT
Unexecuted instantiation: ast_preprocess.c:_Py_REFCNT
Unexecuted instantiation: ast_unparse.c:_Py_REFCNT
Unexecuted instantiation: critical_section.c:_Py_REFCNT
Unexecuted instantiation: crossinterp.c:_Py_REFCNT
Unexecuted instantiation: getcopyright.c:_Py_REFCNT
Unexecuted instantiation: getplatform.c:_Py_REFCNT
Unexecuted instantiation: getversion.c:_Py_REFCNT
Unexecuted instantiation: optimizer.c:_Py_REFCNT
Unexecuted instantiation: pathconfig.c:_Py_REFCNT
Unexecuted instantiation: structmember.c:_Py_REFCNT
Unexecuted instantiation: pegen.c:_Py_REFCNT
Unexecuted instantiation: pegen_errors.c:_Py_REFCNT
Unexecuted instantiation: parser.c:_Py_REFCNT
Unexecuted instantiation: buffer.c:_Py_REFCNT
Unexecuted instantiation: lexer.c:_Py_REFCNT
Unexecuted instantiation: state.c:_Py_REFCNT
Unexecuted instantiation: readline_tokenizer.c:_Py_REFCNT
Unexecuted instantiation: string_tokenizer.c:_Py_REFCNT
Unexecuted instantiation: utf8_tokenizer.c:_Py_REFCNT
Unexecuted instantiation: getcompiler.c:_Py_REFCNT
Unexecuted instantiation: mystrtoul.c:_Py_REFCNT
Unexecuted instantiation: token.c:_Py_REFCNT
Unexecuted instantiation: action_helpers.c:_Py_REFCNT
Unexecuted instantiation: string_parser.c:_Py_REFCNT
115
    #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
116
638M
    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
117
    #endif
118
#endif
119
120
#ifndef _Py_OPAQUE_PYOBJECT
121
static inline Py_ALWAYS_INLINE int _Py_IsImmortal(PyObject *op)
122
15.1G
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
15.1G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
15.1G
}
bytesobject.c:_Py_IsImmortal
Line
Count
Source
122
5.85M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
5.85M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
5.85M
}
call.c:_Py_IsImmortal
Line
Count
Source
122
121M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
121M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
121M
}
exceptions.c:_Py_IsImmortal
Line
Count
Source
122
101M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
101M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
101M
}
genericaliasobject.c:_Py_IsImmortal
Line
Count
Source
122
88
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
88
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
88
}
floatobject.c:_Py_IsImmortal
Line
Count
Source
122
8
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
8
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
8
}
listobject.c:_Py_IsImmortal
Line
Count
Source
122
1.44G
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
1.44G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
1.44G
}
longobject.c:_Py_IsImmortal
Line
Count
Source
122
19.9M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
19.9M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
19.9M
}
dictobject.c:_Py_IsImmortal
Line
Count
Source
122
1.66G
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
1.66G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
1.66G
}
memoryobject.c:_Py_IsImmortal
Line
Count
Source
122
656k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
656k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
656k
}
moduleobject.c:_Py_IsImmortal
Line
Count
Source
122
46.3k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
46.3k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
46.3k
}
object.c:_Py_IsImmortal
Line
Count
Source
122
469M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
469M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
469M
}
Unexecuted instantiation: obmalloc.c:_Py_IsImmortal
Unexecuted instantiation: picklebufobject.c:_Py_IsImmortal
rangeobject.c:_Py_IsImmortal
Line
Count
Source
122
33.1M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
33.1M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
33.1M
}
setobject.c:_Py_IsImmortal
Line
Count
Source
122
1.22M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
1.22M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
1.22M
}
sliceobject.c:_Py_IsImmortal
Line
Count
Source
122
129M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
129M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
129M
}
structseq.c:_Py_IsImmortal
Line
Count
Source
122
93.6k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
93.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
93.6k
}
templateobject.c:_Py_IsImmortal
Line
Count
Source
122
4
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
4
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
4
}
tupleobject.c:_Py_IsImmortal
Line
Count
Source
122
935M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
935M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
935M
}
typeobject.c:_Py_IsImmortal
Line
Count
Source
122
773M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
773M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
773M
}
Unexecuted instantiation: typevarobject.c:_Py_IsImmortal
unicodeobject.c:_Py_IsImmortal
Line
Count
Source
122
216M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
216M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
216M
}
Unexecuted instantiation: unicodectype.c:_Py_IsImmortal
unionobject.c:_Py_IsImmortal
Line
Count
Source
122
950
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
950
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
950
}
weakrefobject.c:_Py_IsImmortal
Line
Count
Source
122
12.3k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
12.3k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
12.3k
}
_warnings.c:_Py_IsImmortal
Line
Count
Source
122
164k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
164k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
164k
}
bltinmodule.c:_Py_IsImmortal
Line
Count
Source
122
124M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
124M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
124M
}
ceval.c:_Py_IsImmortal
Line
Count
Source
122
5.74G
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
5.74G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
5.74G
}
codecs.c:_Py_IsImmortal
Line
Count
Source
122
6.19M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
6.19M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
6.19M
}
codegen.c:_Py_IsImmortal
Line
Count
Source
122
141k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
141k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
141k
}
compile.c:_Py_IsImmortal
Line
Count
Source
122
579k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
579k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
579k
}
context.c:_Py_IsImmortal
Line
Count
Source
122
32
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
32
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
32
}
errors.c:_Py_IsImmortal
Line
Count
Source
122
71.3M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
71.3M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
71.3M
}
flowgraph.c:_Py_IsImmortal
Line
Count
Source
122
69.9k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
69.9k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
69.9k
}
frame.c:_Py_IsImmortal
Line
Count
Source
122
33.9M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
33.9M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
33.9M
}
Unexecuted instantiation: future.c:_Py_IsImmortal
gc.c:_Py_IsImmortal
Line
Count
Source
122
1.16G
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
1.16G
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
1.16G
}
Unexecuted instantiation: gc_gil.c:_Py_IsImmortal
getargs.c:_Py_IsImmortal
Line
Count
Source
122
1.54M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
1.54M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
1.54M
}
Unexecuted instantiation: ceval_gil.c:_Py_IsImmortal
Unexecuted instantiation: hamt.c:_Py_IsImmortal
Unexecuted instantiation: hashtable.c:_Py_IsImmortal
import.c:_Py_IsImmortal
Line
Count
Source
122
167k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
167k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
167k
}
importdl.c:_Py_IsImmortal
Line
Count
Source
122
1.20k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
1.20k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
1.20k
}
initconfig.c:_Py_IsImmortal
Line
Count
Source
122
2.20k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
2.20k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
2.20k
}
instrumentation.c:_Py_IsImmortal
Line
Count
Source
122
384
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
384
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
384
}
instruction_sequence.c:_Py_IsImmortal
Line
Count
Source
122
1
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
1
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
1
}
intrinsics.c:_Py_IsImmortal
Line
Count
Source
122
28.6k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
28.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
28.6k
}
Unexecuted instantiation: legacy_tracing.c:_Py_IsImmortal
Unexecuted instantiation: lock.c:_Py_IsImmortal
marshal.c:_Py_IsImmortal
Line
Count
Source
122
317k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
317k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
317k
}
modsupport.c:_Py_IsImmortal
Line
Count
Source
122
17.7k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
17.7k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
17.7k
}
Unexecuted instantiation: mysnprintf.c:_Py_IsImmortal
Unexecuted instantiation: parking_lot.c:_Py_IsImmortal
Unexecuted instantiation: preconfig.c:_Py_IsImmortal
pyarena.c:_Py_IsImmortal
Line
Count
Source
122
4.52M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
4.52M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
4.52M
}
Unexecuted instantiation: pyctype.c:_Py_IsImmortal
Unexecuted instantiation: pyhash.c:_Py_IsImmortal
pylifecycle.c:_Py_IsImmortal
Line
Count
Source
122
576
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
576
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
576
}
Unexecuted instantiation: pymath.c:_Py_IsImmortal
Unexecuted instantiation: pystate.c:_Py_IsImmortal
pythonrun.c:_Py_IsImmortal
Line
Count
Source
122
190
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
190
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
190
}
Unexecuted instantiation: pytime.c:_Py_IsImmortal
Unexecuted instantiation: qsbr.c:_Py_IsImmortal
Unexecuted instantiation: bootstrap_hash.c:_Py_IsImmortal
specialize.c:_Py_IsImmortal
Line
Count
Source
122
497k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
497k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
497k
}
symtable.c:_Py_IsImmortal
Line
Count
Source
122
754k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
754k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
754k
}
sysmodule.c:_Py_IsImmortal
Line
Count
Source
122
1.90k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
1.90k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
1.90k
}
Unexecuted instantiation: thread.c:_Py_IsImmortal
traceback.c:_Py_IsImmortal
Line
Count
Source
122
62.3M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
62.3M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
62.3M
}
Unexecuted instantiation: tracemalloc.c:_Py_IsImmortal
Unexecuted instantiation: getopt.c:_Py_IsImmortal
Unexecuted instantiation: pystrcmp.c:_Py_IsImmortal
Unexecuted instantiation: pystrtod.c:_Py_IsImmortal
Unexecuted instantiation: pystrhex.c:_Py_IsImmortal
Unexecuted instantiation: dtoa.c:_Py_IsImmortal
formatter_unicode.c:_Py_IsImmortal
Line
Count
Source
122
256
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
256
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
256
}
fileutils.c:_Py_IsImmortal
Line
Count
Source
122
11.6k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
11.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
11.6k
}
Unexecuted instantiation: suggestions.c:_Py_IsImmortal
Unexecuted instantiation: perf_trampoline.c:_Py_IsImmortal
Unexecuted instantiation: perf_jit_trampoline.c:_Py_IsImmortal
Unexecuted instantiation: remote_debugging.c:_Py_IsImmortal
Unexecuted instantiation: dynload_shlib.c:_Py_IsImmortal
Unexecuted instantiation: config.c:_Py_IsImmortal
Unexecuted instantiation: gcmodule.c:_Py_IsImmortal
Unexecuted instantiation: _asynciomodule.c:_Py_IsImmortal
Unexecuted instantiation: atexitmodule.c:_Py_IsImmortal
Unexecuted instantiation: faulthandler.c:_Py_IsImmortal
posixmodule.c:_Py_IsImmortal
Line
Count
Source
122
50.6k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
50.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
50.6k
}
signalmodule.c:_Py_IsImmortal
Line
Count
Source
122
32
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
32
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
32
}
Unexecuted instantiation: _tracemalloc.c:_Py_IsImmortal
Unexecuted instantiation: _suggestions.c:_Py_IsImmortal
_datetimemodule.c:_Py_IsImmortal
Line
Count
Source
122
262
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
262
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
262
}
Unexecuted instantiation: _codecsmodule.c:_Py_IsImmortal
_collectionsmodule.c:_Py_IsImmortal
Line
Count
Source
122
110k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
110k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
110k
}
Unexecuted instantiation: errnomodule.c:_Py_IsImmortal
_iomodule.c:_Py_IsImmortal
Line
Count
Source
122
6.33k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
6.33k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
6.33k
}
iobase.c:_Py_IsImmortal
Line
Count
Source
122
120k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
120k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
120k
}
fileio.c:_Py_IsImmortal
Line
Count
Source
122
3.46k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
3.46k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
3.46k
}
bytesio.c:_Py_IsImmortal
Line
Count
Source
122
28.8k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
28.8k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
28.8k
}
bufferedio.c:_Py_IsImmortal
Line
Count
Source
122
7.14k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
7.14k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
7.14k
}
textio.c:_Py_IsImmortal
Line
Count
Source
122
48.1k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
48.1k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
48.1k
}
stringio.c:_Py_IsImmortal
Line
Count
Source
122
292k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
292k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
292k
}
itertoolsmodule.c:_Py_IsImmortal
Line
Count
Source
122
928
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
928
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
928
}
sre.c:_Py_IsImmortal
Line
Count
Source
122
541M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
541M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
541M
}
Unexecuted instantiation: _sysconfig.c:_Py_IsImmortal
_threadmodule.c:_Py_IsImmortal
Line
Count
Source
122
5.21k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
5.21k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
5.21k
}
Unexecuted instantiation: timemodule.c:_Py_IsImmortal
Unexecuted instantiation: _typesmodule.c:_Py_IsImmortal
Unexecuted instantiation: _typingmodule.c:_Py_IsImmortal
Unexecuted instantiation: _weakref.c:_Py_IsImmortal
_abc.c:_Py_IsImmortal
Line
Count
Source
122
29.2k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
29.2k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
29.2k
}
_functoolsmodule.c:_Py_IsImmortal
Line
Count
Source
122
251
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
251
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
251
}
Unexecuted instantiation: _localemodule.c:_Py_IsImmortal
Unexecuted instantiation: _opcode.c:_Py_IsImmortal
_operator.c:_Py_IsImmortal
Line
Count
Source
122
511k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
511k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
511k
}
Unexecuted instantiation: _stat.c:_Py_IsImmortal
Unexecuted instantiation: symtablemodule.c:_Py_IsImmortal
Unexecuted instantiation: pwdmodule.c:_Py_IsImmortal
getpath.c:_Py_IsImmortal
Line
Count
Source
122
528
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
528
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
528
}
Unexecuted instantiation: frozen.c:_Py_IsImmortal
Unexecuted instantiation: getbuildinfo.c:_Py_IsImmortal
Unexecuted instantiation: peg_api.c:_Py_IsImmortal
Unexecuted instantiation: file_tokenizer.c:_Py_IsImmortal
helpers.c:_Py_IsImmortal
Line
Count
Source
122
21.7k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
21.7k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
21.7k
}
Unexecuted instantiation: myreadline.c:_Py_IsImmortal
abstract.c:_Py_IsImmortal
Line
Count
Source
122
447M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
447M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
447M
}
Unexecuted instantiation: boolobject.c:_Py_IsImmortal
Unexecuted instantiation: bytes_methods.c:_Py_IsImmortal
bytearrayobject.c:_Py_IsImmortal
Line
Count
Source
122
16
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
16
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
16
}
capsule.c:_Py_IsImmortal
Line
Count
Source
122
10
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
10
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
10
}
cellobject.c:_Py_IsImmortal
Line
Count
Source
122
331k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
331k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
331k
}
classobject.c:_Py_IsImmortal
Line
Count
Source
122
41.0M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
41.0M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
41.0M
}
codeobject.c:_Py_IsImmortal
Line
Count
Source
122
120k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
120k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
120k
}
Unexecuted instantiation: complexobject.c:_Py_IsImmortal
descrobject.c:_Py_IsImmortal
Line
Count
Source
122
110M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
110M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
110M
}
enumobject.c:_Py_IsImmortal
Line
Count
Source
122
263M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
263M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
263M
}
genobject.c:_Py_IsImmortal
Line
Count
Source
122
132M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
132M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
132M
}
fileobject.c:_Py_IsImmortal
Line
Count
Source
122
12.8k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
12.8k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
12.8k
}
frameobject.c:_Py_IsImmortal
Line
Count
Source
122
10.9M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
10.9M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
10.9M
}
funcobject.c:_Py_IsImmortal
Line
Count
Source
122
136M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
136M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
136M
}
interpolationobject.c:_Py_IsImmortal
Line
Count
Source
122
16
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
16
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
16
}
iterobject.c:_Py_IsImmortal
Line
Count
Source
122
1.02M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
1.02M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
1.02M
}
odictobject.c:_Py_IsImmortal
Line
Count
Source
122
672
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
672
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
672
}
methodobject.c:_Py_IsImmortal
Line
Count
Source
122
311M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
311M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
311M
}
namespaceobject.c:_Py_IsImmortal
Line
Count
Source
122
16
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
16
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
16
}
Unexecuted instantiation: _contextvars.c:_Py_IsImmortal
Python-ast.c:_Py_IsImmortal
Line
Count
Source
122
4.02M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
4.02M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
4.02M
}
Unexecuted instantiation: Python-tokenize.c:_Py_IsImmortal
Unexecuted instantiation: asdl.c:_Py_IsImmortal
assemble.c:_Py_IsImmortal
Line
Count
Source
122
46.0k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
46.0k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
46.0k
}
Unexecuted instantiation: ast.c:_Py_IsImmortal
ast_preprocess.c:_Py_IsImmortal
Line
Count
Source
122
2.23k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
2.23k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
2.23k
}
Unexecuted instantiation: ast_unparse.c:_Py_IsImmortal
Unexecuted instantiation: critical_section.c:_Py_IsImmortal
Unexecuted instantiation: crossinterp.c:_Py_IsImmortal
Unexecuted instantiation: getcopyright.c:_Py_IsImmortal
Unexecuted instantiation: getplatform.c:_Py_IsImmortal
Unexecuted instantiation: getversion.c:_Py_IsImmortal
Unexecuted instantiation: optimizer.c:_Py_IsImmortal
Unexecuted instantiation: pathconfig.c:_Py_IsImmortal
structmember.c:_Py_IsImmortal
Line
Count
Source
122
592
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
592
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
592
}
pegen.c:_Py_IsImmortal
Line
Count
Source
122
139k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
139k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
139k
}
pegen_errors.c:_Py_IsImmortal
Line
Count
Source
122
48.9k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
48.9k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
48.9k
}
Unexecuted instantiation: parser.c:_Py_IsImmortal
Unexecuted instantiation: buffer.c:_Py_IsImmortal
lexer.c:_Py_IsImmortal
Line
Count
Source
122
14.6k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
14.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
14.6k
}
state.c:_Py_IsImmortal
Line
Count
Source
122
23.5k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
23.5k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
23.5k
}
Unexecuted instantiation: readline_tokenizer.c:_Py_IsImmortal
Unexecuted instantiation: string_tokenizer.c:_Py_IsImmortal
Unexecuted instantiation: utf8_tokenizer.c:_Py_IsImmortal
Unexecuted instantiation: getcompiler.c:_Py_IsImmortal
Unexecuted instantiation: mystrtoul.c:_Py_IsImmortal
Unexecuted instantiation: token.c:_Py_IsImmortal
Unexecuted instantiation: action_helpers.c:_Py_IsImmortal
string_parser.c:_Py_IsImmortal
Line
Count
Source
122
40.7k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
40.7k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
40.7k
}
132
17.1G
#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
133
134
135
static inline Py_ALWAYS_INLINE int _Py_IsStaticImmortal(PyObject *op)
136
0
{
137
0
#if defined(Py_GIL_DISABLED) || SIZEOF_VOID_P > 4
138
0
    return (op->ob_flags & _Py_STATICALLY_ALLOCATED_FLAG) != 0;
139
0
#else
140
0
    return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT;
141
0
#endif
142
0
}
Unexecuted instantiation: bytesobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: call.c:_Py_IsStaticImmortal
Unexecuted instantiation: exceptions.c:_Py_IsStaticImmortal
Unexecuted instantiation: genericaliasobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: floatobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: listobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: longobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: dictobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: memoryobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: moduleobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: object.c:_Py_IsStaticImmortal
Unexecuted instantiation: obmalloc.c:_Py_IsStaticImmortal
Unexecuted instantiation: picklebufobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: rangeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: setobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: sliceobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: structseq.c:_Py_IsStaticImmortal
Unexecuted instantiation: templateobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: tupleobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: typeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: typevarobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicodeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicodectype.c:_Py_IsStaticImmortal
Unexecuted instantiation: unionobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: weakrefobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: _warnings.c:_Py_IsStaticImmortal
Unexecuted instantiation: bltinmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: ceval.c:_Py_IsStaticImmortal
Unexecuted instantiation: codecs.c:_Py_IsStaticImmortal
Unexecuted instantiation: codegen.c:_Py_IsStaticImmortal
Unexecuted instantiation: compile.c:_Py_IsStaticImmortal
Unexecuted instantiation: context.c:_Py_IsStaticImmortal
Unexecuted instantiation: errors.c:_Py_IsStaticImmortal
Unexecuted instantiation: flowgraph.c:_Py_IsStaticImmortal
Unexecuted instantiation: frame.c:_Py_IsStaticImmortal
Unexecuted instantiation: future.c:_Py_IsStaticImmortal
Unexecuted instantiation: gc.c:_Py_IsStaticImmortal
Unexecuted instantiation: gc_gil.c:_Py_IsStaticImmortal
Unexecuted instantiation: getargs.c:_Py_IsStaticImmortal
Unexecuted instantiation: ceval_gil.c:_Py_IsStaticImmortal
Unexecuted instantiation: hamt.c:_Py_IsStaticImmortal
Unexecuted instantiation: hashtable.c:_Py_IsStaticImmortal
Unexecuted instantiation: import.c:_Py_IsStaticImmortal
Unexecuted instantiation: importdl.c:_Py_IsStaticImmortal
Unexecuted instantiation: initconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: instrumentation.c:_Py_IsStaticImmortal
Unexecuted instantiation: instruction_sequence.c:_Py_IsStaticImmortal
Unexecuted instantiation: intrinsics.c:_Py_IsStaticImmortal
Unexecuted instantiation: legacy_tracing.c:_Py_IsStaticImmortal
Unexecuted instantiation: lock.c:_Py_IsStaticImmortal
Unexecuted instantiation: marshal.c:_Py_IsStaticImmortal
Unexecuted instantiation: modsupport.c:_Py_IsStaticImmortal
Unexecuted instantiation: mysnprintf.c:_Py_IsStaticImmortal
Unexecuted instantiation: parking_lot.c:_Py_IsStaticImmortal
Unexecuted instantiation: preconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: pyarena.c:_Py_IsStaticImmortal
Unexecuted instantiation: pyctype.c:_Py_IsStaticImmortal
Unexecuted instantiation: pyhash.c:_Py_IsStaticImmortal
Unexecuted instantiation: pylifecycle.c:_Py_IsStaticImmortal
Unexecuted instantiation: pymath.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystate.c:_Py_IsStaticImmortal
Unexecuted instantiation: pythonrun.c:_Py_IsStaticImmortal
Unexecuted instantiation: pytime.c:_Py_IsStaticImmortal
Unexecuted instantiation: qsbr.c:_Py_IsStaticImmortal
Unexecuted instantiation: bootstrap_hash.c:_Py_IsStaticImmortal
Unexecuted instantiation: specialize.c:_Py_IsStaticImmortal
Unexecuted instantiation: symtable.c:_Py_IsStaticImmortal
Unexecuted instantiation: sysmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: thread.c:_Py_IsStaticImmortal
Unexecuted instantiation: traceback.c:_Py_IsStaticImmortal
Unexecuted instantiation: tracemalloc.c:_Py_IsStaticImmortal
Unexecuted instantiation: getopt.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystrcmp.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystrtod.c:_Py_IsStaticImmortal
Unexecuted instantiation: pystrhex.c:_Py_IsStaticImmortal
Unexecuted instantiation: dtoa.c:_Py_IsStaticImmortal
Unexecuted instantiation: formatter_unicode.c:_Py_IsStaticImmortal
Unexecuted instantiation: fileutils.c:_Py_IsStaticImmortal
Unexecuted instantiation: suggestions.c:_Py_IsStaticImmortal
Unexecuted instantiation: perf_trampoline.c:_Py_IsStaticImmortal
Unexecuted instantiation: perf_jit_trampoline.c:_Py_IsStaticImmortal
Unexecuted instantiation: remote_debugging.c:_Py_IsStaticImmortal
Unexecuted instantiation: dynload_shlib.c:_Py_IsStaticImmortal
Unexecuted instantiation: config.c:_Py_IsStaticImmortal
Unexecuted instantiation: gcmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _asynciomodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: atexitmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: faulthandler.c:_Py_IsStaticImmortal
Unexecuted instantiation: posixmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: signalmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _tracemalloc.c:_Py_IsStaticImmortal
Unexecuted instantiation: _suggestions.c:_Py_IsStaticImmortal
Unexecuted instantiation: _datetimemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _codecsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _collectionsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: errnomodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _iomodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: iobase.c:_Py_IsStaticImmortal
Unexecuted instantiation: fileio.c:_Py_IsStaticImmortal
Unexecuted instantiation: bytesio.c:_Py_IsStaticImmortal
Unexecuted instantiation: bufferedio.c:_Py_IsStaticImmortal
Unexecuted instantiation: textio.c:_Py_IsStaticImmortal
Unexecuted instantiation: stringio.c:_Py_IsStaticImmortal
Unexecuted instantiation: itertoolsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: sre.c:_Py_IsStaticImmortal
Unexecuted instantiation: _sysconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: _threadmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: timemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _typesmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _typingmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _weakref.c:_Py_IsStaticImmortal
Unexecuted instantiation: _abc.c:_Py_IsStaticImmortal
Unexecuted instantiation: _functoolsmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _localemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: _opcode.c:_Py_IsStaticImmortal
Unexecuted instantiation: _operator.c:_Py_IsStaticImmortal
Unexecuted instantiation: _stat.c:_Py_IsStaticImmortal
Unexecuted instantiation: symtablemodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: pwdmodule.c:_Py_IsStaticImmortal
Unexecuted instantiation: getpath.c:_Py_IsStaticImmortal
Unexecuted instantiation: frozen.c:_Py_IsStaticImmortal
Unexecuted instantiation: getbuildinfo.c:_Py_IsStaticImmortal
Unexecuted instantiation: peg_api.c:_Py_IsStaticImmortal
Unexecuted instantiation: file_tokenizer.c:_Py_IsStaticImmortal
Unexecuted instantiation: helpers.c:_Py_IsStaticImmortal
Unexecuted instantiation: myreadline.c:_Py_IsStaticImmortal
Unexecuted instantiation: abstract.c:_Py_IsStaticImmortal
Unexecuted instantiation: boolobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: bytes_methods.c:_Py_IsStaticImmortal
Unexecuted instantiation: bytearrayobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: capsule.c:_Py_IsStaticImmortal
Unexecuted instantiation: cellobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: classobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: codeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: complexobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: descrobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: enumobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: genobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: fileobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: frameobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: funcobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: interpolationobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: iterobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: odictobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: methodobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: namespaceobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: _contextvars.c:_Py_IsStaticImmortal
Unexecuted instantiation: Python-ast.c:_Py_IsStaticImmortal
Unexecuted instantiation: Python-tokenize.c:_Py_IsStaticImmortal
Unexecuted instantiation: asdl.c:_Py_IsStaticImmortal
Unexecuted instantiation: assemble.c:_Py_IsStaticImmortal
Unexecuted instantiation: ast.c:_Py_IsStaticImmortal
Unexecuted instantiation: ast_preprocess.c:_Py_IsStaticImmortal
Unexecuted instantiation: ast_unparse.c:_Py_IsStaticImmortal
Unexecuted instantiation: critical_section.c:_Py_IsStaticImmortal
Unexecuted instantiation: crossinterp.c:_Py_IsStaticImmortal
Unexecuted instantiation: getcopyright.c:_Py_IsStaticImmortal
Unexecuted instantiation: getplatform.c:_Py_IsStaticImmortal
Unexecuted instantiation: getversion.c:_Py_IsStaticImmortal
Unexecuted instantiation: optimizer.c:_Py_IsStaticImmortal
Unexecuted instantiation: pathconfig.c:_Py_IsStaticImmortal
Unexecuted instantiation: structmember.c:_Py_IsStaticImmortal
Unexecuted instantiation: pegen.c:_Py_IsStaticImmortal
Unexecuted instantiation: pegen_errors.c:_Py_IsStaticImmortal
Unexecuted instantiation: parser.c:_Py_IsStaticImmortal
Unexecuted instantiation: buffer.c:_Py_IsStaticImmortal
Unexecuted instantiation: lexer.c:_Py_IsStaticImmortal
Unexecuted instantiation: state.c:_Py_IsStaticImmortal
Unexecuted instantiation: readline_tokenizer.c:_Py_IsStaticImmortal
Unexecuted instantiation: string_tokenizer.c:_Py_IsStaticImmortal
Unexecuted instantiation: utf8_tokenizer.c:_Py_IsStaticImmortal
Unexecuted instantiation: getcompiler.c:_Py_IsStaticImmortal
Unexecuted instantiation: mystrtoul.c:_Py_IsStaticImmortal
Unexecuted instantiation: token.c:_Py_IsStaticImmortal
Unexecuted instantiation: action_helpers.c:_Py_IsStaticImmortal
Unexecuted instantiation: string_parser.c:_Py_IsStaticImmortal
143
#define _Py_IsStaticImmortal(op) _Py_IsStaticImmortal(_PyObject_CAST(op))
144
#endif // !defined(_Py_OPAQUE_PYOBJECT)
145
146
// Py_SET_REFCNT() implementation for stable ABI
147
PyAPI_FUNC(void) _Py_SetRefcnt(PyObject *ob, Py_ssize_t refcnt);
148
149
659M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
659M
    assert(refcnt >= 0);
151
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
152
    // Stable ABI implements Py_SET_REFCNT() as a function call
153
    // on limited C API version 3.13 and newer.
154
    _Py_SetRefcnt(ob, refcnt);
155
#else
156
    // This immortal check is for code that is unaware of immortal objects.
157
    // The runtime tracks these objects and we should avoid as much
158
    // as possible having extensions inadvertently change the refcnt
159
    // of an immortalized object.
160
659M
    if (_Py_IsImmortal(ob)) {
161
447
        return;
162
447
    }
163
659M
#ifndef Py_GIL_DISABLED
164
659M
#if SIZEOF_VOID_P > 4
165
659M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
166
#else
167
    ob->ob_refcnt = refcnt;
168
#endif
169
#else
170
    if (_Py_IsOwnedByCurrentThread(ob)) {
171
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
172
            // On overflow, make the object immortal
173
            ob->ob_tid = _Py_UNOWNED_TID;
174
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
175
            ob->ob_ref_shared = 0;
176
        }
177
        else {
178
            // Set local refcount to desired refcount and shared refcount
179
            // to zero, but preserve the shared refcount flags.
180
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
181
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
182
        }
183
    }
184
    else {
185
        // Set local refcount to zero and shared refcount to desired refcount.
186
        // Mark the object as merged.
187
        ob->ob_tid = _Py_UNOWNED_TID;
188
        ob->ob_ref_local = 0;
189
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
190
    }
191
#endif  // Py_GIL_DISABLED
192
659M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
659M
}
Unexecuted instantiation: bytesobject.c:Py_SET_REFCNT
Unexecuted instantiation: call.c:Py_SET_REFCNT
Unexecuted instantiation: exceptions.c:Py_SET_REFCNT
Unexecuted instantiation: genericaliasobject.c:Py_SET_REFCNT
Unexecuted instantiation: floatobject.c:Py_SET_REFCNT
Unexecuted instantiation: listobject.c:Py_SET_REFCNT
Unexecuted instantiation: longobject.c:Py_SET_REFCNT
dictobject.c:Py_SET_REFCNT
Line
Count
Source
149
595M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
595M
    assert(refcnt >= 0);
151
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
152
    // Stable ABI implements Py_SET_REFCNT() as a function call
153
    // on limited C API version 3.13 and newer.
154
    _Py_SetRefcnt(ob, refcnt);
155
#else
156
    // This immortal check is for code that is unaware of immortal objects.
157
    // The runtime tracks these objects and we should avoid as much
158
    // as possible having extensions inadvertently change the refcnt
159
    // of an immortalized object.
160
595M
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
595M
#ifndef Py_GIL_DISABLED
164
595M
#if SIZEOF_VOID_P > 4
165
595M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
166
#else
167
    ob->ob_refcnt = refcnt;
168
#endif
169
#else
170
    if (_Py_IsOwnedByCurrentThread(ob)) {
171
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
172
            // On overflow, make the object immortal
173
            ob->ob_tid = _Py_UNOWNED_TID;
174
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
175
            ob->ob_ref_shared = 0;
176
        }
177
        else {
178
            // Set local refcount to desired refcount and shared refcount
179
            // to zero, but preserve the shared refcount flags.
180
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
181
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
182
        }
183
    }
184
    else {
185
        // Set local refcount to zero and shared refcount to desired refcount.
186
        // Mark the object as merged.
187
        ob->ob_tid = _Py_UNOWNED_TID;
188
        ob->ob_ref_local = 0;
189
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
190
    }
191
#endif  // Py_GIL_DISABLED
192
595M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
595M
}
Unexecuted instantiation: memoryobject.c:Py_SET_REFCNT
moduleobject.c:Py_SET_REFCNT
Line
Count
Source
149
447
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
447
    assert(refcnt >= 0);
151
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
152
    // Stable ABI implements Py_SET_REFCNT() as a function call
153
    // on limited C API version 3.13 and newer.
154
    _Py_SetRefcnt(ob, refcnt);
155
#else
156
    // This immortal check is for code that is unaware of immortal objects.
157
    // The runtime tracks these objects and we should avoid as much
158
    // as possible having extensions inadvertently change the refcnt
159
    // of an immortalized object.
160
447
    if (_Py_IsImmortal(ob)) {
161
447
        return;
162
447
    }
163
0
#ifndef Py_GIL_DISABLED
164
0
#if SIZEOF_VOID_P > 4
165
0
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
166
#else
167
    ob->ob_refcnt = refcnt;
168
#endif
169
#else
170
    if (_Py_IsOwnedByCurrentThread(ob)) {
171
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
172
            // On overflow, make the object immortal
173
            ob->ob_tid = _Py_UNOWNED_TID;
174
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
175
            ob->ob_ref_shared = 0;
176
        }
177
        else {
178
            // Set local refcount to desired refcount and shared refcount
179
            // to zero, but preserve the shared refcount flags.
180
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
181
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
182
        }
183
    }
184
    else {
185
        // Set local refcount to zero and shared refcount to desired refcount.
186
        // Mark the object as merged.
187
        ob->ob_tid = _Py_UNOWNED_TID;
188
        ob->ob_ref_local = 0;
189
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
190
    }
191
#endif  // Py_GIL_DISABLED
192
0
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
0
}
object.c:Py_SET_REFCNT
Line
Count
Source
149
37.3M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
37.3M
    assert(refcnt >= 0);
151
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
152
    // Stable ABI implements Py_SET_REFCNT() as a function call
153
    // on limited C API version 3.13 and newer.
154
    _Py_SetRefcnt(ob, refcnt);
155
#else
156
    // This immortal check is for code that is unaware of immortal objects.
157
    // The runtime tracks these objects and we should avoid as much
158
    // as possible having extensions inadvertently change the refcnt
159
    // of an immortalized object.
160
37.3M
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
37.3M
#ifndef Py_GIL_DISABLED
164
37.3M
#if SIZEOF_VOID_P > 4
165
37.3M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
166
#else
167
    ob->ob_refcnt = refcnt;
168
#endif
169
#else
170
    if (_Py_IsOwnedByCurrentThread(ob)) {
171
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
172
            // On overflow, make the object immortal
173
            ob->ob_tid = _Py_UNOWNED_TID;
174
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
175
            ob->ob_ref_shared = 0;
176
        }
177
        else {
178
            // Set local refcount to desired refcount and shared refcount
179
            // to zero, but preserve the shared refcount flags.
180
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
181
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
182
        }
183
    }
184
    else {
185
        // Set local refcount to zero and shared refcount to desired refcount.
186
        // Mark the object as merged.
187
        ob->ob_tid = _Py_UNOWNED_TID;
188
        ob->ob_ref_local = 0;
189
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
190
    }
191
#endif  // Py_GIL_DISABLED
192
37.3M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
37.3M
}
Unexecuted instantiation: obmalloc.c:Py_SET_REFCNT
Unexecuted instantiation: picklebufobject.c:Py_SET_REFCNT
Unexecuted instantiation: rangeobject.c:Py_SET_REFCNT
Unexecuted instantiation: setobject.c:Py_SET_REFCNT
Unexecuted instantiation: sliceobject.c:Py_SET_REFCNT
Unexecuted instantiation: structseq.c:Py_SET_REFCNT
Unexecuted instantiation: templateobject.c:Py_SET_REFCNT
Unexecuted instantiation: tupleobject.c:Py_SET_REFCNT
Unexecuted instantiation: typeobject.c:Py_SET_REFCNT
Unexecuted instantiation: typevarobject.c:Py_SET_REFCNT
unicodeobject.c:Py_SET_REFCNT
Line
Count
Source
149
1.33M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
1.33M
    assert(refcnt >= 0);
151
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
152
    // Stable ABI implements Py_SET_REFCNT() as a function call
153
    // on limited C API version 3.13 and newer.
154
    _Py_SetRefcnt(ob, refcnt);
155
#else
156
    // This immortal check is for code that is unaware of immortal objects.
157
    // The runtime tracks these objects and we should avoid as much
158
    // as possible having extensions inadvertently change the refcnt
159
    // of an immortalized object.
160
1.33M
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
1.33M
#ifndef Py_GIL_DISABLED
164
1.33M
#if SIZEOF_VOID_P > 4
165
1.33M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
166
#else
167
    ob->ob_refcnt = refcnt;
168
#endif
169
#else
170
    if (_Py_IsOwnedByCurrentThread(ob)) {
171
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
172
            // On overflow, make the object immortal
173
            ob->ob_tid = _Py_UNOWNED_TID;
174
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
175
            ob->ob_ref_shared = 0;
176
        }
177
        else {
178
            // Set local refcount to desired refcount and shared refcount
179
            // to zero, but preserve the shared refcount flags.
180
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
181
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
182
        }
183
    }
184
    else {
185
        // Set local refcount to zero and shared refcount to desired refcount.
186
        // Mark the object as merged.
187
        ob->ob_tid = _Py_UNOWNED_TID;
188
        ob->ob_ref_local = 0;
189
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
190
    }
191
#endif  // Py_GIL_DISABLED
192
1.33M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
1.33M
}
Unexecuted instantiation: unicodectype.c:Py_SET_REFCNT
Unexecuted instantiation: unionobject.c:Py_SET_REFCNT
Unexecuted instantiation: weakrefobject.c:Py_SET_REFCNT
Unexecuted instantiation: _warnings.c:Py_SET_REFCNT
Unexecuted instantiation: bltinmodule.c:Py_SET_REFCNT
Unexecuted instantiation: ceval.c:Py_SET_REFCNT
Unexecuted instantiation: codecs.c:Py_SET_REFCNT
Unexecuted instantiation: codegen.c:Py_SET_REFCNT
Unexecuted instantiation: compile.c:Py_SET_REFCNT
Unexecuted instantiation: context.c:Py_SET_REFCNT
Unexecuted instantiation: errors.c:Py_SET_REFCNT
Unexecuted instantiation: flowgraph.c:Py_SET_REFCNT
Unexecuted instantiation: frame.c:Py_SET_REFCNT
Unexecuted instantiation: future.c:Py_SET_REFCNT
Unexecuted instantiation: gc.c:Py_SET_REFCNT
Unexecuted instantiation: gc_gil.c:Py_SET_REFCNT
Unexecuted instantiation: getargs.c:Py_SET_REFCNT
Unexecuted instantiation: ceval_gil.c:Py_SET_REFCNT
Unexecuted instantiation: hamt.c:Py_SET_REFCNT
Unexecuted instantiation: hashtable.c:Py_SET_REFCNT
Unexecuted instantiation: import.c:Py_SET_REFCNT
Unexecuted instantiation: importdl.c:Py_SET_REFCNT
Unexecuted instantiation: initconfig.c:Py_SET_REFCNT
Unexecuted instantiation: instrumentation.c:Py_SET_REFCNT
Unexecuted instantiation: instruction_sequence.c:Py_SET_REFCNT
Unexecuted instantiation: intrinsics.c:Py_SET_REFCNT
Unexecuted instantiation: legacy_tracing.c:Py_SET_REFCNT
Unexecuted instantiation: lock.c:Py_SET_REFCNT
Unexecuted instantiation: marshal.c:Py_SET_REFCNT
Unexecuted instantiation: modsupport.c:Py_SET_REFCNT
Unexecuted instantiation: mysnprintf.c:Py_SET_REFCNT
Unexecuted instantiation: parking_lot.c:Py_SET_REFCNT
Unexecuted instantiation: preconfig.c:Py_SET_REFCNT
Unexecuted instantiation: pyarena.c:Py_SET_REFCNT
Unexecuted instantiation: pyctype.c:Py_SET_REFCNT
Unexecuted instantiation: pyhash.c:Py_SET_REFCNT
Unexecuted instantiation: pylifecycle.c:Py_SET_REFCNT
Unexecuted instantiation: pymath.c:Py_SET_REFCNT
Unexecuted instantiation: pystate.c:Py_SET_REFCNT
Unexecuted instantiation: pythonrun.c:Py_SET_REFCNT
Unexecuted instantiation: pytime.c:Py_SET_REFCNT
Unexecuted instantiation: qsbr.c:Py_SET_REFCNT
Unexecuted instantiation: bootstrap_hash.c:Py_SET_REFCNT
Unexecuted instantiation: specialize.c:Py_SET_REFCNT
Unexecuted instantiation: symtable.c:Py_SET_REFCNT
Unexecuted instantiation: sysmodule.c:Py_SET_REFCNT
Unexecuted instantiation: thread.c:Py_SET_REFCNT
Unexecuted instantiation: traceback.c:Py_SET_REFCNT
Unexecuted instantiation: tracemalloc.c:Py_SET_REFCNT
Unexecuted instantiation: getopt.c:Py_SET_REFCNT
Unexecuted instantiation: pystrcmp.c:Py_SET_REFCNT
Unexecuted instantiation: pystrtod.c:Py_SET_REFCNT
Unexecuted instantiation: pystrhex.c:Py_SET_REFCNT
Unexecuted instantiation: dtoa.c:Py_SET_REFCNT
Unexecuted instantiation: formatter_unicode.c:Py_SET_REFCNT
Unexecuted instantiation: fileutils.c:Py_SET_REFCNT
Unexecuted instantiation: suggestions.c:Py_SET_REFCNT
Unexecuted instantiation: perf_trampoline.c:Py_SET_REFCNT
Unexecuted instantiation: perf_jit_trampoline.c:Py_SET_REFCNT
Unexecuted instantiation: remote_debugging.c:Py_SET_REFCNT
Unexecuted instantiation: dynload_shlib.c:Py_SET_REFCNT
Unexecuted instantiation: config.c:Py_SET_REFCNT
Unexecuted instantiation: gcmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _asynciomodule.c:Py_SET_REFCNT
Unexecuted instantiation: atexitmodule.c:Py_SET_REFCNT
Unexecuted instantiation: faulthandler.c:Py_SET_REFCNT
Unexecuted instantiation: posixmodule.c:Py_SET_REFCNT
Unexecuted instantiation: signalmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _tracemalloc.c:Py_SET_REFCNT
Unexecuted instantiation: _suggestions.c:Py_SET_REFCNT
Unexecuted instantiation: _datetimemodule.c:Py_SET_REFCNT
Unexecuted instantiation: _codecsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _collectionsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: errnomodule.c:Py_SET_REFCNT
Unexecuted instantiation: _iomodule.c:Py_SET_REFCNT
Unexecuted instantiation: iobase.c:Py_SET_REFCNT
Unexecuted instantiation: fileio.c:Py_SET_REFCNT
Unexecuted instantiation: bytesio.c:Py_SET_REFCNT
Unexecuted instantiation: bufferedio.c:Py_SET_REFCNT
Unexecuted instantiation: textio.c:Py_SET_REFCNT
Unexecuted instantiation: stringio.c:Py_SET_REFCNT
Unexecuted instantiation: itertoolsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: sre.c:Py_SET_REFCNT
Unexecuted instantiation: _sysconfig.c:Py_SET_REFCNT
Unexecuted instantiation: _threadmodule.c:Py_SET_REFCNT
Unexecuted instantiation: timemodule.c:Py_SET_REFCNT
Unexecuted instantiation: _typesmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _typingmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _weakref.c:Py_SET_REFCNT
Unexecuted instantiation: _abc.c:Py_SET_REFCNT
Unexecuted instantiation: _functoolsmodule.c:Py_SET_REFCNT
Unexecuted instantiation: _localemodule.c:Py_SET_REFCNT
Unexecuted instantiation: _opcode.c:Py_SET_REFCNT
Unexecuted instantiation: _operator.c:Py_SET_REFCNT
Unexecuted instantiation: _stat.c:Py_SET_REFCNT
Unexecuted instantiation: symtablemodule.c:Py_SET_REFCNT
Unexecuted instantiation: pwdmodule.c:Py_SET_REFCNT
Unexecuted instantiation: getpath.c:Py_SET_REFCNT
Unexecuted instantiation: frozen.c:Py_SET_REFCNT
Unexecuted instantiation: getbuildinfo.c:Py_SET_REFCNT
Unexecuted instantiation: peg_api.c:Py_SET_REFCNT
Unexecuted instantiation: file_tokenizer.c:Py_SET_REFCNT
Unexecuted instantiation: helpers.c:Py_SET_REFCNT
Unexecuted instantiation: myreadline.c:Py_SET_REFCNT
Unexecuted instantiation: abstract.c:Py_SET_REFCNT
Unexecuted instantiation: boolobject.c:Py_SET_REFCNT
Unexecuted instantiation: bytes_methods.c:Py_SET_REFCNT
Unexecuted instantiation: bytearrayobject.c:Py_SET_REFCNT
Unexecuted instantiation: capsule.c:Py_SET_REFCNT
Unexecuted instantiation: cellobject.c:Py_SET_REFCNT
Unexecuted instantiation: classobject.c:Py_SET_REFCNT
codeobject.c:Py_SET_REFCNT
Line
Count
Source
149
16.1k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
16.1k
    assert(refcnt >= 0);
151
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
152
    // Stable ABI implements Py_SET_REFCNT() as a function call
153
    // on limited C API version 3.13 and newer.
154
    _Py_SetRefcnt(ob, refcnt);
155
#else
156
    // This immortal check is for code that is unaware of immortal objects.
157
    // The runtime tracks these objects and we should avoid as much
158
    // as possible having extensions inadvertently change the refcnt
159
    // of an immortalized object.
160
16.1k
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
16.1k
#ifndef Py_GIL_DISABLED
164
16.1k
#if SIZEOF_VOID_P > 4
165
16.1k
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
166
#else
167
    ob->ob_refcnt = refcnt;
168
#endif
169
#else
170
    if (_Py_IsOwnedByCurrentThread(ob)) {
171
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
172
            // On overflow, make the object immortal
173
            ob->ob_tid = _Py_UNOWNED_TID;
174
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
175
            ob->ob_ref_shared = 0;
176
        }
177
        else {
178
            // Set local refcount to desired refcount and shared refcount
179
            // to zero, but preserve the shared refcount flags.
180
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
181
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
182
        }
183
    }
184
    else {
185
        // Set local refcount to zero and shared refcount to desired refcount.
186
        // Mark the object as merged.
187
        ob->ob_tid = _Py_UNOWNED_TID;
188
        ob->ob_ref_local = 0;
189
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
190
    }
191
#endif  // Py_GIL_DISABLED
192
16.1k
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
16.1k
}
Unexecuted instantiation: complexobject.c:Py_SET_REFCNT
Unexecuted instantiation: descrobject.c:Py_SET_REFCNT
Unexecuted instantiation: enumobject.c:Py_SET_REFCNT
Unexecuted instantiation: genobject.c:Py_SET_REFCNT
Unexecuted instantiation: fileobject.c:Py_SET_REFCNT
Unexecuted instantiation: frameobject.c:Py_SET_REFCNT
funcobject.c:Py_SET_REFCNT
Line
Count
Source
149
24.7M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
24.7M
    assert(refcnt >= 0);
151
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
152
    // Stable ABI implements Py_SET_REFCNT() as a function call
153
    // on limited C API version 3.13 and newer.
154
    _Py_SetRefcnt(ob, refcnt);
155
#else
156
    // This immortal check is for code that is unaware of immortal objects.
157
    // The runtime tracks these objects and we should avoid as much
158
    // as possible having extensions inadvertently change the refcnt
159
    // of an immortalized object.
160
24.7M
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
24.7M
#ifndef Py_GIL_DISABLED
164
24.7M
#if SIZEOF_VOID_P > 4
165
24.7M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
166
#else
167
    ob->ob_refcnt = refcnt;
168
#endif
169
#else
170
    if (_Py_IsOwnedByCurrentThread(ob)) {
171
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
172
            // On overflow, make the object immortal
173
            ob->ob_tid = _Py_UNOWNED_TID;
174
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
175
            ob->ob_ref_shared = 0;
176
        }
177
        else {
178
            // Set local refcount to desired refcount and shared refcount
179
            // to zero, but preserve the shared refcount flags.
180
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
181
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
182
        }
183
    }
184
    else {
185
        // Set local refcount to zero and shared refcount to desired refcount.
186
        // Mark the object as merged.
187
        ob->ob_tid = _Py_UNOWNED_TID;
188
        ob->ob_ref_local = 0;
189
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
190
    }
191
#endif  // Py_GIL_DISABLED
192
24.7M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
24.7M
}
Unexecuted instantiation: interpolationobject.c:Py_SET_REFCNT
Unexecuted instantiation: iterobject.c:Py_SET_REFCNT
Unexecuted instantiation: odictobject.c:Py_SET_REFCNT
Unexecuted instantiation: methodobject.c:Py_SET_REFCNT
Unexecuted instantiation: namespaceobject.c:Py_SET_REFCNT
Unexecuted instantiation: _contextvars.c:Py_SET_REFCNT
Unexecuted instantiation: Python-ast.c:Py_SET_REFCNT
Unexecuted instantiation: Python-tokenize.c:Py_SET_REFCNT
Unexecuted instantiation: asdl.c:Py_SET_REFCNT
Unexecuted instantiation: assemble.c:Py_SET_REFCNT
Unexecuted instantiation: ast.c:Py_SET_REFCNT
Unexecuted instantiation: ast_preprocess.c:Py_SET_REFCNT
Unexecuted instantiation: ast_unparse.c:Py_SET_REFCNT
Unexecuted instantiation: critical_section.c:Py_SET_REFCNT
Unexecuted instantiation: crossinterp.c:Py_SET_REFCNT
Unexecuted instantiation: getcopyright.c:Py_SET_REFCNT
Unexecuted instantiation: getplatform.c:Py_SET_REFCNT
Unexecuted instantiation: getversion.c:Py_SET_REFCNT
Unexecuted instantiation: optimizer.c:Py_SET_REFCNT
Unexecuted instantiation: pathconfig.c:Py_SET_REFCNT
Unexecuted instantiation: structmember.c:Py_SET_REFCNT
Unexecuted instantiation: pegen.c:Py_SET_REFCNT
Unexecuted instantiation: pegen_errors.c:Py_SET_REFCNT
Unexecuted instantiation: parser.c:Py_SET_REFCNT
Unexecuted instantiation: buffer.c:Py_SET_REFCNT
Unexecuted instantiation: lexer.c:Py_SET_REFCNT
Unexecuted instantiation: state.c:Py_SET_REFCNT
Unexecuted instantiation: readline_tokenizer.c:Py_SET_REFCNT
Unexecuted instantiation: string_tokenizer.c:Py_SET_REFCNT
Unexecuted instantiation: utf8_tokenizer.c:Py_SET_REFCNT
Unexecuted instantiation: getcompiler.c:Py_SET_REFCNT
Unexecuted instantiation: mystrtoul.c:Py_SET_REFCNT
Unexecuted instantiation: token.c:Py_SET_REFCNT
Unexecuted instantiation: action_helpers.c:Py_SET_REFCNT
Unexecuted instantiation: string_parser.c:Py_SET_REFCNT
194
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
195
659M
#  define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt))
196
#endif
197
198
199
/*
200
The macros Py_INCREF(op) and Py_DECREF(op) are used to increment or decrement
201
reference counts.  Py_DECREF calls the object's deallocator function when
202
the refcount falls to 0; for
203
objects that don't contain references to other objects or heap memory
204
this can be the standard function free().  Both macros can be used
205
wherever a void expression is allowed.  The argument must not be a
206
NULL pointer.  If it may be NULL, use Py_XINCREF/Py_XDECREF instead.
207
The macro _Py_NewReference(op) initialize reference counts to 1, and
208
in special builds (Py_REF_DEBUG, Py_TRACE_REFS) performs additional
209
bookkeeping appropriate to the special build.
210
211
We assume that the reference count field can never overflow; this can
212
be proven when the size of the field is the same as the pointer size, so
213
we ignore the possibility.  Provided a C int is at least 32 bits (which
214
is implicitly assumed in many parts of this code), that's enough for
215
about 2**31 references to an object.
216
217
XXX The following became out of date in Python 2.2, but I'm not sure
218
XXX what the full truth is now.  Certainly, heap-allocated type objects
219
XXX can and should be deallocated.
220
Type objects should never be deallocated; the type pointer in an object
221
is not considered to be a reference to the type object, to save
222
complications in the deallocation function.  (This is actually a
223
decision that's up to the implementer of each new type so if you want,
224
you can count such references to the type object.)
225
*/
226
227
#if defined(Py_REF_DEBUG) && !defined(Py_LIMITED_API)
228
PyAPI_FUNC(void) _Py_NegativeRefcount(const char *filename, int lineno,
229
                                      PyObject *op);
230
PyAPI_FUNC(void) _Py_INCREF_IncRefTotal(void);
231
PyAPI_FUNC(void) _Py_DECREF_DecRefTotal(void);
232
#endif  // Py_REF_DEBUG && !Py_LIMITED_API
233
234
PyAPI_FUNC(void) _Py_Dealloc(PyObject *);
235
236
237
/*
238
These are provided as conveniences to Python runtime embedders, so that
239
they can have object code that is not dependent on Python compilation flags.
240
*/
241
PyAPI_FUNC(void) Py_IncRef(PyObject *);
242
PyAPI_FUNC(void) Py_DecRef(PyObject *);
243
244
// Similar to Py_IncRef() and Py_DecRef() but the argument must be non-NULL.
245
// Private functions used by Py_INCREF() and Py_DECREF().
246
PyAPI_FUNC(void) _Py_IncRef(PyObject *);
247
PyAPI_FUNC(void) _Py_DecRef(PyObject *);
248
249
static inline Py_ALWAYS_INLINE void Py_INCREF(PyObject *op)
250
8.16G
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
8.16G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
8.16G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
4.19G
        _Py_INCREF_IMMORTAL_STAT_INC();
283
4.19G
        return;
284
4.19G
    }
285
3.96G
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
3.96G
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
3.96G
#endif
301
3.96G
}
bytesobject.c:Py_INCREF
Line
Count
Source
250
21.4M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
21.4M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
21.4M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
19.9M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
19.9M
        return;
284
19.9M
    }
285
1.55M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
1.55M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
1.55M
#endif
301
1.55M
}
call.c:Py_INCREF
Line
Count
Source
250
21.5M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
21.5M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
21.5M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
7.62M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
7.62M
        return;
284
7.62M
    }
285
13.9M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
13.9M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
13.9M
#endif
301
13.9M
}
exceptions.c:Py_INCREF
Line
Count
Source
250
77.0M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
77.0M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
77.0M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
31.5M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
31.5M
        return;
284
31.5M
    }
285
45.5M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
45.5M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
45.5M
#endif
301
45.5M
}
genericaliasobject.c:Py_INCREF
Line
Count
Source
250
862
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
862
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
862
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
858
        _Py_INCREF_IMMORTAL_STAT_INC();
283
858
        return;
284
858
    }
285
4
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
4
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
4
#endif
301
4
}
floatobject.c:Py_INCREF
Line
Count
Source
250
763k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
763k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
763k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
763k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
763k
        return;
284
763k
    }
285
0
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
0
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
0
#endif
301
0
}
listobject.c:Py_INCREF
Line
Count
Source
250
1.04G
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
1.04G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.04G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
246M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
246M
        return;
284
246M
    }
285
794M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
794M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
794M
#endif
301
794M
}
longobject.c:Py_INCREF
Line
Count
Source
250
111M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
111M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
111M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
111M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
111M
        return;
284
111M
    }
285
4.79k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
4.79k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
4.79k
#endif
301
4.79k
}
dictobject.c:Py_INCREF
Line
Count
Source
250
1.08G
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
1.08G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.08G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
382M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
382M
        return;
284
382M
    }
285
706M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
706M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
706M
#endif
301
706M
}
memoryobject.c:Py_INCREF
Line
Count
Source
250
566k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
566k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
566k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
566k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
566k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
566k
#endif
301
566k
}
moduleobject.c:Py_INCREF
Line
Count
Source
250
1.44k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
1.44k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.44k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
861
        _Py_INCREF_IMMORTAL_STAT_INC();
283
861
        return;
284
861
    }
285
587
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
587
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
587
#endif
301
587
}
object.c:Py_INCREF
Line
Count
Source
250
577M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
577M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
577M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
428M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
428M
        return;
284
428M
    }
285
149M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
149M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
149M
#endif
301
149M
}
Unexecuted instantiation: obmalloc.c:Py_INCREF
Unexecuted instantiation: picklebufobject.c:Py_INCREF
rangeobject.c:Py_INCREF
Line
Count
Source
250
64
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
64
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
64
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
48
        _Py_INCREF_IMMORTAL_STAT_INC();
283
48
        return;
284
48
    }
285
16
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
16
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
16
#endif
301
16
}
setobject.c:Py_INCREF
Line
Count
Source
250
1.46M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
1.46M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.46M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
530k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
530k
        return;
284
530k
    }
285
933k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
933k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
933k
#endif
301
933k
}
sliceobject.c:Py_INCREF
Line
Count
Source
250
43.2M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
43.2M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
43.2M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
43.2M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
43.2M
        return;
284
43.2M
    }
285
0
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
0
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
0
#endif
301
0
}
Unexecuted instantiation: structseq.c:Py_INCREF
templateobject.c:Py_INCREF
Line
Count
Source
250
4
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
4
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
4
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
2
        _Py_INCREF_IMMORTAL_STAT_INC();
283
2
        return;
284
2
    }
285
2
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
2
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
2
#endif
301
2
}
tupleobject.c:Py_INCREF
Line
Count
Source
250
621M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
621M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
621M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
444M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
444M
        return;
284
444M
    }
285
176M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
176M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
176M
#endif
301
176M
}
typeobject.c:Py_INCREF
Line
Count
Source
250
264M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
264M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
264M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
86.1M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
86.1M
        return;
284
86.1M
    }
285
177M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
177M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
177M
#endif
301
177M
}
Unexecuted instantiation: typevarobject.c:Py_INCREF
unicodeobject.c:Py_INCREF
Line
Count
Source
250
758M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
758M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
758M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
658M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
658M
        return;
284
658M
    }
285
100M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
100M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
100M
#endif
301
100M
}
Unexecuted instantiation: unicodectype.c:Py_INCREF
Unexecuted instantiation: unionobject.c:Py_INCREF
weakrefobject.c:Py_INCREF
Line
Count
Source
250
274k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
274k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
274k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
1.25k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
1.25k
        return;
284
1.25k
    }
285
273k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
273k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
273k
#endif
301
273k
}
_warnings.c:Py_INCREF
Line
Count
Source
250
69.3k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
69.3k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
69.3k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
21.2k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
21.2k
        return;
284
21.2k
    }
285
48.0k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
48.0k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
48.0k
#endif
301
48.0k
}
bltinmodule.c:Py_INCREF
Line
Count
Source
250
59.2M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
59.2M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
59.2M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
22.3M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
22.3M
        return;
284
22.3M
    }
285
36.9M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
36.9M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
36.9M
#endif
301
36.9M
}
ceval.c:Py_INCREF
Line
Count
Source
250
1.44G
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
1.44G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.44G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
819M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
819M
        return;
284
819M
    }
285
624M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
624M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
624M
#endif
301
624M
}
codecs.c:Py_INCREF
Line
Count
Source
250
2.91M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
2.91M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
2.91M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
523k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
523k
        return;
284
523k
    }
285
2.38M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
2.38M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
2.38M
#endif
301
2.38M
}
codegen.c:Py_INCREF
Line
Count
Source
250
2.67k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
2.67k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
2.67k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
2.67k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
2.67k
        return;
284
2.67k
    }
285
0
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
0
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
0
#endif
301
0
}
compile.c:Py_INCREF
Line
Count
Source
250
107k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
107k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
107k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
46.3k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
46.3k
        return;
284
46.3k
    }
285
61.5k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
61.5k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
61.5k
#endif
301
61.5k
}
context.c:Py_INCREF
Line
Count
Source
250
24
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
24
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
24
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
7
        _Py_INCREF_IMMORTAL_STAT_INC();
283
7
        return;
284
7
    }
285
17
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
17
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
17
#endif
301
17
}
errors.c:Py_INCREF
Line
Count
Source
250
58.1M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
58.1M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
58.1M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
28.5M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
28.5M
        return;
284
28.5M
    }
285
29.6M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
29.6M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
29.6M
#endif
301
29.6M
}
flowgraph.c:Py_INCREF
Line
Count
Source
250
94.1k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
94.1k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
94.1k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
43.7k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
43.7k
        return;
284
43.7k
    }
285
50.3k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
50.3k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
50.3k
#endif
301
50.3k
}
frame.c:Py_INCREF
Line
Count
Source
250
11.5M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
11.5M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
11.5M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
11.5M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
11.5M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
11.5M
#endif
301
11.5M
}
Unexecuted instantiation: future.c:Py_INCREF
gc.c:Py_INCREF
Line
Count
Source
250
341M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
341M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
341M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
251M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
251M
        return;
284
251M
    }
285
90.2M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
90.2M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
90.2M
#endif
301
90.2M
}
Unexecuted instantiation: gc_gil.c:Py_INCREF
getargs.c:Py_INCREF
Line
Count
Source
250
699k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
699k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
699k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
120k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
120k
        return;
284
120k
    }
285
578k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
578k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
578k
#endif
301
578k
}
Unexecuted instantiation: ceval_gil.c:Py_INCREF
Unexecuted instantiation: hamt.c:Py_INCREF
Unexecuted instantiation: hashtable.c:Py_INCREF
import.c:Py_INCREF
Line
Count
Source
250
82.4k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
82.4k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
82.4k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
12.4k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
12.4k
        return;
284
12.4k
    }
285
70.0k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
70.0k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
70.0k
#endif
301
70.0k
}
importdl.c:Py_INCREF
Line
Count
Source
250
529
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
529
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
529
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
422
        _Py_INCREF_IMMORTAL_STAT_INC();
283
422
        return;
284
422
    }
285
107
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
107
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
107
#endif
301
107
}
initconfig.c:Py_INCREF
Line
Count
Source
250
272
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
272
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
272
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
272
        _Py_INCREF_IMMORTAL_STAT_INC();
283
272
        return;
284
272
    }
285
0
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
0
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
0
#endif
301
0
}
Unexecuted instantiation: instrumentation.c:Py_INCREF
Unexecuted instantiation: instruction_sequence.c:Py_INCREF
intrinsics.c:Py_INCREF
Line
Count
Source
250
17.7k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
17.7k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
17.7k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
17.7k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
17.7k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
17.7k
#endif
301
17.7k
}
Unexecuted instantiation: legacy_tracing.c:Py_INCREF
Unexecuted instantiation: lock.c:Py_INCREF
marshal.c:Py_INCREF
Line
Count
Source
250
324k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
324k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
324k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
280k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
280k
        return;
284
280k
    }
285
43.7k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
43.7k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
43.7k
#endif
301
43.7k
}
modsupport.c:Py_INCREF
Line
Count
Source
250
290k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
290k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
290k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
16.9k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
16.9k
        return;
284
16.9k
    }
285
273k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
273k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
273k
#endif
301
273k
}
Unexecuted instantiation: mysnprintf.c:Py_INCREF
Unexecuted instantiation: parking_lot.c:Py_INCREF
Unexecuted instantiation: preconfig.c:Py_INCREF
Unexecuted instantiation: pyarena.c:Py_INCREF
Unexecuted instantiation: pyctype.c:Py_INCREF
Unexecuted instantiation: pyhash.c:Py_INCREF
pylifecycle.c:Py_INCREF
Line
Count
Source
250
16
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
16
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
16
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
16
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
16
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
16
#endif
301
16
}
Unexecuted instantiation: pymath.c:Py_INCREF
pystate.c:Py_INCREF
Line
Count
Source
250
2.23k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
2.23k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
2.23k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
2.23k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
2.23k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
2.23k
#endif
301
2.23k
}
Unexecuted instantiation: pythonrun.c:Py_INCREF
Unexecuted instantiation: pytime.c:Py_INCREF
Unexecuted instantiation: qsbr.c:Py_INCREF
Unexecuted instantiation: bootstrap_hash.c:Py_INCREF
Unexecuted instantiation: specialize.c:Py_INCREF
symtable.c:Py_INCREF
Line
Count
Source
250
252k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
252k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
252k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
252k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
252k
        return;
284
252k
    }
285
675
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
675
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
675
#endif
301
675
}
sysmodule.c:Py_INCREF
Line
Count
Source
250
1.46k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
1.46k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.46k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
897
        _Py_INCREF_IMMORTAL_STAT_INC();
283
897
        return;
284
897
    }
285
571
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
571
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
571
#endif
301
571
}
Unexecuted instantiation: thread.c:Py_INCREF
traceback.c:Py_INCREF
Line
Count
Source
250
31.1M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
31.1M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
31.1M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
31.1M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
31.1M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
31.1M
#endif
301
31.1M
}
Unexecuted instantiation: tracemalloc.c:Py_INCREF
Unexecuted instantiation: getopt.c:Py_INCREF
Unexecuted instantiation: pystrcmp.c:Py_INCREF
Unexecuted instantiation: pystrtod.c:Py_INCREF
Unexecuted instantiation: pystrhex.c:Py_INCREF
Unexecuted instantiation: dtoa.c:Py_INCREF
Unexecuted instantiation: formatter_unicode.c:Py_INCREF
Unexecuted instantiation: fileutils.c:Py_INCREF
Unexecuted instantiation: suggestions.c:Py_INCREF
Unexecuted instantiation: perf_trampoline.c:Py_INCREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_INCREF
Unexecuted instantiation: remote_debugging.c:Py_INCREF
Unexecuted instantiation: dynload_shlib.c:Py_INCREF
Unexecuted instantiation: config.c:Py_INCREF
Unexecuted instantiation: gcmodule.c:Py_INCREF
Unexecuted instantiation: _asynciomodule.c:Py_INCREF
Unexecuted instantiation: atexitmodule.c:Py_INCREF
Unexecuted instantiation: faulthandler.c:Py_INCREF
posixmodule.c:Py_INCREF
Line
Count
Source
250
44.9k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
44.9k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
44.9k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
96
        _Py_INCREF_IMMORTAL_STAT_INC();
283
96
        return;
284
96
    }
285
44.8k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
44.8k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
44.8k
#endif
301
44.8k
}
signalmodule.c:Py_INCREF
Line
Count
Source
250
1.02k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
1.02k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.02k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
1.02k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
1.02k
        return;
284
1.02k
    }
285
0
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
0
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
0
#endif
301
0
}
Unexecuted instantiation: _tracemalloc.c:Py_INCREF
Unexecuted instantiation: _suggestions.c:Py_INCREF
_datetimemodule.c:Py_INCREF
Line
Count
Source
250
108
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
108
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
108
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
76
        _Py_INCREF_IMMORTAL_STAT_INC();
283
76
        return;
284
76
    }
285
32
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
32
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
32
#endif
301
32
}
Unexecuted instantiation: _codecsmodule.c:Py_INCREF
_collectionsmodule.c:Py_INCREF
Line
Count
Source
250
16.7M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
16.7M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
16.7M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
14.1M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
14.1M
        return;
284
14.1M
    }
285
2.59M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
2.59M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
2.59M
#endif
301
2.59M
}
Unexecuted instantiation: errnomodule.c:Py_INCREF
_iomodule.c:Py_INCREF
Line
Count
Source
250
48
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
48
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
48
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
48
        _Py_INCREF_IMMORTAL_STAT_INC();
283
48
        return;
284
48
    }
285
0
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
0
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
0
#endif
301
0
}
iobase.c:Py_INCREF
Line
Count
Source
250
39.8k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
39.8k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
39.8k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
39.8k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
39.8k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
39.8k
#endif
301
39.8k
}
Unexecuted instantiation: fileio.c:Py_INCREF
bytesio.c:Py_INCREF
Line
Count
Source
250
10.2k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
10.2k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
10.2k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
24
        _Py_INCREF_IMMORTAL_STAT_INC();
283
24
        return;
284
24
    }
285
10.2k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
10.2k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
10.2k
#endif
301
10.2k
}
bufferedio.c:Py_INCREF
Line
Count
Source
250
2.04k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
2.04k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
2.04k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
3
        _Py_INCREF_IMMORTAL_STAT_INC();
283
3
        return;
284
3
    }
285
2.04k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
2.04k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
2.04k
#endif
301
2.04k
}
textio.c:Py_INCREF
Line
Count
Source
250
80.6k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
80.6k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
80.6k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
19.8k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
19.8k
        return;
284
19.8k
    }
285
60.8k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
60.8k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
60.8k
#endif
301
60.8k
}
stringio.c:Py_INCREF
Line
Count
Source
250
15.9k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
15.9k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
15.9k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
43
        _Py_INCREF_IMMORTAL_STAT_INC();
283
43
        return;
284
43
    }
285
15.8k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
15.8k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
15.8k
#endif
301
15.8k
}
itertoolsmodule.c:Py_INCREF
Line
Count
Source
250
758
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
758
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
758
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
350
        _Py_INCREF_IMMORTAL_STAT_INC();
283
350
        return;
284
350
    }
285
408
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
408
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
408
#endif
301
408
}
sre.c:Py_INCREF
Line
Count
Source
250
384M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
384M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
384M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
127M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
127M
        return;
284
127M
    }
285
257M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
257M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
257M
#endif
301
257M
}
Unexecuted instantiation: _sysconfig.c:Py_INCREF
Unexecuted instantiation: _threadmodule.c:Py_INCREF
Unexecuted instantiation: timemodule.c:Py_INCREF
Unexecuted instantiation: _typesmodule.c:Py_INCREF
Unexecuted instantiation: _typingmodule.c:Py_INCREF
Unexecuted instantiation: _weakref.c:Py_INCREF
_abc.c:Py_INCREF
Line
Count
Source
250
9.59k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
9.59k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
9.59k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
9.48k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
9.48k
        return;
284
9.48k
    }
285
114
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
114
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
114
#endif
301
114
}
_functoolsmodule.c:Py_INCREF
Line
Count
Source
250
525
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
525
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
525
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
157
        _Py_INCREF_IMMORTAL_STAT_INC();
283
157
        return;
284
157
    }
285
368
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
368
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
368
#endif
301
368
}
Unexecuted instantiation: _localemodule.c:Py_INCREF
Unexecuted instantiation: _opcode.c:Py_INCREF
_operator.c:Py_INCREF
Line
Count
Source
250
1.24M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
1.24M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.24M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
1.21M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
1.21M
        return;
284
1.21M
    }
285
38.1k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
38.1k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
38.1k
#endif
301
38.1k
}
Unexecuted instantiation: _stat.c:Py_INCREF
Unexecuted instantiation: symtablemodule.c:Py_INCREF
Unexecuted instantiation: pwdmodule.c:Py_INCREF
getpath.c:Py_INCREF
Line
Count
Source
250
176
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
176
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
176
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
176
        _Py_INCREF_IMMORTAL_STAT_INC();
283
176
        return;
284
176
    }
285
0
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
0
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
0
#endif
301
0
}
Unexecuted instantiation: frozen.c:Py_INCREF
Unexecuted instantiation: getbuildinfo.c:Py_INCREF
Unexecuted instantiation: peg_api.c:Py_INCREF
Unexecuted instantiation: file_tokenizer.c:Py_INCREF
Unexecuted instantiation: helpers.c:Py_INCREF
Unexecuted instantiation: myreadline.c:Py_INCREF
abstract.c:Py_INCREF
Line
Count
Source
250
584M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
584M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
584M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
388M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
388M
        return;
284
388M
    }
285
195M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
195M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
195M
#endif
301
195M
}
Unexecuted instantiation: boolobject.c:Py_INCREF
Unexecuted instantiation: bytes_methods.c:Py_INCREF
bytearrayobject.c:Py_INCREF
Line
Count
Source
250
36
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
36
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
36
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
36
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
36
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
36
#endif
301
36
}
Unexecuted instantiation: capsule.c:Py_INCREF
cellobject.c:Py_INCREF
Line
Count
Source
250
70.1k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
70.1k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
70.1k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
23.4k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
23.4k
        return;
284
23.4k
    }
285
46.7k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
46.7k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
46.7k
#endif
301
46.7k
}
classobject.c:Py_INCREF
Line
Count
Source
250
41.0M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
41.0M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
41.0M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
2
        _Py_INCREF_IMMORTAL_STAT_INC();
283
2
        return;
284
2
    }
285
41.0M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
41.0M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
41.0M
#endif
301
41.0M
}
codeobject.c:Py_INCREF
Line
Count
Source
250
491k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
491k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
491k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
255k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
255k
        return;
284
255k
    }
285
236k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
236k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
236k
#endif
301
236k
}
complexobject.c:Py_INCREF
Line
Count
Source
250
4.10k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
4.10k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
4.10k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
4.10k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
4.10k
        return;
284
4.10k
    }
285
0
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
0
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
0
#endif
301
0
}
descrobject.c:Py_INCREF
Line
Count
Source
250
19.9M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
19.9M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
19.9M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
30.5k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
30.5k
        return;
284
30.5k
    }
285
19.9M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
19.9M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
19.9M
#endif
301
19.9M
}
enumobject.c:Py_INCREF
Line
Count
Source
250
107M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
107M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
107M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
107M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
107M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
107M
#endif
301
107M
}
genobject.c:Py_INCREF
Line
Count
Source
250
37.7M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
37.7M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
37.7M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
37.6M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
37.6M
        return;
284
37.6M
    }
285
87.1k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
87.1k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
87.1k
#endif
301
87.1k
}
Unexecuted instantiation: fileobject.c:Py_INCREF
frameobject.c:Py_INCREF
Line
Count
Source
250
5.11k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
5.11k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
5.11k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
5.11k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
5.11k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
5.11k
#endif
301
5.11k
}
funcobject.c:Py_INCREF
Line
Count
Source
250
73.0M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
73.0M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
73.0M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
37.0M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
37.0M
        return;
284
37.0M
    }
285
36.0M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
36.0M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
36.0M
#endif
301
36.0M
}
Unexecuted instantiation: interpolationobject.c:Py_INCREF
iterobject.c:Py_INCREF
Line
Count
Source
250
683k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
683k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
683k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
341k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
341k
        return;
284
341k
    }
285
341k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
341k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
341k
#endif
301
341k
}
odictobject.c:Py_INCREF
Line
Count
Source
250
480
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
480
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
480
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
304
        _Py_INCREF_IMMORTAL_STAT_INC();
283
304
        return;
284
304
    }
285
176
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
176
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
176
#endif
301
176
}
methodobject.c:Py_INCREF
Line
Count
Source
250
311M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
311M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
311M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
4.42M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
4.42M
        return;
284
4.42M
    }
285
307M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
307M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
307M
#endif
301
307M
}
Unexecuted instantiation: namespaceobject.c:Py_INCREF
Unexecuted instantiation: _contextvars.c:Py_INCREF
Python-ast.c:Py_INCREF
Line
Count
Source
250
570k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
570k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
570k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
237k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
237k
        return;
284
237k
    }
285
332k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
332k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
332k
#endif
301
332k
}
Unexecuted instantiation: Python-tokenize.c:Py_INCREF
Unexecuted instantiation: asdl.c:Py_INCREF
assemble.c:Py_INCREF
Line
Count
Source
250
43.1k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
43.1k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
43.1k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
43.0k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
43.0k
        return;
284
43.0k
    }
285
131
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
131
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
131
#endif
301
131
}
Unexecuted instantiation: ast.c:Py_INCREF
Unexecuted instantiation: ast_preprocess.c:Py_INCREF
Unexecuted instantiation: ast_unparse.c:Py_INCREF
Unexecuted instantiation: critical_section.c:Py_INCREF
Unexecuted instantiation: crossinterp.c:Py_INCREF
Unexecuted instantiation: getcopyright.c:Py_INCREF
Unexecuted instantiation: getplatform.c:Py_INCREF
Unexecuted instantiation: getversion.c:Py_INCREF
Unexecuted instantiation: optimizer.c:Py_INCREF
Unexecuted instantiation: pathconfig.c:Py_INCREF
structmember.c:Py_INCREF
Line
Count
Source
250
96.7k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
96.7k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
96.7k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
38.3k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
38.3k
        return;
284
38.3k
    }
285
58.3k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
58.3k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
58.3k
#endif
301
58.3k
}
pegen.c:Py_INCREF
Line
Count
Source
250
22.3k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
22.3k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
22.3k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
1.51k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
1.51k
        return;
284
1.51k
    }
285
20.7k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
20.7k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
20.7k
#endif
301
20.7k
}
Unexecuted instantiation: pegen_errors.c:Py_INCREF
Unexecuted instantiation: parser.c:Py_INCREF
Unexecuted instantiation: buffer.c:Py_INCREF
Unexecuted instantiation: lexer.c:Py_INCREF
Unexecuted instantiation: state.c:Py_INCREF
Unexecuted instantiation: readline_tokenizer.c:Py_INCREF
Unexecuted instantiation: string_tokenizer.c:Py_INCREF
Unexecuted instantiation: utf8_tokenizer.c:Py_INCREF
Unexecuted instantiation: getcompiler.c:Py_INCREF
Unexecuted instantiation: mystrtoul.c:Py_INCREF
Unexecuted instantiation: token.c:Py_INCREF
Unexecuted instantiation: action_helpers.c:Py_INCREF
Unexecuted instantiation: string_parser.c:Py_INCREF
302
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
303
8.16G
#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
304
#endif
305
306
307
#if !defined(Py_LIMITED_API) && defined(Py_GIL_DISABLED)
308
// Implements Py_DECREF on objects not owned by the current thread.
309
PyAPI_FUNC(void) _Py_DecRefShared(PyObject *);
310
PyAPI_FUNC(void) _Py_DecRefSharedDebug(PyObject *, const char *, int);
311
312
// Called from Py_DECREF by the owning thread when the local refcount reaches
313
// zero. The call will deallocate the object if the shared refcount is also
314
// zero. Otherwise, the thread gives up ownership and merges the reference
315
// count fields.
316
PyAPI_FUNC(void) _Py_MergeZeroLocalRefcount(PyObject *);
317
#endif
318
319
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
320
// Stable ABI implements Py_DECREF() as a function call on limited C API
321
// version 3.12 and newer, and on Python built in debug mode. _Py_DecRef() was
322
// added to Python 3.10.0a7, use Py_DecRef() on older Python versions.
323
// Py_DecRef() accepts NULL whereas _Py_DecRef() doesn't.
324
4.40k
static inline void Py_DECREF(PyObject *op) {
325
4.40k
#  if Py_LIMITED_API+0 >= 0x030a00A7
326
4.40k
    _Py_DecRef(op);
327
#  else
328
    Py_DecRef(op);
329
#  endif
330
4.40k
}
errnomodule.c:Py_DECREF
Line
Count
Source
324
4.40k
static inline void Py_DECREF(PyObject *op) {
325
4.40k
#  if Py_LIMITED_API+0 >= 0x030a00A7
326
4.40k
    _Py_DecRef(op);
327
#  else
328
    Py_DecRef(op);
329
#  endif
330
4.40k
}
Unexecuted instantiation: _stat.c:Py_DECREF
331
4.40k
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
332
333
#elif defined(Py_GIL_DISABLED) && defined(Py_REF_DEBUG)
334
static inline void Py_DECREF(const char *filename, int lineno, PyObject *op)
335
{
336
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
337
    if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
338
        _Py_DECREF_IMMORTAL_STAT_INC();
339
        return;
340
    }
341
    _Py_DECREF_STAT_INC();
342
    _Py_DECREF_DecRefTotal();
343
    if (_Py_IsOwnedByCurrentThread(op)) {
344
        if (local == 0) {
345
            _Py_NegativeRefcount(filename, lineno, op);
346
        }
347
        local--;
348
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, local);
349
        if (local == 0) {
350
            _Py_MergeZeroLocalRefcount(op);
351
        }
352
    }
353
    else {
354
        _Py_DecRefSharedDebug(op, filename, lineno);
355
    }
356
}
357
#define Py_DECREF(op) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
358
359
#elif defined(Py_GIL_DISABLED)
360
static inline void Py_DECREF(PyObject *op)
361
{
362
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
363
    if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
364
        _Py_DECREF_IMMORTAL_STAT_INC();
365
        return;
366
    }
367
    _Py_DECREF_STAT_INC();
368
    if (_Py_IsOwnedByCurrentThread(op)) {
369
        local--;
370
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, local);
371
        if (local == 0) {
372
            _Py_MergeZeroLocalRefcount(op);
373
        }
374
    }
375
    else {
376
        _Py_DecRefShared(op);
377
    }
378
}
379
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
380
381
#elif defined(Py_REF_DEBUG)
382
383
static inline void Py_DECREF(const char *filename, int lineno, PyObject *op)
384
{
385
#if SIZEOF_VOID_P > 4
386
    /* If an object has been freed, it will have a negative full refcnt
387
     * If it has not it been freed, will have a very large refcnt */
388
    if (op->ob_refcnt_full <= 0 || op->ob_refcnt > (((PY_UINT32_T)-1) - (1<<20))) {
389
#else
390
    if (op->ob_refcnt <= 0) {
391
#endif
392
        _Py_NegativeRefcount(filename, lineno, op);
393
    }
394
    if (_Py_IsImmortal(op)) {
395
        _Py_DECREF_IMMORTAL_STAT_INC();
396
        return;
397
    }
398
    _Py_DECREF_STAT_INC();
399
    _Py_DECREF_DecRefTotal();
400
    if (--op->ob_refcnt == 0) {
401
        _Py_Dealloc(op);
402
    }
403
}
404
#define Py_DECREF(op) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
405
406
#else
407
408
static inline Py_ALWAYS_INLINE void Py_DECREF(PyObject *op)
409
6.99G
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
6.99G
    if (_Py_IsImmortal(op)) {
413
3.14G
        _Py_DECREF_IMMORTAL_STAT_INC();
414
3.14G
        return;
415
3.14G
    }
416
3.85G
    _Py_DECREF_STAT_INC();
417
3.85G
    if (--op->ob_refcnt == 0) {
418
1.05G
        _Py_Dealloc(op);
419
1.05G
    }
420
3.85G
}
bytesobject.c:Py_DECREF
Line
Count
Source
409
5.85M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
5.85M
    if (_Py_IsImmortal(op)) {
413
5.67M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
5.67M
        return;
415
5.67M
    }
416
175k
    _Py_DECREF_STAT_INC();
417
175k
    if (--op->ob_refcnt == 0) {
418
105k
        _Py_Dealloc(op);
419
105k
    }
420
175k
}
call.c:Py_DECREF
Line
Count
Source
409
121M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
121M
    if (_Py_IsImmortal(op)) {
413
50.8M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
50.8M
        return;
415
50.8M
    }
416
71.0M
    _Py_DECREF_STAT_INC();
417
71.0M
    if (--op->ob_refcnt == 0) {
418
55.4M
        _Py_Dealloc(op);
419
55.4M
    }
420
71.0M
}
exceptions.c:Py_DECREF
Line
Count
Source
409
101M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
101M
    if (_Py_IsImmortal(op)) {
413
31.5M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
31.5M
        return;
415
31.5M
    }
416
69.9M
    _Py_DECREF_STAT_INC();
417
69.9M
    if (--op->ob_refcnt == 0) {
418
61.1M
        _Py_Dealloc(op);
419
61.1M
    }
420
69.9M
}
genericaliasobject.c:Py_DECREF
Line
Count
Source
409
88
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
88
    if (_Py_IsImmortal(op)) {
413
44
        _Py_DECREF_IMMORTAL_STAT_INC();
414
44
        return;
415
44
    }
416
44
    _Py_DECREF_STAT_INC();
417
44
    if (--op->ob_refcnt == 0) {
418
44
        _Py_Dealloc(op);
419
44
    }
420
44
}
floatobject.c:Py_DECREF
Line
Count
Source
409
8
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
8
    if (_Py_IsImmortal(op)) {
413
5
        _Py_DECREF_IMMORTAL_STAT_INC();
414
5
        return;
415
5
    }
416
3
    _Py_DECREF_STAT_INC();
417
3
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
3
}
listobject.c:Py_DECREF
Line
Count
Source
409
1.44G
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.44G
    if (_Py_IsImmortal(op)) {
413
432M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
432M
        return;
415
432M
    }
416
1.00G
    _Py_DECREF_STAT_INC();
417
1.00G
    if (--op->ob_refcnt == 0) {
418
274M
        _Py_Dealloc(op);
419
274M
    }
420
1.00G
}
longobject.c:Py_DECREF
Line
Count
Source
409
4.31M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.31M
    if (_Py_IsImmortal(op)) {
413
3.80M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
3.80M
        return;
415
3.80M
    }
416
507k
    _Py_DECREF_STAT_INC();
417
507k
    if (--op->ob_refcnt == 0) {
418
2.62k
        _Py_Dealloc(op);
419
2.62k
    }
420
507k
}
dictobject.c:Py_DECREF
Line
Count
Source
409
1.06G
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.06G
    if (_Py_IsImmortal(op)) {
413
523M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
523M
        return;
415
523M
    }
416
537M
    _Py_DECREF_STAT_INC();
417
537M
    if (--op->ob_refcnt == 0) {
418
78.6M
        _Py_Dealloc(op);
419
78.6M
    }
420
537M
}
memoryobject.c:Py_DECREF
Line
Count
Source
409
656k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
656k
    if (_Py_IsImmortal(op)) {
413
4
        _Py_DECREF_IMMORTAL_STAT_INC();
414
4
        return;
415
4
    }
416
656k
    _Py_DECREF_STAT_INC();
417
656k
    if (--op->ob_refcnt == 0) {
418
327k
        _Py_Dealloc(op);
419
327k
    }
420
656k
}
moduleobject.c:Py_DECREF
Line
Count
Source
409
45.8k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
45.8k
    if (_Py_IsImmortal(op)) {
413
34.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
34.2k
        return;
415
34.2k
    }
416
11.5k
    _Py_DECREF_STAT_INC();
417
11.5k
    if (--op->ob_refcnt == 0) {
418
8
        _Py_Dealloc(op);
419
8
    }
420
11.5k
}
object.c:Py_DECREF
Line
Count
Source
409
431M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
431M
    if (_Py_IsImmortal(op)) {
413
393M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
393M
        return;
415
393M
    }
416
37.8M
    _Py_DECREF_STAT_INC();
417
37.8M
    if (--op->ob_refcnt == 0) {
418
238
        _Py_Dealloc(op);
419
238
    }
420
37.8M
}
Unexecuted instantiation: obmalloc.c:Py_DECREF
Unexecuted instantiation: picklebufobject.c:Py_DECREF
rangeobject.c:Py_DECREF
Line
Count
Source
409
33.1M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
33.1M
    if (_Py_IsImmortal(op)) {
413
30.3M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
30.3M
        return;
415
30.3M
    }
416
2.77M
    _Py_DECREF_STAT_INC();
417
2.77M
    if (--op->ob_refcnt == 0) {
418
1.27M
        _Py_Dealloc(op);
419
1.27M
    }
420
2.77M
}
setobject.c:Py_DECREF
Line
Count
Source
409
1.22M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.22M
    if (_Py_IsImmortal(op)) {
413
382k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
382k
        return;
415
382k
    }
416
841k
    _Py_DECREF_STAT_INC();
417
841k
    if (--op->ob_refcnt == 0) {
418
36.2k
        _Py_Dealloc(op);
419
36.2k
    }
420
841k
}
sliceobject.c:Py_DECREF
Line
Count
Source
409
129M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
129M
    if (_Py_IsImmortal(op)) {
413
116M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
116M
        return;
415
116M
    }
416
12.9M
    _Py_DECREF_STAT_INC();
417
12.9M
    if (--op->ob_refcnt == 0) {
418
1.36M
        _Py_Dealloc(op);
419
1.36M
    }
420
12.9M
}
structseq.c:Py_DECREF
Line
Count
Source
409
93.6k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
93.6k
    if (_Py_IsImmortal(op)) {
413
23.9k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
23.9k
        return;
415
23.9k
    }
416
69.7k
    _Py_DECREF_STAT_INC();
417
69.7k
    if (--op->ob_refcnt == 0) {
418
60.7k
        _Py_Dealloc(op);
419
60.7k
    }
420
69.7k
}
templateobject.c:Py_DECREF
Line
Count
Source
409
4
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4
    if (_Py_IsImmortal(op)) {
413
2
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2
        return;
415
2
    }
416
2
    _Py_DECREF_STAT_INC();
417
2
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
2
}
tupleobject.c:Py_DECREF
Line
Count
Source
409
935M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
935M
    if (_Py_IsImmortal(op)) {
413
577M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
577M
        return;
415
577M
    }
416
357M
    _Py_DECREF_STAT_INC();
417
357M
    if (--op->ob_refcnt == 0) {
418
103M
        _Py_Dealloc(op);
419
103M
    }
420
357M
}
typeobject.c:Py_DECREF
Line
Count
Source
409
329M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
329M
    if (_Py_IsImmortal(op)) {
413
37.9M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
37.9M
        return;
415
37.9M
    }
416
291M
    _Py_DECREF_STAT_INC();
417
291M
    if (--op->ob_refcnt == 0) {
418
14.6M
        _Py_Dealloc(op);
419
14.6M
    }
420
291M
}
Unexecuted instantiation: typevarobject.c:Py_DECREF
unicodeobject.c:Py_DECREF
Line
Count
Source
409
211M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
211M
    if (_Py_IsImmortal(op)) {
413
126M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
126M
        return;
415
126M
    }
416
85.2M
    _Py_DECREF_STAT_INC();
417
85.2M
    if (--op->ob_refcnt == 0) {
418
19.4M
        _Py_Dealloc(op);
419
19.4M
    }
420
85.2M
}
Unexecuted instantiation: unicodectype.c:Py_DECREF
unionobject.c:Py_DECREF
Line
Count
Source
409
950
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
950
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
950
    _Py_DECREF_STAT_INC();
417
950
    if (--op->ob_refcnt == 0) {
418
950
        _Py_Dealloc(op);
419
950
    }
420
950
}
weakrefobject.c:Py_DECREF
Line
Count
Source
409
12.3k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
12.3k
    if (_Py_IsImmortal(op)) {
413
6.43k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
6.43k
        return;
415
6.43k
    }
416
5.87k
    _Py_DECREF_STAT_INC();
417
5.87k
    if (--op->ob_refcnt == 0) {
418
5.57k
        _Py_Dealloc(op);
419
5.57k
    }
420
5.87k
}
_warnings.c:Py_DECREF
Line
Count
Source
409
164k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
164k
    if (_Py_IsImmortal(op)) {
413
42.1k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
42.1k
        return;
415
42.1k
    }
416
122k
    _Py_DECREF_STAT_INC();
417
122k
    if (--op->ob_refcnt == 0) {
418
33.8k
        _Py_Dealloc(op);
419
33.8k
    }
420
122k
}
bltinmodule.c:Py_DECREF
Line
Count
Source
409
124M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
124M
    if (_Py_IsImmortal(op)) {
413
69.3M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
69.3M
        return;
415
69.3M
    }
416
55.1M
    _Py_DECREF_STAT_INC();
417
55.1M
    if (--op->ob_refcnt == 0) {
418
31.9M
        _Py_Dealloc(op);
419
31.9M
    }
420
55.1M
}
ceval.c:Py_DECREF
Line
Count
Source
409
5.68k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
5.68k
    if (_Py_IsImmortal(op)) {
413
683
        _Py_DECREF_IMMORTAL_STAT_INC();
414
683
        return;
415
683
    }
416
5.00k
    _Py_DECREF_STAT_INC();
417
5.00k
    if (--op->ob_refcnt == 0) {
418
372
        _Py_Dealloc(op);
419
372
    }
420
5.00k
}
codecs.c:Py_DECREF
Line
Count
Source
409
6.19M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
6.19M
    if (_Py_IsImmortal(op)) {
413
2.13M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.13M
        return;
415
2.13M
    }
416
4.06M
    _Py_DECREF_STAT_INC();
417
4.06M
    if (--op->ob_refcnt == 0) {
418
1.93M
        _Py_Dealloc(op);
419
1.93M
    }
420
4.06M
}
codegen.c:Py_DECREF
Line
Count
Source
409
141k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
141k
    if (_Py_IsImmortal(op)) {
413
125k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
125k
        return;
415
125k
    }
416
16.0k
    _Py_DECREF_STAT_INC();
417
16.0k
    if (--op->ob_refcnt == 0) {
418
967
        _Py_Dealloc(op);
419
967
    }
420
16.0k
}
compile.c:Py_DECREF
Line
Count
Source
409
579k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
579k
    if (_Py_IsImmortal(op)) {
413
295k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
295k
        return;
415
295k
    }
416
284k
    _Py_DECREF_STAT_INC();
417
284k
    if (--op->ob_refcnt == 0) {
418
93.7k
        _Py_Dealloc(op);
419
93.7k
    }
420
284k
}
context.c:Py_DECREF
Line
Count
Source
409
32
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
32
    if (_Py_IsImmortal(op)) {
413
16
        _Py_DECREF_IMMORTAL_STAT_INC();
414
16
        return;
415
16
    }
416
16
    _Py_DECREF_STAT_INC();
417
16
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
16
}
errors.c:Py_DECREF
Line
Count
Source
409
71.3M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
71.3M
    if (_Py_IsImmortal(op)) {
413
28.5M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
28.5M
        return;
415
28.5M
    }
416
42.7M
    _Py_DECREF_STAT_INC();
417
42.7M
    if (--op->ob_refcnt == 0) {
418
9.89M
        _Py_Dealloc(op);
419
9.89M
    }
420
42.7M
}
flowgraph.c:Py_DECREF
Line
Count
Source
409
69.9k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
69.9k
    if (_Py_IsImmortal(op)) {
413
37.8k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
37.8k
        return;
415
37.8k
    }
416
32.1k
    _Py_DECREF_STAT_INC();
417
32.1k
    if (--op->ob_refcnt == 0) {
418
51
        _Py_Dealloc(op);
419
51
    }
420
32.1k
}
frame.c:Py_DECREF
Line
Count
Source
409
22.9M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
22.9M
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
22.9M
    _Py_DECREF_STAT_INC();
417
22.9M
    if (--op->ob_refcnt == 0) {
418
11.9M
        _Py_Dealloc(op);
419
11.9M
    }
420
22.9M
}
Unexecuted instantiation: future.c:Py_DECREF
gc.c:Py_DECREF
Line
Count
Source
409
624k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
624k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
624k
    _Py_DECREF_STAT_INC();
417
624k
    if (--op->ob_refcnt == 0) {
418
374k
        _Py_Dealloc(op);
419
374k
    }
420
624k
}
Unexecuted instantiation: gc_gil.c:Py_DECREF
getargs.c:Py_DECREF
Line
Count
Source
409
1.54M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.54M
    if (_Py_IsImmortal(op)) {
413
852k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
852k
        return;
415
852k
    }
416
694k
    _Py_DECREF_STAT_INC();
417
694k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
694k
}
Unexecuted instantiation: ceval_gil.c:Py_DECREF
Unexecuted instantiation: hamt.c:Py_DECREF
Unexecuted instantiation: hashtable.c:Py_DECREF
import.c:Py_DECREF
Line
Count
Source
409
167k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
167k
    if (_Py_IsImmortal(op)) {
413
13.0k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
13.0k
        return;
415
13.0k
    }
416
154k
    _Py_DECREF_STAT_INC();
417
154k
    if (--op->ob_refcnt == 0) {
418
11.3k
        _Py_Dealloc(op);
419
11.3k
    }
420
154k
}
importdl.c:Py_DECREF
Line
Count
Source
409
1.20k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.20k
    if (_Py_IsImmortal(op)) {
413
494
        _Py_DECREF_IMMORTAL_STAT_INC();
414
494
        return;
415
494
    }
416
710
    _Py_DECREF_STAT_INC();
417
710
    if (--op->ob_refcnt == 0) {
418
456
        _Py_Dealloc(op);
419
456
    }
420
710
}
initconfig.c:Py_DECREF
Line
Count
Source
409
2.20k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
2.20k
    if (_Py_IsImmortal(op)) {
413
1.77k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
1.77k
        return;
415
1.77k
    }
416
432
    _Py_DECREF_STAT_INC();
417
432
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
432
}
instrumentation.c:Py_DECREF
Line
Count
Source
409
384
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
384
    if (_Py_IsImmortal(op)) {
413
208
        _Py_DECREF_IMMORTAL_STAT_INC();
414
208
        return;
415
208
    }
416
176
    _Py_DECREF_STAT_INC();
417
176
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
176
}
instruction_sequence.c:Py_DECREF
Line
Count
Source
409
1
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
1
    _Py_DECREF_STAT_INC();
417
1
    if (--op->ob_refcnt == 0) {
418
1
        _Py_Dealloc(op);
419
1
    }
420
1
}
intrinsics.c:Py_DECREF
Line
Count
Source
409
28.6k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
28.6k
    if (_Py_IsImmortal(op)) {
413
16.3k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
16.3k
        return;
415
16.3k
    }
416
12.3k
    _Py_DECREF_STAT_INC();
417
12.3k
    if (--op->ob_refcnt == 0) {
418
124
        _Py_Dealloc(op);
419
124
    }
420
12.3k
}
Unexecuted instantiation: legacy_tracing.c:Py_DECREF
Unexecuted instantiation: lock.c:Py_DECREF
marshal.c:Py_DECREF
Line
Count
Source
409
317k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
317k
    if (_Py_IsImmortal(op)) {
413
137k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
137k
        return;
415
137k
    }
416
179k
    _Py_DECREF_STAT_INC();
417
179k
    if (--op->ob_refcnt == 0) {
418
2.46k
        _Py_Dealloc(op);
419
2.46k
    }
420
179k
}
modsupport.c:Py_DECREF
Line
Count
Source
409
17.7k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
17.7k
    if (_Py_IsImmortal(op)) {
413
11.7k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
11.7k
        return;
415
11.7k
    }
416
6.00k
    _Py_DECREF_STAT_INC();
417
6.00k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
6.00k
}
Unexecuted instantiation: mysnprintf.c:Py_DECREF
Unexecuted instantiation: parking_lot.c:Py_DECREF
Unexecuted instantiation: preconfig.c:Py_DECREF
pyarena.c:Py_DECREF
Line
Count
Source
409
4.52M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.52M
    if (_Py_IsImmortal(op)) {
413
3.86M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
3.86M
        return;
415
3.86M
    }
416
661k
    _Py_DECREF_STAT_INC();
417
661k
    if (--op->ob_refcnt == 0) {
418
22.5k
        _Py_Dealloc(op);
419
22.5k
    }
420
661k
}
Unexecuted instantiation: pyctype.c:Py_DECREF
Unexecuted instantiation: pyhash.c:Py_DECREF
pylifecycle.c:Py_DECREF
Line
Count
Source
409
576
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
576
    if (_Py_IsImmortal(op)) {
413
112
        _Py_DECREF_IMMORTAL_STAT_INC();
414
112
        return;
415
112
    }
416
464
    _Py_DECREF_STAT_INC();
417
464
    if (--op->ob_refcnt == 0) {
418
48
        _Py_Dealloc(op);
419
48
    }
420
464
}
Unexecuted instantiation: pymath.c:Py_DECREF
Unexecuted instantiation: pystate.c:Py_DECREF
pythonrun.c:Py_DECREF
Line
Count
Source
409
190
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
190
    if (_Py_IsImmortal(op)) {
413
32
        _Py_DECREF_IMMORTAL_STAT_INC();
414
32
        return;
415
32
    }
416
158
    _Py_DECREF_STAT_INC();
417
158
    if (--op->ob_refcnt == 0) {
418
126
        _Py_Dealloc(op);
419
126
    }
420
158
}
Unexecuted instantiation: pytime.c:Py_DECREF
Unexecuted instantiation: qsbr.c:Py_DECREF
Unexecuted instantiation: bootstrap_hash.c:Py_DECREF
specialize.c:Py_DECREF
Line
Count
Source
409
497k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
497k
    if (_Py_IsImmortal(op)) {
413
76.9k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
76.9k
        return;
415
76.9k
    }
416
420k
    _Py_DECREF_STAT_INC();
417
420k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
420k
}
symtable.c:Py_DECREF
Line
Count
Source
409
754k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
754k
    if (_Py_IsImmortal(op)) {
413
343k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
343k
        return;
415
343k
    }
416
410k
    _Py_DECREF_STAT_INC();
417
410k
    if (--op->ob_refcnt == 0) {
418
194k
        _Py_Dealloc(op);
419
194k
    }
420
410k
}
sysmodule.c:Py_DECREF
Line
Count
Source
409
1.90k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.90k
    if (_Py_IsImmortal(op)) {
413
1.02k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
1.02k
        return;
415
1.02k
    }
416
880
    _Py_DECREF_STAT_INC();
417
880
    if (--op->ob_refcnt == 0) {
418
64
        _Py_Dealloc(op);
419
64
    }
420
880
}
Unexecuted instantiation: thread.c:Py_DECREF
traceback.c:Py_DECREF
Line
Count
Source
409
62.3M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
62.3M
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
62.3M
    _Py_DECREF_STAT_INC();
417
62.3M
    if (--op->ob_refcnt == 0) {
418
12.0M
        _Py_Dealloc(op);
419
12.0M
    }
420
62.3M
}
Unexecuted instantiation: tracemalloc.c:Py_DECREF
Unexecuted instantiation: getopt.c:Py_DECREF
Unexecuted instantiation: pystrcmp.c:Py_DECREF
Unexecuted instantiation: pystrtod.c:Py_DECREF
Unexecuted instantiation: pystrhex.c:Py_DECREF
Unexecuted instantiation: dtoa.c:Py_DECREF
formatter_unicode.c:Py_DECREF
Line
Count
Source
409
256
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
256
    if (_Py_IsImmortal(op)) {
413
192
        _Py_DECREF_IMMORTAL_STAT_INC();
414
192
        return;
415
192
    }
416
64
    _Py_DECREF_STAT_INC();
417
64
    if (--op->ob_refcnt == 0) {
418
64
        _Py_Dealloc(op);
419
64
    }
420
64
}
fileutils.c:Py_DECREF
Line
Count
Source
409
11.6k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
11.6k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
11.6k
    _Py_DECREF_STAT_INC();
417
11.6k
    if (--op->ob_refcnt == 0) {
418
11.6k
        _Py_Dealloc(op);
419
11.6k
    }
420
11.6k
}
Unexecuted instantiation: suggestions.c:Py_DECREF
Unexecuted instantiation: perf_trampoline.c:Py_DECREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_DECREF
Unexecuted instantiation: remote_debugging.c:Py_DECREF
Unexecuted instantiation: dynload_shlib.c:Py_DECREF
Unexecuted instantiation: config.c:Py_DECREF
Unexecuted instantiation: gcmodule.c:Py_DECREF
Unexecuted instantiation: _asynciomodule.c:Py_DECREF
Unexecuted instantiation: atexitmodule.c:Py_DECREF
Unexecuted instantiation: faulthandler.c:Py_DECREF
posixmodule.c:Py_DECREF
Line
Count
Source
409
50.6k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
50.6k
    if (_Py_IsImmortal(op)) {
413
2.59k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.59k
        return;
415
2.59k
    }
416
48.0k
    _Py_DECREF_STAT_INC();
417
48.0k
    if (--op->ob_refcnt == 0) {
418
33.5k
        _Py_Dealloc(op);
419
33.5k
    }
420
48.0k
}
signalmodule.c:Py_DECREF
Line
Count
Source
409
32
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
32
    if (_Py_IsImmortal(op)) {
413
16
        _Py_DECREF_IMMORTAL_STAT_INC();
414
16
        return;
415
16
    }
416
16
    _Py_DECREF_STAT_INC();
417
16
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
16
}
Unexecuted instantiation: _tracemalloc.c:Py_DECREF
Unexecuted instantiation: _suggestions.c:Py_DECREF
_datetimemodule.c:Py_DECREF
Line
Count
Source
409
262
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
262
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
262
    _Py_DECREF_STAT_INC();
417
262
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
262
}
Unexecuted instantiation: _codecsmodule.c:Py_DECREF
_collectionsmodule.c:Py_DECREF
Line
Count
Source
409
110k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
110k
    if (_Py_IsImmortal(op)) {
413
52.7k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
52.7k
        return;
415
52.7k
    }
416
57.7k
    _Py_DECREF_STAT_INC();
417
57.7k
    if (--op->ob_refcnt == 0) {
418
41.7k
        _Py_Dealloc(op);
419
41.7k
    }
420
57.7k
}
_iomodule.c:Py_DECREF
Line
Count
Source
409
6.33k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
6.33k
    if (_Py_IsImmortal(op)) {
413
2.15k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.15k
        return;
415
2.15k
    }
416
4.17k
    _Py_DECREF_STAT_INC();
417
4.17k
    if (--op->ob_refcnt == 0) {
418
2.09k
        _Py_Dealloc(op);
419
2.09k
    }
420
4.17k
}
iobase.c:Py_DECREF
Line
Count
Source
409
120k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
120k
    if (_Py_IsImmortal(op)) {
413
101k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
101k
        return;
415
101k
    }
416
19.2k
    _Py_DECREF_STAT_INC();
417
19.2k
    if (--op->ob_refcnt == 0) {
418
9.60k
        _Py_Dealloc(op);
419
9.60k
    }
420
19.2k
}
fileio.c:Py_DECREF
Line
Count
Source
409
3.46k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
3.46k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
3.46k
    _Py_DECREF_STAT_INC();
417
3.46k
    if (--op->ob_refcnt == 0) {
418
2.23k
        _Py_Dealloc(op);
419
2.23k
    }
420
3.46k
}
bytesio.c:Py_DECREF
Line
Count
Source
409
28.8k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
28.8k
    if (_Py_IsImmortal(op)) {
413
9.62k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
9.62k
        return;
415
9.62k
    }
416
19.1k
    _Py_DECREF_STAT_INC();
417
19.1k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
19.1k
}
bufferedio.c:Py_DECREF
Line
Count
Source
409
7.14k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
7.14k
    if (_Py_IsImmortal(op)) {
413
2.07k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.07k
        return;
415
2.07k
    }
416
5.07k
    _Py_DECREF_STAT_INC();
417
5.07k
    if (--op->ob_refcnt == 0) {
418
2.03k
        _Py_Dealloc(op);
419
2.03k
    }
420
5.07k
}
textio.c:Py_DECREF
Line
Count
Source
409
48.1k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
48.1k
    if (_Py_IsImmortal(op)) {
413
32.0k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
32.0k
        return;
415
32.0k
    }
416
16.0k
    _Py_DECREF_STAT_INC();
417
16.0k
    if (--op->ob_refcnt == 0) {
418
16
        _Py_Dealloc(op);
419
16
    }
420
16.0k
}
stringio.c:Py_DECREF
Line
Count
Source
409
292k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
292k
    if (_Py_IsImmortal(op)) {
413
151k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
151k
        return;
415
151k
    }
416
140k
    _Py_DECREF_STAT_INC();
417
140k
    if (--op->ob_refcnt == 0) {
418
31.8k
        _Py_Dealloc(op);
419
31.8k
    }
420
140k
}
itertoolsmodule.c:Py_DECREF
Line
Count
Source
409
928
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
928
    if (_Py_IsImmortal(op)) {
413
178
        _Py_DECREF_IMMORTAL_STAT_INC();
414
178
        return;
415
178
    }
416
750
    _Py_DECREF_STAT_INC();
417
750
    if (--op->ob_refcnt == 0) {
418
228
        _Py_Dealloc(op);
419
228
    }
420
750
}
sre.c:Py_DECREF
Line
Count
Source
409
541M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
541M
    if (_Py_IsImmortal(op)) {
413
110M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
110M
        return;
415
110M
    }
416
430M
    _Py_DECREF_STAT_INC();
417
430M
    if (--op->ob_refcnt == 0) {
418
7.59M
        _Py_Dealloc(op);
419
7.59M
    }
420
430M
}
Unexecuted instantiation: _sysconfig.c:Py_DECREF
_threadmodule.c:Py_DECREF
Line
Count
Source
409
5.21k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
5.21k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
5.21k
    _Py_DECREF_STAT_INC();
417
5.21k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
5.21k
}
Unexecuted instantiation: timemodule.c:Py_DECREF
Unexecuted instantiation: _typesmodule.c:Py_DECREF
Unexecuted instantiation: _typingmodule.c:Py_DECREF
Unexecuted instantiation: _weakref.c:Py_DECREF
_abc.c:Py_DECREF
Line
Count
Source
409
29.2k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
29.2k
    if (_Py_IsImmortal(op)) {
413
10.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
10.2k
        return;
415
10.2k
    }
416
18.9k
    _Py_DECREF_STAT_INC();
417
18.9k
    if (--op->ob_refcnt == 0) {
418
2.54k
        _Py_Dealloc(op);
419
2.54k
    }
420
18.9k
}
_functoolsmodule.c:Py_DECREF
Line
Count
Source
409
251
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
251
    if (_Py_IsImmortal(op)) {
413
39
        _Py_DECREF_IMMORTAL_STAT_INC();
414
39
        return;
415
39
    }
416
212
    _Py_DECREF_STAT_INC();
417
212
    if (--op->ob_refcnt == 0) {
418
70
        _Py_Dealloc(op);
419
70
    }
420
212
}
Unexecuted instantiation: _localemodule.c:Py_DECREF
Unexecuted instantiation: _opcode.c:Py_DECREF
_operator.c:Py_DECREF
Line
Count
Source
409
511k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
511k
    if (_Py_IsImmortal(op)) {
413
255k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
255k
        return;
415
255k
    }
416
255k
    _Py_DECREF_STAT_INC();
417
255k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
255k
}
Unexecuted instantiation: symtablemodule.c:Py_DECREF
Unexecuted instantiation: pwdmodule.c:Py_DECREF
getpath.c:Py_DECREF
Line
Count
Source
409
528
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
528
    if (_Py_IsImmortal(op)) {
413
192
        _Py_DECREF_IMMORTAL_STAT_INC();
414
192
        return;
415
192
    }
416
336
    _Py_DECREF_STAT_INC();
417
336
    if (--op->ob_refcnt == 0) {
418
16
        _Py_Dealloc(op);
419
16
    }
420
336
}
Unexecuted instantiation: frozen.c:Py_DECREF
Unexecuted instantiation: getbuildinfo.c:Py_DECREF
Unexecuted instantiation: peg_api.c:Py_DECREF
Unexecuted instantiation: file_tokenizer.c:Py_DECREF
helpers.c:Py_DECREF
Line
Count
Source
409
21.7k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
21.7k
    if (_Py_IsImmortal(op)) {
413
520
        _Py_DECREF_IMMORTAL_STAT_INC();
414
520
        return;
415
520
    }
416
21.2k
    _Py_DECREF_STAT_INC();
417
21.2k
    if (--op->ob_refcnt == 0) {
418
15.8k
        _Py_Dealloc(op);
419
15.8k
    }
420
21.2k
}
Unexecuted instantiation: myreadline.c:Py_DECREF
abstract.c:Py_DECREF
Line
Count
Source
409
447M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
447M
    if (_Py_IsImmortal(op)) {
413
359M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
359M
        return;
415
359M
    }
416
88.4M
    _Py_DECREF_STAT_INC();
417
88.4M
    if (--op->ob_refcnt == 0) {
418
1.48M
        _Py_Dealloc(op);
419
1.48M
    }
420
88.4M
}
Unexecuted instantiation: boolobject.c:Py_DECREF
Unexecuted instantiation: bytes_methods.c:Py_DECREF
bytearrayobject.c:Py_DECREF
Line
Count
Source
409
16
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
16
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
16
    _Py_DECREF_STAT_INC();
417
16
    if (--op->ob_refcnt == 0) {
418
16
        _Py_Dealloc(op);
419
16
    }
420
16
}
capsule.c:Py_DECREF
Line
Count
Source
409
10
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
10
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
10
    _Py_DECREF_STAT_INC();
417
10
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
10
}
cellobject.c:Py_DECREF
Line
Count
Source
409
331k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
331k
    if (_Py_IsImmortal(op)) {
413
29.4k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
29.4k
        return;
415
29.4k
    }
416
302k
    _Py_DECREF_STAT_INC();
417
302k
    if (--op->ob_refcnt == 0) {
418
206k
        _Py_Dealloc(op);
419
206k
    }
420
302k
}
classobject.c:Py_DECREF
Line
Count
Source
409
41.0M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
41.0M
    if (_Py_IsImmortal(op)) {
413
2
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2
        return;
415
2
    }
416
41.0M
    _Py_DECREF_STAT_INC();
417
41.0M
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
41.0M
}
codeobject.c:Py_DECREF
Line
Count
Source
409
104k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
104k
    if (_Py_IsImmortal(op)) {
413
41.3k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
41.3k
        return;
415
41.3k
    }
416
62.9k
    _Py_DECREF_STAT_INC();
417
62.9k
    if (--op->ob_refcnt == 0) {
418
30.0k
        _Py_Dealloc(op);
419
30.0k
    }
420
62.9k
}
Unexecuted instantiation: complexobject.c:Py_DECREF
descrobject.c:Py_DECREF
Line
Count
Source
409
110M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
110M
    if (_Py_IsImmortal(op)) {
413
9.60M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
9.60M
        return;
415
9.60M
    }
416
100M
    _Py_DECREF_STAT_INC();
417
100M
    if (--op->ob_refcnt == 0) {
418
74.9M
        _Py_Dealloc(op);
419
74.9M
    }
420
100M
}
enumobject.c:Py_DECREF
Line
Count
Source
409
263M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
263M
    if (_Py_IsImmortal(op)) {
413
107M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
107M
        return;
415
107M
    }
416
156M
    _Py_DECREF_STAT_INC();
417
156M
    if (--op->ob_refcnt == 0) {
418
48.0M
        _Py_Dealloc(op);
419
48.0M
    }
420
156M
}
genobject.c:Py_DECREF
Line
Count
Source
409
49.3M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
49.3M
    if (_Py_IsImmortal(op)) {
413
49.2M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
49.2M
        return;
415
49.2M
    }
416
85.1k
    _Py_DECREF_STAT_INC();
417
85.1k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
85.1k
}
fileobject.c:Py_DECREF
Line
Count
Source
409
12.8k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
12.8k
    if (_Py_IsImmortal(op)) {
413
11.8k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
11.8k
        return;
415
11.8k
    }
416
999
    _Py_DECREF_STAT_INC();
417
999
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
999
}
frameobject.c:Py_DECREF
Line
Count
Source
409
10.9M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
10.9M
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
10.9M
    _Py_DECREF_STAT_INC();
417
10.9M
    if (--op->ob_refcnt == 0) {
418
17.2k
        _Py_Dealloc(op);
419
17.2k
    }
420
10.9M
}
funcobject.c:Py_DECREF
Line
Count
Source
409
111M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
111M
    if (_Py_IsImmortal(op)) {
413
63.6M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
63.6M
        return;
415
63.6M
    }
416
47.8M
    _Py_DECREF_STAT_INC();
417
47.8M
    if (--op->ob_refcnt == 0) {
418
399k
        _Py_Dealloc(op);
419
399k
    }
420
47.8M
}
interpolationobject.c:Py_DECREF
Line
Count
Source
409
16
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
16
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
16
    _Py_DECREF_STAT_INC();
417
16
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
16
}
iterobject.c:Py_DECREF
Line
Count
Source
409
1.02M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.02M
    if (_Py_IsImmortal(op)) {
413
682k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
682k
        return;
415
682k
    }
416
341k
    _Py_DECREF_STAT_INC();
417
341k
    if (--op->ob_refcnt == 0) {
418
341k
        _Py_Dealloc(op);
419
341k
    }
420
341k
}
odictobject.c:Py_DECREF
Line
Count
Source
409
672
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
672
    if (_Py_IsImmortal(op)) {
413
400
        _Py_DECREF_IMMORTAL_STAT_INC();
414
400
        return;
415
400
    }
416
272
    _Py_DECREF_STAT_INC();
417
272
    if (--op->ob_refcnt == 0) {
418
160
        _Py_Dealloc(op);
419
160
    }
420
272
}
methodobject.c:Py_DECREF
Line
Count
Source
409
311M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
311M
    if (_Py_IsImmortal(op)) {
413
4.41M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
4.41M
        return;
415
4.41M
    }
416
307M
    _Py_DECREF_STAT_INC();
417
307M
    if (--op->ob_refcnt == 0) {
418
245M
        _Py_Dealloc(op);
419
245M
    }
420
307M
}
namespaceobject.c:Py_DECREF
Line
Count
Source
409
16
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
16
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
16
    _Py_DECREF_STAT_INC();
417
16
    if (--op->ob_refcnt == 0) {
418
16
        _Py_Dealloc(op);
419
16
    }
420
16
}
Unexecuted instantiation: _contextvars.c:Py_DECREF
Python-ast.c:Py_DECREF
Line
Count
Source
409
4.02M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.02M
    if (_Py_IsImmortal(op)) {
413
1.81M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
1.81M
        return;
415
1.81M
    }
416
2.21M
    _Py_DECREF_STAT_INC();
417
2.21M
    if (--op->ob_refcnt == 0) {
418
501k
        _Py_Dealloc(op);
419
501k
    }
420
2.21M
}
Unexecuted instantiation: Python-tokenize.c:Py_DECREF
Unexecuted instantiation: asdl.c:Py_DECREF
assemble.c:Py_DECREF
Line
Count
Source
409
46.0k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
46.0k
    if (_Py_IsImmortal(op)) {
413
7.87k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
7.87k
        return;
415
7.87k
    }
416
38.2k
    _Py_DECREF_STAT_INC();
417
38.2k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
38.2k
}
Unexecuted instantiation: ast.c:Py_DECREF
ast_preprocess.c:Py_DECREF
Line
Count
Source
409
2.23k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
2.23k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
2.23k
    _Py_DECREF_STAT_INC();
417
2.23k
    if (--op->ob_refcnt == 0) {
418
2.23k
        _Py_Dealloc(op);
419
2.23k
    }
420
2.23k
}
Unexecuted instantiation: ast_unparse.c:Py_DECREF
Unexecuted instantiation: critical_section.c:Py_DECREF
Unexecuted instantiation: crossinterp.c:Py_DECREF
Unexecuted instantiation: getcopyright.c:Py_DECREF
Unexecuted instantiation: getplatform.c:Py_DECREF
Unexecuted instantiation: getversion.c:Py_DECREF
Unexecuted instantiation: optimizer.c:Py_DECREF
Unexecuted instantiation: pathconfig.c:Py_DECREF
structmember.c:Py_DECREF
Line
Count
Source
409
592
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
592
    if (_Py_IsImmortal(op)) {
413
380
        _Py_DECREF_IMMORTAL_STAT_INC();
414
380
        return;
415
380
    }
416
212
    _Py_DECREF_STAT_INC();
417
212
    if (--op->ob_refcnt == 0) {
418
28
        _Py_Dealloc(op);
419
28
    }
420
212
}
pegen.c:Py_DECREF
Line
Count
Source
409
139k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
139k
    if (_Py_IsImmortal(op)) {
413
50.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
50.2k
        return;
415
50.2k
    }
416
89.4k
    _Py_DECREF_STAT_INC();
417
89.4k
    if (--op->ob_refcnt == 0) {
418
71.7k
        _Py_Dealloc(op);
419
71.7k
    }
420
89.4k
}
pegen_errors.c:Py_DECREF
Line
Count
Source
409
48.9k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
48.9k
    if (_Py_IsImmortal(op)) {
413
3.60k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
3.60k
        return;
415
3.60k
    }
416
45.3k
    _Py_DECREF_STAT_INC();
417
45.3k
    if (--op->ob_refcnt == 0) {
418
5.64k
        _Py_Dealloc(op);
419
5.64k
    }
420
45.3k
}
Unexecuted instantiation: parser.c:Py_DECREF
Unexecuted instantiation: buffer.c:Py_DECREF
lexer.c:Py_DECREF
Line
Count
Source
409
14.6k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
14.6k
    if (_Py_IsImmortal(op)) {
413
678
        _Py_DECREF_IMMORTAL_STAT_INC();
414
678
        return;
415
678
    }
416
14.0k
    _Py_DECREF_STAT_INC();
417
14.0k
    if (--op->ob_refcnt == 0) {
418
14.0k
        _Py_Dealloc(op);
419
14.0k
    }
420
14.0k
}
state.c:Py_DECREF
Line
Count
Source
409
23.5k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
23.5k
    if (_Py_IsImmortal(op)) {
413
153
        _Py_DECREF_IMMORTAL_STAT_INC();
414
153
        return;
415
153
    }
416
23.3k
    _Py_DECREF_STAT_INC();
417
23.3k
    if (--op->ob_refcnt == 0) {
418
2.57k
        _Py_Dealloc(op);
419
2.57k
    }
420
23.3k
}
Unexecuted instantiation: readline_tokenizer.c:Py_DECREF
Unexecuted instantiation: string_tokenizer.c:Py_DECREF
Unexecuted instantiation: utf8_tokenizer.c:Py_DECREF
Unexecuted instantiation: getcompiler.c:Py_DECREF
Unexecuted instantiation: mystrtoul.c:Py_DECREF
Unexecuted instantiation: token.c:Py_DECREF
Unexecuted instantiation: action_helpers.c:Py_DECREF
string_parser.c:Py_DECREF
Line
Count
Source
409
40.7k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
40.7k
    if (_Py_IsImmortal(op)) {
413
2.52k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.52k
        return;
415
2.52k
    }
416
38.2k
    _Py_DECREF_STAT_INC();
417
38.2k
    if (--op->ob_refcnt == 0) {
418
38.2k
        _Py_Dealloc(op);
419
38.2k
    }
420
38.2k
}
421
6.99G
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
422
#endif
423
424
425
/* Safely decref `op` and set `op` to NULL, especially useful in tp_clear
426
 * and tp_dealloc implementations.
427
 *
428
 * Note that "the obvious" code can be deadly:
429
 *
430
 *     Py_XDECREF(op);
431
 *     op = NULL;
432
 *
433
 * Typically, `op` is something like self->containee, and `self` is done
434
 * using its `containee` member.  In the code sequence above, suppose
435
 * `containee` is non-NULL with a refcount of 1.  Its refcount falls to
436
 * 0 on the first line, which can trigger an arbitrary amount of code,
437
 * possibly including finalizers (like __del__ methods or weakref callbacks)
438
 * coded in Python, which in turn can release the GIL and allow other threads
439
 * to run, etc.  Such code may even invoke methods of `self` again, or cause
440
 * cyclic gc to trigger, but-- oops! --self->containee still points to the
441
 * object being torn down, and it may be in an insane state while being torn
442
 * down.  This has in fact been a rich historic source of miserable (rare &
443
 * hard-to-diagnose) segfaulting (and other) bugs.
444
 *
445
 * The safe way is:
446
 *
447
 *      Py_CLEAR(op);
448
 *
449
 * That arranges to set `op` to NULL _before_ decref'ing, so that any code
450
 * triggered as a side-effect of `op` getting torn down no longer believes
451
 * `op` points to a valid object.
452
 *
453
 * There are cases where it's safe to use the naive code, but they're brittle.
454
 * For example, if `op` points to a Python integer, you know that destroying
455
 * one of those can't cause problems -- but in part that relies on that
456
 * Python integers aren't currently weakly referencable.  Best practice is
457
 * to use Py_CLEAR() even if you can't think of a reason for why you need to.
458
 *
459
 * gh-98724: Use a temporary variable to only evaluate the macro argument once,
460
 * to avoid the duplication of side effects if the argument has side effects.
461
 *
462
 * gh-99701: If the PyObject* type is used with casting arguments to PyObject*,
463
 * the code can be miscompiled with strict aliasing because of type punning.
464
 * With strict aliasing, a compiler considers that two pointers of different
465
 * types cannot read or write the same memory which enables optimization
466
 * opportunities.
467
 *
468
 * If available, use _Py_TYPEOF() to use the 'op' type for temporary variables,
469
 * and so avoid type punning. Otherwise, use memcpy() which causes type erasure
470
 * and so prevents the compiler to reuse an old cached 'op' value after
471
 * Py_CLEAR().
472
 */
473
#ifdef _Py_TYPEOF
474
#define Py_CLEAR(op) \
475
1.41G
    do { \
476
1.41G
        _Py_TYPEOF(op)* _tmp_op_ptr = &(op); \
477
1.41G
        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
478
1.41G
        if (_tmp_old_op != NULL) { \
479
437M
            *_tmp_op_ptr = _Py_NULL; \
480
437M
            Py_DECREF(_tmp_old_op); \
481
437M
        } \
482
1.41G
    } while (0)
483
#else
484
#define Py_CLEAR(op) \
485
    do { \
486
        PyObject **_tmp_op_ptr = _Py_CAST(PyObject**, &(op)); \
487
        PyObject *_tmp_old_op = (*_tmp_op_ptr); \
488
        if (_tmp_old_op != NULL) { \
489
            PyObject *_null_ptr = _Py_NULL; \
490
            memcpy(_tmp_op_ptr, &_null_ptr, sizeof(PyObject*)); \
491
            Py_DECREF(_tmp_old_op); \
492
        } \
493
    } while (0)
494
#endif
495
496
497
/* Function to use in case the object pointer can be NULL: */
498
static inline void Py_XINCREF(PyObject *op)
499
1.65G
{
500
1.65G
    if (op != _Py_NULL) {
501
711M
        Py_INCREF(op);
502
711M
    }
503
1.65G
}
Unexecuted instantiation: bytesobject.c:Py_XINCREF
Unexecuted instantiation: call.c:Py_XINCREF
exceptions.c:Py_XINCREF
Line
Count
Source
499
59.6M
{
500
59.6M
    if (op != _Py_NULL) {
501
1.31M
        Py_INCREF(op);
502
1.31M
    }
503
59.6M
}
Unexecuted instantiation: genericaliasobject.c:Py_XINCREF
Unexecuted instantiation: floatobject.c:Py_XINCREF
listobject.c:Py_XINCREF
Line
Count
Source
499
967k
{
500
967k
    if (op != _Py_NULL) {
501
967k
        Py_INCREF(op);
502
967k
    }
503
967k
}
Unexecuted instantiation: longobject.c:Py_XINCREF
dictobject.c:Py_XINCREF
Line
Count
Source
499
636M
{
500
636M
    if (op != _Py_NULL) {
501
220M
        Py_INCREF(op);
502
220M
    }
503
636M
}
Unexecuted instantiation: memoryobject.c:Py_XINCREF
Unexecuted instantiation: moduleobject.c:Py_XINCREF
Unexecuted instantiation: object.c:Py_XINCREF
Unexecuted instantiation: obmalloc.c:Py_XINCREF
Unexecuted instantiation: picklebufobject.c:Py_XINCREF
Unexecuted instantiation: rangeobject.c:Py_XINCREF
Unexecuted instantiation: setobject.c:Py_XINCREF
Unexecuted instantiation: sliceobject.c:Py_XINCREF
Unexecuted instantiation: structseq.c:Py_XINCREF
Unexecuted instantiation: templateobject.c:Py_XINCREF
Unexecuted instantiation: tupleobject.c:Py_XINCREF
typeobject.c:Py_XINCREF
Line
Count
Source
499
40.2M
{
500
40.2M
    if (op != _Py_NULL) {
501
39.9M
        Py_INCREF(op);
502
39.9M
    }
503
40.2M
}
Unexecuted instantiation: typevarobject.c:Py_XINCREF
Unexecuted instantiation: unicodeobject.c:Py_XINCREF
Unexecuted instantiation: unicodectype.c:Py_XINCREF
Unexecuted instantiation: unionobject.c:Py_XINCREF
weakrefobject.c:Py_XINCREF
Line
Count
Source
499
273k
{
500
273k
    if (op != _Py_NULL) {
501
6.36k
        Py_INCREF(op);
502
6.36k
    }
503
273k
}
Unexecuted instantiation: _warnings.c:Py_XINCREF
bltinmodule.c:Py_XINCREF
Line
Count
Source
499
317
{
500
317
    if (op != _Py_NULL) {
501
317
        Py_INCREF(op);
502
317
    }
503
317
}
ceval.c:Py_XINCREF
Line
Count
Source
499
195M
{
500
195M
    if (op != _Py_NULL) {
501
68.2M
        Py_INCREF(op);
502
68.2M
    }
503
195M
}
Unexecuted instantiation: codecs.c:Py_XINCREF
Unexecuted instantiation: codegen.c:Py_XINCREF
compile.c:Py_XINCREF
Line
Count
Source
499
9.41k
{
500
9.41k
    if (op != _Py_NULL) {
501
4.36k
        Py_INCREF(op);
502
4.36k
    }
503
9.41k
}
context.c:Py_XINCREF
Line
Count
Source
499
16.7k
{
500
16.7k
    if (op != _Py_NULL) {
501
0
        Py_INCREF(op);
502
0
    }
503
16.7k
}
errors.c:Py_XINCREF
Line
Count
Source
499
28.9M
{
500
28.9M
    if (op != _Py_NULL) {
501
28.8M
        Py_INCREF(op);
502
28.8M
    }
503
28.9M
}
Unexecuted instantiation: flowgraph.c:Py_XINCREF
Unexecuted instantiation: frame.c:Py_XINCREF
Unexecuted instantiation: future.c:Py_XINCREF
Unexecuted instantiation: gc.c:Py_XINCREF
Unexecuted instantiation: gc_gil.c:Py_XINCREF
Unexecuted instantiation: getargs.c:Py_XINCREF
Unexecuted instantiation: ceval_gil.c:Py_XINCREF
Unexecuted instantiation: hamt.c:Py_XINCREF
Unexecuted instantiation: hashtable.c:Py_XINCREF
import.c:Py_XINCREF
Line
Count
Source
499
2.71k
{
500
2.71k
    if (op != _Py_NULL) {
501
1.37k
        Py_INCREF(op);
502
1.37k
    }
503
2.71k
}
Unexecuted instantiation: importdl.c:Py_XINCREF
Unexecuted instantiation: initconfig.c:Py_XINCREF
Unexecuted instantiation: instrumentation.c:Py_XINCREF
Unexecuted instantiation: instruction_sequence.c:Py_XINCREF
Unexecuted instantiation: intrinsics.c:Py_XINCREF
Unexecuted instantiation: legacy_tracing.c:Py_XINCREF
Unexecuted instantiation: lock.c:Py_XINCREF
Unexecuted instantiation: marshal.c:Py_XINCREF
Unexecuted instantiation: modsupport.c:Py_XINCREF
Unexecuted instantiation: mysnprintf.c:Py_XINCREF
Unexecuted instantiation: parking_lot.c:Py_XINCREF
Unexecuted instantiation: preconfig.c:Py_XINCREF
Unexecuted instantiation: pyarena.c:Py_XINCREF
Unexecuted instantiation: pyctype.c:Py_XINCREF
Unexecuted instantiation: pyhash.c:Py_XINCREF
Unexecuted instantiation: pylifecycle.c:Py_XINCREF
Unexecuted instantiation: pymath.c:Py_XINCREF
pystate.c:Py_XINCREF
Line
Count
Source
499
2.23k
{
500
2.23k
    if (op != _Py_NULL) {
501
2.23k
        Py_INCREF(op);
502
2.23k
    }
503
2.23k
}
Unexecuted instantiation: pythonrun.c:Py_XINCREF
Unexecuted instantiation: pytime.c:Py_XINCREF
Unexecuted instantiation: qsbr.c:Py_XINCREF
Unexecuted instantiation: bootstrap_hash.c:Py_XINCREF
Unexecuted instantiation: specialize.c:Py_XINCREF
Unexecuted instantiation: symtable.c:Py_XINCREF
sysmodule.c:Py_XINCREF
Line
Count
Source
499
16
{
500
16
    if (op != _Py_NULL) {
501
16
        Py_INCREF(op);
502
16
    }
503
16
}
Unexecuted instantiation: thread.c:Py_XINCREF
traceback.c:Py_XINCREF
Line
Count
Source
499
60.1M
{
500
60.1M
    if (op != _Py_NULL) {
501
31.1M
        Py_INCREF(op);
502
31.1M
    }
503
60.1M
}
Unexecuted instantiation: tracemalloc.c:Py_XINCREF
Unexecuted instantiation: getopt.c:Py_XINCREF
Unexecuted instantiation: pystrcmp.c:Py_XINCREF
Unexecuted instantiation: pystrtod.c:Py_XINCREF
Unexecuted instantiation: pystrhex.c:Py_XINCREF
Unexecuted instantiation: dtoa.c:Py_XINCREF
Unexecuted instantiation: formatter_unicode.c:Py_XINCREF
Unexecuted instantiation: fileutils.c:Py_XINCREF
Unexecuted instantiation: suggestions.c:Py_XINCREF
Unexecuted instantiation: perf_trampoline.c:Py_XINCREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_XINCREF
Unexecuted instantiation: remote_debugging.c:Py_XINCREF
Unexecuted instantiation: dynload_shlib.c:Py_XINCREF
Unexecuted instantiation: config.c:Py_XINCREF
Unexecuted instantiation: gcmodule.c:Py_XINCREF
Unexecuted instantiation: _asynciomodule.c:Py_XINCREF
Unexecuted instantiation: atexitmodule.c:Py_XINCREF
Unexecuted instantiation: faulthandler.c:Py_XINCREF
Unexecuted instantiation: posixmodule.c:Py_XINCREF
Unexecuted instantiation: signalmodule.c:Py_XINCREF
Unexecuted instantiation: _tracemalloc.c:Py_XINCREF
Unexecuted instantiation: _suggestions.c:Py_XINCREF
_datetimemodule.c:Py_XINCREF
Line
Count
Source
499
32
{
500
32
    if (op != _Py_NULL) {
501
0
        Py_INCREF(op);
502
0
    }
503
32
}
Unexecuted instantiation: _codecsmodule.c:Py_XINCREF
Unexecuted instantiation: _collectionsmodule.c:Py_XINCREF
Unexecuted instantiation: errnomodule.c:Py_XINCREF
Unexecuted instantiation: _iomodule.c:Py_XINCREF
Unexecuted instantiation: iobase.c:Py_XINCREF
Unexecuted instantiation: fileio.c:Py_XINCREF
Unexecuted instantiation: bytesio.c:Py_XINCREF
bufferedio.c:Py_XINCREF
Line
Count
Source
499
997
{
500
997
    if (op != _Py_NULL) {
501
997
        Py_INCREF(op);
502
997
    }
503
997
}
Unexecuted instantiation: textio.c:Py_XINCREF
Unexecuted instantiation: stringio.c:Py_XINCREF
Unexecuted instantiation: itertoolsmodule.c:Py_XINCREF
Unexecuted instantiation: sre.c:Py_XINCREF
Unexecuted instantiation: _sysconfig.c:Py_XINCREF
Unexecuted instantiation: _threadmodule.c:Py_XINCREF
Unexecuted instantiation: timemodule.c:Py_XINCREF
Unexecuted instantiation: _typesmodule.c:Py_XINCREF
Unexecuted instantiation: _typingmodule.c:Py_XINCREF
Unexecuted instantiation: _weakref.c:Py_XINCREF
_abc.c:Py_XINCREF
Line
Count
Source
499
608
{
500
608
    if (op != _Py_NULL) {
501
608
        Py_INCREF(op);
502
608
    }
503
608
}
Unexecuted instantiation: _functoolsmodule.c:Py_XINCREF
Unexecuted instantiation: _localemodule.c:Py_XINCREF
Unexecuted instantiation: _opcode.c:Py_XINCREF
Unexecuted instantiation: _operator.c:Py_XINCREF
Unexecuted instantiation: _stat.c:Py_XINCREF
Unexecuted instantiation: symtablemodule.c:Py_XINCREF
Unexecuted instantiation: pwdmodule.c:Py_XINCREF
getpath.c:Py_XINCREF
Line
Count
Source
499
48
{
500
48
    if (op != _Py_NULL) {
501
48
        Py_INCREF(op);
502
48
    }
503
48
}
Unexecuted instantiation: frozen.c:Py_XINCREF
Unexecuted instantiation: getbuildinfo.c:Py_XINCREF
Unexecuted instantiation: peg_api.c:Py_XINCREF
Unexecuted instantiation: file_tokenizer.c:Py_XINCREF
Unexecuted instantiation: helpers.c:Py_XINCREF
Unexecuted instantiation: myreadline.c:Py_XINCREF
abstract.c:Py_XINCREF
Line
Count
Source
499
14.3M
{
500
14.3M
    if (op != _Py_NULL) {
501
14.0M
        Py_INCREF(op);
502
14.0M
    }
503
14.3M
}
Unexecuted instantiation: boolobject.c:Py_XINCREF
Unexecuted instantiation: bytes_methods.c:Py_XINCREF
Unexecuted instantiation: bytearrayobject.c:Py_XINCREF
Unexecuted instantiation: capsule.c:Py_XINCREF
cellobject.c:Py_XINCREF
Line
Count
Source
499
5.64M
{
500
5.64M
    if (op != _Py_NULL) {
501
70.1k
        Py_INCREF(op);
502
70.1k
    }
503
5.64M
}
Unexecuted instantiation: classobject.c:Py_XINCREF
codeobject.c:Py_XINCREF
Line
Count
Source
499
6.21k
{
500
6.21k
    if (op != _Py_NULL) {
501
6.21k
        Py_INCREF(op);
502
6.21k
    }
503
6.21k
}
Unexecuted instantiation: complexobject.c:Py_XINCREF
descrobject.c:Py_XINCREF
Line
Count
Source
499
45.5k
{
500
45.5k
    if (op != _Py_NULL) {
501
43.5k
        Py_INCREF(op);
502
43.5k
    }
503
45.5k
}
Unexecuted instantiation: enumobject.c:Py_XINCREF
genobject.c:Py_XINCREF
Line
Count
Source
499
4.06k
{
500
4.06k
    if (op != _Py_NULL) {
501
0
        Py_INCREF(op);
502
0
    }
503
4.06k
}
Unexecuted instantiation: fileobject.c:Py_XINCREF
Unexecuted instantiation: frameobject.c:Py_XINCREF
funcobject.c:Py_XINCREF
Line
Count
Source
499
3.34k
{
500
3.34k
    if (op != _Py_NULL) {
501
12
        Py_INCREF(op);
502
12
    }
503
3.34k
}
Unexecuted instantiation: interpolationobject.c:Py_XINCREF
Unexecuted instantiation: iterobject.c:Py_XINCREF
Unexecuted instantiation: odictobject.c:Py_XINCREF
methodobject.c:Py_XINCREF
Line
Count
Source
499
611M
{
500
611M
    if (op != _Py_NULL) {
501
305M
        Py_INCREF(op);
502
305M
    }
503
611M
}
Unexecuted instantiation: namespaceobject.c:Py_XINCREF
Unexecuted instantiation: _contextvars.c:Py_XINCREF
Unexecuted instantiation: Python-ast.c:Py_XINCREF
Unexecuted instantiation: Python-tokenize.c:Py_XINCREF
Unexecuted instantiation: asdl.c:Py_XINCREF
Unexecuted instantiation: assemble.c:Py_XINCREF
Unexecuted instantiation: ast.c:Py_XINCREF
Unexecuted instantiation: ast_preprocess.c:Py_XINCREF
Unexecuted instantiation: ast_unparse.c:Py_XINCREF
Unexecuted instantiation: critical_section.c:Py_XINCREF
Unexecuted instantiation: crossinterp.c:Py_XINCREF
Unexecuted instantiation: getcopyright.c:Py_XINCREF
Unexecuted instantiation: getplatform.c:Py_XINCREF
Unexecuted instantiation: getversion.c:Py_XINCREF
Unexecuted instantiation: optimizer.c:Py_XINCREF
Unexecuted instantiation: pathconfig.c:Py_XINCREF
structmember.c:Py_XINCREF
Line
Count
Source
499
7.15k
{
500
7.15k
    if (op != _Py_NULL) {
501
7.15k
        Py_INCREF(op);
502
7.15k
    }
503
7.15k
}
Unexecuted instantiation: pegen.c:Py_XINCREF
Unexecuted instantiation: pegen_errors.c:Py_XINCREF
Unexecuted instantiation: parser.c:Py_XINCREF
Unexecuted instantiation: buffer.c:Py_XINCREF
Unexecuted instantiation: lexer.c:Py_XINCREF
Unexecuted instantiation: state.c:Py_XINCREF
Unexecuted instantiation: readline_tokenizer.c:Py_XINCREF
Unexecuted instantiation: string_tokenizer.c:Py_XINCREF
Unexecuted instantiation: utf8_tokenizer.c:Py_XINCREF
Unexecuted instantiation: getcompiler.c:Py_XINCREF
Unexecuted instantiation: mystrtoul.c:Py_XINCREF
Unexecuted instantiation: token.c:Py_XINCREF
Unexecuted instantiation: action_helpers.c:Py_XINCREF
Unexecuted instantiation: string_parser.c:Py_XINCREF
504
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
505
1.65G
#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
506
#endif
507
508
static inline void Py_XDECREF(PyObject *op)
509
4.59G
{
510
4.59G
    if (op != _Py_NULL) {
511
3.68G
        Py_DECREF(op);
512
3.68G
    }
513
4.59G
}
bytesobject.c:Py_XDECREF
Line
Count
Source
509
52
{
510
52
    if (op != _Py_NULL) {
511
16
        Py_DECREF(op);
512
16
    }
513
52
}
Unexecuted instantiation: call.c:Py_XDECREF
exceptions.c:Py_XDECREF
Line
Count
Source
509
47.8M
{
510
47.8M
    if (op != _Py_NULL) {
511
17.7M
        Py_DECREF(op);
512
17.7M
    }
513
47.8M
}
genericaliasobject.c:Py_XDECREF
Line
Count
Source
509
132
{
510
132
    if (op != _Py_NULL) {
511
88
        Py_DECREF(op);
512
88
    }
513
132
}
floatobject.c:Py_XDECREF
Line
Count
Source
509
785k
{
510
785k
    if (op != _Py_NULL) {
511
8
        Py_DECREF(op);
512
8
    }
513
785k
}
listobject.c:Py_XDECREF
Line
Count
Source
509
1.37G
{
510
1.37G
    if (op != _Py_NULL) {
511
1.34G
        Py_DECREF(op);
512
1.34G
    }
513
1.37G
}
longobject.c:Py_XDECREF
Line
Count
Source
509
1.23k
{
510
1.23k
    if (op != _Py_NULL) {
511
417
        Py_DECREF(op);
512
417
    }
513
1.23k
}
dictobject.c:Py_XDECREF
Line
Count
Source
509
768M
{
510
768M
    if (op != _Py_NULL) {
511
762M
        Py_DECREF(op);
512
762M
    }
513
768M
}
Unexecuted instantiation: memoryobject.c:Py_XDECREF
moduleobject.c:Py_XDECREF
Line
Count
Source
509
2.14k
{
510
2.14k
    if (op != _Py_NULL) {
511
490
        Py_DECREF(op);
512
490
    }
513
2.14k
}
object.c:Py_XDECREF
Line
Count
Source
509
34.3k
{
510
34.3k
    if (op != _Py_NULL) {
511
369
        Py_DECREF(op);
512
369
    }
513
34.3k
}
Unexecuted instantiation: obmalloc.c:Py_XDECREF
Unexecuted instantiation: picklebufobject.c:Py_XDECREF
rangeobject.c:Py_XDECREF
Line
Count
Source
509
48
{
510
48
    if (op != _Py_NULL) {
511
48
        Py_DECREF(op);
512
48
    }
513
48
}
setobject.c:Py_XDECREF
Line
Count
Source
509
285k
{
510
285k
    if (op != _Py_NULL) {
511
16
        Py_DECREF(op);
512
16
    }
513
285k
}
Unexecuted instantiation: sliceobject.c:Py_XDECREF
structseq.c:Py_XDECREF
Line
Count
Source
509
87.8k
{
510
87.8k
    if (op != _Py_NULL) {
511
87.8k
        Py_DECREF(op);
512
87.8k
    }
513
87.8k
}
Unexecuted instantiation: templateobject.c:Py_XDECREF
tupleobject.c:Py_XDECREF
Line
Count
Source
509
933M
{
510
933M
    if (op != _Py_NULL) {
511
930M
        Py_DECREF(op);
512
930M
    }
513
933M
}
typeobject.c:Py_XDECREF
Line
Count
Source
509
17.0M
{
510
17.0M
    if (op != _Py_NULL) {
511
13.5M
        Py_DECREF(op);
512
13.5M
    }
513
17.0M
}
Unexecuted instantiation: typevarobject.c:Py_XDECREF
unicodeobject.c:Py_XDECREF
Line
Count
Source
509
80.8M
{
510
80.8M
    if (op != _Py_NULL) {
511
58.6M
        Py_DECREF(op);
512
58.6M
    }
513
80.8M
}
Unexecuted instantiation: unicodectype.c:Py_XDECREF
unionobject.c:Py_XDECREF
Line
Count
Source
509
511
{
510
511
    if (op != _Py_NULL) {
511
24
        Py_DECREF(op);
512
24
    }
513
511
}
weakrefobject.c:Py_XDECREF
Line
Count
Source
509
267k
{
510
267k
    if (op != _Py_NULL) {
511
172
        Py_DECREF(op);
512
172
    }
513
267k
}
_warnings.c:Py_XDECREF
Line
Count
Source
509
86.0k
{
510
86.0k
    if (op != _Py_NULL) {
511
86.0k
        Py_DECREF(op);
512
86.0k
    }
513
86.0k
}
bltinmodule.c:Py_XDECREF
Line
Count
Source
509
7.31M
{
510
7.31M
    if (op != _Py_NULL) {
511
687k
        Py_DECREF(op);
512
687k
    }
513
7.31M
}
ceval.c:Py_XDECREF
Line
Count
Source
509
268k
{
510
268k
    if (op != _Py_NULL) {
511
5.68k
        Py_DECREF(op);
512
5.68k
    }
513
268k
}
codecs.c:Py_XDECREF
Line
Count
Source
509
131k
{
510
131k
    if (op != _Py_NULL) {
511
87.8k
        Py_DECREF(op);
512
87.8k
    }
513
131k
}
Unexecuted instantiation: codegen.c:Py_XDECREF
compile.c:Py_XDECREF
Line
Count
Source
509
26.5k
{
510
26.5k
    if (op != _Py_NULL) {
511
7.74k
        Py_DECREF(op);
512
7.74k
    }
513
26.5k
}
Unexecuted instantiation: context.c:Py_XDECREF
errors.c:Py_XDECREF
Line
Count
Source
509
149M
{
510
149M
    if (op != _Py_NULL) {
511
23.8M
        Py_DECREF(op);
512
23.8M
    }
513
149M
}
Unexecuted instantiation: flowgraph.c:Py_XDECREF
Unexecuted instantiation: frame.c:Py_XDECREF
Unexecuted instantiation: future.c:Py_XDECREF
gc.c:Py_XDECREF
Line
Count
Source
509
117k
{
510
117k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
117k
}
Unexecuted instantiation: gc_gil.c:Py_XDECREF
Unexecuted instantiation: getargs.c:Py_XDECREF
Unexecuted instantiation: ceval_gil.c:Py_XDECREF
Unexecuted instantiation: hamt.c:Py_XDECREF
Unexecuted instantiation: hashtable.c:Py_XDECREF
import.c:Py_XDECREF
Line
Count
Source
509
93.1k
{
510
93.1k
    if (op != _Py_NULL) {
511
70.1k
        Py_DECREF(op);
512
70.1k
    }
513
93.1k
}
Unexecuted instantiation: importdl.c:Py_XDECREF
Unexecuted instantiation: initconfig.c:Py_XDECREF
Unexecuted instantiation: instrumentation.c:Py_XDECREF
instruction_sequence.c:Py_XDECREF
Line
Count
Source
509
13.1k
{
510
13.1k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
13.1k
}
intrinsics.c:Py_XDECREF
Line
Count
Source
509
13.6k
{
510
13.6k
    if (op != _Py_NULL) {
511
13.6k
        Py_DECREF(op);
512
13.6k
    }
513
13.6k
}
Unexecuted instantiation: legacy_tracing.c:Py_XDECREF
Unexecuted instantiation: lock.c:Py_XDECREF
marshal.c:Py_XDECREF
Line
Count
Source
509
307k
{
510
307k
    if (op != _Py_NULL) {
511
307k
        Py_DECREF(op);
512
307k
    }
513
307k
}
modsupport.c:Py_XDECREF
Line
Count
Source
509
6.72k
{
510
6.72k
    if (op != _Py_NULL) {
511
6.72k
        Py_DECREF(op);
512
6.72k
    }
513
6.72k
}
Unexecuted instantiation: mysnprintf.c:Py_XDECREF
Unexecuted instantiation: parking_lot.c:Py_XDECREF
Unexecuted instantiation: preconfig.c:Py_XDECREF
Unexecuted instantiation: pyarena.c:Py_XDECREF
Unexecuted instantiation: pyctype.c:Py_XDECREF
Unexecuted instantiation: pyhash.c:Py_XDECREF
pylifecycle.c:Py_XDECREF
Line
Count
Source
509
96
{
510
96
    if (op != _Py_NULL) {
511
96
        Py_DECREF(op);
512
96
    }
513
96
}
Unexecuted instantiation: pymath.c:Py_XDECREF
Unexecuted instantiation: pystate.c:Py_XDECREF
pythonrun.c:Py_XDECREF
Line
Count
Source
509
126
{
510
126
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
126
}
Unexecuted instantiation: pytime.c:Py_XDECREF
Unexecuted instantiation: qsbr.c:Py_XDECREF
Unexecuted instantiation: bootstrap_hash.c:Py_XDECREF
specialize.c:Py_XDECREF
Line
Count
Source
509
938k
{
510
938k
    if (op != _Py_NULL) {
511
496k
        Py_DECREF(op);
512
496k
    }
513
938k
}
symtable.c:Py_XDECREF
Line
Count
Source
509
160k
{
510
160k
    if (op != _Py_NULL) {
511
126k
        Py_DECREF(op);
512
126k
    }
513
160k
}
sysmodule.c:Py_XDECREF
Line
Count
Source
509
720
{
510
720
    if (op != _Py_NULL) {
511
384
        Py_DECREF(op);
512
384
    }
513
720
}
Unexecuted instantiation: thread.c:Py_XDECREF
traceback.c:Py_XDECREF
Line
Count
Source
509
120M
{
510
120M
    if (op != _Py_NULL) {
511
62.3M
        Py_DECREF(op);
512
62.3M
    }
513
120M
}
Unexecuted instantiation: tracemalloc.c:Py_XDECREF
Unexecuted instantiation: getopt.c:Py_XDECREF
Unexecuted instantiation: pystrcmp.c:Py_XDECREF
Unexecuted instantiation: pystrtod.c:Py_XDECREF
Unexecuted instantiation: pystrhex.c:Py_XDECREF
Unexecuted instantiation: dtoa.c:Py_XDECREF
formatter_unicode.c:Py_XDECREF
Line
Count
Source
509
651
{
510
651
    if (op != _Py_NULL) {
511
256
        Py_DECREF(op);
512
256
    }
513
651
}
Unexecuted instantiation: fileutils.c:Py_XDECREF
Unexecuted instantiation: suggestions.c:Py_XDECREF
Unexecuted instantiation: perf_trampoline.c:Py_XDECREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_XDECREF
Unexecuted instantiation: remote_debugging.c:Py_XDECREF
Unexecuted instantiation: dynload_shlib.c:Py_XDECREF
Unexecuted instantiation: config.c:Py_XDECREF
Unexecuted instantiation: gcmodule.c:Py_XDECREF
Unexecuted instantiation: _asynciomodule.c:Py_XDECREF
Unexecuted instantiation: atexitmodule.c:Py_XDECREF
Unexecuted instantiation: faulthandler.c:Py_XDECREF
posixmodule.c:Py_XDECREF
Line
Count
Source
509
69.3k
{
510
69.3k
    if (op != _Py_NULL) {
511
27.7k
        Py_DECREF(op);
512
27.7k
    }
513
69.3k
}
signalmodule.c:Py_XDECREF
Line
Count
Source
509
1.02k
{
510
1.02k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
1.02k
}
Unexecuted instantiation: _tracemalloc.c:Py_XDECREF
Unexecuted instantiation: _suggestions.c:Py_XDECREF
_datetimemodule.c:Py_XDECREF
Line
Count
Source
509
6
{
510
6
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
6
}
Unexecuted instantiation: _codecsmodule.c:Py_XDECREF
Unexecuted instantiation: _collectionsmodule.c:Py_XDECREF
Unexecuted instantiation: errnomodule.c:Py_XDECREF
Unexecuted instantiation: _iomodule.c:Py_XDECREF
Unexecuted instantiation: iobase.c:Py_XDECREF
Unexecuted instantiation: fileio.c:Py_XDECREF
bytesio.c:Py_XDECREF
Line
Count
Source
509
9.60k
{
510
9.60k
    if (op != _Py_NULL) {
511
9.60k
        Py_DECREF(op);
512
9.60k
    }
513
9.60k
}
bufferedio.c:Py_XDECREF
Line
Count
Source
509
4.03k
{
510
4.03k
    if (op != _Py_NULL) {
511
997
        Py_DECREF(op);
512
997
    }
513
4.03k
}
textio.c:Py_XDECREF
Line
Count
Source
509
31.9k
{
510
31.9k
    if (op != _Py_NULL) {
511
32
        Py_DECREF(op);
512
32
    }
513
31.9k
}
Unexecuted instantiation: stringio.c:Py_XDECREF
itertoolsmodule.c:Py_XDECREF
Line
Count
Source
509
228
{
510
228
    if (op != _Py_NULL) {
511
228
        Py_DECREF(op);
512
228
    }
513
228
}
sre.c:Py_XDECREF
Line
Count
Source
509
102M
{
510
102M
    if (op != _Py_NULL) {
511
102M
        Py_DECREF(op);
512
102M
    }
513
102M
}
Unexecuted instantiation: _sysconfig.c:Py_XDECREF
Unexecuted instantiation: _threadmodule.c:Py_XDECREF
Unexecuted instantiation: timemodule.c:Py_XDECREF
Unexecuted instantiation: _typesmodule.c:Py_XDECREF
Unexecuted instantiation: _typingmodule.c:Py_XDECREF
Unexecuted instantiation: _weakref.c:Py_XDECREF
_abc.c:Py_XDECREF
Line
Count
Source
509
3.38k
{
510
3.38k
    if (op != _Py_NULL) {
511
2.45k
        Py_DECREF(op);
512
2.45k
    }
513
3.38k
}
_functoolsmodule.c:Py_XDECREF
Line
Count
Source
509
31
{
510
31
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
31
}
Unexecuted instantiation: _localemodule.c:Py_XDECREF
Unexecuted instantiation: _opcode.c:Py_XDECREF
Unexecuted instantiation: _operator.c:Py_XDECREF
Unexecuted instantiation: _stat.c:Py_XDECREF
Unexecuted instantiation: symtablemodule.c:Py_XDECREF
Unexecuted instantiation: pwdmodule.c:Py_XDECREF
Unexecuted instantiation: getpath.c:Py_XDECREF
Unexecuted instantiation: frozen.c:Py_XDECREF
Unexecuted instantiation: getbuildinfo.c:Py_XDECREF
Unexecuted instantiation: peg_api.c:Py_XDECREF
Unexecuted instantiation: file_tokenizer.c:Py_XDECREF
helpers.c:Py_XDECREF
Line
Count
Source
509
2.69k
{
510
2.69k
    if (op != _Py_NULL) {
511
2.69k
        Py_DECREF(op);
512
2.69k
    }
513
2.69k
}
Unexecuted instantiation: myreadline.c:Py_XDECREF
abstract.c:Py_XDECREF
Line
Count
Source
509
133k
{
510
133k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
133k
}
Unexecuted instantiation: boolobject.c:Py_XDECREF
Unexecuted instantiation: bytes_methods.c:Py_XDECREF
bytearrayobject.c:Py_XDECREF
Line
Count
Source
509
16
{
510
16
    if (op != _Py_NULL) {
511
16
        Py_DECREF(op);
512
16
    }
513
16
}
capsule.c:Py_XDECREF
Line
Count
Source
509
5
{
510
5
    if (op != _Py_NULL) {
511
5
        Py_DECREF(op);
512
5
    }
513
5
}
cellobject.c:Py_XDECREF
Line
Count
Source
509
5.63M
{
510
5.63M
    if (op != _Py_NULL) {
511
331k
        Py_DECREF(op);
512
331k
    }
513
5.63M
}
classobject.c:Py_XDECREF
Line
Count
Source
509
20.5M
{
510
20.5M
    if (op != _Py_NULL) {
511
20.5M
        Py_DECREF(op);
512
20.5M
    }
513
20.5M
}
codeobject.c:Py_XDECREF
Line
Count
Source
509
113k
{
510
113k
    if (op != _Py_NULL) {
511
76.1k
        Py_DECREF(op);
512
76.1k
    }
513
113k
}
Unexecuted instantiation: complexobject.c:Py_XDECREF
descrobject.c:Py_XDECREF
Line
Count
Source
509
28.0M
{
510
28.0M
    if (op != _Py_NULL) {
511
19.8M
        Py_DECREF(op);
512
19.8M
    }
513
28.0M
}
enumobject.c:Py_XDECREF
Line
Count
Source
509
17.5M
{
510
17.5M
    if (op != _Py_NULL) {
511
11.7M
        Py_DECREF(op);
512
11.7M
    }
513
17.5M
}
genobject.c:Py_XDECREF
Line
Count
Source
509
2.03k
{
510
2.03k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
2.03k
}
Unexecuted instantiation: fileobject.c:Py_XDECREF
Unexecuted instantiation: frameobject.c:Py_XDECREF
funcobject.c:Py_XDECREF
Line
Count
Source
509
2.84k
{
510
2.84k
    if (op != _Py_NULL) {
511
1.09k
        Py_DECREF(op);
512
1.09k
    }
513
2.84k
}
Unexecuted instantiation: interpolationobject.c:Py_XDECREF
iterobject.c:Py_XDECREF
Line
Count
Source
509
1.02M
{
510
1.02M
    if (op != _Py_NULL) {
511
341k
        Py_DECREF(op);
512
341k
    }
513
1.02M
}
odictobject.c:Py_XDECREF
Line
Count
Source
509
288
{
510
288
    if (op != _Py_NULL) {
511
240
        Py_DECREF(op);
512
240
    }
513
288
}
methodobject.c:Py_XDECREF
Line
Count
Source
509
916M
{
510
916M
    if (op != _Py_NULL) {
511
311M
        Py_DECREF(op);
512
311M
    }
513
916M
}
Unexecuted instantiation: namespaceobject.c:Py_XDECREF
Unexecuted instantiation: _contextvars.c:Py_XDECREF
Python-ast.c:Py_XDECREF
Line
Count
Source
509
210
{
510
210
    if (op != _Py_NULL) {
511
140
        Py_DECREF(op);
512
140
    }
513
210
}
Unexecuted instantiation: Python-tokenize.c:Py_XDECREF
Unexecuted instantiation: asdl.c:Py_XDECREF
assemble.c:Py_XDECREF
Line
Count
Source
509
46.0k
{
510
46.0k
    if (op != _Py_NULL) {
511
46.0k
        Py_DECREF(op);
512
46.0k
    }
513
46.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
509
6.68k
{
510
6.68k
    if (op != _Py_NULL) {
511
592
        Py_DECREF(op);
512
592
    }
513
6.68k
}
pegen.c:Py_XDECREF
Line
Count
Source
509
34.1k
{
510
34.1k
    if (op != _Py_NULL) {
511
1.61k
        Py_DECREF(op);
512
1.61k
    }
513
34.1k
}
pegen_errors.c:Py_XDECREF
Line
Count
Source
509
14.0k
{
510
14.0k
    if (op != _Py_NULL) {
511
11.3k
        Py_DECREF(op);
512
11.3k
    }
513
14.0k
}
Unexecuted instantiation: parser.c:Py_XDECREF
Unexecuted instantiation: buffer.c:Py_XDECREF
Unexecuted instantiation: lexer.c:Py_XDECREF
state.c:Py_XDECREF
Line
Count
Source
509
99.0k
{
510
99.0k
    if (op != _Py_NULL) {
511
23.5k
        Py_DECREF(op);
512
23.5k
    }
513
99.0k
}
Unexecuted instantiation: readline_tokenizer.c:Py_XDECREF
Unexecuted instantiation: string_tokenizer.c:Py_XDECREF
Unexecuted instantiation: utf8_tokenizer.c:Py_XDECREF
Unexecuted instantiation: getcompiler.c:Py_XDECREF
Unexecuted instantiation: mystrtoul.c:Py_XDECREF
Unexecuted instantiation: token.c:Py_XDECREF
Unexecuted instantiation: action_helpers.c:Py_XDECREF
string_parser.c:Py_XDECREF
Line
Count
Source
509
31.2k
{
510
31.2k
    if (op != _Py_NULL) {
511
31.2k
        Py_DECREF(op);
512
31.2k
    }
513
31.2k
}
514
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
515
4.60G
#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
516
#endif
517
518
// Create a new strong reference to an object:
519
// increment the reference count of the object and return the object.
520
PyAPI_FUNC(PyObject*) Py_NewRef(PyObject *obj);
521
522
// Similar to Py_NewRef(), but the object can be NULL.
523
PyAPI_FUNC(PyObject*) Py_XNewRef(PyObject *obj);
524
525
static inline PyObject* _Py_NewRef(PyObject *obj)
526
5.28G
{
527
5.28G
    Py_INCREF(obj);
528
5.28G
    return obj;
529
5.28G
}
bytesobject.c:_Py_NewRef
Line
Count
Source
526
360k
{
527
360k
    Py_INCREF(obj);
528
360k
    return obj;
529
360k
}
call.c:_Py_NewRef
Line
Count
Source
526
21.5M
{
527
21.5M
    Py_INCREF(obj);
528
21.5M
    return obj;
529
21.5M
}
exceptions.c:_Py_NewRef
Line
Count
Source
526
75.5M
{
527
75.5M
    Py_INCREF(obj);
528
75.5M
    return obj;
529
75.5M
}
genericaliasobject.c:_Py_NewRef
Line
Count
Source
526
860
{
527
860
    Py_INCREF(obj);
528
860
    return obj;
529
860
}
Unexecuted instantiation: floatobject.c:_Py_NewRef
listobject.c:_Py_NewRef
Line
Count
Source
526
1.02G
{
527
1.02G
    Py_INCREF(obj);
528
1.02G
    return obj;
529
1.02G
}
longobject.c:_Py_NewRef
Line
Count
Source
526
4.30M
{
527
4.30M
    Py_INCREF(obj);
528
4.30M
    return obj;
529
4.30M
}
dictobject.c:_Py_NewRef
Line
Count
Source
526
731M
{
527
731M
    Py_INCREF(obj);
528
731M
    return obj;
529
731M
}
memoryobject.c:_Py_NewRef
Line
Count
Source
526
566k
{
527
566k
    Py_INCREF(obj);
528
566k
    return obj;
529
566k
}
moduleobject.c:_Py_NewRef
Line
Count
Source
526
1.44k
{
527
1.44k
    Py_INCREF(obj);
528
1.44k
    return obj;
529
1.44k
}
object.c:_Py_NewRef
Line
Count
Source
526
152M
{
527
152M
    Py_INCREF(obj);
528
152M
    return obj;
529
152M
}
Unexecuted instantiation: obmalloc.c:_Py_NewRef
Unexecuted instantiation: picklebufobject.c:_Py_NewRef
rangeobject.c:_Py_NewRef
Line
Count
Source
526
48
{
527
48
    Py_INCREF(obj);
528
48
    return obj;
529
48
}
setobject.c:_Py_NewRef
Line
Count
Source
526
1.46M
{
527
1.46M
    Py_INCREF(obj);
528
1.46M
    return obj;
529
1.46M
}
sliceobject.c:_Py_NewRef
Line
Count
Source
526
43.2M
{
527
43.2M
    Py_INCREF(obj);
528
43.2M
    return obj;
529
43.2M
}
Unexecuted instantiation: structseq.c:_Py_NewRef
templateobject.c:_Py_NewRef
Line
Count
Source
526
4
{
527
4
    Py_INCREF(obj);
528
4
    return obj;
529
4
}
tupleobject.c:_Py_NewRef
Line
Count
Source
526
621M
{
527
621M
    Py_INCREF(obj);
528
621M
    return obj;
529
621M
}
typeobject.c:_Py_NewRef
Line
Count
Source
526
63.6M
{
527
63.6M
    Py_INCREF(obj);
528
63.6M
    return obj;
529
63.6M
}
Unexecuted instantiation: typevarobject.c:_Py_NewRef
unicodeobject.c:_Py_NewRef
Line
Count
Source
526
210M
{
527
210M
    Py_INCREF(obj);
528
210M
    return obj;
529
210M
}
Unexecuted instantiation: unicodectype.c:_Py_NewRef
Unexecuted instantiation: unionobject.c:_Py_NewRef
Unexecuted instantiation: weakrefobject.c:_Py_NewRef
_warnings.c:_Py_NewRef
Line
Count
Source
526
33.5k
{
527
33.5k
    Py_INCREF(obj);
528
33.5k
    return obj;
529
33.5k
}
bltinmodule.c:_Py_NewRef
Line
Count
Source
526
13.7M
{
527
13.7M
    Py_INCREF(obj);
528
13.7M
    return obj;
529
13.7M
}
ceval.c:_Py_NewRef
Line
Count
Source
526
1.25G
{
527
1.25G
    Py_INCREF(obj);
528
1.25G
    return obj;
529
1.25G
}
codecs.c:_Py_NewRef
Line
Count
Source
526
2.91M
{
527
2.91M
    Py_INCREF(obj);
528
2.91M
    return obj;
529
2.91M
}
codegen.c:_Py_NewRef
Line
Count
Source
526
2.54k
{
527
2.54k
    Py_INCREF(obj);
528
2.54k
    return obj;
529
2.54k
}
compile.c:_Py_NewRef
Line
Count
Source
526
103k
{
527
103k
    Py_INCREF(obj);
528
103k
    return obj;
529
103k
}
context.c:_Py_NewRef
Line
Count
Source
526
24
{
527
24
    Py_INCREF(obj);
528
24
    return obj;
529
24
}
errors.c:_Py_NewRef
Line
Count
Source
526
29.0M
{
527
29.0M
    Py_INCREF(obj);
528
29.0M
    return obj;
529
29.0M
}
flowgraph.c:_Py_NewRef
Line
Count
Source
526
94.1k
{
527
94.1k
    Py_INCREF(obj);
528
94.1k
    return obj;
529
94.1k
}
frame.c:_Py_NewRef
Line
Count
Source
526
10.9M
{
527
10.9M
    Py_INCREF(obj);
528
10.9M
    return obj;
529
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
526
699k
{
527
699k
    Py_INCREF(obj);
528
699k
    return obj;
529
699k
}
Unexecuted instantiation: ceval_gil.c:_Py_NewRef
Unexecuted instantiation: hamt.c:_Py_NewRef
Unexecuted instantiation: hashtable.c:_Py_NewRef
import.c:_Py_NewRef
Line
Count
Source
526
33.4k
{
527
33.4k
    Py_INCREF(obj);
528
33.4k
    return obj;
529
33.4k
}
importdl.c:_Py_NewRef
Line
Count
Source
526
456
{
527
456
    Py_INCREF(obj);
528
456
    return obj;
529
456
}
initconfig.c:_Py_NewRef
Line
Count
Source
526
272
{
527
272
    Py_INCREF(obj);
528
272
    return obj;
529
272
}
Unexecuted instantiation: instrumentation.c:_Py_NewRef
Unexecuted instantiation: instruction_sequence.c:_Py_NewRef
intrinsics.c:_Py_NewRef
Line
Count
Source
526
17.7k
{
527
17.7k
    Py_INCREF(obj);
528
17.7k
    return obj;
529
17.7k
}
Unexecuted instantiation: legacy_tracing.c:_Py_NewRef
Unexecuted instantiation: lock.c:_Py_NewRef
marshal.c:_Py_NewRef
Line
Count
Source
526
324k
{
527
324k
    Py_INCREF(obj);
528
324k
    return obj;
529
324k
}
Unexecuted instantiation: modsupport.c:_Py_NewRef
Unexecuted instantiation: mysnprintf.c:_Py_NewRef
Unexecuted instantiation: parking_lot.c:_Py_NewRef
Unexecuted instantiation: preconfig.c:_Py_NewRef
Unexecuted instantiation: pyarena.c:_Py_NewRef
Unexecuted instantiation: pyctype.c:_Py_NewRef
Unexecuted instantiation: pyhash.c:_Py_NewRef
pylifecycle.c:_Py_NewRef
Line
Count
Source
526
16
{
527
16
    Py_INCREF(obj);
528
16
    return obj;
529
16
}
Unexecuted instantiation: pymath.c:_Py_NewRef
Unexecuted instantiation: pystate.c:_Py_NewRef
Unexecuted instantiation: pythonrun.c:_Py_NewRef
Unexecuted instantiation: pytime.c:_Py_NewRef
Unexecuted instantiation: qsbr.c:_Py_NewRef
Unexecuted instantiation: bootstrap_hash.c:_Py_NewRef
Unexecuted instantiation: specialize.c:_Py_NewRef
symtable.c:_Py_NewRef
Line
Count
Source
526
252k
{
527
252k
    Py_INCREF(obj);
528
252k
    return obj;
529
252k
}
sysmodule.c:_Py_NewRef
Line
Count
Source
526
786
{
527
786
    Py_INCREF(obj);
528
786
    return obj;
529
786
}
Unexecuted instantiation: thread.c:_Py_NewRef
Unexecuted instantiation: traceback.c:_Py_NewRef
Unexecuted instantiation: tracemalloc.c:_Py_NewRef
Unexecuted instantiation: getopt.c:_Py_NewRef
Unexecuted instantiation: pystrcmp.c:_Py_NewRef
Unexecuted instantiation: pystrtod.c:_Py_NewRef
Unexecuted instantiation: pystrhex.c:_Py_NewRef
Unexecuted instantiation: dtoa.c:_Py_NewRef
Unexecuted instantiation: formatter_unicode.c:_Py_NewRef
Unexecuted instantiation: fileutils.c:_Py_NewRef
Unexecuted instantiation: suggestions.c:_Py_NewRef
Unexecuted instantiation: perf_trampoline.c:_Py_NewRef
Unexecuted instantiation: perf_jit_trampoline.c:_Py_NewRef
Unexecuted instantiation: remote_debugging.c:_Py_NewRef
Unexecuted instantiation: dynload_shlib.c:_Py_NewRef
Unexecuted instantiation: config.c:_Py_NewRef
Unexecuted instantiation: gcmodule.c:_Py_NewRef
Unexecuted instantiation: _asynciomodule.c:_Py_NewRef
Unexecuted instantiation: atexitmodule.c:_Py_NewRef
Unexecuted instantiation: faulthandler.c:_Py_NewRef
posixmodule.c:_Py_NewRef
Line
Count
Source
526
39.1k
{
527
39.1k
    Py_INCREF(obj);
528
39.1k
    return obj;
529
39.1k
}
signalmodule.c:_Py_NewRef
Line
Count
Source
526
1.02k
{
527
1.02k
    Py_INCREF(obj);
528
1.02k
    return obj;
529
1.02k
}
Unexecuted instantiation: _tracemalloc.c:_Py_NewRef
Unexecuted instantiation: _suggestions.c:_Py_NewRef
_datetimemodule.c:_Py_NewRef
Line
Count
Source
526
38
{
527
38
    Py_INCREF(obj);
528
38
    return obj;
529
38
}
Unexecuted instantiation: _codecsmodule.c:_Py_NewRef
_collectionsmodule.c:_Py_NewRef
Line
Count
Source
526
16.7M
{
527
16.7M
    Py_INCREF(obj);
528
16.7M
    return obj;
529
16.7M
}
Unexecuted instantiation: errnomodule.c:_Py_NewRef
_iomodule.c:_Py_NewRef
Line
Count
Source
526
48
{
527
48
    Py_INCREF(obj);
528
48
    return obj;
529
48
}
iobase.c:_Py_NewRef
Line
Count
Source
526
39.8k
{
527
39.8k
    Py_INCREF(obj);
528
39.8k
    return obj;
529
39.8k
}
Unexecuted instantiation: fileio.c:_Py_NewRef
bytesio.c:_Py_NewRef
Line
Count
Source
526
10.2k
{
527
10.2k
    Py_INCREF(obj);
528
10.2k
    return obj;
529
10.2k
}
bufferedio.c:_Py_NewRef
Line
Count
Source
526
1.01k
{
527
1.01k
    Py_INCREF(obj);
528
1.01k
    return obj;
529
1.01k
}
textio.c:_Py_NewRef
Line
Count
Source
526
80.6k
{
527
80.6k
    Py_INCREF(obj);
528
80.6k
    return obj;
529
80.6k
}
stringio.c:_Py_NewRef
Line
Count
Source
526
15.9k
{
527
15.9k
    Py_INCREF(obj);
528
15.9k
    return obj;
529
15.9k
}
itertoolsmodule.c:_Py_NewRef
Line
Count
Source
526
270
{
527
270
    Py_INCREF(obj);
528
270
    return obj;
529
270
}
sre.c:_Py_NewRef
Line
Count
Source
526
295M
{
527
295M
    Py_INCREF(obj);
528
295M
    return obj;
529
295M
}
Unexecuted instantiation: _sysconfig.c:_Py_NewRef
Unexecuted instantiation: _threadmodule.c:_Py_NewRef
Unexecuted instantiation: timemodule.c:_Py_NewRef
Unexecuted instantiation: _typesmodule.c:_Py_NewRef
Unexecuted instantiation: _typingmodule.c:_Py_NewRef
Unexecuted instantiation: _weakref.c:_Py_NewRef
_abc.c:_Py_NewRef
Line
Count
Source
526
608
{
527
608
    Py_INCREF(obj);
528
608
    return obj;
529
608
}
_functoolsmodule.c:_Py_NewRef
Line
Count
Source
526
505
{
527
505
    Py_INCREF(obj);
528
505
    return obj;
529
505
}
Unexecuted instantiation: _localemodule.c:_Py_NewRef
Unexecuted instantiation: _opcode.c:_Py_NewRef
_operator.c:_Py_NewRef
Line
Count
Source
526
1.24M
{
527
1.24M
    Py_INCREF(obj);
528
1.24M
    return obj;
529
1.24M
}
Unexecuted instantiation: _stat.c:_Py_NewRef
Unexecuted instantiation: symtablemodule.c:_Py_NewRef
Unexecuted instantiation: pwdmodule.c:_Py_NewRef
getpath.c:_Py_NewRef
Line
Count
Source
526
128
{
527
128
    Py_INCREF(obj);
528
128
    return obj;
529
128
}
Unexecuted instantiation: frozen.c:_Py_NewRef
Unexecuted instantiation: getbuildinfo.c:_Py_NewRef
Unexecuted instantiation: peg_api.c:_Py_NewRef
Unexecuted instantiation: file_tokenizer.c:_Py_NewRef
Unexecuted instantiation: helpers.c:_Py_NewRef
Unexecuted instantiation: myreadline.c:_Py_NewRef
abstract.c:_Py_NewRef
Line
Count
Source
526
570M
{
527
570M
    Py_INCREF(obj);
528
570M
    return obj;
529
570M
}
Unexecuted instantiation: boolobject.c:_Py_NewRef
Unexecuted instantiation: bytes_methods.c:_Py_NewRef
bytearrayobject.c:_Py_NewRef
Line
Count
Source
526
36
{
527
36
    Py_INCREF(obj);
528
36
    return obj;
529
36
}
Unexecuted instantiation: capsule.c:_Py_NewRef
Unexecuted instantiation: cellobject.c:_Py_NewRef
classobject.c:_Py_NewRef
Line
Count
Source
526
41.0M
{
527
41.0M
    Py_INCREF(obj);
528
41.0M
    return obj;
529
41.0M
}
codeobject.c:_Py_NewRef
Line
Count
Source
526
485k
{
527
485k
    Py_INCREF(obj);
528
485k
    return obj;
529
485k
}
Unexecuted instantiation: complexobject.c:_Py_NewRef
descrobject.c:_Py_NewRef
Line
Count
Source
526
19.9M
{
527
19.9M
    Py_INCREF(obj);
528
19.9M
    return obj;
529
19.9M
}
enumobject.c:_Py_NewRef
Line
Count
Source
526
4
{
527
4
    Py_INCREF(obj);
528
4
    return obj;
529
4
}
genobject.c:_Py_NewRef
Line
Count
Source
526
37.7M
{
527
37.7M
    Py_INCREF(obj);
528
37.7M
    return obj;
529
37.7M
}
Unexecuted instantiation: fileobject.c:_Py_NewRef
frameobject.c:_Py_NewRef
Line
Count
Source
526
5.11k
{
527
5.11k
    Py_INCREF(obj);
528
5.11k
    return obj;
529
5.11k
}
funcobject.c:_Py_NewRef
Line
Count
Source
526
23.5M
{
527
23.5M
    Py_INCREF(obj);
528
23.5M
    return obj;
529
23.5M
}
Unexecuted instantiation: interpolationobject.c:_Py_NewRef
iterobject.c:_Py_NewRef
Line
Count
Source
526
683k
{
527
683k
    Py_INCREF(obj);
528
683k
    return obj;
529
683k
}
odictobject.c:_Py_NewRef
Line
Count
Source
526
168
{
527
168
    Py_INCREF(obj);
528
168
    return obj;
529
168
}
methodobject.c:_Py_NewRef
Line
Count
Source
526
5.83M
{
527
5.83M
    Py_INCREF(obj);
528
5.83M
    return obj;
529
5.83M
}
Unexecuted instantiation: namespaceobject.c:_Py_NewRef
Unexecuted instantiation: _contextvars.c:_Py_NewRef
Python-ast.c:_Py_NewRef
Line
Count
Source
526
569k
{
527
569k
    Py_INCREF(obj);
528
569k
    return obj;
529
569k
}
Unexecuted instantiation: Python-tokenize.c:_Py_NewRef
Unexecuted instantiation: asdl.c:_Py_NewRef
assemble.c:_Py_NewRef
Line
Count
Source
526
43.1k
{
527
43.1k
    Py_INCREF(obj);
528
43.1k
    return obj;
529
43.1k
}
Unexecuted instantiation: ast.c:_Py_NewRef
Unexecuted instantiation: ast_preprocess.c:_Py_NewRef
Unexecuted instantiation: ast_unparse.c:_Py_NewRef
Unexecuted instantiation: critical_section.c:_Py_NewRef
Unexecuted instantiation: crossinterp.c:_Py_NewRef
Unexecuted instantiation: getcopyright.c:_Py_NewRef
Unexecuted instantiation: getplatform.c:_Py_NewRef
Unexecuted instantiation: getversion.c:_Py_NewRef
Unexecuted instantiation: optimizer.c:_Py_NewRef
Unexecuted instantiation: pathconfig.c:_Py_NewRef
Unexecuted instantiation: structmember.c:_Py_NewRef
pegen.c:_Py_NewRef
Line
Count
Source
526
20.9k
{
527
20.9k
    Py_INCREF(obj);
528
20.9k
    return obj;
529
20.9k
}
Unexecuted instantiation: pegen_errors.c:_Py_NewRef
Unexecuted instantiation: parser.c:_Py_NewRef
Unexecuted instantiation: buffer.c:_Py_NewRef
Unexecuted instantiation: lexer.c:_Py_NewRef
Unexecuted instantiation: state.c:_Py_NewRef
Unexecuted instantiation: readline_tokenizer.c:_Py_NewRef
Unexecuted instantiation: string_tokenizer.c:_Py_NewRef
Unexecuted instantiation: utf8_tokenizer.c:_Py_NewRef
Unexecuted instantiation: getcompiler.c:_Py_NewRef
Unexecuted instantiation: mystrtoul.c:_Py_NewRef
Unexecuted instantiation: token.c:_Py_NewRef
Unexecuted instantiation: action_helpers.c:_Py_NewRef
Unexecuted instantiation: string_parser.c:_Py_NewRef
530
531
static inline PyObject* _Py_XNewRef(PyObject *obj)
532
1.45G
{
533
1.45G
    Py_XINCREF(obj);
534
1.45G
    return obj;
535
1.45G
}
Unexecuted instantiation: bytesobject.c:_Py_XNewRef
Unexecuted instantiation: call.c:_Py_XNewRef
exceptions.c:_Py_XNewRef
Line
Count
Source
532
59.5M
{
533
59.5M
    Py_XINCREF(obj);
534
59.5M
    return obj;
535
59.5M
}
Unexecuted instantiation: genericaliasobject.c:_Py_XNewRef
Unexecuted instantiation: floatobject.c:_Py_XNewRef
listobject.c:_Py_XNewRef
Line
Count
Source
532
967k
{
533
967k
    Py_XINCREF(obj);
534
967k
    return obj;
535
967k
}
Unexecuted instantiation: longobject.c:_Py_XNewRef
dictobject.c:_Py_XNewRef
Line
Count
Source
532
636M
{
533
636M
    Py_XINCREF(obj);
534
636M
    return obj;
535
636M
}
Unexecuted instantiation: memoryobject.c:_Py_XNewRef
Unexecuted instantiation: moduleobject.c:_Py_XNewRef
Unexecuted instantiation: object.c:_Py_XNewRef
Unexecuted instantiation: obmalloc.c:_Py_XNewRef
Unexecuted instantiation: picklebufobject.c:_Py_XNewRef
Unexecuted instantiation: rangeobject.c:_Py_XNewRef
Unexecuted instantiation: setobject.c:_Py_XNewRef
Unexecuted instantiation: sliceobject.c:_Py_XNewRef
Unexecuted instantiation: structseq.c:_Py_XNewRef
Unexecuted instantiation: templateobject.c:_Py_XNewRef
Unexecuted instantiation: tupleobject.c:_Py_XNewRef
typeobject.c:_Py_XNewRef
Line
Count
Source
532
269k
{
533
269k
    Py_XINCREF(obj);
534
269k
    return obj;
535
269k
}
Unexecuted instantiation: typevarobject.c:_Py_XNewRef
Unexecuted instantiation: unicodeobject.c:_Py_XNewRef
Unexecuted instantiation: unicodectype.c:_Py_XNewRef
Unexecuted instantiation: unionobject.c:_Py_XNewRef
weakrefobject.c:_Py_XNewRef
Line
Count
Source
532
273k
{
533
273k
    Py_XINCREF(obj);
534
273k
    return obj;
535
273k
}
Unexecuted instantiation: _warnings.c:_Py_XNewRef
bltinmodule.c:_Py_XNewRef
Line
Count
Source
532
317
{
533
317
    Py_XINCREF(obj);
534
317
    return obj;
535
317
}
ceval.c:_Py_XNewRef
Line
Count
Source
532
68.2M
{
533
68.2M
    Py_XINCREF(obj);
534
68.2M
    return obj;
535
68.2M
}
Unexecuted instantiation: codecs.c:_Py_XNewRef
Unexecuted instantiation: codegen.c:_Py_XNewRef
compile.c:_Py_XNewRef
Line
Count
Source
532
9.41k
{
533
9.41k
    Py_XINCREF(obj);
534
9.41k
    return obj;
535
9.41k
}
context.c:_Py_XNewRef
Line
Count
Source
532
24
{
533
24
    Py_XINCREF(obj);
534
24
    return obj;
535
24
}
Unexecuted instantiation: errors.c:_Py_XNewRef
Unexecuted instantiation: flowgraph.c:_Py_XNewRef
Unexecuted instantiation: frame.c:_Py_XNewRef
Unexecuted instantiation: future.c:_Py_XNewRef
Unexecuted instantiation: gc.c:_Py_XNewRef
Unexecuted instantiation: gc_gil.c:_Py_XNewRef
Unexecuted instantiation: getargs.c:_Py_XNewRef
Unexecuted instantiation: ceval_gil.c:_Py_XNewRef
Unexecuted instantiation: hamt.c:_Py_XNewRef
Unexecuted instantiation: hashtable.c:_Py_XNewRef
import.c:_Py_XNewRef
Line
Count
Source
532
2.71k
{
533
2.71k
    Py_XINCREF(obj);
534
2.71k
    return obj;
535
2.71k
}
Unexecuted instantiation: importdl.c:_Py_XNewRef
Unexecuted instantiation: initconfig.c:_Py_XNewRef
Unexecuted instantiation: instrumentation.c:_Py_XNewRef
Unexecuted instantiation: instruction_sequence.c:_Py_XNewRef
Unexecuted instantiation: intrinsics.c:_Py_XNewRef
Unexecuted instantiation: legacy_tracing.c:_Py_XNewRef
Unexecuted instantiation: lock.c:_Py_XNewRef
Unexecuted instantiation: marshal.c:_Py_XNewRef
Unexecuted instantiation: modsupport.c:_Py_XNewRef
Unexecuted instantiation: mysnprintf.c:_Py_XNewRef
Unexecuted instantiation: parking_lot.c:_Py_XNewRef
Unexecuted instantiation: preconfig.c:_Py_XNewRef
Unexecuted instantiation: pyarena.c:_Py_XNewRef
Unexecuted instantiation: pyctype.c:_Py_XNewRef
Unexecuted instantiation: pyhash.c:_Py_XNewRef
Unexecuted instantiation: pylifecycle.c:_Py_XNewRef
Unexecuted instantiation: pymath.c:_Py_XNewRef
pystate.c:_Py_XNewRef
Line
Count
Source
532
2.23k
{
533
2.23k
    Py_XINCREF(obj);
534
2.23k
    return obj;
535
2.23k
}
Unexecuted instantiation: pythonrun.c:_Py_XNewRef
Unexecuted instantiation: pytime.c:_Py_XNewRef
Unexecuted instantiation: qsbr.c:_Py_XNewRef
Unexecuted instantiation: bootstrap_hash.c:_Py_XNewRef
Unexecuted instantiation: specialize.c:_Py_XNewRef
Unexecuted instantiation: symtable.c:_Py_XNewRef
sysmodule.c:_Py_XNewRef
Line
Count
Source
532
16
{
533
16
    Py_XINCREF(obj);
534
16
    return obj;
535
16
}
Unexecuted instantiation: thread.c:_Py_XNewRef
traceback.c:_Py_XNewRef
Line
Count
Source
532
60.1M
{
533
60.1M
    Py_XINCREF(obj);
534
60.1M
    return obj;
535
60.1M
}
Unexecuted instantiation: tracemalloc.c:_Py_XNewRef
Unexecuted instantiation: getopt.c:_Py_XNewRef
Unexecuted instantiation: pystrcmp.c:_Py_XNewRef
Unexecuted instantiation: pystrtod.c:_Py_XNewRef
Unexecuted instantiation: pystrhex.c:_Py_XNewRef
Unexecuted instantiation: dtoa.c:_Py_XNewRef
Unexecuted instantiation: formatter_unicode.c:_Py_XNewRef
Unexecuted instantiation: fileutils.c:_Py_XNewRef
Unexecuted instantiation: suggestions.c:_Py_XNewRef
Unexecuted instantiation: perf_trampoline.c:_Py_XNewRef
Unexecuted instantiation: perf_jit_trampoline.c:_Py_XNewRef
Unexecuted instantiation: remote_debugging.c:_Py_XNewRef
Unexecuted instantiation: dynload_shlib.c:_Py_XNewRef
Unexecuted instantiation: config.c:_Py_XNewRef
Unexecuted instantiation: gcmodule.c:_Py_XNewRef
Unexecuted instantiation: _asynciomodule.c:_Py_XNewRef
Unexecuted instantiation: atexitmodule.c:_Py_XNewRef
Unexecuted instantiation: faulthandler.c:_Py_XNewRef
Unexecuted instantiation: posixmodule.c:_Py_XNewRef
Unexecuted instantiation: signalmodule.c:_Py_XNewRef
Unexecuted instantiation: _tracemalloc.c:_Py_XNewRef
Unexecuted instantiation: _suggestions.c:_Py_XNewRef
_datetimemodule.c:_Py_XNewRef
Line
Count
Source
532
32
{
533
32
    Py_XINCREF(obj);
534
32
    return obj;
535
32
}
Unexecuted instantiation: _codecsmodule.c:_Py_XNewRef
Unexecuted instantiation: _collectionsmodule.c:_Py_XNewRef
Unexecuted instantiation: errnomodule.c:_Py_XNewRef
Unexecuted instantiation: _iomodule.c:_Py_XNewRef
Unexecuted instantiation: iobase.c:_Py_XNewRef
Unexecuted instantiation: fileio.c:_Py_XNewRef
Unexecuted instantiation: bytesio.c:_Py_XNewRef
Unexecuted instantiation: bufferedio.c:_Py_XNewRef
Unexecuted instantiation: textio.c:_Py_XNewRef
Unexecuted instantiation: stringio.c:_Py_XNewRef
Unexecuted instantiation: itertoolsmodule.c:_Py_XNewRef
Unexecuted instantiation: sre.c:_Py_XNewRef
Unexecuted instantiation: _sysconfig.c:_Py_XNewRef
Unexecuted instantiation: _threadmodule.c:_Py_XNewRef
Unexecuted instantiation: timemodule.c:_Py_XNewRef
Unexecuted instantiation: _typesmodule.c:_Py_XNewRef
Unexecuted instantiation: _typingmodule.c:_Py_XNewRef
Unexecuted instantiation: _weakref.c:_Py_XNewRef
_abc.c:_Py_XNewRef
Line
Count
Source
532
608
{
533
608
    Py_XINCREF(obj);
534
608
    return obj;
535
608
}
Unexecuted instantiation: _functoolsmodule.c:_Py_XNewRef
Unexecuted instantiation: _localemodule.c:_Py_XNewRef
Unexecuted instantiation: _opcode.c:_Py_XNewRef
Unexecuted instantiation: _operator.c:_Py_XNewRef
Unexecuted instantiation: _stat.c:_Py_XNewRef
Unexecuted instantiation: symtablemodule.c:_Py_XNewRef
Unexecuted instantiation: pwdmodule.c:_Py_XNewRef
getpath.c:_Py_XNewRef
Line
Count
Source
532
48
{
533
48
    Py_XINCREF(obj);
534
48
    return obj;
535
48
}
Unexecuted instantiation: frozen.c:_Py_XNewRef
Unexecuted instantiation: getbuildinfo.c:_Py_XNewRef
Unexecuted instantiation: peg_api.c:_Py_XNewRef
Unexecuted instantiation: file_tokenizer.c:_Py_XNewRef
Unexecuted instantiation: helpers.c:_Py_XNewRef
Unexecuted instantiation: myreadline.c:_Py_XNewRef
abstract.c:_Py_XNewRef
Line
Count
Source
532
14.3M
{
533
14.3M
    Py_XINCREF(obj);
534
14.3M
    return obj;
535
14.3M
}
Unexecuted instantiation: boolobject.c:_Py_XNewRef
Unexecuted instantiation: bytes_methods.c:_Py_XNewRef
Unexecuted instantiation: bytearrayobject.c:_Py_XNewRef
Unexecuted instantiation: capsule.c:_Py_XNewRef
cellobject.c:_Py_XNewRef
Line
Count
Source
532
5.64M
{
533
5.64M
    Py_XINCREF(obj);
534
5.64M
    return obj;
535
5.64M
}
Unexecuted instantiation: classobject.c:_Py_XNewRef
codeobject.c:_Py_XNewRef
Line
Count
Source
532
6.21k
{
533
6.21k
    Py_XINCREF(obj);
534
6.21k
    return obj;
535
6.21k
}
Unexecuted instantiation: complexobject.c:_Py_XNewRef
descrobject.c:_Py_XNewRef
Line
Count
Source
532
45.5k
{
533
45.5k
    Py_XINCREF(obj);
534
45.5k
    return obj;
535
45.5k
}
Unexecuted instantiation: enumobject.c:_Py_XNewRef
Unexecuted instantiation: genobject.c:_Py_XNewRef
Unexecuted instantiation: fileobject.c:_Py_XNewRef
Unexecuted instantiation: frameobject.c:_Py_XNewRef
funcobject.c:_Py_XNewRef
Line
Count
Source
532
3.34k
{
533
3.34k
    Py_XINCREF(obj);
534
3.34k
    return obj;
535
3.34k
}
Unexecuted instantiation: interpolationobject.c:_Py_XNewRef
Unexecuted instantiation: iterobject.c:_Py_XNewRef
Unexecuted instantiation: odictobject.c:_Py_XNewRef
methodobject.c:_Py_XNewRef
Line
Count
Source
532
611M
{
533
611M
    Py_XINCREF(obj);
534
611M
    return obj;
535
611M
}
Unexecuted instantiation: namespaceobject.c:_Py_XNewRef
Unexecuted instantiation: _contextvars.c:_Py_XNewRef
Unexecuted instantiation: Python-ast.c:_Py_XNewRef
Unexecuted instantiation: Python-tokenize.c:_Py_XNewRef
Unexecuted instantiation: asdl.c:_Py_XNewRef
Unexecuted instantiation: assemble.c:_Py_XNewRef
Unexecuted instantiation: ast.c:_Py_XNewRef
Unexecuted instantiation: ast_preprocess.c:_Py_XNewRef
Unexecuted instantiation: ast_unparse.c:_Py_XNewRef
Unexecuted instantiation: critical_section.c:_Py_XNewRef
Unexecuted instantiation: crossinterp.c:_Py_XNewRef
Unexecuted instantiation: getcopyright.c:_Py_XNewRef
Unexecuted instantiation: getplatform.c:_Py_XNewRef
Unexecuted instantiation: getversion.c:_Py_XNewRef
Unexecuted instantiation: optimizer.c:_Py_XNewRef
Unexecuted instantiation: pathconfig.c:_Py_XNewRef
structmember.c:_Py_XNewRef
Line
Count
Source
532
6.68k
{
533
6.68k
    Py_XINCREF(obj);
534
6.68k
    return obj;
535
6.68k
}
Unexecuted instantiation: pegen.c:_Py_XNewRef
Unexecuted instantiation: pegen_errors.c:_Py_XNewRef
Unexecuted instantiation: parser.c:_Py_XNewRef
Unexecuted instantiation: buffer.c:_Py_XNewRef
Unexecuted instantiation: lexer.c:_Py_XNewRef
Unexecuted instantiation: state.c:_Py_XNewRef
Unexecuted instantiation: readline_tokenizer.c:_Py_XNewRef
Unexecuted instantiation: string_tokenizer.c:_Py_XNewRef
Unexecuted instantiation: utf8_tokenizer.c:_Py_XNewRef
Unexecuted instantiation: getcompiler.c:_Py_XNewRef
Unexecuted instantiation: mystrtoul.c:_Py_XNewRef
Unexecuted instantiation: token.c:_Py_XNewRef
Unexecuted instantiation: action_helpers.c:_Py_XNewRef
Unexecuted instantiation: string_parser.c:_Py_XNewRef
536
537
// Py_NewRef() and Py_XNewRef() are exported as functions for the stable ABI.
538
// Names overridden with macros by static inline functions for best
539
// performances.
540
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
541
5.18G
#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
542
1.44G
#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
543
#else
544
#  define Py_NewRef(obj) _Py_NewRef(obj)
545
#  define Py_XNewRef(obj) _Py_XNewRef(obj)
546
#endif
547
548
549
#ifdef __cplusplus
550
}
551
#endif
552
#endif   // !_Py_REFCOUNT_H