Coverage Report

Created: 2025-10-10 06:33

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/cpython/Include/refcount.h
Line
Count
Source
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.26G
#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
47
0
#define _Py_IMMORTAL_MINIMUM_REFCNT (1ULL << 31)
48
241M
#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
49
241M
#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
973M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
973M
    #if !defined(Py_GIL_DISABLED)
104
973M
        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
973M
    }
bytesobject.c:_Py_REFCNT
Line
Count
Source
102
349k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
349k
    #if !defined(Py_GIL_DISABLED)
104
349k
        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
349k
    }
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
18
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
18
    #if !defined(Py_GIL_DISABLED)
104
18
        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
18
    }
dictobject.c:_Py_REFCNT
Line
Count
Source
102
597M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
597M
    #if !defined(Py_GIL_DISABLED)
104
597M
        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
597M
    }
Unexecuted instantiation: memoryobject.c:_Py_REFCNT
Unexecuted instantiation: moduleobject.c:_Py_REFCNT
object.c:_Py_REFCNT
Line
Count
Source
102
63.7M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
63.7M
    #if !defined(Py_GIL_DISABLED)
104
63.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
63.7M
    }
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.33k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
1.33k
    #if !defined(Py_GIL_DISABLED)
104
1.33k
        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.33k
    }
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.0k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
71.0k
    #if !defined(Py_GIL_DISABLED)
104
71.0k
        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.0k
    }
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
Unexecuted instantiation: unicode_formatter.c:_Py_REFCNT
unicodeobject.c:_Py_REFCNT
Line
Count
Source
102
60.6M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
60.6M
    #if !defined(Py_GIL_DISABLED)
104
60.6M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
60.6M
    }
Unexecuted instantiation: unicodectype.c:_Py_REFCNT
Unexecuted instantiation: unionobject.c:_Py_REFCNT
weakrefobject.c:_Py_REFCNT
Line
Count
Source
102
38.4M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
38.4M
    #if !defined(Py_GIL_DISABLED)
104
38.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
38.4M
    }
Unexecuted instantiation: _warnings.c:_Py_REFCNT
bltinmodule.c:_Py_REFCNT
Line
Count
Source
102
21.5M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
21.5M
    #if !defined(Py_GIL_DISABLED)
104
21.5M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
21.5M
    }
Unexecuted instantiation: ceval.c:_Py_REFCNT
Unexecuted instantiation: codecs.c:_Py_REFCNT
Unexecuted instantiation: codegen.c:_Py_REFCNT
Unexecuted instantiation: compile.c:_Py_REFCNT
Unexecuted instantiation: context.c:_Py_REFCNT
Unexecuted instantiation: errors.c:_Py_REFCNT
Unexecuted instantiation: flowgraph.c:_Py_REFCNT
frame.c:_Py_REFCNT
Line
Count
Source
102
23.1M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
23.1M
    #if !defined(Py_GIL_DISABLED)
104
23.1M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
23.1M
    }
Unexecuted instantiation: future.c:_Py_REFCNT
gc.c:_Py_REFCNT
Line
Count
Source
102
41.5M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
41.5M
    #if !defined(Py_GIL_DISABLED)
104
41.5M
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
41.5M
    }
Unexecuted instantiation: gc_gil.c:_Py_REFCNT
Unexecuted instantiation: getargs.c:_Py_REFCNT
Unexecuted instantiation: ceval_gil.c:_Py_REFCNT
Unexecuted instantiation: hamt.c:_Py_REFCNT
Unexecuted instantiation: hashtable.c:_Py_REFCNT
import.c:_Py_REFCNT
Line
Count
Source
102
16
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
16
    #if !defined(Py_GIL_DISABLED)
104
16
        return ob->ob_refcnt;
105
    #else
106
        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
107
        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
108
            return _Py_IMMORTAL_INITIAL_REFCNT;
109
        }
110
        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
111
        return _Py_STATIC_CAST(Py_ssize_t, local) +
112
               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
113
    #endif
114
16
    }
Unexecuted instantiation: importdl.c:_Py_REFCNT
Unexecuted instantiation: initconfig.c:_Py_REFCNT
Unexecuted instantiation: instrumentation.c:_Py_REFCNT
Unexecuted instantiation: instruction_sequence.c:_Py_REFCNT
Unexecuted instantiation: intrinsics.c:_Py_REFCNT
Unexecuted instantiation: legacy_tracing.c:_Py_REFCNT
Unexecuted instantiation: lock.c:_Py_REFCNT
marshal.c:_Py_REFCNT
Line
Count
Source
102
164k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
164k
    #if !defined(Py_GIL_DISABLED)
104
164k
        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
164k
    }
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: 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.8k
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
16.8k
    #if !defined(Py_GIL_DISABLED)
104
16.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
16.8k
    }
Unexecuted instantiation: complexobject.c:_Py_REFCNT
Unexecuted instantiation: descrobject.c:_Py_REFCNT
enumobject.c:_Py_REFCNT
Line
Count
Source
102
97.3M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
97.3M
    #if !defined(Py_GIL_DISABLED)
104
97.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
97.3M
    }
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
28.7M
    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
103
28.7M
    #if !defined(Py_GIL_DISABLED)
104
28.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
28.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
640M
    #  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
14.5G
{
123
#if defined(Py_GIL_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.5G
    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.5G
}
bytesobject.c:_Py_IsImmortal
Line
Count
Source
122
4.40M
{
123
#if defined(Py_GIL_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.40M
    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.40M
}
call.c:_Py_IsImmortal
Line
Count
Source
122
133M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
133M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
133M
}
exceptions.c:_Py_IsImmortal
Line
Count
Source
122
106M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
106M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
106M
}
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.51G
{
123
#if defined(Py_GIL_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.51G
    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.51G
}
longobject.c:_Py_IsImmortal
Line
Count
Source
122
19.8M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
19.8M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
19.8M
}
dictobject.c:_Py_IsImmortal
Line
Count
Source
122
1.67G
{
123
#if defined(Py_GIL_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.67G
    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.67G
}
memoryobject.c:_Py_IsImmortal
Line
Count
Source
122
622k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
622k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
622k
}
moduleobject.c:_Py_IsImmortal
Line
Count
Source
122
84.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
84.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
84.2k
}
object.c:_Py_IsImmortal
Line
Count
Source
122
475M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
475M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
475M
}
Unexecuted instantiation: obmalloc.c:_Py_IsImmortal
Unexecuted instantiation: picklebufobject.c:_Py_IsImmortal
rangeobject.c:_Py_IsImmortal
Line
Count
Source
122
33.7M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
33.7M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
33.7M
}
setobject.c:_Py_IsImmortal
Line
Count
Source
122
1.19M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
1.19M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
1.19M
}
sliceobject.c:_Py_IsImmortal
Line
Count
Source
122
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
}
structseq.c:_Py_IsImmortal
Line
Count
Source
122
106k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
106k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
106k
}
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
796M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
796M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
796M
}
typeobject.c:_Py_IsImmortal
Line
Count
Source
122
810M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
810M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
810M
}
Unexecuted instantiation: typevarobject.c:_Py_IsImmortal
unicode_formatter.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
}
unicodeobject.c:_Py_IsImmortal
Line
Count
Source
122
242M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
242M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
242M
}
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
14.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
14.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
14.5k
}
_warnings.c:_Py_IsImmortal
Line
Count
Source
122
168k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
168k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
168k
}
bltinmodule.c:_Py_IsImmortal
Line
Count
Source
122
128M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
128M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
128M
}
ceval.c:_Py_IsImmortal
Line
Count
Source
122
5.62G
{
123
#if defined(Py_GIL_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.62G
    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.62G
}
codecs.c:_Py_IsImmortal
Line
Count
Source
122
6.62M
{
123
#if defined(Py_GIL_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.62M
    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.62M
}
codegen.c:_Py_IsImmortal
Line
Count
Source
122
154k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
154k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
154k
}
compile.c:_Py_IsImmortal
Line
Count
Source
122
615k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
615k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
615k
}
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
72.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
72.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
72.0M
}
flowgraph.c:_Py_IsImmortal
Line
Count
Source
122
72.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
72.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
72.8k
}
frame.c:_Py_IsImmortal
Line
Count
Source
122
34.9M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
34.9M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
34.9M
}
Unexecuted instantiation: future.c:_Py_IsImmortal
gc.c:_Py_IsImmortal
Line
Count
Source
122
861M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
861M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
861M
}
Unexecuted instantiation: gc_gil.c:_Py_IsImmortal
getargs.c:_Py_IsImmortal
Line
Count
Source
122
1.57M
{
123
#if defined(Py_GIL_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.57M
    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.57M
}
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
183k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
183k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
183k
}
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.7k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
28.7k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
28.7k
}
Unexecuted instantiation: legacy_tracing.c:_Py_IsImmortal
Unexecuted instantiation: lock.c:_Py_IsImmortal
marshal.c:_Py_IsImmortal
Line
Count
Source
122
322k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
322k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
322k
}
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.66M
{
123
#if defined(Py_GIL_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.66M
    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.66M
}
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
555k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
555k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
555k
}
symtable.c:_Py_IsImmortal
Line
Count
Source
122
818k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
818k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
818k
}
sysmodule.c:_Py_IsImmortal
Line
Count
Source
122
5.09k
{
123
#if defined(Py_GIL_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.09k
    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.09k
}
Unexecuted instantiation: thread.c:_Py_IsImmortal
traceback.c:_Py_IsImmortal
Line
Count
Source
122
63.6M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
63.6M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
63.6M
}
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
fileutils.c:_Py_IsImmortal
Line
Count
Source
122
11.4k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
11.4k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
11.4k
}
Unexecuted instantiation: suggestions.c:_Py_IsImmortal
Unexecuted instantiation: perf_trampoline.c:_Py_IsImmortal
Unexecuted instantiation: perf_jit_trampoline.c:_Py_IsImmortal
Unexecuted instantiation: remote_debugging.c:_Py_IsImmortal
Unexecuted instantiation: dynload_shlib.c:_Py_IsImmortal
Unexecuted instantiation: config.c:_Py_IsImmortal
Unexecuted instantiation: gcmodule.c:_Py_IsImmortal
Unexecuted instantiation: _asynciomodule.c:_Py_IsImmortal
Unexecuted instantiation: atexitmodule.c:_Py_IsImmortal
Unexecuted instantiation: faulthandler.c:_Py_IsImmortal
posixmodule.c:_Py_IsImmortal
Line
Count
Source
122
24.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
24.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
24.2k
}
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
114k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
114k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
114k
}
Unexecuted instantiation: errnomodule.c:_Py_IsImmortal
_iomodule.c:_Py_IsImmortal
Line
Count
Source
122
6.63k
{
123
#if defined(Py_GIL_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.63k
    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.63k
}
iobase.c:_Py_IsImmortal
Line
Count
Source
122
121k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
121k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
121k
}
fileio.c:_Py_IsImmortal
Line
Count
Source
122
3.63k
{
123
#if defined(Py_GIL_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.63k
    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.63k
}
bytesio.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
}
bufferedio.c:_Py_IsImmortal
Line
Count
Source
122
6.45k
{
123
#if defined(Py_GIL_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.45k
    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.45k
}
textio.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
}
stringio.c:_Py_IsImmortal
Line
Count
Source
122
296k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
296k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
296k
}
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
440M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
440M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
440M
}
Unexecuted instantiation: _sysconfig.c:_Py_IsImmortal
_threadmodule.c:_Py_IsImmortal
Line
Count
Source
122
6.28k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
6.28k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
6.28k
}
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.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
29.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
29.9k
}
_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
593k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
593k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
593k
}
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
22.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
22.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
22.1k
}
Unexecuted instantiation: myreadline.c:_Py_IsImmortal
abstract.c:_Py_IsImmortal
Line
Count
Source
122
400M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
400M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
400M
}
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
319k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
319k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
319k
}
classobject.c:_Py_IsImmortal
Line
Count
Source
122
39.7M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
39.7M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
39.7M
}
codeobject.c:_Py_IsImmortal
Line
Count
Source
122
126k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
126k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
126k
}
Unexecuted instantiation: complexobject.c:_Py_IsImmortal
descrobject.c:_Py_IsImmortal
Line
Count
Source
122
98.7M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
98.7M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
98.7M
}
enumobject.c:_Py_IsImmortal
Line
Count
Source
122
244M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
244M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
244M
}
genobject.c:_Py_IsImmortal
Line
Count
Source
122
140M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
140M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
140M
}
fileobject.c:_Py_IsImmortal
Line
Count
Source
122
12.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
12.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
12.9k
}
frameobject.c:_Py_IsImmortal
Line
Count
Source
122
11.7M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
11.7M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
11.7M
}
funcobject.c:_Py_IsImmortal
Line
Count
Source
122
158M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
158M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
158M
}
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.16M
{
123
#if defined(Py_GIL_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.16M
    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.16M
}
odictobject.c:_Py_IsImmortal
Line
Count
Source
122
688
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
688
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
688
}
methodobject.c:_Py_IsImmortal
Line
Count
Source
122
306M
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
306M
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
306M
}
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
3.91M
{
123
#if defined(Py_GIL_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.91M
    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.91M
}
Unexecuted instantiation: Python-tokenize.c:_Py_IsImmortal
Unexecuted instantiation: asdl.c:_Py_IsImmortal
assemble.c:_Py_IsImmortal
Line
Count
Source
122
49.1k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
49.1k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
49.1k
}
Unexecuted instantiation: ast.c:_Py_IsImmortal
ast_preprocess.c:_Py_IsImmortal
Line
Count
Source
122
2.19k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
2.19k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
2.19k
}
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
130k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
130k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
130k
}
pegen_errors.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
}
Unexecuted instantiation: parser.c:_Py_IsImmortal
Unexecuted instantiation: buffer.c:_Py_IsImmortal
lexer.c:_Py_IsImmortal
Line
Count
Source
122
13.9k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
13.9k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
13.9k
}
state.c:_Py_IsImmortal
Line
Count
Source
122
22.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
22.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
22.9k
}
Unexecuted instantiation: readline_tokenizer.c:_Py_IsImmortal
Unexecuted instantiation: string_tokenizer.c:_Py_IsImmortal
Unexecuted instantiation: utf8_tokenizer.c:_Py_IsImmortal
Unexecuted instantiation: getcompiler.c:_Py_IsImmortal
Unexecuted instantiation: mystrtoul.c:_Py_IsImmortal
Unexecuted instantiation: token.c:_Py_IsImmortal
Unexecuted instantiation: action_helpers.c:_Py_IsImmortal
string_parser.c:_Py_IsImmortal
Line
Count
Source
122
41.6k
{
123
#if defined(Py_GIL_DISABLED)
124
    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
125
            _Py_IMMORTAL_REFCNT_LOCAL);
