Bjarke Roune wrote: > There seems to be no better way to report issues in Cython than send > it to someone on the project (I suggest a better way be made that > doesn't require signing up for something). Here you go.
It is to avoid spam (both on trac and the mailing list). Anyway, thanks for reporting. See below. > On Mon, Jun 29, 2009 at 5:35 PM, <[email protected]> wrote: >> You are not allowed to post to this mailing list, and your message has >> been automatically rejected. If you think that your messages are >> being rejected in error, contact the mailing list owner at >> [email protected]. >> >> >> >> ---------- Forwarded message ---------- >> From: Bjarke Roune <[email protected]> >> To: [email protected] >> Date: Mon, 29 Jun 2009 17:31:16 +0200 >> Subject: Surprise: A bool isn't a bool >> I was wrapping a C++ function in Cython, and ran into a mysterious >> segmentation fault, and the cause turned out to be quite a trap for >> beginning Cython programmers wrapping C++ libraries. Let's say there >> was a function like this: >> >> bool foo() { >> return true; >> } >> >> I then declared it in Cython as >> >> cdef extern from "bar.h": >> bool foo() >> >> and I used the function in code such as >> >> if (foo()): >> print "baz" >> >> This crashed my program with a segmentation violation and no explanation. >> >> After a while of looking through my C++ code trying to find the >> pointer error, I realized that a C++ bool is not a Cython bool, and >> that since a Cython bool is an object, mismatching the two can lead to >> a memory error. I replaced bool with bint and everything was fine >> (though I wonder if Cython ever puts anything other than 0 and 1 into >> a bint, since only 0 and 1 are valid values for a C++ bool). >> >> It is surprising and confusing to a beginning Cython user such as me >> that a bool isn't a bool, and if there is any way to issue some sort >> of warning about mismatching a C++ bool with a Cython bool, I think >> that would be a good idea. Indeed. The question is whether it is possible to find such a way. Perhaps disallow "bool" in cdef extern functions? Although that would add an unecesarry typecheck if a C library in fact did return a Python boolean object... (like many C functions in Python's standard library might). -- Dag Sverre _______________________________________________ Cython-dev mailing list [email protected] http://codespeak.net/mailman/listinfo/cython-dev
