Coverage Report

Created: 2025-07-18 06:09

/src/cpython/Include/cpython/longintrepr.h
Line
Count
Source
1
#ifndef Py_LIMITED_API
2
#ifndef Py_LONGINTREPR_H
3
#define Py_LONGINTREPR_H
4
#ifdef __cplusplus
5
extern "C" {
6
#endif
7
8
9
/* This is published for the benefit of "friends" marshal.c and _decimal.c. */
10
11
/* Parameters of the integer representation.  There are two different
12
   sets of parameters: one set for 30-bit digits, stored in an unsigned 32-bit
13
   integer type, and one set for 15-bit digits with each digit stored in an
14
   unsigned short.  The value of PYLONG_BITS_IN_DIGIT, defined either at
15
   configure time or in pyport.h, is used to decide which digit size to use.
16
17
   Type 'digit' should be able to hold 2*PyLong_BASE-1, and type 'twodigits'
18
   should be an unsigned integer type able to hold all integers up to
19
   PyLong_BASE*PyLong_BASE-1.  x_sub assumes that 'digit' is an unsigned type,
20
   and that overflow is handled by taking the result modulo 2**N for some N >
21
   PyLong_SHIFT.  The majority of the code doesn't care about the precise
22
   value of PyLong_SHIFT, but there are some notable exceptions:
23
24
   - PyLong_{As,From}ByteArray require that PyLong_SHIFT be at least 8
25
26
   - long_hash() requires that PyLong_SHIFT is *strictly* less than the number
27
     of bits in an unsigned long, as do the PyLong <-> long (or unsigned long)
28
     conversion functions
29
30
   - the Python int <-> size_t/Py_ssize_t conversion functions expect that
31
     PyLong_SHIFT is strictly less than the number of bits in a size_t
32
33
   - the marshal code currently expects that PyLong_SHIFT is a multiple of 15
34
35
   - NSMALLNEGINTS and NSMALLPOSINTS should be small enough to fit in a single
36
     digit; with the current values this forces PyLong_SHIFT >= 9
37
38
  The values 15 and 30 should fit all of the above requirements, on any
39
  platform.
40
*/
41
42
#if PYLONG_BITS_IN_DIGIT == 30
43
typedef uint32_t digit;
44
typedef int32_t sdigit; /* signed variant of digit */
45
typedef uint64_t twodigits;
46
typedef int64_t stwodigits; /* signed variant of twodigits */
47
2.55G
#define PyLong_SHIFT    30
48
29.3M
#define _PyLong_DECIMAL_SHIFT   9 /* max(e such that 10**e fits in a digit) */
49
23.0M
#define _PyLong_DECIMAL_BASE    ((digit)1000000000) /* 10 ** DECIMAL_SHIFT */
50
#elif PYLONG_BITS_IN_DIGIT == 15
51
typedef unsigned short digit;
52
typedef short sdigit; /* signed variant of digit */
53
typedef unsigned long twodigits;
54
typedef long stwodigits; /* signed variant of twodigits */
55
#define PyLong_SHIFT    15
56
#define _PyLong_DECIMAL_SHIFT   4 /* max(e such that 10**e fits in a digit) */
57
#define _PyLong_DECIMAL_BASE    ((digit)10000) /* 10 ** DECIMAL_SHIFT */
58
#else
59
#error "PYLONG_BITS_IN_DIGIT should be 15 or 30"
60
#endif
61
2.41G
#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
62
1.93G
#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
63
64
/* Long integer representation.
65
66
   Long integers are made up of a number of 30- or 15-bit digits, depending on
67
   the platform. The number of digits (ndigits) is stored in the high bits of
68
   the lv_tag field (lvtag >> _PyLong_NON_SIZE_BITS).
69
70
   The absolute value of a number is equal to
71
        SUM(for i=0 through ndigits-1) ob_digit[i] * 2**(PyLong_SHIFT*i)
72
73
   The sign of the value is stored in the lower 2 bits of lv_tag.
74
75
    - 0: Positive
76
    - 1: Zero
77
    - 2: Negative
78
79
   The third lowest bit of lv_tag is
80
   set to 1 for the small ints.
81
82
   In a normalized number, ob_digit[ndigits-1] (the most significant
83
   digit) is never zero.  Also, in all cases, for all valid i,
84
        0 <= ob_digit[i] <= PyLong_MASK.
85
86
   The allocation function takes care of allocating extra memory
87
   so that ob_digit[0] ... ob_digit[ndigits-1] are actually available.
88
   We always allocate memory for at least one digit, so accessing ob_digit[0]
89
   is always safe. However, in the case ndigits == 0, the contents of
90
   ob_digit[0] may be undefined.
91
*/
92
93
typedef struct _PyLongValue {
94
    uintptr_t lv_tag; /* Number of digits, sign and flags */
95
    digit ob_digit[1];
96
} _PyLongValue;
97
98
struct _longobject {
99
    PyObject_HEAD
100
    _PyLongValue long_value;
101
};
102
103
Py_DEPRECATED(3.14) PyAPI_FUNC(PyLongObject*) _PyLong_New(Py_ssize_t);
104
105
// Return a copy of src.
106
PyAPI_FUNC(PyObject*) _PyLong_Copy(PyLongObject *src);
107
108
Py_DEPRECATED(3.14) PyAPI_FUNC(PyLongObject*) _PyLong_FromDigits(
109
    int negative,
110
    Py_ssize_t digit_count,
111
    digit *digits);
112
113
114
/* Inline some internals for speed. These should be in pycore_long.h
115
 * if user code didn't need them inlined. */
116
117
5.78G
#define _PyLong_SIGN_MASK 3
118
7.26G
#define _PyLong_NON_SIZE_BITS 3
119
120
121
static inline int
122
7.26G
_PyLong_IsCompact(const PyLongObject* op) {
123
7.26G
    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
124
7.26G
    return op->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS);
125
7.26G
}
Unexecuted instantiation: bytesobject.c:_PyLong_IsCompact
Unexecuted instantiation: call.c:_PyLong_IsCompact
Unexecuted instantiation: exceptions.c:_PyLong_IsCompact
Unexecuted instantiation: genericaliasobject.c:_PyLong_IsCompact
Unexecuted instantiation: floatobject.c:_PyLong_IsCompact
listobject.c:_PyLong_IsCompact
Line
Count
Source
122
2.22M
_PyLong_IsCompact(const PyLongObject* op) {
123
2.22M
    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
124
2.22M
    return op->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS);