126
#elif SIZEOF_VOID_P > 4
127
41.6k
    return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
128
#else
129
    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
130
#endif
131
41.6k
}
132
16.2G
#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
133
134
135
static inline Py_ALWAYS_INLINE int _Py_IsStaticImmortal(PyObject *op)
136
0
{
137
0
#if defined(Py_GIL_DISABLED) || SIZEOF_VOID_P > 4
138
0
    return (op->ob_flags & _Py_STATICALLY_ALLOCATED_FLAG) != 0;
139
0
#else
140
0
    return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT;
141
0
#endif
142
0
}
Unexecuted instantiation: bytesobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: call.c:_Py_IsStaticImmortal
Unexecuted instantiation: exceptions.c:_Py_IsStaticImmortal
Unexecuted instantiation: genericaliasobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: floatobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: listobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: longobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: dictobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: memoryobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: moduleobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: object.c:_Py_IsStaticImmortal
Unexecuted instantiation: obmalloc.c:_Py_IsStaticImmortal
Unexecuted instantiation: picklebufobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: rangeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: setobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: sliceobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: structseq.c:_Py_IsStaticImmortal
Unexecuted instantiation: templateobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: tupleobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: typeobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: typevarobject.c:_Py_IsStaticImmortal
Unexecuted instantiation: unicode_formatter.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: 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
668M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
668M
    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
668M
    if (_Py_IsImmortal(ob)) {
161
447
        return;
162
447
    }
163
668M
#ifndef Py_GIL_DISABLED
164
668M
#if SIZEOF_VOID_P > 4
165
668M
    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
668M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
668M
}
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
596M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
596M
    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
596M
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
596M
#ifndef Py_GIL_DISABLED
164
596M
#if SIZEOF_VOID_P > 4
165
596M
    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
596M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
596M
}
Unexecuted instantiation: memoryobject.c:Py_SET_REFCNT
moduleobject.c:Py_SET_REFCNT
Line
Count
Source
149
447
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
447
    assert(refcnt >= 0);
151
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
152
    // Stable ABI implements Py_SET_REFCNT() as a function call
153
    // on limited C API version 3.13 and newer.
154
    _Py_SetRefcnt(ob, refcnt);
155
#else
156
    // This immortal check is for code that is unaware of immortal objects.
157
    // The runtime tracks these objects and we should avoid as much
158
    // as possible having extensions inadvertently change the refcnt
159
    // of an immortalized object.
160
447
    if (_Py_IsImmortal(ob)) {
161
447
        return;
162
447
    }
163
0
#ifndef Py_GIL_DISABLED
164
0
#if SIZEOF_VOID_P > 4
165
0
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
166
#else
167
    ob->ob_refcnt = refcnt;
168
#endif
169
#else
170
    if (_Py_IsOwnedByCurrentThread(ob)) {
171
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
172
            // On overflow, make the object immortal
173
            ob->ob_tid = _Py_UNOWNED_TID;
174
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
175
            ob->ob_ref_shared = 0;
176
        }
177
        else {
178
            // Set local refcount to desired refcount and shared refcount
179
            // to zero, but preserve the shared refcount flags.
180
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
181
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
182
        }
183
    }
184
    else {
185
        // Set local refcount to zero and shared refcount to desired refcount.
186
        // Mark the object as merged.
187
        ob->ob_tid = _Py_UNOWNED_TID;
188
        ob->ob_ref_local = 0;
189
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
190
    }
191
#endif  // Py_GIL_DISABLED
192
0
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
0
}
object.c:Py_SET_REFCNT
Line
Count
Source
149
42.4M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
42.4M
    assert(refcnt >= 0);
151
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
152
    // Stable ABI implements Py_SET_REFCNT() as a function call
153
    // on limited C API version 3.13 and newer.
154
    _Py_SetRefcnt(ob, refcnt);
155
#else
156
    // This immortal check is for code that is unaware of immortal objects.
157
    // The runtime tracks these objects and we should avoid as much
158
    // as possible having extensions inadvertently change the refcnt
159
    // of an immortalized object.
160
42.4M
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
42.4M
#ifndef Py_GIL_DISABLED
164
42.4M
#if SIZEOF_VOID_P > 4
165
42.4M
    ob->ob_refcnt = (PY_UINT32_T)refcnt;
166
#else
167
    ob->ob_refcnt = refcnt;
168
#endif
169
#else
170
    if (_Py_IsOwnedByCurrentThread(ob)) {
171
        if ((size_t)refcnt > (size_t)UINT32_MAX) {
172
            // On overflow, make the object immortal
173
            ob->ob_tid = _Py_UNOWNED_TID;
174
            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
175
            ob->ob_ref_shared = 0;
176
        }
177
        else {
178
            // Set local refcount to desired refcount and shared refcount
179
            // to zero, but preserve the shared refcount flags.
180
            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
181
            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
182
        }
183
    }
184
    else {
185
        // Set local refcount to zero and shared refcount to desired refcount.
186
        // Mark the object as merged.
187
        ob->ob_tid = _Py_UNOWNED_TID;
188
        ob->ob_ref_local = 0;
189
        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
190
    }
191
#endif  // Py_GIL_DISABLED
192
42.4M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
42.4M
}
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
Unexecuted instantiation: unicode_formatter.c:Py_SET_REFCNT
unicodeobject.c:Py_SET_REFCNT
Line
Count
Source
149
1.30M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
1.30M
    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.30M
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
1.30M
#ifndef Py_GIL_DISABLED
164
1.30M
#if SIZEOF_VOID_P > 4
165
1.30M
    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.30M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
1.30M
}
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: 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.8k
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
16.8k
    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.8k
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
16.8k
#ifndef Py_GIL_DISABLED
164
16.8k
#if SIZEOF_VOID_P > 4
165
16.8k
    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.8k
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
16.8k
}
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
28.7M
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
150
28.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
28.7M
    if (_Py_IsImmortal(ob)) {
161
0
        return;
162
0
    }
163
28.7M
#ifndef Py_GIL_DISABLED
164
28.7M
#if SIZEOF_VOID_P > 4
165
28.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
28.7M
#endif  // Py_LIMITED_API+0 < 0x030d0000
193
28.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
668M
#  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.02G
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
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.02G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
8.02G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
4.07G
        _Py_INCREF_IMMORTAL_STAT_INC();
283
4.07G
        return;
284
4.07G
    }
285
3.94G
    op->ob_refcnt = cur_refcnt + 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.94G
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
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.94G
#endif
301
3.94G
}
bytesobject.c:Py_INCREF
Line
Count
Source
250
22.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
22.1M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
22.1M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
20.4M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
20.4M
        return;
284
20.4M
    }
285
1.69M
    op->ob_refcnt = cur_refcnt + 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.69M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
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.69M
#endif
301
1.69M
}
call.c:Py_INCREF
Line
Count
Source
250
22.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
22.9M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
22.9M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
8.12M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
8.12M
        return;
284
8.12M
    }
285
14.8M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
14.8M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
14.8M
#endif
301
14.8M
}
exceptions.c:Py_INCREF
Line
Count
Source
250
81.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
81.7M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
81.7M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
33.4M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
33.4M
        return;
284
33.4M
    }
285
48.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
48.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
48.2M
#endif
301
48.2M
}
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
736k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
736k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
736k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
736k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
736k
        return;
284
736k
    }
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.14G
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
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.14G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.14G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
241M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
241M
        return;
284
241M
    }
285
908M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
908M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
908M
#endif
301
908M
}
longobject.c:Py_INCREF
Line
Count
Source
250
98.8M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
98.8M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
98.8M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
98.8M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
98.8M
        return;
284
98.8M
    }
285
4.91k
    op->ob_refcnt = cur_refcnt + 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.91k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
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.91k
#endif
301
4.91k
}
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
386M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
386M
        return;
284
386M
    }
285
693M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
693M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
693M
#endif
301
693M
}
memoryobject.c:Py_INCREF
Line
Count
Source
250
542k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
542k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
542k
    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
542k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
542k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
542k
#endif
301
542k
}
moduleobject.c:Py_INCREF
Line
Count
Source
250
1.48k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
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.48k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.48k
    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
628
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
628
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
628
#endif
301
628
}
object.c:Py_INCREF
Line
Count
Source
250
545M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
545M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
545M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
411M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
411M
        return;
284
411M
    }
285
133M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
133M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
133M
#endif
301
133M
}
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.41M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
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.41M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.41M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
513k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
513k
        return;
284
513k
    }
285
905k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
905k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
905k
#endif
301
905k
}
sliceobject.c:Py_INCREF
Line
Count
Source
250
44.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
44.2M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
44.2M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
44.2M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
44.2M
        return;
284
44.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
560M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
560M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
560M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
376M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
376M
        return;
284
376M
    }
285
184M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
184M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
184M
#endif
301
184M
}
typeobject.c:Py_INCREF
Line
Count
Source
250
285M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
285M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
285M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
91.4M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
91.4M
        return;
284
91.4M
    }
285
194M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
194M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
194M
#endif
301
194M
}
Unexecuted instantiation: typevarobject.c:Py_INCREF
Unexecuted instantiation: unicode_formatter.c:Py_INCREF
unicodeobject.c:Py_INCREF
Line
Count
Source
250
766M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
766M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
766M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
672M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
672M
        return;
284
672M
    }
285
93.8M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
93.8M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
93.8M
#endif
301
93.8M
}
Unexecuted instantiation: unicodectype.c:Py_INCREF
Unexecuted instantiation: unionobject.c:Py_INCREF
weakrefobject.c:Py_INCREF
Line
Count
Source
250
297k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
297k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
297k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
1.33k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
1.33k
        return;
284
1.33k
    }
285
295k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
295k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
295k
#endif
301
295k
}
_warnings.c:Py_INCREF
Line
Count
Source
250
71.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
71.1k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
71.1k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
21.6k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
21.6k
        return;
284
21.6k
    }
285
49.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
49.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
49.5k
#endif
301
49.5k
}
bltinmodule.c:Py_INCREF
Line
Count
Source
250
59.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
59.9M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
59.9M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
24.5M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
24.5M
        return;
284
24.5M
    }
285
35.4M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
35.4M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
35.4M
#endif
301
35.4M
}
ceval.c:Py_INCREF
Line
Count
Source
250
1.45G
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
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.45G
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.45G
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
833M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
833M
        return;
284
833M
    }
285
623M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
623M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
623M
#endif
301
623M
}
codecs.c:Py_INCREF
Line
Count
Source
250
3.13M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
3.13M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
3.13M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
619k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
619k
        return;
284
619k
    }
