summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArmin Rigo <arigo@tunes.org>2013-11-09 09:17:43 +0100
committerArmin Rigo <arigo@tunes.org>2013-11-09 09:17:43 +0100
commita9b68433d7a0ee555cec57ecd78d6cf035712090 (patch)
tree042acf10d43ac4a4cd844443412d3bbb3608a572
parent9a35ec71a2a269c96895cffd0b24dd073ee637b4 (diff)
downloadcffi-a9b68433d7a0ee555cec57ecd78d6cf035712090.tar.gz
Support "number + pointer" too, like in C
-rw-r--r--c/_cffi_backend.c11
-rw-r--r--c/test_c.py1
2 files changed, 10 insertions, 2 deletions
diff --git a/c/_cffi_backend.c b/c/_cffi_backend.c
index d73793a..c851279 100644
--- a/c/_cffi_backend.c
+++ b/c/_cffi_backend.c
@@ -2054,8 +2054,15 @@ _cdata_add_or_sub(PyObject *v, PyObject *w, int sign)
CDataObject *cd;
CTypeDescrObject *ctptr;
- if (!CData_Check(v))
- goto not_implemented;
+ if (!CData_Check(v)) {
+ PyObject *swap;
+ assert(CData_Check(w));
+ if (sign != 1)
+ goto not_implemented;
+ swap = v;
+ v = w;
+ w = swap;
+ }
i = PyNumber_AsSsize_t(w, PyExc_OverflowError);
if (i == -1 && PyErr_Occurred())
diff --git a/c/test_c.py b/c/test_c.py
index 5fbff8d..d5ffe81 100644
--- a/c/test_c.py
+++ b/c/test_c.py
@@ -553,6 +553,7 @@ def test_array_add():
assert repr(a) == "<cdata 'int[3][5]' owning %d bytes>" % (
3*5*size_of_int(),)
assert repr(a + 0).startswith("<cdata 'int(*)[5]' 0x")
+ assert 0 + a == a + 0 != 1 + a == a + 1
assert repr(a[0]).startswith("<cdata 'int[5]' 0x")
assert repr((a + 0)[0]).startswith("<cdata 'int[5]' 0x")
assert repr(a[0] + 0).startswith("<cdata 'int *' 0x")