125
2.22M
}
longobject.c:_PyLong_IsCompact
Line
Count
Source
122
2.13G
_PyLong_IsCompact(const PyLongObject* op) {
123
2.13G
    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
124
2.13G
    return op->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS);
125
2.13G
}
Unexecuted instantiation: dictobject.c:_PyLong_IsCompact
Unexecuted instantiation: memoryobject.c:_PyLong_IsCompact
Unexecuted instantiation: moduleobject.c:_PyLong_IsCompact
Unexecuted instantiation: object.c:_PyLong_IsCompact
Unexecuted instantiation: obmalloc.c:_PyLong_IsCompact
Unexecuted instantiation: picklebufobject.c:_PyLong_IsCompact
Unexecuted instantiation: rangeobject.c:_PyLong_IsCompact
Unexecuted instantiation: setobject.c:_PyLong_IsCompact
Unexecuted instantiation: sliceobject.c:_PyLong_IsCompact
Unexecuted instantiation: structseq.c:_PyLong_IsCompact
Unexecuted instantiation: templateobject.c:_PyLong_IsCompact
Unexecuted instantiation: tupleobject.c:_PyLong_IsCompact
Unexecuted instantiation: typeobject.c:_PyLong_IsCompact
Unexecuted instantiation: typevarobject.c:_PyLong_IsCompact
Unexecuted instantiation: unicodeobject.c:_PyLong_IsCompact
Unexecuted instantiation: unicodectype.c:_PyLong_IsCompact
Unexecuted instantiation: unionobject.c:_PyLong_IsCompact
Unexecuted instantiation: weakrefobject.c:_PyLong_IsCompact
Unexecuted instantiation: _warnings.c:_PyLong_IsCompact
bltinmodule.c:_PyLong_IsCompact
Line
Count
Source
122
1.85M
_PyLong_IsCompact(const PyLongObject* op) {
123
1.85M
    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
124
1.85M
    return op->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS);
125
1.85M
}
ceval.c:_PyLong_IsCompact
Line
Count
Source
122
5.11G
_PyLong_IsCompact(const PyLongObject* op) {
123
5.11G
    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
124
5.11G
    return op->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS);
