On Thu, Apr 16, 2009 at 11:54 PM, Kurt Smith <[email protected]> wrote:


>
> See
>
> http://trac.cython.org/cython_trac/ticket/284
>

Here's a testcase.

diff -r 6fc636aebe32 -r 1097ad309db6 tests/run/cdef_setitem_T284.pyx
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/run/cdef_setitem_T284.pyx   Fri Apr 17 00:15:48 2009 -0500
@@ -0,0 +1,17 @@
+__doc__ = u'''
+>>> no_cdef()
+>>> with_cdef()
+'''
+def no_cdef():
+    lst = range(11)
+    ob = 10L
+    lst[ob] = -10
+    dd = {}
+    dd[ob] = -10
+
+def with_cdef():
+    cdef list lst = range(11)
+    ob = 10L
+    lst[ob] = -10
+    cdef dict dd = {}
+    dd[ob] = -10

And here's a trivial fix -- it seems hacky and if there's a better way
to do it please say so...

diff -r 6fc636aebe32 -r 1097ad309db6 Cython/Compiler/ExprNodes.py
--- a/Cython/Compiler/ExprNodes.py      Thu Apr 16 19:10:51 2009 -0700
+++ b/Cython/Compiler/ExprNodes.py      Fri Apr 17 00:15:48 2009 -0500
@@ -1858,6 +1858,7 @@ class IndexNode(ExprNode):
                 function = "PyDict_SetItem"
             elif self.base.type is list_type:
                 function = "PyList_SetItem"
+                index_code = "PyInt_AsSsize_t(%s)" % index_code
             # don't use PyTuple_SetItem(), as we'd normally get a
             # TypeError when changing a tuple, while PyTuple_SetItem()
             # would allow updates
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to