-
-
Notifications
You must be signed in to change notification settings - Fork 30.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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: