On Feb 22, 2010, at 12:11 PM, Nick Joyce wrote:

> I have been using Cython for some time to develop the PyAMF c- 
> extensions and have found it to be an awesome project!

Thanks!

> Recently, I discovered Python type declarations e.g.:
>
> def object foo():
>    cdef dict x = {}
>
>    x['foo'] = 'bar'
>
>    return x['foo']
>
> The current PyAMF code is littered with PyDict_* calls so I am in  
> the process of refactoring it to make use of this syntactic sugar.
>
> When I generate the C code (using Cython 0.12.1) for the above  
> function, the resulting C code will use PyDict_SetItem for the  
> assignment statement but will use PyObject_GetItem on line 6. I have  
> attached a snippet of the generated C [pyobject_getitem.c].
>
> Would it make more sense to use PyDict_SetItem in this case? I have  
> included a patch for this case [getitem.diff] if its useful. I  
> haven't developed a test for this change, some pointers as to the  
> correct location would be useful if that is desirable.

Yes, we would certainly like to do this. The fix isn't quite this  
simple though, as we need to make sure x is not None before caling  
PyDict_GetItem on it, NULL is returned if the key is not found  
(without raising an error), and the returned reference is borrowed  
(which changes reference counting semantics).

- Robert

_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to