[Python-checkins] r45239 - in python/trunk: Doc/api/concrete.tex Misc/NEWS Objects/longobject.c
martin.v.loewis
python-checkins at python.org
Mon Apr 10 22:28:17 CEST 2006
Author: martin.v.loewis
Date: Mon Apr 10 22:28:17 2006
New Revision: 45239
Modified:
python/trunk/Doc/api/concrete.tex
python/trunk/Misc/NEWS
python/trunk/Objects/longobject.c
Log:
Patch #837242: id() for large ptr should return a long.
Modified: python/trunk/Doc/api/concrete.tex
==============================================================================
--- python/trunk/Doc/api/concrete.tex (original)
+++ python/trunk/Doc/api/concrete.tex Mon Apr 10 22:28:17 2006
@@ -333,7 +333,9 @@
The pointer value can be retrieved from the resulting value using
\cfunction{PyLong_AsVoidPtr()}.
\versionadded{1.5.2}
-\end{cfuncdesc}
+ \versionchanged[If the integer is larger than LONG_MAX,
+ a positive long integer is returned]{2.5}
+ \end{cfuncdesc}
\begin{cfuncdesc}{long}{PyLong_AsLong}{PyObject *pylong}
Return a C \ctype{long} representation of the contents of
@@ -394,6 +396,8 @@
produce a usable \ctype{void} pointer for values created with
\cfunction{PyLong_FromVoidPtr()}.
\versionadded{1.5.2}
+ \versionchanged[For values outside 0..LONG_MAX, both signed and
+ unsigned integers are acccepted]{2.5}
\end{cfuncdesc}
Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS (original)
+++ python/trunk/Misc/NEWS Mon Apr 10 22:28:17 2006
@@ -12,6 +12,10 @@
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)
to load extension modules and now provides the dl module. As a result,
sys.setdlopenflags() now works correctly on these systems. (SF patch
Modified: python/trunk/Objects/longobject.c
==============================================================================
--- python/trunk/Objects/longobject.c (original)
+++ python/trunk/Objects/longobject.c Mon Apr 10 22:28:17 2006
@@ -771,6 +771,8 @@
PyLong_FromVoidPtr(void *p)
{
#if SIZEOF_VOID_P <= SIZEOF_LONG
+ if ((long)p < 0)
+ return PyLong_FromUnsignedLong((unsigned long)p);
return PyInt_FromLong((long)p);
#else
@@ -783,7 +785,7 @@
/* optimize null pointers */
if (p == NULL)
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 */
}
@@ -802,8 +804,10 @@
if (PyInt_Check(vv))
x = PyInt_AS_LONG(vv);
- else
+ else if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
x = PyLong_AsLong(vv);
+ else
+ x = PyLong_AsUnsignedLong(vv);
#else
#ifndef HAVE_LONG_LONG
@@ -816,8 +820,10 @@
if (PyInt_Check(vv))
x = PyInt_AS_LONG(vv);
- else
+ else if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
x = PyLong_AsLongLong(vv);
+ else
+ x = PyLong_AsUnsignedLongLong(vv);
#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
More information about the Python-checkins
mailing list