diff options
author | Victor Stinner <vstinner@python.org> | 2023-09-01 07:13:07 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-01 07:13:07 (GMT) |
commit | 3edcf743e88b4ac4431d4b0f3a66048628cf5c70 (patch) | |
tree | ce31b780be3ef206e009315d2c0d7d5f70d4fe8d | |
parent | c1e2f3b2f70b8a72ea7e1bf792addf62a94ae65d (diff) | |
download | cpython-3edcf743e88b4ac4431d4b0f3a66048628cf5c70.zip cpython-3edcf743e88b4ac4431d4b0f3a66048628cf5c70.tar.gz cpython-3edcf743e88b4ac4431d4b0f3a66048628cf5c70.tar.bz2 |
gh-106320: Remove private _PyLong_Sign() (#108743)
Move the private _PyLong_Sign() and _PyLong_NumBits() functions
to the internal C API (pycore_long.h).
Modules/_testcapi/long.c now uses the internal C API.
-rw-r--r-- | Include/cpython/longobject.h | 15 | ||||
-rw-r--r-- | Include/internal/pycore_long.h | 17 | ||||
-rw-r--r-- | Modules/_io/_iomodule.c | 1 | ||||
-rw-r--r-- | Modules/_testcapi/long.c | 5 |
4 files changed, 23 insertions, 15 deletions
diff --git a/Include/cpython/longobject.h b/Include/cpython/longobject.h index 32c40b0..5783417 100644 --- a/Include/cpython/longobject.h +++ b/Include/cpython/longobject.h @@ -4,21 +4,6 @@ PyAPI_FUNC(PyObject*) PyLong_FromUnicodeObject(PyObject *u, int base); -/* _PyLong_Sign. Return 0 if v is 0, -1 if v < 0, +1 if v > 0. - v must not be NULL, and must be a normalized long. - There are no error cases. -*/ -PyAPI_FUNC(int) _PyLong_Sign(PyObject *v); - -/* _PyLong_NumBits. Return the number of bits needed to represent the - absolute value of a long. For example, this returns 1 for 1 and -1, 2 - for 2 and -2, and 2 for 3 and -3. It returns 0 for 0. - v must not be NULL, and must be a normalized long. - (size_t)-1 is returned and OverflowError set if the true result doesn't - fit in a size_t. -*/ -PyAPI_FUNC(size_t) _PyLong_NumBits(PyObject *v); - PyAPI_FUNC(int) PyUnstable_Long_IsCompact(const PyLongObject* op); PyAPI_FUNC(Py_ssize_t) PyUnstable_Long_CompactValue(const PyLongObject* op); diff --git a/Include/internal/pycore_long.h b/Include/internal/pycore_long.h index c411ac6..3c253ed 100644 --- a/Include/internal/pycore_long.h +++ b/Include/internal/pycore_long.h @@ -58,6 +58,23 @@ PyAPI_FUNC(PyLongObject*) _PyLong_FromDigits( Py_ssize_t digit_count, digit *digits); +// _PyLong_Sign. Return 0 if v is 0, -1 if v < 0, +1 if v > 0. +// v must not be NULL, and must be a normalized long. +// There are no error cases. +// +// Export for '_pickle' shared extension. +PyAPI_FUNC(int) _PyLong_Sign(PyObject *v); + +// _PyLong_NumBits. Return the number of bits needed to represent the +// absolute value of a long. For example, this returns 1 for 1 and -1, 2 +// for 2 and -2, and 2 for 3 and -3. It returns 0 for 0. +// v must not be NULL, and must be a normalized long. +// (size_t)-1 is returned and OverflowError set if the true result doesn't +// fit in a size_t. +// +// Export for 'math' shared extension. +PyAPI_FUNC(size_t) _PyLong_NumBits(PyObject *v); + /* runtime lifecycle */ diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c index cc84452..173f5b5 100644 --- a/Modules/_io/_iomodule.c +++ b/Modules/_io/_iomodule.c @@ -10,6 +10,7 @@ #include "Python.h" #include "pycore_abstract.h" // _PyNumber_Index() #include "pycore_initconfig.h" // _PyStatus_OK() +#include "pycore_long.h" // _PyLong_Sign() #include "pycore_pyerrors.h" // _PyErr_ChainExceptions1() #include "pycore_pystate.h" // _PyInterpreterState_GET() diff --git a/Modules/_testcapi/long.c b/Modules/_testcapi/long.c index 6b74e0a..c1d2d42 100644 --- a/Modules/_testcapi/long.c +++ b/Modules/_testcapi/long.c @@ -1,5 +1,10 @@ +#ifndef Py_BUILD_CORE_BUILTIN +# define Py_BUILD_CORE_MODULE 1 +#endif + #include "parts.h" #include "clinic/long.c.h" +#include "pycore_long.h" // _PyLong_Sign() /*[clinic input] module _testcapi |