Commit bc297512 authored by Robert Bradshaw's avatar Robert Bradshaw

Fix T284, cdef list setitem

parent 8cc95d98
...@@ -1856,14 +1856,13 @@ class IndexNode(ExprNode): ...@@ -1856,14 +1856,13 @@ class IndexNode(ExprNode):
index_code = self.index.py_result() index_code = self.index.py_result()
if self.base.type is dict_type: if self.base.type is dict_type:
function = "PyDict_SetItem" function = "PyDict_SetItem"
elif self.base.type is list_type: # It would seem that we could specalized lists/tuples, but that
function = "PyList_SetItem" # shouldn't happen here.
# don't use PyTuple_SetItem(), as we'd normally get a # Both PyList_SetItem PyTuple_SetItem and a Py_ssize_t as input,
# TypeError when changing a tuple, while PyTuple_SetItem() # not a PyObject*, and bad conversion here would give the wrong
# would allow updates # exception. Also, tuples are supposed to be immutable, and raise
# # TypeErrors when trying to set their entries (PyTuple_SetItem
#elif self.base.type is tuple_type: # is for creating new tuples from).
# function = "PyTuple_SetItem"
else: else:
function = "PyObject_SetItem" function = "PyObject_SetItem"
code.putln( code.putln(
......
...@@ -14,4 +14,3 @@ large_consts_T237 ...@@ -14,4 +14,3 @@ large_consts_T237
bad_c_struct_T252 bad_c_struct_T252
missing_baseclass_in_predecl_T262 missing_baseclass_in_predecl_T262
ifelseexpr_T267 ifelseexpr_T267
cdef_setitem_T284
__doc__ = u''' __doc__ = u'''
>>> no_cdef() >>> no_cdef()
>>> with_cdef() >>> with_cdef()
>>> test_list(range(11), -2, None)
[0, 1, 2, 3, 4, 5, 6, 7, 8, None, 10]
>>> test_list(range(11), "invalid index", None)
Traceback (most recent call last):
...
TypeError: list indices must be integers
''' '''
def no_cdef(): def no_cdef():
lst = range(11) lst = range(11)
...@@ -15,3 +21,7 @@ def with_cdef(): ...@@ -15,3 +21,7 @@ def with_cdef():
lst[ob] = -10 lst[ob] = -10
cdef dict dd = {} cdef dict dd = {}
dd[ob] = -10 dd[ob] = -10
def test_list(list L, object i, object a):
L[i] = a
return L
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