Commit bc297512 authored by Robert Bradshaw's avatar Robert Bradshaw

Fix T284, cdef list setitem

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