125
5.11G
}
Unexecuted instantiation: codecs.c:_PyLong_IsCompact
Unexecuted instantiation: codegen.c:_PyLong_IsCompact
Unexecuted instantiation: compile.c:_PyLong_IsCompact
Unexecuted instantiation: context.c:_PyLong_IsCompact
Unexecuted instantiation: errors.c:_PyLong_IsCompact
Unexecuted instantiation: flowgraph.c:_PyLong_IsCompact
Unexecuted instantiation: frame.c:_PyLong_IsCompact
Unexecuted instantiation: future.c:_PyLong_IsCompact
Unexecuted instantiation: gc.c:_PyLong_IsCompact
Unexecuted instantiation: gc_gil.c:_PyLong_IsCompact
Unexecuted instantiation: getargs.c:_PyLong_IsCompact
Unexecuted instantiation: ceval_gil.c:_PyLong_IsCompact
Unexecuted instantiation: hamt.c:_PyLong_IsCompact
Unexecuted instantiation: hashtable.c:_PyLong_IsCompact
Unexecuted instantiation: import.c:_PyLong_IsCompact
Unexecuted instantiation: importdl.c:_PyLong_IsCompact
Unexecuted instantiation: initconfig.c:_PyLong_IsCompact
Unexecuted instantiation: instrumentation.c:_PyLong_IsCompact
Unexecuted instantiation: instruction_sequence.c:_PyLong_IsCompact
Unexecuted instantiation: intrinsics.c:_PyLong_IsCompact
Unexecuted instantiation: legacy_tracing.c:_PyLong_IsCompact
Unexecuted instantiation: lock.c:_PyLong_IsCompact
Unexecuted instantiation: marshal.c:_PyLong_IsCompact
Unexecuted instantiation: modsupport.c:_PyLong_IsCompact
Unexecuted instantiation: mysnprintf.c:_PyLong_IsCompact
Unexecuted instantiation: parking_lot.c:_PyLong_IsCompact
Unexecuted instantiation: preconfig.c:_PyLong_IsCompact
Unexecuted instantiation: pyarena.c:_PyLong_IsCompact
Unexecuted instantiation: pyctype.c:_PyLong_IsCompact
Unexecuted instantiation: pyhash.c:_PyLong_IsCompact
Unexecuted instantiation: pylifecycle.c:_PyLong_IsCompact
Unexecuted instantiation: pymath.c:_PyLong_IsCompact
Unexecuted instantiation: pystate.c:_PyLong_IsCompact
Unexecuted instantiation: pythonrun.c:_PyLong_IsCompact
Unexecuted instantiation: pytime.c:_PyLong_IsCompact
Unexecuted instantiation: qsbr.c:_PyLong_IsCompact
Unexecuted instantiation: bootstrap_hash.c:_PyLong_IsCompact
specialize.c:_PyLong_IsCompact
Line
Count
Source
122
6.27M
_PyLong_IsCompact(const PyLongObject* op) {
123
6.27M
    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
124
6.27M
    return op->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS);
