| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
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. |
Sorry, something went wrong.
PyLong_ToUInt32() and PyLong_ToUInt64() can now use the __index__() method if the object has the method.
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.
Sorry, something went wrong.
I grouped functions by pairs in the documentation. |
Sorry, something went wrong.
|
The formatting in the docs preview looks good 👍 |
Sorry, something went wrong.
|
Calling __index__ can release the GIL and make values saved in C variables (borrowed references, the size of a list, etc) invalid. Existing code can rely on atomicity of PyLong_AsUnsignedLong(), so calling __index__ in it is an unsafe change. |
Sorry, something went wrong.
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:
|
Sorry, something went wrong.
|
I created capi-workgroup/decisions#32 "Add PyLong_FromInt64() and PyLong_ToInt64()" in the C API WG Decisions project. |
Sorry, something went wrong.
There was a problem hiding this comment.
LGTM.
Sorry, something went wrong.
| 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.
Sorry, something went wrong.
There was a problem hiding this comment.
I prefer to reuse <limits.h> C constants to avoid any typo.
Sorry, something went wrong.
|
@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 __index__() method and functions are called "As" (instead of "To"). |
Sorry, something went wrong.
There was a problem hiding this comment.
LGTM, but check_long_asunsignedint is now superseded by check_long_asint.
Sorry, something went wrong.
Reuse check_long_asint().
I removed check_long_asunsignedint() to reuse check_long_asint(). |
Sorry, something went wrong.
Co-authored-by: Petr Viktorin <encukou@gmail.com>
Co-authored-by: Petr Viktorin <encukou@gmail.com>
| Back | FazBrowse Home | New Git URL |
Add new functions to convert C <stdint.h> numbers from/to Python int: