On Wed, Oct 14, 2009 at 3:44 PM, Dag Sverre Seljebotn
<[email protected]> wrote:
> Lisandro Dalcin wrote:
>> On Wed, Oct 14, 2009 at 2:26 PM, Stefan Behnel <[email protected]> wrote:
>>> Lisandro Dalcin wrote:
>>>> I think I'll use
>>>> PyLong_{From|As}VoidPtr for importing/exporting the API structure...
>>>> Making it simpler will make it also portable across all CPython
>>>> versions.
>>> But it wouldn't make it compatible with other non-Cython C-APIs, would it?
>>> I think that's a requirement. If there's a standard way, Cython should be
>>> 100% compatible with that.
>>>
>>
>> Please note I was talking JUST about the refnanny support module. The
>> import/export of its C-API (actually a pointer to a struct) what
>> rather ad-hoc and used PyCObject... I do not really see the point of
>> bothering about the refnanny module "properly" exporting its API and
>> complicating the implementation now that CObjects are not available in
>> all Python runtimes.
>>
>>>> Additionally, I'll make a heavy renaming of some refnanny stuff,
>>>> things will be now named "__Pyx_RefNanny[XXX]".
>>> What's that for?
>>>
>>
>> Just for the sake of the generated C code being more easier to follow
>> and understand... We always talk about "refnanny", why not generate
>> the C code using that name consistently where appropriate.
>> Additionally, I'm changing the way of using the CYTHON_REFNANNY macro
>> with the preprocessor... Now you have to explicitly #define it to 1,
>> (as we require for complex support, and C-level profiling) ...
>
> I'd say it is the complex support and profiling who's got it wrong and
> CYTHON_REFNANNY that's got it right. Being able to do "-DOPTION" and use
> #ifdef is *very* common.
>
Well, we can discuss about that, but #if MACRO ... #endif is also
common... And suppose someone does -DMACRO=0 ...
Moreover, paste this in some file in tmp.c
#if ABC
#warning ABC is true
#else
#warning ABC is false
#endif
#ifdef XYZ
#warning XYZ is defined
#else
#warning XYZ is not def
#endif
int main(int a, char**b){}
and next compile like this:
$ gcc -DABC -DXYZ=0 cmacro.c
I get this output:
cmacro.c:3:2: warning: #warning ABC is true
cmacro.c:9:2: warning: #warning XYZ is defined
So it seems that (at least with GCC) your bare -DFOO way still does
the right thing, while my counter example #ifdef FOO...#endif with
-DFOO=0 gives unexpected results...
So IMO my proposed change should go in.
--
Lisandro Dalcín
---------------
Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC)
Instituto de Desarrollo Tecnológico para la Industria Química (INTEC)
Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)
PTLC - Güemes 3450, (3000) Santa Fe, Argentina
Tel/Fax: +54-(0)342-451.1594
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev