On Tue, May 11, 2010 at 2:16 PM, Robert Bradshaw
<[email protected]> wrote:
> On May 10, 2010, at 5:27 PM, Paul Harrison wrote:
>
>> Hello,
>>
>> I found a problem in Cython 12.1 (with Python 2.6.1). If you try to
>> compile the following:
>>
>> str1 = 'a'
>> str2 = 'a\n'
>>
>> It produces the following code, which will not compile:
>>
>> static char __pyx_k__a[] = "a";
>> static char __pyx_k__a
>> [] = "a\n";
>
> I thought C was whitespace agnostic. What compiler are you using? In
> any case, it's probably a trivial fix.
>

The problem is the duplicated name __pyx_k__a. The C compiler (gcc)
ignores the newline, which is probably why this hasn't caused a
problem in the past. You need the two similar string constants in
order for there to be a problem.


>> Also, I find I can no longer cast str to char* (again with Python
>> 2.6.1). The documentation seems to indicate this should only be a
>> problem in Python 3, or have I missed something?
>
>
> Cython is super strict about this right now even if you're only using
> Py2 (too strict in my opinion, but that's a whole can of worms there
> that we're not going to re-visit at this time...) Cast to an object
> first, i.e. if x is a str, do
>
>     char* s = <object>x
>

Ah, thanks. This fixes the error, which only occurs when the variable
is declared to be a str. I take it the correct idiom is to do
everything with bytes.

> (Short of type checking, is there a good way to encode in 3.x and
> still allow str in 2.x?) Also, you might consider whether it is worth
> declaring your variable to be of type str--are you using this fact
> anywhere?
>

I was hoping for a speed increase from declaring it as str so that I
could get its length and contents quickly. This worked in Cython 0.11,
but stopped working when I upgraded to 0.12.1.


Thanks for the quick answer.

-- 
Paul Harrison

Victorian Bioinformatics Consortium / Monash University
[email protected]
jabber [email protected]
http://www.logarithmic.net/pfh/
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to