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

Reply via email to