gh-120389: Add PyLong_FromInt64() and PyLong_AsInt64()#120390
gh-120389: Add PyLong_FromInt64() and PyLong_AsInt64()#120390vstinner merged 12 commits intopython:mainfrom
Conversation
93e27a1 to
684360e
Compare
Add new functions to convert C <stdint.h> numbers from/to Python int: * PyLong_FromInt32() * PyLong_FromUInt32() * PyLong_FromInt64() * PyLong_FromUInt64() * PyLong_ToInt32() * PyLong_ToUInt32() * PyLong_ToInt64() * PyLong_ToUInt64()
|
This PR is now ready for review. |
PyLong_ToUInt32() and PyLong_ToUInt64() can now use the __index__() method if the object has the method.
zooba
left a comment
There was a problem hiding this comment.
LGTM. Would like it if we don't have to have docs like "like this other function", but if that's the best we can do then I'll survive.
I grouped functions by pairs in the documentation. |
|
The formatting in the docs preview looks good 👍 |
|
Calling |
This PR doesn't change PyLong_AsUnsignedLong(). Are you referring to code replacing PyLong_AsUnsignedLong() with one of these functions?
For me, it's strange that signed and unsigned integers are treated diffferently. I would like to treat them the same. The GIL issue can be mentioned in the doc? For example:
|
|
I created capi-workgroup/decisions#32 "Add PyLong_FromInt64() and PyLong_ToInt64()" in the C API WG Decisions project. |
| PyModule_AddObject(m, "INT32_MIN", PyLong_FromInt32(INT32_MIN)); | ||
| PyModule_AddObject(m, "INT32_MAX", PyLong_FromInt32(INT32_MAX)); | ||
| PyModule_AddObject(m, "UINT32_MAX", PyLong_FromUInt32(UINT32_MAX)); | ||
| PyModule_AddObject(m, "INT64_MIN", PyLong_FromInt64(INT64_MIN)); | ||
| PyModule_AddObject(m, "INT64_MAX", PyLong_FromInt64(INT64_MAX)); | ||
| PyModule_AddObject(m, "UINT64_MAX", PyLong_FromUInt64(UINT64_MAX)); |
There was a problem hiding this comment.
This is not needed. You can define them in the Python code as INT32_MAX = 2**31 - 1 etc.
There was a problem hiding this comment.
I prefer to reuse <limits.h> C constants to avoid any typo.
|
@serhiy-storchaka @zooba @encukou: Would you mind to review the updated PR? I updated the PR to the API approved the C API WG. It now uses the |
serhiy-storchaka
left a comment
There was a problem hiding this comment.
LGTM, but check_long_asunsignedint is now superseded by check_long_asint.
Reuse check_long_asint().
I removed check_long_asunsignedint() to reuse check_long_asint(). |
Co-authored-by: Petr Viktorin <encukou@gmail.com>
Co-authored-by: Petr Viktorin <encukou@gmail.com>


Add new functions to convert C <stdint.h> numbers from/to Python int: