Kaydet (Commit) 70128a1b authored tarafından Tim Peters's avatar Tim Peters

PyLong_{As, From}VoidPtr: cleanup, replacing assumptions in comments with

#if/#error constructs.
üst 918f2c72
......@@ -508,18 +508,22 @@ PyLong_AsDouble(PyObject *vv)
PyObject *
PyLong_FromVoidPtr(void *p)
{
#if SIZEOF_VOID_P == SIZEOF_LONG
#if SIZEOF_VOID_P <= SIZEOF_LONG
return PyInt_FromLong((long)p);
#else
#ifndef HAVE_LONG_LONG
# error "PyLong_FromVoidPtr: sizeof(void*) > sizeof(long), but no long long"
#endif
#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
# error "PyLong_FromVoidPtr: sizeof(LONG_LONG) < sizeof(void*)"
#endif
/* optimize null pointers */
if ( p == NULL )
if (p == NULL)
return PyInt_FromLong(0);
/* we can assume that HAVE_LONG_LONG is true. if not, then the
configuration process should have bailed (having big pointers
without long longs seems non-sensical) */
return PyLong_FromLongLong((LONG_LONG)p);
#endif /* SIZEOF_VOID_P == SIZEOF_LONG */
#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
}
/* Get a C pointer from a long object (or an int object in some cases) */
......@@ -531,25 +535,29 @@ PyLong_AsVoidPtr(PyObject *vv)
then the PyLong_AsLong*() functions will raise the exception:
PyExc_SystemError, "bad argument to internal function"
*/
#if SIZEOF_VOID_P == SIZEOF_LONG
#if SIZEOF_VOID_P <= SIZEOF_LONG
long x;
if ( PyInt_Check(vv) )
if (PyInt_Check(vv))
x = PyInt_AS_LONG(vv);
else
x = PyLong_AsLong(vv);
#else
/* we can assume that HAVE_LONG_LONG is true. if not, then the
configuration process should have bailed (having big pointers
without long longs seems non-sensical) */
#ifndef HAVE_LONG_LONG
# error "PyLong_AsVoidPtr: sizeof(void*) > sizeof(long), but no long long"
#endif
#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
# error "PyLong_AsVoidPtr: sizeof(LONG_LONG) < sizeof(void*)"
#endif
LONG_LONG x;
if ( PyInt_Check(vv) )
if (PyInt_Check(vv))
x = PyInt_AS_LONG(vv);
else
x = PyLong_AsLongLong(vv);
#endif /* SIZEOF_VOID_P == SIZEOF_LONG */
#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
if (x == -1 && PyErr_Occurred())
return NULL;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment