mirror of https://github.com/python/cpython
Patch #837242: id() for large ptr should return a long.
This commit is contained in:
parent
a19dc0beb1
commit
0bc2ab9a20
|
@ -333,6 +333,8 @@ booleans. The following macros are available, however.
|
||||||
The pointer value can be retrieved from the resulting value using
|
The pointer value can be retrieved from the resulting value using
|
||||||
\cfunction{PyLong_AsVoidPtr()}.
|
\cfunction{PyLong_AsVoidPtr()}.
|
||||||
\versionadded{1.5.2}
|
\versionadded{1.5.2}
|
||||||
|
\versionchanged[If the integer is larger than LONG_MAX,
|
||||||
|
a positive long integer is returned]{2.5}
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
|
||||||
\begin{cfuncdesc}{long}{PyLong_AsLong}{PyObject *pylong}
|
\begin{cfuncdesc}{long}{PyLong_AsLong}{PyObject *pylong}
|
||||||
|
@ -394,6 +396,8 @@ booleans. The following macros are available, however.
|
||||||
produce a usable \ctype{void} pointer for values created with
|
produce a usable \ctype{void} pointer for values created with
|
||||||
\cfunction{PyLong_FromVoidPtr()}.
|
\cfunction{PyLong_FromVoidPtr()}.
|
||||||
\versionadded{1.5.2}
|
\versionadded{1.5.2}
|
||||||
|
\versionchanged[For values outside 0..LONG_MAX, both signed and
|
||||||
|
unsigned integers are acccepted]{2.5}
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,10 @@ What's New in Python 2.5 alpha 2?
|
||||||
Core and builtins
|
Core and builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Patch #837242: id() of any Python object always gives a positive
|
||||||
|
number, which might be a long integer. PyLong_FromVoidPtr and
|
||||||
|
PyLong_AsVoidPtr have been changed accordingly.
|
||||||
|
|
||||||
- Python on OS X 10.3 and above now uses dlopen() (via dynload_shlib.c)
|
- Python on OS X 10.3 and above now uses dlopen() (via dynload_shlib.c)
|
||||||
to load extension modules and now provides the dl module. As a result,
|
to load extension modules and now provides the dl module. As a result,
|
||||||
sys.setdlopenflags() now works correctly on these systems. (SF patch
|
sys.setdlopenflags() now works correctly on these systems. (SF patch
|
||||||
|
|
|
@ -771,6 +771,8 @@ PyObject *
|
||||||
PyLong_FromVoidPtr(void *p)
|
PyLong_FromVoidPtr(void *p)
|
||||||
{
|
{
|
||||||
#if SIZEOF_VOID_P <= SIZEOF_LONG
|
#if SIZEOF_VOID_P <= SIZEOF_LONG
|
||||||
|
if ((long)p < 0)
|
||||||
|
return PyLong_FromUnsignedLong((unsigned long)p);
|
||||||
return PyInt_FromLong((long)p);
|
return PyInt_FromLong((long)p);
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
@ -783,7 +785,7 @@ PyLong_FromVoidPtr(void *p)
|
||||||
/* optimize null pointers */
|
/* optimize null pointers */
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
return PyInt_FromLong(0);
|
return PyInt_FromLong(0);
|
||||||
return PyLong_FromLongLong((PY_LONG_LONG)p);
|
return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)p);
|
||||||
|
|
||||||
#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
|
#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
|
||||||
}
|
}
|
||||||
|
@ -802,8 +804,10 @@ PyLong_AsVoidPtr(PyObject *vv)
|
||||||
|
|
||||||
if (PyInt_Check(vv))
|
if (PyInt_Check(vv))
|
||||||
x = PyInt_AS_LONG(vv);
|
x = PyInt_AS_LONG(vv);
|
||||||
else
|
else if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
|
||||||
x = PyLong_AsLong(vv);
|
x = PyLong_AsLong(vv);
|
||||||
|
else
|
||||||
|
x = PyLong_AsUnsignedLong(vv);
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#ifndef HAVE_LONG_LONG
|
#ifndef HAVE_LONG_LONG
|
||||||
|
@ -816,8 +820,10 @@ PyLong_AsVoidPtr(PyObject *vv)
|
||||||
|
|
||||||
if (PyInt_Check(vv))
|
if (PyInt_Check(vv))
|
||||||
x = PyInt_AS_LONG(vv);
|
x = PyInt_AS_LONG(vv);
|
||||||
else
|
else if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
|
||||||
x = PyLong_AsLongLong(vv);
|
x = PyLong_AsLongLong(vv);
|
||||||
|
else
|
||||||
|
x = PyLong_AsUnsignedLongLong(vv);
|
||||||
|
|
||||||
#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
|
#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue