Repository navigation
gh-120389: Add PyLong_FromInt64() and PyLong_AsInt64() - #120390
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.
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 <[email protected]>
Co-authored-by: Petr Viktorin <[email protected]>


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