125
6.27M
}
Unexecuted instantiation: symtable.c:_PyLong_IsCompact
Unexecuted instantiation: sysmodule.c:_PyLong_IsCompact
Unexecuted instantiation: thread.c:_PyLong_IsCompact
Unexecuted instantiation: traceback.c:_PyLong_IsCompact
Unexecuted instantiation: tracemalloc.c:_PyLong_IsCompact
Unexecuted instantiation: getopt.c:_PyLong_IsCompact
Unexecuted instantiation: pystrcmp.c:_PyLong_IsCompact
Unexecuted instantiation: pystrtod.c:_PyLong_IsCompact
Unexecuted instantiation: pystrhex.c:_PyLong_IsCompact
Unexecuted instantiation: dtoa.c:_PyLong_IsCompact
Unexecuted instantiation: formatter_unicode.c:_PyLong_IsCompact
Unexecuted instantiation: fileutils.c:_PyLong_IsCompact
Unexecuted instantiation: suggestions.c:_PyLong_IsCompact
Unexecuted instantiation: perf_trampoline.c:_PyLong_IsCompact
Unexecuted instantiation: perf_jit_trampoline.c:_PyLong_IsCompact
Unexecuted instantiation: remote_debugging.c:_PyLong_IsCompact
Unexecuted instantiation: dynload_shlib.c:_PyLong_IsCompact
Unexecuted instantiation: config.c:_PyLong_IsCompact
Unexecuted instantiation: gcmodule.c:_PyLong_IsCompact
Unexecuted instantiation: _asynciomodule.c:_PyLong_IsCompact
Unexecuted instantiation: atexitmodule.c:_PyLong_IsCompact
Unexecuted instantiation: faulthandler.c:_PyLong_IsCompact
Unexecuted instantiation: posixmodule.c:_PyLong_IsCompact
Unexecuted instantiation: signalmodule.c:_PyLong_IsCompact
Unexecuted instantiation: _tracemalloc.c:_PyLong_IsCompact
Unexecuted instantiation: _suggestions.c:_PyLong_IsCompact
Unexecuted instantiation: _codecsmodule.c:_PyLong_IsCompact
Unexecuted instantiation: _collectionsmodule.c:_PyLong_IsCompact
Unexecuted instantiation: _iomodule.c:_PyLong_IsCompact
Unexecuted instantiation: iobase.c:_PyLong_IsCompact
Unexecuted instantiation: fileio.c:_PyLong_IsCompact
Unexecuted instantiation: bytesio.c:_PyLong_IsCompact
Unexecuted instantiation: bufferedio.c:_PyLong_IsCompact
Unexecuted instantiation: textio.c:_PyLong_IsCompact
Unexecuted instantiation: stringio.c:_PyLong_IsCompact
Unexecuted instantiation: itertoolsmodule.c:_PyLong_IsCompact
Unexecuted instantiation: sre.c:_PyLong_IsCompact
Unexecuted instantiation: _sysconfig.c:_PyLong_IsCompact
Unexecuted instantiation: _threadmodule.c:_PyLong_IsCompact
Unexecuted instantiation: timemodule.c:_PyLong_IsCompact
Unexecuted instantiation: _typesmodule.c:_PyLong_IsCompact
Unexecuted instantiation: _typingmodule.c:_PyLong_IsCompact
Unexecuted instantiation: _weakref.c:_PyLong_IsCompact
Unexecuted instantiation: _abc.c:_PyLong_IsCompact
Unexecuted instantiation: _functoolsmodule.c:_PyLong_IsCompact
Unexecuted instantiation: _localemodule.c:_PyLong_IsCompact
Unexecuted instantiation: _opcode.c:_PyLong_IsCompact
Unexecuted instantiation: _operator.c:_PyLong_IsCompact
Unexecuted instantiation: symtablemodule.c:_PyLong_IsCompact
Unexecuted instantiation: pwdmodule.c:_PyLong_IsCompact
Unexecuted instantiation: getpath.c:_PyLong_IsCompact
Unexecuted instantiation: frozen.c:_PyLong_IsCompact
Unexecuted instantiation: getbuildinfo.c:_PyLong_IsCompact
Unexecuted instantiation: peg_api.c:_PyLong_IsCompact
Unexecuted instantiation: file_tokenizer.c:_PyLong_IsCompact
Unexecuted instantiation: helpers.c:_PyLong_IsCompact
Unexecuted instantiation: myreadline.c:_PyLong_IsCompact
Unexecuted instantiation: abstract.c:_PyLong_IsCompact
Unexecuted instantiation: boolobject.c:_PyLong_IsCompact
Unexecuted instantiation: bytes_methods.c:_PyLong_IsCompact
Unexecuted instantiation: bytearrayobject.c:_PyLong_IsCompact
Unexecuted instantiation: capsule.c:_PyLong_IsCompact
Unexecuted instantiation: cellobject.c:_PyLong_IsCompact
Unexecuted instantiation: classobject.c:_PyLong_IsCompact
Unexecuted instantiation: codeobject.c:_PyLong_IsCompact
Unexecuted instantiation: complexobject.c:_PyLong_IsCompact
Unexecuted instantiation: descrobject.c:_PyLong_IsCompact
Unexecuted instantiation: enumobject.c:_PyLong_IsCompact
Unexecuted instantiation: genobject.c:_PyLong_IsCompact
Unexecuted instantiation: fileobject.c:_PyLong_IsCompact
Unexecuted instantiation: frameobject.c:_PyLong_IsCompact
Unexecuted instantiation: funcobject.c:_PyLong_IsCompact
Unexecuted instantiation: interpolationobject.c:_PyLong_IsCompact
Unexecuted instantiation: iterobject.c:_PyLong_IsCompact
Unexecuted instantiation: odictobject.c:_PyLong_IsCompact
Unexecuted instantiation: methodobject.c:_PyLong_IsCompact
Unexecuted instantiation: namespaceobject.c:_PyLong_IsCompact
Unexecuted instantiation: _contextvars.c:_PyLong_IsCompact
Unexecuted instantiation: Python-ast.c:_PyLong_IsCompact
Unexecuted instantiation: Python-tokenize.c:_PyLong_IsCompact
Unexecuted instantiation: asdl.c:_PyLong_IsCompact
Unexecuted instantiation: assemble.c:_PyLong_IsCompact
Unexecuted instantiation: ast.c:_PyLong_IsCompact
Unexecuted instantiation: ast_preprocess.c:_PyLong_IsCompact
Unexecuted instantiation: ast_unparse.c:_PyLong_IsCompact
Unexecuted instantiation: critical_section.c:_PyLong_IsCompact
Unexecuted instantiation: crossinterp.c:_PyLong_IsCompact
Unexecuted instantiation: getcopyright.c:_PyLong_IsCompact
Unexecuted instantiation: getplatform.c:_PyLong_IsCompact
Unexecuted instantiation: getversion.c:_PyLong_IsCompact
Unexecuted instantiation: optimizer.c:_PyLong_IsCompact
Unexecuted instantiation: pathconfig.c:_PyLong_IsCompact
Unexecuted instantiation: structmember.c:_PyLong_IsCompact
Unexecuted instantiation: pegen.c:_PyLong_IsCompact
Unexecuted instantiation: pegen_errors.c:_PyLong_IsCompact
Unexecuted instantiation: parser.c:_PyLong_IsCompact
Unexecuted instantiation: buffer.c:_PyLong_IsCompact
Unexecuted instantiation: lexer.c:_PyLong_IsCompact
Unexecuted instantiation: state.c:_PyLong_IsCompact
Unexecuted instantiation: readline_tokenizer.c:_PyLong_IsCompact
Unexecuted instantiation: string_tokenizer.c:_PyLong_IsCompact
Unexecuted instantiation: utf8_tokenizer.c:_PyLong_IsCompact
Unexecuted instantiation: getcompiler.c:_PyLong_IsCompact
Unexecuted instantiation: mystrtoul.c:_PyLong_IsCompact
Unexecuted instantiation: token.c:_PyLong_IsCompact
Unexecuted instantiation: action_helpers.c:_PyLong_IsCompact
Unexecuted instantiation: string_parser.c:_PyLong_IsCompact
126
127
#define PyUnstable_Long_IsCompact _PyLong_IsCompact
128
129
static inline Py_ssize_t
130
_PyLong_CompactValue(const PyLongObject *op)
131
5.78G
{
132
5.78G
    Py_ssize_t sign;
133
5.78G
    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
134
5.78G
    assert(PyUnstable_Long_IsCompact(op));
135
5.78G
    sign = 1 - (op->long_value.lv_tag & _PyLong_SIGN_MASK);
136
5.78G
    return sign * (Py_ssize_t)op->long_value.ob_digit[0];
137
5.78G
}
Unexecuted instantiation: bytesobject.c:_PyLong_CompactValue
Unexecuted instantiation: call.c:_PyLong_CompactValue
Unexecuted instantiation: exceptions.c:_PyLong_CompactValue
Unexecuted instantiation: genericaliasobject.c:_PyLong_CompactValue
Unexecuted instantiation: floatobject.c:_PyLong_CompactValue
listobject.c:_PyLong_CompactValue
Line
Count
Source
131
9.85M
{
132
9.85M
    Py_ssize_t sign;
133
9.85M
    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
134
9.85M
    assert(PyUnstable_Long_IsCompact(op));
135
9.85M
    sign = 1 - (op->long_value.lv_tag & _PyLong_SIGN_MASK);
136
9.85M
    return sign * (Py_ssize_t)op->long_value.ob_digit[0];
137
9.85M
}
longobject.c:_PyLong_CompactValue
Line
Count
Source
131
3.20G
{
132
3.20G
    Py_ssize_t sign;
133
3.20G
    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
134
3.20G
    assert(PyUnstable_Long_IsCompact(op));
135
3.20G
    sign = 1 - (op->long_value.lv_tag & _PyLong_SIGN_MASK);
136
3.20G
    return sign * (Py_ssize_t)op->long_value.ob_digit[0];
137
3.20G
}
Unexecuted instantiation: dictobject.c:_PyLong_CompactValue
Unexecuted instantiation: memoryobject.c:_PyLong_CompactValue
Unexecuted instantiation: moduleobject.c:_PyLong_CompactValue
Unexecuted instantiation: object.c:_PyLong_CompactValue
Unexecuted instantiation: obmalloc.c:_PyLong_CompactValue
Unexecuted instantiation: picklebufobject.c:_PyLong_CompactValue
Unexecuted instantiation: rangeobject.c:_PyLong_CompactValue
Unexecuted instantiation: setobject.c:_PyLong_CompactValue
Unexecuted instantiation: sliceobject.c:_PyLong_CompactValue
Unexecuted instantiation: structseq.c:_PyLong_CompactValue
Unexecuted instantiation: templateobject.c:_PyLong_CompactValue
Unexecuted instantiation: tupleobject.c:_PyLong_CompactValue
Unexecuted instantiation: typeobject.c:_PyLong_CompactValue
Unexecuted instantiation: typevarobject.c:_PyLong_CompactValue
Unexecuted instantiation: unicodeobject.c:_PyLong_CompactValue
Unexecuted instantiation: unicodectype.c:_PyLong_CompactValue
Unexecuted instantiation: unionobject.c:_PyLong_CompactValue
Unexecuted instantiation: weakrefobject.c:_PyLong_CompactValue
Unexecuted instantiation: _warnings.c:_PyLong_CompactValue
bltinmodule.c:_PyLong_CompactValue
Line
Count
Source
131
1.85M
{
132
1.85M
    Py_ssize_t sign;
133
1.85M
    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
134
1.85M
    assert(PyUnstable_Long_IsCompact(op));
135
1.85M
    sign = 1 - (op->long_value.lv_tag & _PyLong_SIGN_MASK);
136
1.85M
    return sign * (Py_ssize_t)op->long_value.ob_digit[0];
137
1.85M
}
ceval.c:_PyLong_CompactValue
Line
Count
Source
131
2.56G
{
132
2.56G
    Py_ssize_t sign;
133
2.56G
    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
134
2.56G
    assert(PyUnstable_Long_IsCompact(op));
135
2.56G
    sign = 1 - (op->long_value.lv_tag & _PyLong_SIGN_MASK);
136
2.56G
    return sign * (Py_ssize_t)op->long_value.ob_digit[0];
137
2.56G
}
Unexecuted instantiation: codecs.c:_PyLong_CompactValue
Unexecuted instantiation: codegen.c:_PyLong_CompactValue
Unexecuted instantiation: compile.c:_PyLong_CompactValue
Unexecuted instantiation: context.c:_PyLong_CompactValue
Unexecuted instantiation: errors.c:_PyLong_CompactValue
Unexecuted instantiation: flowgraph.c:_PyLong_CompactValue
Unexecuted instantiation: frame.c:_PyLong_CompactValue
Unexecuted instantiation: future.c:_PyLong_CompactValue
Unexecuted instantiation: gc.c:_PyLong_CompactValue
Unexecuted instantiation: gc_gil.c:_PyLong_CompactValue
Unexecuted instantiation: getargs.c:_PyLong_CompactValue
Unexecuted instantiation: ceval_gil.c:_PyLong_CompactValue
Unexecuted instantiation: hamt.c:_PyLong_CompactValue
Unexecuted instantiation: hashtable.c:_PyLong_CompactValue
Unexecuted instantiation: import.c:_PyLong_CompactValue
Unexecuted instantiation: importdl.c:_PyLong_CompactValue
Unexecuted instantiation: initconfig.c:_PyLong_CompactValue
Unexecuted instantiation: instrumentation.c:_PyLong_CompactValue
Unexecuted instantiation: instruction_sequence.c:_PyLong_CompactValue
Unexecuted instantiation: intrinsics.c:_PyLong_CompactValue
Unexecuted instantiation: legacy_tracing.c:_PyLong_CompactValue
Unexecuted instantiation: lock.c:_PyLong_CompactValue
Unexecuted instantiation: marshal.c:_PyLong_CompactValue
Unexecuted instantiation: modsupport.c:_PyLong_CompactValue
Unexecuted instantiation: mysnprintf.c:_PyLong_CompactValue
Unexecuted instantiation: parking_lot.c:_PyLong_CompactValue
Unexecuted instantiation: preconfig.c:_PyLong_CompactValue
Unexecuted instantiation: pyarena.c:_PyLong_CompactValue
Unexecuted instantiation: pyctype.c:_PyLong_CompactValue
Unexecuted instantiation: pyhash.c:_PyLong_CompactValue
Unexecuted instantiation: pylifecycle.c:_PyLong_CompactValue
Unexecuted instantiation: pymath.c:_PyLong_CompactValue
Unexecuted instantiation: pystate.c:_PyLong_CompactValue
Unexecuted instantiation: pythonrun.c:_PyLong_CompactValue
Unexecuted instantiation: pytime.c:_PyLong_CompactValue
Unexecuted instantiation: qsbr.c:_PyLong_CompactValue
Unexecuted instantiation: bootstrap_hash.c:_PyLong_CompactValue
specialize.c:_PyLong_CompactValue
Line
Count
Source
131
6.26M
{
132
6.26M
    Py_ssize_t sign;
133
6.26M
    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
134
6.26M
    assert(PyUnstable_Long_IsCompact(op));
135
6.26M
    sign = 1 - (op->long_value.lv_tag & _PyLong_SIGN_MASK);
136
6.26M
    return sign * (Py_ssize_t)op->long_value.ob_digit[0];
137
6.26M
}
Unexecuted instantiation: symtable.c:_PyLong_CompactValue
Unexecuted instantiation: sysmodule.c:_PyLong_CompactValue
Unexecuted instantiation: thread.c:_PyLong_CompactValue
Unexecuted instantiation: traceback.c:_PyLong_CompactValue
Unexecuted instantiation: tracemalloc.c:_PyLong_CompactValue
Unexecuted instantiation: getopt.c:_PyLong_CompactValue
Unexecuted instantiation: pystrcmp.c:_PyLong_CompactValue
Unexecuted instantiation: pystrtod.c:_PyLong_CompactValue
Unexecuted instantiation: pystrhex.c:_PyLong_CompactValue
Unexecuted instantiation: dtoa.c:_PyLong_CompactValue
Unexecuted instantiation: formatter_unicode.c:_PyLong_CompactValue
Unexecuted instantiation: fileutils.c:_PyLong_CompactValue
Unexecuted instantiation: suggestions.c:_PyLong_CompactValue
Unexecuted instantiation: perf_trampoline.c:_PyLong_CompactValue
Unexecuted instantiation: perf_jit_trampoline.c:_PyLong_CompactValue
Unexecuted instantiation: remote_debugging.c:_PyLong_CompactValue
Unexecuted instantiation: dynload_shlib.c:_PyLong_CompactValue
Unexecuted instantiation: config.c:_PyLong_CompactValue
Unexecuted instantiation: gcmodule.c:_PyLong_CompactValue
Unexecuted instantiation: _asynciomodule.c:_PyLong_CompactValue
Unexecuted instantiation: atexitmodule.c:_PyLong_CompactValue
Unexecuted instantiation: faulthandler.c:_PyLong_CompactValue
Unexecuted instantiation: posixmodule.c:_PyLong_CompactValue
Unexecuted instantiation: signalmodule.c:_PyLong_CompactValue
Unexecuted instantiation: _tracemalloc.c:_PyLong_CompactValue
Unexecuted instantiation: _suggestions.c:_PyLong_CompactValue
Unexecuted instantiation: _codecsmodule.c:_PyLong_CompactValue
Unexecuted instantiation: _collectionsmodule.c:_PyLong_CompactValue
Unexecuted instantiation: _iomodule.c:_PyLong_CompactValue
Unexecuted instantiation: iobase.c:_PyLong_CompactValue
Unexecuted instantiation: fileio.c:_PyLong_CompactValue
Unexecuted instantiation: bytesio.c:_PyLong_CompactValue
Unexecuted instantiation: bufferedio.c:_PyLong_CompactValue
Unexecuted instantiation: textio.c:_PyLong_CompactValue
Unexecuted instantiation: stringio.c:_PyLong_CompactValue
Unexecuted instantiation: itertoolsmodule.c:_PyLong_CompactValue
Unexecuted instantiation: sre.c:_PyLong_CompactValue
Unexecuted instantiation: _sysconfig.c:_PyLong_CompactValue
Unexecuted instantiation: _threadmodule.c:_PyLong_CompactValue
Unexecuted instantiation: timemodule.c:_PyLong_CompactValue
Unexecuted instantiation: _typesmodule.c:_PyLong_CompactValue
Unexecuted instantiation: _typingmodule.c:_PyLong_CompactValue
Unexecuted instantiation: _weakref.c:_PyLong_CompactValue
Unexecuted instantiation: _abc.c:_PyLong_CompactValue
Unexecuted instantiation: _functoolsmodule.c:_PyLong_CompactValue
Unexecuted instantiation: _localemodule.c:_PyLong_CompactValue
Unexecuted instantiation: _opcode.c:_PyLong_CompactValue
Unexecuted instantiation: _operator.c:_PyLong_CompactValue
Unexecuted instantiation: symtablemodule.c:_PyLong_CompactValue
Unexecuted instantiation: pwdmodule.c:_PyLong_CompactValue
Unexecuted instantiation: getpath.c:_PyLong_CompactValue
Unexecuted instantiation: frozen.c:_PyLong_CompactValue
Unexecuted instantiation: getbuildinfo.c:_PyLong_CompactValue
Unexecuted instantiation: peg_api.c:_PyLong_CompactValue
Unexecuted instantiation: file_tokenizer.c:_PyLong_CompactValue
Unexecuted instantiation: helpers.c:_PyLong_CompactValue
Unexecuted instantiation: myreadline.c:_PyLong_CompactValue
Unexecuted instantiation: abstract.c:_PyLong_CompactValue
Unexecuted instantiation: boolobject.c:_PyLong_CompactValue
Unexecuted instantiation: bytes_methods.c:_PyLong_CompactValue
Unexecuted instantiation: bytearrayobject.c:_PyLong_CompactValue
Unexecuted instantiation: capsule.c:_PyLong_CompactValue
Unexecuted instantiation: cellobject.c:_PyLong_CompactValue
Unexecuted instantiation: classobject.c:_PyLong_CompactValue
Unexecuted instantiation: codeobject.c:_PyLong_CompactValue
Unexecuted instantiation: complexobject.c:_PyLong_CompactValue
Unexecuted instantiation: descrobject.c:_PyLong_CompactValue
Unexecuted instantiation: enumobject.c:_PyLong_CompactValue
Unexecuted instantiation: genobject.c:_PyLong_CompactValue
Unexecuted instantiation: fileobject.c:_PyLong_CompactValue
Unexecuted instantiation: frameobject.c:_PyLong_CompactValue
Unexecuted instantiation: funcobject.c:_PyLong_CompactValue
Unexecuted instantiation: interpolationobject.c:_PyLong_CompactValue
Unexecuted instantiation: iterobject.c:_PyLong_CompactValue
Unexecuted instantiation: odictobject.c:_PyLong_CompactValue
Unexecuted instantiation: methodobject.c:_PyLong_CompactValue
Unexecuted instantiation: namespaceobject.c:_PyLong_CompactValue
Unexecuted instantiation: _contextvars.c:_PyLong_CompactValue
Unexecuted instantiation: Python-ast.c:_PyLong_CompactValue
Unexecuted instantiation: Python-tokenize.c:_PyLong_CompactValue
Unexecuted instantiation: asdl.c:_PyLong_CompactValue
Unexecuted instantiation: assemble.c:_PyLong_CompactValue
Unexecuted instantiation: ast.c:_PyLong_CompactValue
Unexecuted instantiation: ast_preprocess.c:_PyLong_CompactValue
Unexecuted instantiation: ast_unparse.c:_PyLong_CompactValue
Unexecuted instantiation: critical_section.c:_PyLong_CompactValue
Unexecuted instantiation: crossinterp.c:_PyLong_CompactValue
Unexecuted instantiation: getcopyright.c:_PyLong_CompactValue
Unexecuted instantiation: getplatform.c:_PyLong_CompactValue
Unexecuted instantiation: getversion.c:_PyLong_CompactValue
Unexecuted instantiation: optimizer.c:_PyLong_CompactValue
Unexecuted instantiation: pathconfig.c:_PyLong_CompactValue
Unexecuted instantiation: structmember.c:_PyLong_CompactValue
Unexecuted instantiation: pegen.c:_PyLong_CompactValue
Unexecuted instantiation: pegen_errors.c:_PyLong_CompactValue
Unexecuted instantiation: parser.c:_PyLong_CompactValue
Unexecuted instantiation: buffer.c:_PyLong_CompactValue
Unexecuted instantiation: lexer.c:_PyLong_CompactValue
Unexecuted instantiation: state.c:_PyLong_CompactValue
Unexecuted instantiation: readline_tokenizer.c:_PyLong_CompactValue
Unexecuted instantiation: string_tokenizer.c:_PyLong_CompactValue
Unexecuted instantiation: utf8_tokenizer.c:_PyLong_CompactValue
Unexecuted instantiation: getcompiler.c:_PyLong_CompactValue
Unexecuted instantiation: mystrtoul.c:_PyLong_CompactValue
Unexecuted instantiation: token.c:_PyLong_CompactValue
Unexecuted instantiation: action_helpers.c:_PyLong_CompactValue
Unexecuted instantiation: string_parser.c:_PyLong_CompactValue
138
139
#define PyUnstable_Long_CompactValue _PyLong_CompactValue
140
141
142
/* --- Import/Export API -------------------------------------------------- */
143
144
typedef struct PyLongLayout {
145
    uint8_t bits_per_digit;
146
    uint8_t digit_size;
147
    int8_t digits_order;
148
    int8_t digit_endianness;
149
} PyLongLayout;
150
151
PyAPI_FUNC(const PyLongLayout*) PyLong_GetNativeLayout(void);
152
153
typedef struct PyLongExport {
154
    int64_t value;
155
    uint8_t negative;
156
    Py_ssize_t ndigits;
157
    const void *digits;
158
    // Member used internally, must not be used for other purpose.
159
    Py_uintptr_t _reserved;
160
} PyLongExport;
161
162
PyAPI_FUNC(int) PyLong_Export(
163
    PyObject *obj,
164
    PyLongExport *export_long);
165
PyAPI_FUNC(void) PyLong_FreeExport(
166
    PyLongExport *export_long);
167
168
169
/* --- PyLongWriter API --------------------------------------------------- */
170
171
typedef struct PyLongWriter PyLongWriter;
172
173
PyAPI_FUNC(PyLongWriter*) PyLongWriter_Create(
174
    int negative,
175
    Py_ssize_t ndigits,
176
    void **digits);
177
PyAPI_FUNC(PyObject*) PyLongWriter_Finish(PyLongWriter *writer);
178
PyAPI_FUNC(void) PyLongWriter_Discard(PyLongWriter *writer);
179
180
#ifdef __cplusplus
181
}
182
#endif
183
#endif /* !Py_LONGINTREPR_H */
184
#endif /* Py_LIMITED_API */