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
