From 4f043cf34a8001c071644eb8c89dc7d43e86b62a Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Wed, 11 Jan 2012 15:01:39 +0000 Subject: Use native 'int' (whatever that means) for variant_level etc. This reverts the Python 2 API to be in terms of PyInt, leaving the Python 3 API in terms of PyLong (which is called 'int' in Python code). --- NEWS | 3 --- PY3PORT.rst | 2 -- _dbus_bindings/abstract.c | 12 ++++++------ _dbus_bindings/bytes.c | 4 ++-- _dbus_bindings/conn-methods.c | 2 +- _dbus_bindings/dbus_bindings-internal.h | 6 ++++++ _dbus_bindings/message-get-args.c | 2 +- _dbus_bindings/message.c | 2 +- 8 files changed, 17 insertions(+), 16 deletions(-) diff --git a/NEWS b/NEWS index b720e30..9135e59 100644 --- a/NEWS +++ b/NEWS @@ -15,9 +15,6 @@ API changes: * The repr() of every dbus-python object is now unicode. -* Some values which were ints (mainly variant_level attributes) - are now longs under Python 2. - * The Python 3 API is not the same as the Python 2 API; see PY3PORT.rst for details. diff --git a/PY3PORT.rst b/PY3PORT.rst index 9e8c306..31bb9d8 100644 --- a/PY3PORT.rst +++ b/PY3PORT.rst @@ -37,8 +37,6 @@ unchanged. There are a few changes you'll notice in Python 2 though: - The minimum supported Python 2 version is 2.6. - All object reprs are unicodes. This change was made because it greatly simplifies the implementation and cross-compatibility with Python 3. - - Some values which were ints are now longs. Primarily, this affects the - type of the `variant_level` attributes. - Some exception strings have changed. - `MethodCallMessage` and `SignalMessage` objects have better reprs now. diff --git a/_dbus_bindings/abstract.c b/_dbus_bindings/abstract.c index 1e2fa25..2b31d43 100644 --- a/_dbus_bindings/abstract.c +++ b/_dbus_bindings/abstract.c @@ -61,7 +61,7 @@ dbus_py_variant_level_get(PyObject *obj) */ return 0; } - variant_level = PyLong_AsLong(vl_obj); + variant_level = NATIVEINT_ASLONG(vl_obj); if (variant_level == -1 && PyErr_Occurred()) { /* variant_level < 0 can never be inserted into the dictionary; see * dbus_py_variant_level_set() below. The semantics of setting @@ -92,7 +92,7 @@ dbus_py_variant_level_set(PyObject *obj, long variant_level) } } else { - PyObject *vl_obj = PyLong_FromLong(variant_level); + PyObject *vl_obj = NATIVEINT_FROMLONG(variant_level); if (!vl_obj) { Py_CLEAR(key); return FALSE; @@ -148,7 +148,7 @@ dbus_py_variant_level_getattro(PyObject *obj, PyObject *name) Py_CLEAR(key); if (!value) - return PyLong_FromLong(0); + return NATIVEINT_FROMLONG(0); Py_INCREF(value); return value; } @@ -444,7 +444,7 @@ DBusPythonBytes_tp_repr(PyObject *self) Py_CLEAR(parent_repr); return NULL; } - variant_level = PyLong_AsLong(vl_obj); + variant_level = NATIVEINT_ASLONG(vl_obj); Py_CLEAR(vl_obj); if (variant_level == -1 && PyErr_Occurred()) { Py_CLEAR(parent_repr); @@ -566,7 +566,7 @@ DBusPythonString_tp_repr(PyObject *self) Py_CLEAR(parent_repr); return NULL; } - variant_level = PyLong_AsLong(vl_obj); + variant_level = NATIVEINT_ASLONG(vl_obj); Py_CLEAR(vl_obj); if (variant_level == -1 && PyErr_Occurred()) { Py_CLEAR(parent_repr); @@ -688,7 +688,7 @@ DBusPythonLong_tp_repr(PyObject *self) Py_CLEAR(parent_repr); return NULL; } - variant_level = PyLong_AsLong(vl_obj); + variant_level = NATIVEINT_ASLONG(vl_obj); Py_CLEAR(vl_obj); if (variant_level < 0 && PyErr_Occurred()) { Py_CLEAR(parent_repr); diff --git a/_dbus_bindings/bytes.c b/_dbus_bindings/bytes.c index e053f43..9914319 100644 --- a/_dbus_bindings/bytes.c +++ b/_dbus_bindings/bytes.c @@ -92,7 +92,7 @@ Byte_new(PyTypeObject *cls, PyObject *args, PyObject *kwargs) if (PyBytes_GET_SIZE(obj) != 1) { goto bad_arg; } - obj = PyLong_FromLong((unsigned char)(PyBytes_AS_STRING(obj)[0])); + obj = NATIVEINT_FROMLONG((unsigned char)(PyBytes_AS_STRING(obj)[0])); if (!obj) goto bad_arg; } @@ -147,7 +147,7 @@ bad_range: static PyObject * Byte_tp_str(PyObject *self) { - long i = PyLong_AsLong(self); + long i = NATIVEINT_ASLONG(self); unsigned char str[2] = { 0, 0 }; if (i == -1 && PyErr_Occurred()) diff --git a/_dbus_bindings/conn-methods.c b/_dbus_bindings/conn-methods.c index a5390c5..555c49c 100644 --- a/_dbus_bindings/conn-methods.c +++ b/_dbus_bindings/conn-methods.c @@ -564,7 +564,7 @@ Connection_get_unix_fd (Connection *self, PyObject *unused UNUSED) ok = dbus_connection_get_unix_fd (self->conn, &fd); Py_END_ALLOW_THREADS if (!ok) Py_RETURN_NONE; - return PyLong_FromLong(fd); + return NATIVEINT_FROMLONG(fd); } PyDoc_STRVAR(Connection_get_peer_unix_user__doc__, diff --git a/_dbus_bindings/dbus_bindings-internal.h b/_dbus_bindings/dbus_bindings-internal.h index 48f4222..8069666 100644 --- a/_dbus_bindings/dbus_bindings-internal.h +++ b/_dbus_bindings/dbus_bindings-internal.h @@ -77,10 +77,16 @@ static inline int type##_CheckExact (PyObject *o) \ (PyUnicode_Check(obj) ? NULL : PyBytes_AS_STRING(obj)) #ifdef PY3 +#define NATIVEINT_TYPE (PyLong_Type) +#define NATIVEINT_FROMLONG(x) (PyLong_FromLong(x)) +#define NATIVEINT_ASLONG(x) (PyLong_AsLong(x)) #define NATIVESTR_TYPE (PyUnicode_Type) #define NATIVESTR_CHECK(obj) (PyUnicode_Check(obj)) #define NATIVESTR_FROMSTR(obj) (PyUnicode_FromString(obj)) #else +#define NATIVEINT_TYPE (PyInt_Type) +#define NATIVEINT_FROMLONG(x) (PyInt_FromLong(x)) +#define NATIVEINT_ASLONG(x) (PyInt_AsLong(x)) #define NATIVESTR_TYPE (PyBytes_Type) #define NATIVESTR_CHECK(obj) (PyBytes_Check(obj)) #define NATIVESTR_FROMSTR(obj) (PyBytes_FromString(obj)) diff --git a/_dbus_bindings/message-get-args.c b/_dbus_bindings/message-get-args.c index b9be821..ceea3a4 100644 --- a/_dbus_bindings/message-get-args.c +++ b/_dbus_bindings/message-get-args.c @@ -217,7 +217,7 @@ _message_iter_get_pyobject(DBusMessageIter *iter, if (variant_level > 0 && type != DBUS_TYPE_VARIANT) { PyObject *variant_level_int; - variant_level_int = PyLong_FromLong(variant_level); + variant_level_int = NATIVEINT_FROMLONG(variant_level); if (!variant_level_int) { return NULL; } diff --git a/_dbus_bindings/message.c b/_dbus_bindings/message.c index 32bb84a..ded8fe1 100644 --- a/_dbus_bindings/message.c +++ b/_dbus_bindings/message.c @@ -388,7 +388,7 @@ static PyObject * Message_get_type(Message *self, PyObject *unused UNUSED) { if (!self->msg) return DBusPy_RaiseUnusableMessage(); - return PyLong_FromLong(dbus_message_get_type(self->msg)); + return NATIVEINT_FROMLONG(dbus_message_get_type(self->msg)); } PyDoc_STRVAR(Message_get_serial__doc__, -- cgit v1.2.1