285
2.51M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
2.51M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
2.51M
#endif
301
2.51M
}
codegen.c:Py_INCREF
Line
Count
Source
250
2.86k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
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.86k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
2.86k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
2.86k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
2.86k
        return;
284
2.86k
    }
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
113k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
113k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
113k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
49.2k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
49.2k
        return;
284
49.2k
    }
285
64.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
64.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
64.5k
#endif
301
64.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
59.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
59.1M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
59.1M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
28.9M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
28.9M
        return;
284
28.9M
    }
285
30.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
30.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
30.2M
#endif
301
30.2M
}
flowgraph.c:Py_INCREF
Line
Count
Source
250
97.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
97.8k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
97.8k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
47.1k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
47.1k
        return;
284
47.1k
    }
285
50.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
50.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
50.7k
#endif
301
50.7k
}
frame.c:Py_INCREF
Line
Count
Source
250
12.3M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
12.3M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
12.3M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
12.3M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
12.3M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
12.3M
#endif
301
12.3M
}
Unexecuted instantiation: future.c:Py_INCREF
gc.c:Py_INCREF
Line
Count
Source
250
317M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
317M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
317M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
245M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
245M
        return;
284
245M
    }
285
72.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
72.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
72.0M
#endif
301
72.0M
}
Unexecuted instantiation: gc_gil.c:Py_INCREF
getargs.c:Py_INCREF
Line
Count
Source
250
737k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
737k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
737k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
127k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
127k
        return;
284
127k
    }
285
610k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
610k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
610k
#endif
301
610k
}
Unexecuted instantiation: ceval_gil.c:Py_INCREF
Unexecuted instantiation: hamt.c:Py_INCREF
Unexecuted instantiation: hashtable.c:Py_INCREF
import.c:Py_INCREF
Line
Count
Source
250
100k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
100k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
100k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
12.8k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
12.8k
        return;
284
12.8k
    }
285
87.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
87.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
87.3k
#endif
301
87.3k
}
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
24.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
24.7k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
24.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
24.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
24.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
24.7k
#endif
301
24.7k
}
Unexecuted instantiation: legacy_tracing.c:Py_INCREF
Unexecuted instantiation: lock.c:Py_INCREF
marshal.c:Py_INCREF
Line
Count
Source
250
329k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
329k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
329k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
285k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
285k
        return;
284
285k
    }
285
44.0k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
44.0k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
44.0k
#endif
301
44.0k
}
modsupport.c:Py_INCREF
Line
Count
Source
250
286k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
286k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
286k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
17.0k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
17.0k
        return;
284
17.0k
    }
285
269k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
269k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
269k
#endif
301
269k
}
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.19k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
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.19k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
2.19k
    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.19k
    op->ob_refcnt = cur_refcnt + 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.19k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
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.19k
#endif
301
2.19k
}
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
275k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
275k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
275k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
274k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
274k
        return;
284
274k
    }
285
746
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
746
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
746
#endif
301
746
}
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
889
        _Py_INCREF_IMMORTAL_STAT_INC();
283
889
        return;
284
889
    }
285
579
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
579
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
579
#endif
301
579
}
Unexecuted instantiation: thread.c:Py_INCREF
traceback.c:Py_INCREF
Line
Count
Source
250
31.8M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
31.8M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
31.8M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
31.8M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
31.8M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
31.8M
#endif
301
31.8M
}
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: fileutils.c:Py_INCREF
Unexecuted instantiation: suggestions.c:Py_INCREF
Unexecuted instantiation: perf_trampoline.c:Py_INCREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_INCREF
Unexecuted instantiation: remote_debugging.c:Py_INCREF
Unexecuted instantiation: dynload_shlib.c:Py_INCREF
Unexecuted instantiation: config.c:Py_INCREF
Unexecuted instantiation: gcmodule.c:Py_INCREF
Unexecuted instantiation: _asynciomodule.c:Py_INCREF
Unexecuted instantiation: atexitmodule.c:Py_INCREF
Unexecuted instantiation: faulthandler.c:Py_INCREF
posixmodule.c:Py_INCREF
Line
Count
Source
250
45.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
45.1k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
45.1k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
96
        _Py_INCREF_IMMORTAL_STAT_INC();
283
96
        return;
284
96
    }
285
45.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
45.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
45.0k
#endif
301
45.0k
}
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
17.6M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
17.6M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
17.6M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
15.1M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
15.1M
        return;
284
15.1M
    }
285
2.49M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
2.49M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
2.49M
#endif
301
2.49M
}
Unexecuted instantiation: errnomodule.c:Py_INCREF
_iomodule.c:Py_INCREF
Line
Count
Source
250
48
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
48
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
48
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
48
        _Py_INCREF_IMMORTAL_STAT_INC();
283
48
        return;
284
48
    }
285
0
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
0
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
0
#endif
301
0
}
iobase.c:Py_INCREF
Line
Count
Source
250
40.4k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
40.4k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
40.4k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
40.4k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
40.4k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
40.4k
#endif
301
40.4k
}
Unexecuted instantiation: fileio.c:Py_INCREF
bytesio.c:Py_INCREF
Line
Count
Source
250
10.1k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
10.1k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
10.1k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
20
        _Py_INCREF_IMMORTAL_STAT_INC();
283
20
        return;
284
20
    }
285
10.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
10.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
10.1k
#endif
301
10.1k
}
bufferedio.c:Py_INCREF
Line
Count
Source
250
2.14k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
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.14k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
2.14k
    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.14k
    op->ob_refcnt = cur_refcnt + 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.14k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
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.14k
#endif
301
2.14k
}
textio.c:Py_INCREF
Line
Count
Source
250
82.2k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
82.2k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
82.2k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
20.1k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
20.1k
        return;
284
20.1k
    }
285
62.1k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
62.1k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
62.1k
#endif
301
62.1k
}
stringio.c:Py_INCREF
Line
Count
Source
250
16.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
16.1k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
16.1k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
47
        _Py_INCREF_IMMORTAL_STAT_INC();
283
47
        return;
284
47
    }
285
16.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
16.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
16.1k
#endif
301
16.1k
}
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
294M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
294M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
294M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
93.3M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
93.3M
        return;
284
93.3M
    }
285
200M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
200M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
200M
#endif
301
200M
}
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.74k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
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.74k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
9.74k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
9.62k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
9.62k
        return;
284
9.62k
    }
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.58M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
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.58M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
1.58M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
1.55M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
1.55M
        return;
284
1.55M
    }
285
29.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
29.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
29.5k
#endif
301
29.5k
}
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
510M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
510M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
510M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
356M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
356M
        return;
284
356M
    }
285
153M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
153M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
153M
#endif
301
153M
}
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
71.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
71.7k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
71.7k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
24.7k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
24.7k
        return;
284
24.7k
    }
285
46.9k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
46.9k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
46.9k
#endif
301
46.9k
}
classobject.c:Py_INCREF
Line
Count
Source
250
39.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
39.7M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
39.7M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
2
        _Py_INCREF_IMMORTAL_STAT_INC();
283
2
        return;
284
2
    }
285
39.7M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
39.7M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
39.7M
#endif
301
39.7M
}
codeobject.c:Py_INCREF
Line
Count
Source
250
507k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
507k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
507k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
267k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
267k
        return;
284
267k
    }
285
240k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
240k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
240k
#endif
301
240k
}
complexobject.c:Py_INCREF
Line
Count
Source
250
3.77k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
3.77k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
3.77k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
3.77k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
3.77k
        return;
284
3.77k
    }
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
23.3M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
23.3M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
23.3M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
30.5k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
30.5k
        return;
284
30.5k
    }
285
23.3M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
23.3M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
23.3M
#endif
301
23.3M
}
enumobject.c:Py_INCREF
Line
Count
Source
250
97.3M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
97.3M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
97.3M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
0
        _Py_INCREF_IMMORTAL_STAT_INC();
283
0
        return;
284
0
    }
285
97.3M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
97.3M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
97.3M
#endif
301
97.3M
}
genobject.c:Py_INCREF
Line
Count
Source
250
42.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
42.9M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
42.9M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
42.8M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
42.8M
        return;
284
42.8M
    }
285
86.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
86.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
86.5k
#endif
301
86.5k
}
Unexecuted instantiation: fileobject.c:Py_INCREF
frameobject.c:Py_INCREF
Line
Count
Source
250
6.28k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
6.28k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
6.28k
    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
6.28k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
6.28k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
6.28k
#endif
301
6.28k
}
funcobject.c:Py_INCREF
Line
Count
Source
250
84.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
84.7M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
84.7M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
43.1M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
43.1M
        return;
284
43.1M
    }
285
41.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
41.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
41.5M
#endif
301
41.5M
}
Unexecuted instantiation: interpolationobject.c:Py_INCREF
iterobject.c:Py_INCREF
Line
Count
Source
250
777k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
777k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
777k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
388k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
388k
        return;
284
388k
    }
285
388k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
388k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
388k
#endif
301
388k
}
odictobject.c:Py_INCREF
Line
Count
Source
250
492
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
492
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
492
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
312
        _Py_INCREF_IMMORTAL_STAT_INC();
283
312
        return;
284
312
    }
285
180
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
180
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
180
#endif
301
180
}
methodobject.c:Py_INCREF
Line
Count
Source
250
306M
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
306M
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
306M
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
4.79M
        _Py_INCREF_IMMORTAL_STAT_INC();
283
4.79M
        return;
284
4.79M
    }
285
302M
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
302M
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
302M
#endif
301
302M
}
Unexecuted instantiation: namespaceobject.c:Py_INCREF
Unexecuted instantiation: _contextvars.c:Py_INCREF
Python-ast.c:Py_INCREF
Line
Count
Source
250
553k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
553k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
553k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
242k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
242k
        return;
284
242k
    }
285
311k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
311k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
311k
#endif
301
311k
}
Unexecuted instantiation: Python-tokenize.c:Py_INCREF
Unexecuted instantiation: asdl.c:Py_INCREF
assemble.c:Py_INCREF
Line
Count
Source
250
45.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
45.8k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
45.8k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
45.7k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
45.7k
        return;
284
45.7k
    }
285
146
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
146
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
146
#endif
301
146
}
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
119k
{
251
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
252
    // Stable ABI implements Py_INCREF() as a function call on limited C API
253
    // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
254
    // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
255
    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
256
#  if Py_LIMITED_API+0 >= 0x030a00A7
257
    _Py_IncRef(op);
258
#  else
259
    Py_IncRef(op);
260
#  endif
261
#else
262
    // Non-limited C API and limited C API for Python 3.9 and older access
263
    // directly PyObject.ob_refcnt.
264
#if defined(Py_GIL_DISABLED)
265
    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
266
    uint32_t new_local = local + 1;
267
    if (new_local == 0) {
268
        _Py_INCREF_IMMORTAL_STAT_INC();
269
        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
270
        return;
271
    }
272
    if (_Py_IsOwnedByCurrentThread(op)) {
273
        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
274
    }
275
    else {
276
        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
277
    }
278
#elif SIZEOF_VOID_P > 4
279
119k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
119k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
52.9k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
52.9k
        return;
284
52.9k
    }
285
66.9k
    op->ob_refcnt = cur_refcnt + 1;
286
#else
287
    if (_Py_IsImmortal(op)) {
288
        _Py_INCREF_IMMORTAL_STAT_INC();
289
        return;
290
    }
291
    op->ob_refcnt++;
292
#endif
293
66.9k
    _Py_INCREF_STAT_INC();
294
#ifdef Py_REF_DEBUG
295
    // Don't count the incref if the object is immortal.
296
    if (!_Py_IsImmortal(op)) {
297
        _Py_INCREF_IncRefTotal();
298
    }
299
#endif
300
66.9k
#endif
301
66.9k
}
pegen.c:Py_INCREF
Line
Count
Source
250
21.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
21.8k
    PY_UINT32_T cur_refcnt = op->ob_refcnt;
280
21.8k
    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
281
        // the object is immortal
282
1.50k
        _Py_INCREF_IMMORTAL_STAT_INC();
283
1.50k
        return;
284
1.50k
    }
285
20.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
20.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
20.3k
#endif
301
20.3k
}
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.02G
#  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.86G
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
6.86G
    if (_Py_IsImmortal(op)) {
413
3.04G
        _Py_DECREF_IMMORTAL_STAT_INC();
414
3.04G
        return;
415
3.04G
    }
416
3.82G
    _Py_DECREF_STAT_INC();
417
3.82G
    if (--op->ob_refcnt == 0) {
418
1.01G
        _Py_Dealloc(op);
419
1.01G
    }
