Robert Bradshaw, 12.08.2012 09:00: > On Sat, Aug 11, 2012 at 1:19 PM, Stefan Behnel wrote: >> I ran into a couple of problems with the new C++ STL integration, just >> dumping them here for now. >> >> Invalid C code when using a stack allocated C++ vector inside of a >> generator, also lacking type conversion utility code: >> >> https://github.com/cython/cython/commit/d0a8e24720c3ed4e723b5a1b204bf375780f51bd > > The problem here is that utility code attached at this stage of the > pipeline gets ignored. In particular, we get to > https://github.com/cython/cython/blob/a7c689c10eea66f9fe384d7bc324a7aa50975f9d/Cython/Compiler/UtilityCode.py#L130 > which I am at a loss to explain.
I debugged through this a bit and it seems to me that the main problem is that create_from_py_utility_code() is called too late. Currently, it's the code generation phase that calls it (Node.py, around line 2945). That's ok as long as it only generates C code, but it's way too late for Cython utility code at that point. IIRC, the reason why we call it so late is that type conversions can change during several pipeline phases, even way after type analysis, and we want to make sure that we only serialise utility code that is really needed. Sadly, that applies to Cython utility code equally well. Not sure what the right fix it here. I mean, we could call it earlier, even during type analysis, but that might let us generate code that is never needed, thus triggering a couple of C compiler warnings. Maybe that's acceptable at this point (better too much code than incomplete code). We could also try to special case Cython utility code at some place, call create_from_py_utility_code() early and prevent all other types of utility code objects from being injecting into the env at that time, before the code generation phase. Something like that. Stefan _______________________________________________ cython-devel mailing list cython-devel@python.org http://mail.python.org/mailman/listinfo/cython-devel