[Cython] Assignments in cdefs

Dag Sverre Seljebotn dagss at student.matnat.uio.no
Sun Jul 20 14:51:52 CEST 2008


Just want to inform you about some particularily intrusive changes on
cdef variables (see the latest dagss changes). I'll discuss it 
thoroughly because it is a nice example of reducing the number of 
variable assignment cases (more on that in another post). I'd really 
like to have this change go in, but it is not trivial and I can 
understand it if you resist it.

1) Bug fix: We generated erronous C code for cdef assignments in class 
bodies, I now raise a compiler error on this.

2) Basically I turn "cdef int x = 4" into "cdef int x; x = 4".

3) Also I added the "first" attribute to SingleAssignmentNode to 
generalize the concept of first assignment (which takes care of optimal 
refcounting). Optimizing first assignments in the more general case is 
now as simple as running through the tree and setting that attribute 
(after analysis, prior to generation), though I didn't do this. This 
kind of clashes with Robert's flow control endaveours, but I feel that 
the beginnings of flow control is overkill for this specific case, a 
single pass with a transform should do it...

Results:
- C code looks exactly like before (I diffed it), except for comments.
- The buffer just started working without any extra efforts (and it made 
it very easy to optimize some refcounting for buffers, though that 
needed five lines). Of course, this is why I bothered.
- No CVarDefNode in the tree after analyse_declarations

As for the code:
- Removed about 30 lines and added about 40. However I do feel that the 
transform code is less "copy-and-paste-with-modifications" and that new 
code is more obvious to beginners (Stefan can pull out his article URL 
by now :-)

I'll follow up with another post to discuss assignments in general.


-- 
Dag Sverre



More information about the Cython-dev mailing list