420
3.82G
}
bytesobject.c:Py_DECREF
Line
Count
Source
409
4.40M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.40M
    if (_Py_IsImmortal(op)) {
413
4.21M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
4.21M
        return;
415
4.21M
    }
416
196k
    _Py_DECREF_STAT_INC();
417
196k
    if (--op->ob_refcnt == 0) {
418
118k
        _Py_Dealloc(op);
419
118k
    }
420
196k
}
call.c:Py_DECREF
Line
Count
Source
409
133M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
133M
    if (_Py_IsImmortal(op)) {
413
54.6M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
54.6M
        return;
415
54.6M
    }
416
78.5M
    _Py_DECREF_STAT_INC();
417
78.5M
    if (--op->ob_refcnt == 0) {
418
62.0M
        _Py_Dealloc(op);
419
62.0M
    }
420
78.5M
}
exceptions.c:Py_DECREF
Line
Count
Source
409
106M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
106M
    if (_Py_IsImmortal(op)) {
413
33.5M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
33.5M
        return;
415
33.5M
    }
416
73.4M
    _Py_DECREF_STAT_INC();
417
73.4M
    if (--op->ob_refcnt == 0) {
418
63.3M
        _Py_Dealloc(op);
419
63.3M
    }
420
73.4M
}
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.51G
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.51G
    if (_Py_IsImmortal(op)) {
413
419M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
419M
        return;
415
419M
    }
416
1.09G
    _Py_DECREF_STAT_INC();
417
1.09G
    if (--op->ob_refcnt == 0) {
418
258M
        _Py_Dealloc(op);
419
258M
    }
420
1.09G
}
longobject.c:Py_DECREF
Line
Count
Source
409
4.93M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.93M
    if (_Py_IsImmortal(op)) {
413
4.45M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
4.45M
        return;
415
4.45M
    }
416
475k
    _Py_DECREF_STAT_INC();
417
475k
    if (--op->ob_refcnt == 0) {
418
3.05k
        _Py_Dealloc(op);
419
3.05k
    }
420
475k
}
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
532M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
532M
        return;
415
532M
    }
416
533M
    _Py_DECREF_STAT_INC();
417
533M
    if (--op->ob_refcnt == 0) {
418
79.0M
        _Py_Dealloc(op);
419
79.0M
    }
420
533M
}
memoryobject.c:Py_DECREF
Line
Count
Source
409
622k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
622k
    if (_Py_IsImmortal(op)) {
413
4
        _Py_DECREF_IMMORTAL_STAT_INC();
414
4
        return;
415
4
    }
416
622k
    _Py_DECREF_STAT_INC();
417
622k
    if (--op->ob_refcnt == 0) {
418
310k
        _Py_Dealloc(op);
419
310k
    }
420
622k
}
moduleobject.c:Py_DECREF
Line
Count
Source
409
83.8k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
83.8k
    if (_Py_IsImmortal(op)) {
413
50.6k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
50.6k
        return;
415
50.6k
    }
416
33.2k
    _Py_DECREF_STAT_INC();
417
33.2k
    if (--op->ob_refcnt == 0) {
418
44
        _Py_Dealloc(op);
419
44
    }
420
33.2k
}
object.c:Py_DECREF
Line
Count
Source
409
433M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
433M
    if (_Py_IsImmortal(op)) {
413
393M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
393M
        return;
415
393M
    }
416
39.4M
    _Py_DECREF_STAT_INC();
417
39.4M
    if (--op->ob_refcnt == 0) {
418
238
        _Py_Dealloc(op);
419
238
    }
420
39.4M
}
Unexecuted instantiation: obmalloc.c:Py_DECREF
Unexecuted instantiation: picklebufobject.c:Py_DECREF
rangeobject.c:Py_DECREF
Line
Count
Source
409
33.7M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
33.7M
    if (_Py_IsImmortal(op)) {
413
31.7M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
31.7M
        return;
415
31.7M
    }
416
1.99M
    _Py_DECREF_STAT_INC();
417
1.99M
    if (--op->ob_refcnt == 0) {
418
1.03M
        _Py_Dealloc(op);
419
1.03M
    }
420
1.99M
}
setobject.c:Py_DECREF
Line
Count
Source
409
1.19M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.19M
    if (_Py_IsImmortal(op)) {
413
381k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
381k
        return;
415
381k
    }
416
808k
    _Py_DECREF_STAT_INC();
417
808k
    if (--op->ob_refcnt == 0) {
418
37.9k
        _Py_Dealloc(op);
419
37.9k
    }
420
808k
}
sliceobject.c:Py_DECREF
Line
Count
Source
409
132M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
132M
    if (_Py_IsImmortal(op)) {
413
122M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
122M
        return;
415
122M
    }
416
10.1M
    _Py_DECREF_STAT_INC();
417
10.1M
    if (--op->ob_refcnt == 0) {
418
1.07M
        _Py_Dealloc(op);
419
1.07M
    }
420
10.1M
}
structseq.c:Py_DECREF
Line
Count
Source
409
106k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
106k
    if (_Py_IsImmortal(op)) {
413
27.3k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
27.3k
        return;
415
27.3k
    }
416
79.0k
    _Py_DECREF_STAT_INC();
417
79.0k
    if (--op->ob_refcnt == 0) {
418
68.8k
        _Py_Dealloc(op);
419
68.8k
    }
420
79.0k
}
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
796M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
796M
    if (_Py_IsImmortal(op)) {
413
467M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
467M
        return;
415
467M
    }
416
329M
    _Py_DECREF_STAT_INC();
417
329M
    if (--op->ob_refcnt == 0) {
418
83.4M
        _Py_Dealloc(op);
419
83.4M
    }
420
329M
}
typeobject.c:Py_DECREF
Line
Count
Source
409
361M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
361M
    if (_Py_IsImmortal(op)) {
413
41.5M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
41.5M
        return;
415
41.5M
    }
416
319M
    _Py_DECREF_STAT_INC();
417
319M
    if (--op->ob_refcnt == 0) {
418
16.3M
        _Py_Dealloc(op);
419
16.3M
    }
420
319M
}
Unexecuted instantiation: typevarobject.c:Py_DECREF
unicode_formatter.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
}
unicodeobject.c:Py_DECREF
Line
Count
Source
409
236M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
236M
    if (_Py_IsImmortal(op)) {
413
144M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
144M
        return;
415
144M
    }
416
92.2M
    _Py_DECREF_STAT_INC();
417
92.2M
    if (--op->ob_refcnt == 0) {
418
21.7M
        _Py_Dealloc(op);
419
21.7M
    }
420
92.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
14.5k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
14.5k
    if (_Py_IsImmortal(op)) {
413
7.56k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
7.56k
        return;
415
7.56k
    }
416
6.96k
    _Py_DECREF_STAT_INC();
417
6.96k
    if (--op->ob_refcnt == 0) {
418
6.66k
        _Py_Dealloc(op);
419
6.66k
    }
420
6.96k
}
_warnings.c:Py_DECREF
Line
Count
Source
409
168k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
168k
    if (_Py_IsImmortal(op)) {
413
43.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
43.2k
        return;
415
43.2k
    }
416
125k
    _Py_DECREF_STAT_INC();
417
125k
    if (--op->ob_refcnt == 0) {
418
34.5k
        _Py_Dealloc(op);
419
34.5k
    }
420
125k
}
bltinmodule.c:Py_DECREF
Line
Count
Source
409
128M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
128M
    if (_Py_IsImmortal(op)) {
413
65.5M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
65.5M
        return;
415
65.5M
    }
416
63.1M
    _Py_DECREF_STAT_INC();
417
63.1M
    if (--op->ob_refcnt == 0) {
418
36.6M
        _Py_Dealloc(op);
419
36.6M
    }
420
63.1M
}
ceval.c:Py_DECREF
Line
Count
Source
409
5.64k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
5.64k
    if (_Py_IsImmortal(op)) {
413
687
        _Py_DECREF_IMMORTAL_STAT_INC();
414
687
        return;
415
687
    }
416
4.96k
    _Py_DECREF_STAT_INC();
417
4.96k
    if (--op->ob_refcnt == 0) {
418
371
        _Py_Dealloc(op);
419
371
    }
420
4.96k
}
codecs.c:Py_DECREF
Line
Count
Source
409
6.62M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
6.62M
    if (_Py_IsImmortal(op)) {
413
2.25M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.25M
        return;
415
2.25M
    }
416
4.36M
    _Py_DECREF_STAT_INC();
417
4.36M
    if (--op->ob_refcnt == 0) {
418
2.08M
        _Py_Dealloc(op);
419
2.08M
    }
420
4.36M
}
codegen.c:Py_DECREF
Line
Count
Source
409
154k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
154k
    if (_Py_IsImmortal(op)) {
413
136k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
136k
        return;
415
136k
    }
416
17.0k
    _Py_DECREF_STAT_INC();
417
17.0k
    if (--op->ob_refcnt == 0) {
418
1.07k
        _Py_Dealloc(op);
419
1.07k
    }
420
17.0k
}
compile.c:Py_DECREF
Line
Count
Source
409
615k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
615k
    if (_Py_IsImmortal(op)) {
413
323k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
323k
        return;
415
323k
    }
416
292k
    _Py_DECREF_STAT_INC();
417
292k
    if (--op->ob_refcnt == 0) {
418
99.8k
        _Py_Dealloc(op);
419
99.8k
    }
420
292k
}
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
72.0M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
72.0M
    if (_Py_IsImmortal(op)) {
413
28.9M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
28.9M
        return;
415
28.9M
    }
416
43.0M
    _Py_DECREF_STAT_INC();
417
43.0M
    if (--op->ob_refcnt == 0) {
418
10.5M
        _Py_Dealloc(op);
419
10.5M
    }
420
43.0M
}
flowgraph.c:Py_DECREF
Line
Count
Source
409
72.8k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
72.8k
    if (_Py_IsImmortal(op)) {
413
40.3k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
40.3k
        return;
415
40.3k
    }
416
32.4k
    _Py_DECREF_STAT_INC();
417
32.4k
    if (--op->ob_refcnt == 0) {
418
55
        _Py_Dealloc(op);
419
55
    }
420
32.4k
}
frame.c:Py_DECREF
Line
Count
Source
409
23.1M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
23.1M
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
23.1M
    _Py_DECREF_STAT_INC();
417
23.1M
    if (--op->ob_refcnt == 0) {
418
11.4M
        _Py_Dealloc(op);
419
11.4M
    }
420
23.1M
}
Unexecuted instantiation: future.c:Py_DECREF
gc.c:Py_DECREF
Line
Count
Source
409
648k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
648k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
648k
    _Py_DECREF_STAT_INC();
417
648k
    if (--op->ob_refcnt == 0) {
418
381k
        _Py_Dealloc(op);
419
381k
    }
420
648k
}
Unexecuted instantiation: gc_gil.c:Py_DECREF
getargs.c:Py_DECREF
Line
Count
Source
409
1.57M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.57M
    if (_Py_IsImmortal(op)) {
413
879k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
879k
        return;
415
879k
    }
416
695k
    _Py_DECREF_STAT_INC();
417
695k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
695k
}
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
183k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
183k
    if (_Py_IsImmortal(op)) {
413
13.3k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
13.3k
        return;
415
13.3k
    }
416
170k
    _Py_DECREF_STAT_INC();
417
170k
    if (--op->ob_refcnt == 0) {
418
11.0k
        _Py_Dealloc(op);
419
11.0k
    }
420
170k
}
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
240
        _Py_DECREF_IMMORTAL_STAT_INC();
414
240
        return;
415
240
    }
416
144
    _Py_DECREF_STAT_INC();
417
144
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
144
}
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.7k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
28.7k
    if (_Py_IsImmortal(op)) {
413
16.5k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
16.5k
        return;
415
16.5k
    }
416
12.2k
    _Py_DECREF_STAT_INC();
417
12.2k
    if (--op->ob_refcnt == 0) {
418
124
        _Py_Dealloc(op);
419
124
    }
420
12.2k
}
Unexecuted instantiation: legacy_tracing.c:Py_DECREF
Unexecuted instantiation: lock.c:Py_DECREF
marshal.c:Py_DECREF
Line
Count
Source
409
322k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
322k
    if (_Py_IsImmortal(op)) {
413
141k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
141k
        return;
415
141k
    }
416
180k
    _Py_DECREF_STAT_INC();
417
180k
    if (--op->ob_refcnt == 0) {
418
2.49k
        _Py_Dealloc(op);
419
2.49k
    }
420
180k
}
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.9k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
11.9k
        return;
415
11.9k
    }
416
5.80k
    _Py_DECREF_STAT_INC();
417
5.80k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
5.80k
}
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.66M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
4.66M
    if (_Py_IsImmortal(op)) {
413
3.99M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
3.99M
        return;
415
3.99M
    }
416
670k
    _Py_DECREF_STAT_INC();
417
670k
    if (--op->ob_refcnt == 0) {
418
22.0k
        _Py_Dealloc(op);
419
22.0k
    }
420
670k
}
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
555k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
555k
    if (_Py_IsImmortal(op)) {
413
103k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
103k
        return;
415
103k
    }
416
451k
    _Py_DECREF_STAT_INC();
417
451k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
451k
}
symtable.c:Py_DECREF
Line
Count
Source
409
818k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
818k
    if (_Py_IsImmortal(op)) {
413
376k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
376k
        return;
415
376k
    }
416
442k
    _Py_DECREF_STAT_INC();
417
442k
    if (--op->ob_refcnt == 0) {
418
208k
        _Py_Dealloc(op);
419
208k
    }
420
442k
}
sysmodule.c:Py_DECREF
Line
Count
Source
409
5.09k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
5.09k
    if (_Py_IsImmortal(op)) {
413
1.08k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
1.08k
        return;
415
1.08k
    }
416
4.00k
    _Py_DECREF_STAT_INC();
417
4.00k
    if (--op->ob_refcnt == 0) {
418
3.22k
        _Py_Dealloc(op);
419
3.22k
    }
420
4.00k
}
Unexecuted instantiation: thread.c:Py_DECREF
traceback.c:Py_DECREF
Line
Count
Source
409
63.6M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
63.6M
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
63.6M
    _Py_DECREF_STAT_INC();
417
63.6M
    if (--op->ob_refcnt == 0) {
418
12.8M
        _Py_Dealloc(op);
419
12.8M
    }
420
63.6M
}
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
fileutils.c:Py_DECREF
Line
Count
Source
409
11.4k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
11.4k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
11.4k
    _Py_DECREF_STAT_INC();
417
11.4k
    if (--op->ob_refcnt == 0) {
418
11.4k
        _Py_Dealloc(op);
419
11.4k
    }
420
11.4k
}
Unexecuted instantiation: suggestions.c:Py_DECREF
Unexecuted instantiation: perf_trampoline.c:Py_DECREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_DECREF
Unexecuted instantiation: remote_debugging.c:Py_DECREF
Unexecuted instantiation: dynload_shlib.c:Py_DECREF
Unexecuted instantiation: config.c:Py_DECREF
Unexecuted instantiation: gcmodule.c:Py_DECREF
Unexecuted instantiation: _asynciomodule.c:Py_DECREF
Unexecuted instantiation: atexitmodule.c:Py_DECREF
Unexecuted instantiation: faulthandler.c:Py_DECREF
posixmodule.c:Py_DECREF
Line
Count
Source
409
24.2k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
24.2k
    if (_Py_IsImmortal(op)) {
413
2.72k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.72k
        return;
415
2.72k
    }
416
21.4k
    _Py_DECREF_STAT_INC();
417
21.4k
    if (--op->ob_refcnt == 0) {
418
6.42k
        _Py_Dealloc(op);
419
6.42k
    }
420
21.4k
}
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
114k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
114k
    if (_Py_IsImmortal(op)) {
413
56.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
56.2k
        return;
415
56.2k
    }
416
58.2k
    _Py_DECREF_STAT_INC();
417
58.2k
    if (--op->ob_refcnt == 0) {
418
42.0k
        _Py_Dealloc(op);
419
42.0k
    }
420
58.2k
}
_iomodule.c:Py_DECREF
Line
Count
Source
409
6.63k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
6.63k
    if (_Py_IsImmortal(op)) {
413
2.29k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.29k
        return;
415
2.29k
    }
416
4.34k
    _Py_DECREF_STAT_INC();
417
4.34k
    if (--op->ob_refcnt == 0) {
418
2.19k
        _Py_Dealloc(op);
419
2.19k
    }
420
4.34k
}
iobase.c:Py_DECREF
Line
Count
Source
409
121k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
121k
    if (_Py_IsImmortal(op)) {
413
102k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
102k
        return;
415
102k
    }
416
19.0k
    _Py_DECREF_STAT_INC();
417
19.0k
    if (--op->ob_refcnt == 0) {
418
9.54k
        _Py_Dealloc(op);
419
9.54k
    }
420
19.0k
}
fileio.c:Py_DECREF
Line
Count
Source
409
3.63k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
3.63k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
3.63k
    _Py_DECREF_STAT_INC();
417
3.63k
    if (--op->ob_refcnt == 0) {
418
2.34k
        _Py_Dealloc(op);
419
2.34k
    }
420
3.63k
}
bytesio.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
9.56k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
9.56k
        return;
415
9.56k
    }
416
19.0k
    _Py_DECREF_STAT_INC();
417
19.0k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
19.0k
}
bufferedio.c:Py_DECREF
Line
Count
Source
409
6.45k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
6.45k
    if (_Py_IsImmortal(op)) {
413
1.16k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
1.16k
        return;
415
1.16k
    }
416
5.29k
    _Py_DECREF_STAT_INC();
417
5.29k
    if (--op->ob_refcnt == 0) {
418
2.10k
        _Py_Dealloc(op);
419
2.10k
    }
420
5.29k
}
textio.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
32.6k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
32.6k
        return;
415
32.6k
    }
416
16.2k
    _Py_DECREF_STAT_INC();
417
16.2k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
16.2k
}
stringio.c:Py_DECREF
Line
Count
Source
409
296k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
296k
    if (_Py_IsImmortal(op)) {
413
153k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
153k
        return;
415
153k
    }
416
142k
    _Py_DECREF_STAT_INC();
417
142k
    if (--op->ob_refcnt == 0) {
418
32.3k
        _Py_Dealloc(op);
419
32.3k
    }
420
142k
}
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
440M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
440M
    if (_Py_IsImmortal(op)) {
413
105M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
105M
        return;
415
105M
    }
416
335M
    _Py_DECREF_STAT_INC();
417
335M
    if (--op->ob_refcnt == 0) {
418
7.73M
        _Py_Dealloc(op);
419
7.73M
    }
420
335M
}
Unexecuted instantiation: _sysconfig.c:Py_DECREF
_threadmodule.c:Py_DECREF
Line
Count
Source
409
6.28k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
6.28k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
6.28k
    _Py_DECREF_STAT_INC();
417
6.28k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
6.28k
}
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.9k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
29.9k
    if (_Py_IsImmortal(op)) {
413
10.4k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
10.4k
        return;
415
10.4k
    }
416
19.5k
    _Py_DECREF_STAT_INC();
417
19.5k
    if (--op->ob_refcnt == 0) {
418
2.63k
        _Py_Dealloc(op);
419
2.63k
    }
420
19.5k
}
_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
593k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
593k
    if (_Py_IsImmortal(op)) {
413
296k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
296k
        return;
415
296k
    }
416
296k
    _Py_DECREF_STAT_INC();
417
296k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
296k
}
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
22.1k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
22.1k
    if (_Py_IsImmortal(op)) {
413
500
        _Py_DECREF_IMMORTAL_STAT_INC();
414
500
        return;
415
500
    }
416
21.6k
    _Py_DECREF_STAT_INC();
417
21.6k
    if (--op->ob_refcnt == 0) {
418
16.2k
        _Py_Dealloc(op);
419
16.2k
    }
420
21.6k
}
Unexecuted instantiation: myreadline.c:Py_DECREF
abstract.c:Py_DECREF
Line
Count
Source
409
400M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
400M
    if (_Py_IsImmortal(op)) {
413
331M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
331M
        return;
415
331M
    }
416
68.8M
    _Py_DECREF_STAT_INC();
417
68.8M
    if (--op->ob_refcnt == 0) {
418
1.76M
        _Py_Dealloc(op);
419
1.76M
    }
420
68.8M
}
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
319k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
319k
    if (_Py_IsImmortal(op)) {
413
31.2k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
31.2k
        return;
415
31.2k
    }
416
288k
    _Py_DECREF_STAT_INC();
417
288k
    if (--op->ob_refcnt == 0) {
418
201k
        _Py_Dealloc(op);
419
201k
    }
420
288k
}
classobject.c:Py_DECREF
Line
Count
Source
409
39.7M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
39.7M
    if (_Py_IsImmortal(op)) {
413
2
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2
        return;
415
2
    }
416
39.7M
    _Py_DECREF_STAT_INC();
417
39.7M
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
39.7M
}
codeobject.c:Py_DECREF
Line
Count
Source
409
109k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
109k
    if (_Py_IsImmortal(op)) {
413
43.1k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
43.1k
        return;
415
43.1k
    }
416
66.5k
    _Py_DECREF_STAT_INC();
417
66.5k
    if (--op->ob_refcnt == 0) {
418
31.5k
        _Py_Dealloc(op);
419
31.5k
    }
420
66.5k
}
Unexecuted instantiation: complexobject.c:Py_DECREF
descrobject.c:Py_DECREF
Line
Count
Source
409
98.7M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
98.7M
    if (_Py_IsImmortal(op)) {
413
11.1M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
11.1M
        return;
415
11.1M
    }
416
87.6M
    _Py_DECREF_STAT_INC();
417
87.6M
    if (--op->ob_refcnt == 0) {
418
57.7M
        _Py_Dealloc(op);
419
57.7M
    }
420
87.6M
}
enumobject.c:Py_DECREF
Line
Count
Source
409
244M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
244M
    if (_Py_IsImmortal(op)) {
413
99.8M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
99.8M
        return;
415
99.8M
    }
416
144M
    _Py_DECREF_STAT_INC();
417
144M
    if (--op->ob_refcnt == 0) {
418
50.0M
        _Py_Dealloc(op);
419
50.0M
    }
420
144M
}
genobject.c:Py_DECREF
Line
Count
Source
409
56.5M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
56.5M
    if (_Py_IsImmortal(op)) {
413
56.4M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
56.4M
        return;
415
56.4M
    }
416
84.7k
    _Py_DECREF_STAT_INC();
417
84.7k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
84.7k
}
fileobject.c:Py_DECREF
Line
Count
Source
409
12.9k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
12.9k
    if (_Py_IsImmortal(op)) {
413
11.8k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
11.8k
        return;
415
11.8k
    }
416
1.05k
    _Py_DECREF_STAT_INC();
417
1.05k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
1.05k
}
frameobject.c:Py_DECREF
Line
Count
Source
409
11.7M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
11.7M
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
11.7M
    _Py_DECREF_STAT_INC();
417
11.7M
    if (--op->ob_refcnt == 0) {
418
18.1k
        _Py_Dealloc(op);
419
18.1k
    }
420
11.7M
}
funcobject.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
74.0M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
74.0M
        return;
415
74.0M
    }
416
55.9M
    _Py_DECREF_STAT_INC();
417
55.9M
    if (--op->ob_refcnt == 0) {
418
383k
        _Py_Dealloc(op);
419
383k
    }
420
55.9M
}
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.16M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
1.16M
    if (_Py_IsImmortal(op)) {
413
776k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
776k
        return;
415
776k
    }
416
388k
    _Py_DECREF_STAT_INC();
417
388k
    if (--op->ob_refcnt == 0) {
418
388k
        _Py_Dealloc(op);
419
388k
    }
420
388k
}
odictobject.c:Py_DECREF
Line
Count
Source
409
688
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
688
    if (_Py_IsImmortal(op)) {
413
410
        _Py_DECREF_IMMORTAL_STAT_INC();
414
410
        return;
415
410
    }
416
278
    _Py_DECREF_STAT_INC();
417
278
    if (--op->ob_refcnt == 0) {
418
164
        _Py_Dealloc(op);
419
164
    }
420
278
}
methodobject.c:Py_DECREF
Line
Count
Source
409
306M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
306M
    if (_Py_IsImmortal(op)) {
413
4.78M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
4.78M
        return;
415
4.78M
    }
416
302M
    _Py_DECREF_STAT_INC();
417
302M
    if (--op->ob_refcnt == 0) {
418
239M
        _Py_Dealloc(op);
419
239M
    }
420
302M
}
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
3.91M
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
3.91M
    if (_Py_IsImmortal(op)) {
413
2.07M
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.07M
        return;
415
2.07M
    }
416
1.84M
    _Py_DECREF_STAT_INC();
417
1.84M
    if (--op->ob_refcnt == 0) {
418
487k
        _Py_Dealloc(op);
419
487k
    }
420
1.84M
}
Unexecuted instantiation: Python-tokenize.c:Py_DECREF
Unexecuted instantiation: asdl.c:Py_DECREF
assemble.c:Py_DECREF
Line
Count
Source
409
49.1k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
49.1k
    if (_Py_IsImmortal(op)) {
413
8.33k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
8.33k
        return;
415
8.33k
    }
416
40.8k
    _Py_DECREF_STAT_INC();
417
40.8k
    if (--op->ob_refcnt == 0) {
418
0
        _Py_Dealloc(op);
419
0
    }
420
40.8k
}
Unexecuted instantiation: ast.c:Py_DECREF
ast_preprocess.c:Py_DECREF
Line
Count
Source
409
2.19k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
2.19k
    if (_Py_IsImmortal(op)) {
413
0
        _Py_DECREF_IMMORTAL_STAT_INC();
414
0
        return;
415
0
    }
416
2.19k
    _Py_DECREF_STAT_INC();
417
2.19k
    if (--op->ob_refcnt == 0) {
418
2.19k
        _Py_Dealloc(op);
419
2.19k
    }
420
2.19k
}
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
130k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
130k
    if (_Py_IsImmortal(op)) {
413
48.1k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
48.1k
        return;
415
48.1k
    }
416
82.8k
    _Py_DECREF_STAT_INC();
417
82.8k
    if (--op->ob_refcnt == 0) {
418
66.2k
        _Py_Dealloc(op);
419
66.2k
    }
420
82.8k
}
pegen_errors.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
3.55k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
3.55k
        return;
415
3.55k
    }
416
44.5k
    _Py_DECREF_STAT_INC();
417
44.5k
    if (--op->ob_refcnt == 0) {
418
5.54k
        _Py_Dealloc(op);
419
5.54k
    }
420
44.5k
}
Unexecuted instantiation: parser.c:Py_DECREF
Unexecuted instantiation: buffer.c:Py_DECREF
lexer.c:Py_DECREF
Line
Count
Source
409
13.9k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
13.9k
    if (_Py_IsImmortal(op)) {
413
611
        _Py_DECREF_IMMORTAL_STAT_INC();
414
611
        return;
415
611
    }
416
13.3k
    _Py_DECREF_STAT_INC();
417
13.3k
    if (--op->ob_refcnt == 0) {
418
13.3k
        _Py_Dealloc(op);
419
13.3k
    }
420
13.3k
}
state.c:Py_DECREF
Line
Count
Source
409
22.9k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
22.9k
    if (_Py_IsImmortal(op)) {
413
150
        _Py_DECREF_IMMORTAL_STAT_INC();
414
150
        return;
415
150
    }
416
22.8k
    _Py_DECREF_STAT_INC();
417
22.8k
    if (--op->ob_refcnt == 0) {
418
2.49k
        _Py_Dealloc(op);
419
2.49k
    }
420
22.8k
}
Unexecuted instantiation: readline_tokenizer.c:Py_DECREF
Unexecuted instantiation: string_tokenizer.c:Py_DECREF
Unexecuted instantiation: utf8_tokenizer.c:Py_DECREF
Unexecuted instantiation: getcompiler.c:Py_DECREF
Unexecuted instantiation: mystrtoul.c:Py_DECREF
Unexecuted instantiation: token.c:Py_DECREF
Unexecuted instantiation: action_helpers.c:Py_DECREF
string_parser.c:Py_DECREF
Line
Count
Source
409
41.6k
{
410
    // Non-limited C API and limited C API for Python 3.9 and older access
411
    // directly PyObject.ob_refcnt.
412
41.6k
    if (_Py_IsImmortal(op)) {
413
2.66k
        _Py_DECREF_IMMORTAL_STAT_INC();
414
2.66k
        return;
415
2.66k
    }
416
38.9k
    _Py_DECREF_STAT_INC();
417
38.9k
    if (--op->ob_refcnt == 0) {
418
38.9k
        _Py_Dealloc(op);
419
38.9k
    }
420
38.9k
}
421
6.86G
#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.43G
    do { \
476
1.43G
        _Py_TYPEOF(op)* _tmp_op_ptr = &(op); \
477
1.43G
        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
478
1.43G
        if (_tmp_old_op != NULL) { \
479
425M
            *_tmp_op_ptr = _Py_NULL; \
480
425M
            Py_DECREF(_tmp_old_op); \
481
425M
        } \
482
1.43G
    } 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.66G
{
500
1.66G
    if (op != _Py_NULL) {
501
718M
        Py_INCREF(op);
502
718M
    }
503
1.66G
}
Unexecuted instantiation: bytesobject.c:Py_XINCREF
Unexecuted instantiation: call.c:Py_XINCREF
exceptions.c:Py_XINCREF
Line
Count
Source
499
60.7M
{
500
60.7M
    if (op != _Py_NULL) {
501
1.42M
        Py_INCREF(op);
502
1.42M
    }
503
60.7M
}
Unexecuted instantiation: genericaliasobject.c:Py_XINCREF
Unexecuted instantiation: floatobject.c:Py_XINCREF
listobject.c:Py_XINCREF
Line
Count
Source
499
1.01M
{
500
1.01M
    if (op != _Py_NULL) {
501
1.01M
        Py_INCREF(op);
502
1.01M
    }
503
1.01M
}
Unexecuted instantiation: longobject.c:Py_XINCREF
dictobject.c:Py_XINCREF
Line
Count
Source
499
634M
{
500
634M
    if (op != _Py_NULL) {
501
220M
        Py_INCREF(op);
502
220M
    }
503
634M
}
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
46.5M
{
500
46.5M
    if (op != _Py_NULL) {
501
46.3M
        Py_INCREF(op);
502
46.3M
    }
503
46.5M
}
Unexecuted instantiation: typevarobject.c:Py_XINCREF
Unexecuted instantiation: unicode_formatter.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
294k
{
500
294k
    if (op != _Py_NULL) {
501
7.49k
        Py_INCREF(op);
502
7.49k
    }
503
294k
}
Unexecuted instantiation: _warnings.c:Py_XINCREF
bltinmodule.c:Py_XINCREF
Line
Count
Source
499
341
{
500
341
    if (op != _Py_NULL) {
501
341
        Py_INCREF(op);
502
341
    }
503
341
}
ceval.c:Py_XINCREF
Line
Count
Source
499
209M
{
500
209M
    if (op != _Py_NULL) {
501
72.9M
        Py_INCREF(op);
502
72.9M
    }
503
209M
}
Unexecuted instantiation: codecs.c:Py_XINCREF
Unexecuted instantiation: codegen.c:Py_XINCREF
compile.c:Py_XINCREF
Line
Count
Source
499
9.90k
{
500
9.90k
    if (op != _Py_NULL) {
501
4.49k
        Py_INCREF(op);
502
4.49k
    }
503
9.90k
}
context.c:Py_XINCREF
Line
Count
Source
499
17.2k
{
500
17.2k
    if (op != _Py_NULL) {
501
0
        Py_INCREF(op);
502
0
    }
503
17.2k
}
errors.c:Py_XINCREF
Line
Count
Source
499
29.4M
{
500
29.4M
    if (op != _Py_NULL) {
501
29.3M
        Py_INCREF(op);
502
29.3M
    }
503
29.4M
}
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
3.87k
{
500
3.87k
    if (op != _Py_NULL) {
501
2.05k
        Py_INCREF(op);
502
2.05k
    }
503
3.87k
}
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.19k
{
500
2.19k
    if (op != _Py_NULL) {
501
2.19k
        Py_INCREF(op);
502
2.19k
    }
503
2.19k
}
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
61.2M
{
500
61.2M
    if (op != _Py_NULL) {
501
31.8M
        Py_INCREF(op);
502
31.8M
    }
503
61.2M
}
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: fileutils.c:Py_XINCREF
Unexecuted instantiation: suggestions.c:Py_XINCREF
Unexecuted instantiation: perf_trampoline.c:Py_XINCREF
Unexecuted instantiation: perf_jit_trampoline.c:Py_XINCREF
Unexecuted instantiation: remote_debugging.c:Py_XINCREF
Unexecuted instantiation: dynload_shlib.c:Py_XINCREF
Unexecuted instantiation: config.c:Py_XINCREF
Unexecuted instantiation: gcmodule.c:Py_XINCREF
Unexecuted instantiation: _asynciomodule.c:Py_XINCREF
Unexecuted instantiation: atexitmodule.c:Py_XINCREF
Unexecuted instantiation: faulthandler.c:Py_XINCREF
Unexecuted instantiation: posixmodule.c:Py_XINCREF
Unexecuted instantiation: signalmodule.c:Py_XINCREF
Unexecuted instantiation: _tracemalloc.c:Py_XINCREF
Unexecuted instantiation: _suggestions.c:Py_XINCREF
_datetimemodule.c:Py_XINCREF
Line
Count
Source
499
32
{
500
32
    if (op != _Py_NULL) {
501
0
        Py_INCREF(op);
502
0
    }
503
32
}
Unexecuted instantiation: _codecsmodule.c:Py_XINCREF
Unexecuted instantiation: _collectionsmodule.c:Py_XINCREF
Unexecuted instantiation: errnomodule.c:Py_XINCREF
Unexecuted instantiation: _iomodule.c:Py_XINCREF
Unexecuted instantiation: iobase.c:Py_XINCREF
Unexecuted instantiation: fileio.c:Py_XINCREF
Unexecuted instantiation: bytesio.c:Py_XINCREF
bufferedio.c:Py_XINCREF
Line
Count
Source
499
1.04k
{
500
1.04k
    if (op != _Py_NULL) {
501
1.04k
        Py_INCREF(op);
502
1.04k
    }
503
1.04k
}
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
640
{
500
640
    if (op != _Py_NULL) {
501
640
        Py_INCREF(op);
502
640
    }
503
640
}
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.7M
{
500
14.7M
    if (op != _Py_NULL) {
501
14.4M
        Py_INCREF(op);
502
14.4M
    }
503
14.7M
}
Unexecuted instantiation: boolobject.c:Py_XINCREF
Unexecuted instantiation: bytes_methods.c:Py_XINCREF
Unexecuted instantiation: bytearrayobject.c:Py_XINCREF
Unexecuted instantiation: capsule.c:Py_XINCREF
cellobject.c:Py_XINCREF
Line
Count
Source
499
5.94M
{
500
5.94M
    if (op != _Py_NULL) {
501
71.7k
        Py_INCREF(op);
502
71.7k
    }
503
5.94M
}
Unexecuted instantiation: classobject.c:Py_XINCREF
codeobject.c:Py_XINCREF
Line
Count
Source
499
6.62k
{
500
6.62k
    if (op != _Py_NULL) {
501
6.62k
        Py_INCREF(op);
502
6.62k
    }
503
6.62k
}
Unexecuted instantiation: complexobject.c:Py_XINCREF
descrobject.c:Py_XINCREF
Line
Count
Source
499
45.5k
{
500
45.5k
    if (op != _Py_NULL) {
501
43.5k
        Py_INCREF(op);
502
43.5k
    }
503
45.5k
}
Unexecuted instantiation: enumobject.c:Py_XINCREF
genobject.c:Py_XINCREF
Line
Count
Source
499
3.70k
{
500
3.70k
    if (op != _Py_NULL) {
501
0
        Py_INCREF(op);
502
0
    }
503
3.70k
}
Unexecuted instantiation: fileobject.c:Py_XINCREF
Unexecuted instantiation: frameobject.c:Py_XINCREF
funcobject.c:Py_XINCREF
Line
Count
Source
499
3.46k
{
500
3.46k
    if (op != _Py_NULL) {
501
12
        Py_INCREF(op);
502
12
    }
503
3.46k
}
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
601M
{
500
601M
    if (op != _Py_NULL) {
501
300M
        Py_INCREF(op);
502
300M
    }
503
601M
}
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
30.7k
{
500
30.7k
    if (op != _Py_NULL) {
501
30.7k
        Py_INCREF(op);
502
30.7k
    }
503
30.7k
}
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.66G
#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
506
#endif
507
508
static inline void Py_XDECREF(PyObject *op)
509
4.54G
{
510
4.54G
    if (op != _Py_NULL) {
511
3.61G
        Py_DECREF(op);
512
3.61G
    }
513
4.54G
}
bytesobject.c:Py_XDECREF
Line
Count
Source
509
7.31M
{
510
7.31M
    if (op != _Py_NULL) {
511
58.8k
        Py_DECREF(op);
512
58.8k
    }
513
7.31M
}
Unexecuted instantiation: call.c:Py_XDECREF
exceptions.c:Py_XDECREF
Line
Count
Source
509
50.2M
{
510
50.2M
    if (op != _Py_NULL) {
511
19.5M
        Py_DECREF(op);
512
19.5M
    }
513
50.2M
}
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
759k
{
510
759k
    if (op != _Py_NULL) {
511
8
        Py_DECREF(op);
512
8
    }
513
759k
}
listobject.c:Py_XDECREF
Line
Count
Source
509
1.44G
{
510
1.44G
    if (op != _Py_NULL) {
511
1.41G
        Py_DECREF(op);
512
1.41G
    }
513
1.44G
}
longobject.c:Py_XDECREF
Line
Count
Source
509
1.22k
{
510
1.22k
    if (op != _Py_NULL) {
511
415
        Py_DECREF(op);
512
415
    }
513
1.22k
}
dictobject.c:Py_XDECREF
Line
Count
Source
509
776M
{
510
776M
    if (op != _Py_NULL) {
511
769M
        Py_DECREF(op);
512
769M
    }
513
776M
}
Unexecuted instantiation: memoryobject.c:Py_XDECREF
moduleobject.c:Py_XDECREF
Line
Count
Source
509
7.63k
{
510
7.63k
    if (op != _Py_NULL) {
511
5.93k
        Py_DECREF(op);
512
5.93k
    }
513
7.63k
}
object.c:Py_XDECREF
Line
Count
Source
509
39.7k
{
510
39.7k
    if (op != _Py_NULL) {
511
369
        Py_DECREF(op);
512
369
    }
513
39.7k
}
Unexecuted instantiation: obmalloc.c:Py_XDECREF
Unexecuted instantiation: picklebufobject.c:Py_XDECREF
rangeobject.c:Py_XDECREF
Line
Count
Source
509
48
{
510
48
    if (op != _Py_NULL) {
511
48
        Py_DECREF(op);
512
48
    }
513
48
}
setobject.c:Py_XDECREF
Line
Count
Source
509
266k
{
510
266k
    if (op != _Py_NULL) {
511
16
        Py_DECREF(op);
512
16
    }
513
266k
}
Unexecuted instantiation: sliceobject.c:Py_XDECREF
structseq.c:Py_XDECREF
Line
Count
Source
509
99.9k
{
510
99.9k
    if (op != _Py_NULL) {
511
99.9k
        Py_DECREF(op);
512
99.9k
    }
513
99.9k
}
Unexecuted instantiation: templateobject.c:Py_XDECREF
tupleobject.c:Py_XDECREF
Line
Count
Source
509
794M
{
510
794M
    if (op != _Py_NULL) {
511
791M
        Py_DECREF(op);
512
791M
    }
513
794M
}
typeobject.c:Py_XDECREF
Line
Count
Source
509
18.9M
{
510
18.9M
    if (op != _Py_NULL) {
511
15.1M
        Py_DECREF(op);
512
15.1M
    }
513
18.9M
}
Unexecuted instantiation: typevarobject.c:Py_XDECREF
unicode_formatter.c:Py_XDECREF
Line
Count
Source
509
668
{
510
668
    if (op != _Py_NULL) {
511
256
        Py_DECREF(op);
512
256
    }
513
668
}
unicodeobject.c:Py_XDECREF
Line
Count
Source
509
93.2M
{
510
93.2M
    if (op != _Py_NULL) {
511
67.7M
        Py_DECREF(op);
512
67.7M
    }
513
93.2M
}
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
289k
{
510
289k
    if (op != _Py_NULL) {
511
188
        Py_DECREF(op);
512
188
    }
513
289k
}
_warnings.c:Py_XDECREF
Line
Count
Source
509
88.3k
{
510
88.3k
    if (op != _Py_NULL) {
511
88.3k
        Py_DECREF(op);
512
88.3k
    }
513
88.3k
}
bltinmodule.c:Py_XDECREF
Line
Count
Source
509
7.82M
{
510
7.82M
    if (op != _Py_NULL) {
511
706k
        Py_DECREF(op);
512
706k
    }
513
7.82M
}
ceval.c:Py_XDECREF
Line
Count
Source
509
255k
{
510
255k
    if (op != _Py_NULL) {
511
5.64k
        Py_DECREF(op);
512
5.64k
    }
513
255k
}
codecs.c:Py_XDECREF
Line
Count
Source
509
148k
{
510
148k
    if (op != _Py_NULL) {
511
98.8k
        Py_DECREF(op);
512
98.8k
    }
513
148k
}
Unexecuted instantiation: codegen.c:Py_XDECREF
compile.c:Py_XDECREF
Line
Count
Source
509
28.1k
{
510
28.1k
    if (op != _Py_NULL) {
511
8.21k
        Py_DECREF(op);
512
8.21k
    }
513
28.1k
}
Unexecuted instantiation: context.c:Py_XDECREF
errors.c:Py_XDECREF
Line
Count
Source
509
152M
{
510
152M
    if (op != _Py_NULL) {
511
24.3M
        Py_DECREF(op);
512
24.3M
    }
513
152M
}
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
105k
{
510
105k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
105k
}
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
103k
{
510
103k
    if (op != _Py_NULL) {
511
73.9k
        Py_DECREF(op);
512
73.9k
    }
513
103k
}
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
14.0k
{
510
14.0k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
14.0k
}
intrinsics.c:Py_XDECREF
Line
Count
Source
509
13.7k
{
510
13.7k
    if (op != _Py_NULL) {
511
13.7k
        Py_DECREF(op);
512
13.7k
    }
513
13.7k
}
Unexecuted instantiation: legacy_tracing.c:Py_XDECREF
Unexecuted instantiation: lock.c:Py_XDECREF
marshal.c:Py_XDECREF
Line
Count
Source
509
311k
{
510
311k
    if (op != _Py_NULL) {
511
311k
        Py_DECREF(op);
512
311k
    }
513
311k
}
modsupport.c:Py_XDECREF
Line
Count
Source
509
6.74k
{
510
6.74k
    if (op != _Py_NULL) {
511
6.74k
        Py_DECREF(op);
512
6.74k
    }
513
6.74k
}
Unexecuted instantiation: mysnprintf.c:Py_XDECREF
Unexecuted instantiation: parking_lot.c:Py_XDECREF
Unexecuted instantiation: preconfig.c:Py_XDECREF
Unexecuted instantiation: pyarena.c:Py_XDECREF
Unexecuted instantiation: pyctype.c:Py_XDECREF
Unexecuted instantiation: pyhash.c:Py_XDECREF
pylifecycle.c:Py_XDECREF
Line
Count
Source
509
96
{
510
96
    if (op != _Py_NULL) {
511
96
        Py_DECREF(op);
512
96
    }
513
96
}
Unexecuted instantiation: pymath.c:Py_XDECREF
Unexecuted instantiation: pystate.c:Py_XDECREF
pythonrun.c:Py_XDECREF
Line
Count
Source
509
126
{
510
126
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
126
}
Unexecuted instantiation: pytime.c:Py_XDECREF
Unexecuted instantiation: qsbr.c:Py_XDECREF
Unexecuted instantiation: bootstrap_hash.c:Py_XDECREF
specialize.c:Py_XDECREF
Line
Count
Source
509
1.03M
{
510
1.03M
    if (op != _Py_NULL) {
511
555k
        Py_DECREF(op);
512
555k
    }
513
1.03M
}
symtable.c:Py_XDECREF
Line
Count
Source
509
171k
{
510
171k
    if (op != _Py_NULL) {
511
135k
        Py_DECREF(op);
512
135k
    }
513
171k
}
sysmodule.c:Py_XDECREF
Line
Count
Source
509
3.86k
{
510
3.86k
    if (op != _Py_NULL) {
511
3.52k
        Py_DECREF(op);
512
3.52k
    }
513
3.86k
}
Unexecuted instantiation: thread.c:Py_XDECREF
traceback.c:Py_XDECREF
Line
Count
Source
509
122M
{
510
122M
    if (op != _Py_NULL) {
511
63.6M
        Py_DECREF(op);
512
63.6M
    }
513
122M
}
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
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
Unexecuted instantiation: posixmodule.c:Py_XDECREF
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.54k
{
510
9.54k
    if (op != _Py_NULL) {
511
9.54k
        Py_DECREF(op);
512
9.54k
    }
513
9.54k
}
bufferedio.c:Py_XDECREF
Line
Count
Source
509
4.24k
{
510
4.24k
    if (op != _Py_NULL) {
511
1.04k
        Py_DECREF(op);
512
1.04k
    }
513
4.24k
}
textio.c:Py_XDECREF
Line
Count
Source
509
32.5k
{
510
32.5k
    if (op != _Py_NULL) {
511
32
        Py_DECREF(op);
512
32
    }
513
32.5k
}
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
84.9M
{
510
84.9M
    if (op != _Py_NULL) {
511
84.9M
        Py_DECREF(op);
512
84.9M
    }
513
84.9M
}
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.48k
{
510
3.48k
    if (op != _Py_NULL) {
511
2.53k
        Py_DECREF(op);
512
2.53k
    }
513
3.48k
}
_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.70k
{
510
2.70k
    if (op != _Py_NULL) {
511
2.70k
        Py_DECREF(op);
512
2.70k
    }
513
2.70k
}
Unexecuted instantiation: myreadline.c:Py_XDECREF
abstract.c:Py_XDECREF
Line
Count
Source
509
216k
{
510
216k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
216k
}
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.94M
{
510
5.94M
    if (op != _Py_NULL) {
511
319k
        Py_DECREF(op);
512
319k
    }
513
5.94M
}
classobject.c:Py_XDECREF
Line
Count
Source
509
19.8M
{
510
19.8M
    if (op != _Py_NULL) {
511
19.8M
        Py_DECREF(op);
512
19.8M
    }
513
19.8M
}
codeobject.c:Py_XDECREF
Line
Count
Source
509
118k
{
510
118k
    if (op != _Py_NULL) {
511
79.6k
        Py_DECREF(op);
512
79.6k
    }
513
118k
}
Unexecuted instantiation: complexobject.c:Py_XDECREF
descrobject.c:Py_XDECREF
Line
Count
Source
509
32.7M
{
510
32.7M
    if (op != _Py_NULL) {
511
23.2M
        Py_DECREF(op);
512
23.2M
    }
513
32.7M
}
enumobject.c:Py_XDECREF
Line
Count
Source
509
18.4M
{
510
18.4M
    if (op != _Py_NULL) {
511
12.2M
        Py_DECREF(op);
512
12.2M
    }
513
18.4M
}
genobject.c:Py_XDECREF
Line
Count
Source
509
1.85k
{
510
1.85k
    if (op != _Py_NULL) {
511
0
        Py_DECREF(op);
512
0
    }
513
1.85k
}
Unexecuted instantiation: fileobject.c:Py_XDECREF
Unexecuted instantiation: frameobject.c:Py_XDECREF
funcobject.c:Py_XDECREF
Line
Count
Source
509
2.82k
{
510
2.82k
    if (op != _Py_NULL) {
511
1.08k
        Py_DECREF(op);
512
1.08k
    }
513
2.82k
}
Unexecuted instantiation: interpolationobject.c:Py_XDECREF
iterobject.c:Py_XDECREF
Line
Count
Source
509
1.16M
{
510
1.16M
    if (op != _Py_NULL) {
511
388k
        Py_DECREF(op);
512
388k
    }
513
1.16M
}
odictobject.c:Py_XDECREF
Line
Count
Source
509
294
{
510
294
    if (op != _Py_NULL) {
511
246
        Py_DECREF(op);
512
246
    }
513
294
}
methodobject.c:Py_XDECREF
Line
Count
Source
509
902M
{
510
902M
    if (op != _Py_NULL) {
511
306M
        Py_DECREF(op);
512
306M
    }
513
902M
}
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
49.1k
{
510
49.1k
    if (op != _Py_NULL) {
511
49.1k
        Py_DECREF(op);
512
49.1k
    }
513
49.1k
}
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
30.2k
{
510
30.2k
    if (op != _Py_NULL) {
511
592
        Py_DECREF(op);
512
592
    }
513
30.2k
}
pegen.c:Py_XDECREF
Line
Count
Source
509
33.4k
{
510
33.4k
    if (op != _Py_NULL) {
511
1.50k
        Py_DECREF(op);
512
1.50k
    }
513
33.4k
}
pegen_errors.c:Py_XDECREF
Line
Count
Source
509
13.8k
{
510
13.8k
    if (op != _Py_NULL) {
511
11.1k
        Py_DECREF(op);
512
11.1k
    }
513
13.8k
}
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
96.8k
{
510
96.8k
    if (op != _Py_NULL) {
511
22.9k
        Py_DECREF(op);
512
22.9k
    }
513
96.8k
}
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.9k
{
510
31.9k
    if (op != _Py_NULL) {
511
31.9k
        Py_DECREF(op);
512
31.9k
    }
513
31.9k
}
514
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
515
4.54G
#  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.16G
{
527
5.16G
    Py_INCREF(obj);
528
5.16G
    return obj;
529
5.16G
}
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
22.9M
{
527
22.9M
    Py_INCREF(obj);
528
22.9M
    return obj;
529
22.9M
}
exceptions.c:_Py_NewRef
Line
Count
Source
526
80.1M
{
527
80.1M
    Py_INCREF(obj);
528
80.1M
    return obj;
529
80.1M
}
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.13G
{
527
1.13G
    Py_INCREF(obj);
528
1.13G
    return obj;
529
1.13G
}
longobject.c:_Py_NewRef
Line
Count
Source
526
4.47M
{
527
4.47M
    Py_INCREF(obj);
528
4.47M
    return obj;
529
4.47M
}
dictobject.c:_Py_NewRef
Line
Count
Source
526
722M
{
527
722M
    Py_INCREF(obj);
528
722M
    return obj;
529
722M
}
memoryobject.c:_Py_NewRef
Line
Count
Source
526
542k
{
527
542k
    Py_INCREF(obj);
528
542k
    return obj;
529
542k
}
moduleobject.c:_Py_NewRef
Line
Count
Source
526
1.48k
{
527
1.48k
    Py_INCREF(obj);
528
1.48k
    return obj;
529
1.48k
}
object.c:_Py_NewRef
Line
Count
Source
526
120M
{
527
120M
    Py_INCREF(obj);
528
120M
    return obj;
529
120M
}
Unexecuted instantiation: obmalloc.c:_Py_NewRef
Unexecuted instantiation: picklebufobject.c:_Py_NewRef
rangeobject.c:_Py_NewRef
Line
Count
Source
526
48
{
527
48
    Py_INCREF(obj);
528
48
    return obj;
529
48
}
setobject.c:_Py_NewRef
Line
Count
Source
526
1.41M
{
527
1.41M
    Py_INCREF(obj);
528
1.41M
    return obj;
529
1.41M
}
sliceobject.c:_Py_NewRef
Line
Count
Source
526
44.2M
{
527
44.2M
    Py_INCREF(obj);
528
44.2M
    return obj;
529
44.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
560M
{
527
560M
    Py_INCREF(obj);
528
560M
    return obj;
529
560M
}
typeobject.c:_Py_NewRef
Line
Count
Source
526
72.4M
{
527
72.4M
    Py_INCREF(obj);
528
72.4M
    return obj;
529
72.4M
}
Unexecuted instantiation: typevarobject.c:_Py_NewRef
Unexecuted instantiation: unicode_formatter.c:_Py_NewRef
unicodeobject.c:_Py_NewRef
Line
Count
Source
526
201M
{
527
201M
    Py_INCREF(obj);
528
201M
    return obj;
529
201M
}
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
34.5k
{
527
34.5k
    Py_INCREF(obj);
528
34.5k
    return obj;
529
34.5k
}
bltinmodule.c:_Py_NewRef
Line
Count
Source
526
14.7M
{
527
14.7M
    Py_INCREF(obj);
528
14.7M
    return obj;
529
14.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
3.13M
{
527
3.13M
    Py_INCREF(obj);
528
3.13M
    return obj;
529
3.13M
}
codegen.c:_Py_NewRef
Line
Count
Source
526
2.73k
{
527
2.73k
    Py_INCREF(obj);
528
2.73k
    return obj;
529
2.73k
}
compile.c:_Py_NewRef
Line
Count
Source
526
109k
{
527
109k
    Py_INCREF(obj);
528
109k
    return obj;
529
109k
}
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.4M
{
527
29.4M
    Py_INCREF(obj);
528
29.4M
    return obj;
529
29.4M
}
flowgraph.c:_Py_NewRef
Line
Count
Source
526
97.8k
{
527
97.8k
    Py_INCREF(obj);
528
97.8k
    return obj;
529
97.8k
}
frame.c:_Py_NewRef
Line
Count
Source
526
11.7M
{
527
11.7M
    Py_INCREF(obj);
528
11.7M
    return obj;
529
11.7M
}
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
737k
{
527
737k
    Py_INCREF(obj);
528
737k
    return obj;
529
737k
}
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
44.2k
{
527
44.2k
    Py_INCREF(obj);
528
44.2k
    return obj;
529
44.2k
}
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
24.7k
{
527
24.7k
    Py_INCREF(obj);
528
24.7k
    return obj;
529
24.7k
}
Unexecuted instantiation: legacy_tracing.c:_Py_NewRef
Unexecuted instantiation: lock.c:_Py_NewRef
marshal.c:_Py_NewRef
Line
Count
Source
526
329k
{
527
329k
    Py_INCREF(obj);
528
329k
    return obj;
529
329k
}
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
275k
{
527
275k
    Py_INCREF(obj);
528
275k
    return obj;
529
275k
}
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: 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
38.6k
{
527
38.6k
    Py_INCREF(obj);
528
38.6k
    return obj;
529
38.6k
}
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
17.6M
{
527
17.6M
    Py_INCREF(obj);
528
17.6M
    return obj;
529
17.6M
}
Unexecuted instantiation: errnomodule.c:_Py_NewRef
_iomodule.c:_Py_NewRef
Line
Count
Source
526
48
{
527
48
    Py_INCREF(obj);
528
48
    return obj;
529
48
}
iobase.c:_Py_NewRef
Line
Count
Source
526
40.4k
{
527
40.4k
    Py_INCREF(obj);
528
40.4k
    return obj;
529
40.4k
}
Unexecuted instantiation: fileio.c:_Py_NewRef
bytesio.c:_Py_NewRef
Line
Count
Source
526
10.1k
{
527
10.1k
    Py_INCREF(obj);
528
10.1k
    return obj;
529
10.1k
}
bufferedio.c:_Py_NewRef
Line
Count
Source
526
1.06k
{
527
1.06k
    Py_INCREF(obj);
528
1.06k
    return obj;
529
1.06k
}
textio.c:_Py_NewRef
Line
Count
Source
526
82.2k
{
527
82.2k
    Py_INCREF(obj);
528
82.2k
    return obj;
529
82.2k
}
stringio.c:_Py_NewRef
Line
Count
Source
526
16.1k
{
527
16.1k
    Py_INCREF(obj);
528
16.1k
    return obj;
529
16.1k
}
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
223M
{
527
223M
    Py_INCREF(obj);
528
223M
    return obj;
529
223M
}
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
640
{
527
640
    Py_INCREF(obj);
528
640
    return obj;
529
640
}
_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.58M
{
527
1.58M
    Py_INCREF(obj);
528
1.58M
    return obj;
529
1.58M
}
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
495M
{
527
495M
    Py_INCREF(obj);
528
495M
    return obj;
529
495M
}
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
39.7M
{
527
39.7M
    Py_INCREF(obj);
528
39.7M
    return obj;
529
39.7M
}
codeobject.c:_Py_NewRef
Line
Count
Source
526
501k
{
527
501k
    Py_INCREF(obj);
528
501k
    return obj;
529
501k
}
Unexecuted instantiation: complexobject.c:_Py_NewRef
descrobject.c:_Py_NewRef
Line
Count
Source
526
23.2M
{
527
23.2M
    Py_INCREF(obj);
528
23.2M
    return obj;
529
23.2M
}
enumobject.c:_Py_NewRef
Line
Count
Source
526
4
{
527
4
    Py_INCREF(obj);
528
4
    return obj;
529
4
}
genobject.c:_Py_NewRef
Line
Count
Source
526
42.9M
{
527
42.9M
    Py_INCREF(obj);
528
42.9M
    return obj;
529
42.9M
}
Unexecuted instantiation: fileobject.c:_Py_NewRef
frameobject.c:_Py_NewRef
Line
Count
Source
526
6.28k
{
527
6.28k
    Py_INCREF(obj);
528
6.28k
    return obj;
529
6.28k
}
funcobject.c:_Py_NewRef
Line
Count
Source
526
27.0M
{
527
27.0M
    Py_INCREF(obj);
528
27.0M
    return obj;
529
27.0M
}
Unexecuted instantiation: interpolationobject.c:_Py_NewRef
iterobject.c:_Py_NewRef
Line
Count
Source
526
777k
{
527
777k
    Py_INCREF(obj);
528
777k
    return obj;
529
777k
}
odictobject.c:_Py_NewRef
Line
Count
Source
526
172
{
527
172
    Py_INCREF(obj);
528
172
    return obj;
529
172
}
methodobject.c:_Py_NewRef
Line
Count
Source
526
6.18M
{
527
6.18M
    Py_INCREF(obj);
528
6.18M
    return obj;
529
6.18M
}
Unexecuted instantiation: namespaceobject.c:_Py_NewRef
Unexecuted instantiation: _contextvars.c:_Py_NewRef
Python-ast.c:_Py_NewRef
Line
Count
Source
526
552k
{
527
552k
    Py_INCREF(obj);
528
552k
    return obj;
529
552k
}
Unexecuted instantiation: Python-tokenize.c:_Py_NewRef
Unexecuted instantiation: asdl.c:_Py_NewRef
assemble.c:_Py_NewRef
Line
Count
Source
526
45.8k
{
527
45.8k
    Py_INCREF(obj);
528
45.8k
    return obj;
529
45.8k
}
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.4k
{
527
20.4k
    Py_INCREF(obj);
528
20.4k
    return obj;
529
20.4k
}
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
60.6M
{
533
60.6M
    Py_XINCREF(obj);
534
60.6M
    return obj;
535
60.6M
}
Unexecuted instantiation: genericaliasobject.c:_Py_XNewRef
Unexecuted instantiation: floatobject.c:_Py_XNewRef
listobject.c:_Py_XNewRef
Line
Count
Source
532
1.01M
{
533
1.01M
    Py_XINCREF(obj);
534
1.01M
    return obj;
535
1.01M
}
Unexecuted instantiation: longobject.c:_Py_XNewRef
dictobject.c:_Py_XNewRef
Line
Count
Source
532
634M
{
533
634M
    Py_XINCREF(obj);
534
634M
    return obj;
535
634M
}
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
289k
{
533
289k
    Py_XINCREF(obj);
534
289k
    return obj;
535
289k
}
Unexecuted instantiation: typevarobject.c:_Py_XNewRef
Unexecuted instantiation: unicode_formatter.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
294k
{
533
294k
    Py_XINCREF(obj);
534
294k
    return obj;
535
294k
}
Unexecuted instantiation: _warnings.c:_Py_XNewRef
bltinmodule.c:_Py_XNewRef
Line
Count
Source
532
341
{
533
341
    Py_XINCREF(obj);
534
341
    return obj;
535
341
}
ceval.c:_Py_XNewRef
Line
Count
Source
532
72.9M
{
533
72.9M
    Py_XINCREF(obj);
534
72.9M
    return obj;
535
72.9M
}
Unexecuted instantiation: codecs.c:_Py_XNewRef
Unexecuted instantiation: codegen.c:_Py_XNewRef
compile.c:_Py_XNewRef
Line
Count
Source
532
9.90k
{
533
9.90k
    Py_XINCREF(obj);
534
9.90k
    return obj;
535
9.90k
}
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
3.87k
{
533
3.87k
    Py_XINCREF(obj);
534
3.87k
    return obj;
535
3.87k
}
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.19k
{
533
2.19k
    Py_XINCREF(obj);
534
2.19k
    return obj;
535
2.19k
}
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
61.2M
{
533
61.2M
    Py_XINCREF(obj);
534
61.2M
    return obj;
535
61.2M
}
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: 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
640
{
533
640
    Py_XINCREF(obj);
534
640
    return obj;
535
640
}
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.7M
{
533
14.7M
    Py_XINCREF(obj);
534
14.7M
    return obj;
535
14.7M
}
Unexecuted instantiation: boolobject.c:_Py_XNewRef
Unexecuted instantiation: bytes_methods.c:_Py_XNewRef
Unexecuted instantiation: bytearrayobject.c:_Py_XNewRef
Unexecuted instantiation: capsule.c:_Py_XNewRef
cellobject.c:_Py_XNewRef
Line
Count
Source
532
5.94M
{
533
5.94M
    Py_XINCREF(obj);
534
5.94M
    return obj;
535
5.94M
}
Unexecuted instantiation: classobject.c:_Py_XNewRef
codeobject.c:_Py_XNewRef
Line
Count
Source
532
6.62k
{
533
6.62k
    Py_XINCREF(obj);
534
6.62k
    return obj;
535
6.62k
}
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.46k
{
533
3.46k
    Py_XINCREF(obj);
534
3.46k
    return obj;
535
3.46k
}
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
601M
{
533
601M
    Py_XINCREF(obj);
534
601M
    return obj;
535
601M
}
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
30.2k
{
533
30.2k
    Py_XINCREF(obj);
534
30.2k
    return obj;
535
30.2k
}
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.06G
#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
542
1.43G
#  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