[C++-sig] Pybindgen/pygccxml integration

Gustavo Carneiro gjcarneiro at gmail.com
Tue Jun 23 20:56:18 CEST 2009


2009/6/23 Ben Fitzpatrick <bfitzpatrick at vtiinstruments.com>

> Thanks for the suggestions!
>
> I tried the first one, just as a test. I'd like to do the second
> programatically if I can, but I just wanted to make sure annotations were
> going to fix this. It still seems to be giving me the same error:
> (...)/pure_virtual.h:5: WrapperWarning: Parameter 'int * value' error (used
> in int pure_virtual_class::get_value(int * value) [member function]):
> <pybindgen.typehandlers.base.TypeConfigurationError instance at 0xb780326c>
>  virtual int get_value(int* value) = 0;
>
> Here is what I changed my code to:
>
>   // -#- @value(transfer_ownership=true) -#-
>  virtual int get_value(int* value)=0;
>

Apart from the blank line, seems OK.  Do you get a "unused annotation"
warning?


>
> This appears to be similar to the declaration you pointed me to in foo.h:
> // -#- @zbr(transfer_ownership=true) -#-
> void store_zbr (Zbr *zbr);
>
> Also tried renaming it to 'foobaz' in case 'value' was a keyword. Is there
> something I'm missing?
>
> Thanks,
> Ben Fitzpatrick
>
>
> Gustavo Carneiro wrote:
>
>>
>>
>> 2009/6/23 Ben Fitzpatrick <bfitzpatrick at vtiinstruments.com <mailto:
>> bfitzpatrick at vtiinstruments.com>>
>>
>>
>>    Hi everyone,
>>
>>    I'm just starting to check out pybindgen after the messages I've
>>    seen floating around on this mailing list, and I have a question
>>    about the pygccxml integration. I've made a pure-virtual class
>>    with a pointer return type, like so:
>>
>>    class pure_virtual_class
>>    {
>>      virtual int get_value(int* value)=0;
>>      virtual int put_value(int value)=0;
>>
>>      static pure_virtual_class* Create();
>>    };
>>
>>    Normally I'd call add_function('get_value', retval(int),
>>    [param('int *', 'value', transfer_ownership=True)]) (I think)
>>    But since I'm scanning the headers with gccxml, I'm not sure how
>>    to tell it to transfer the ownership.
>>    Right now it's giving me a TypeConfigurationError during 'parse',
>>    which appears to be because it doesn't know how to deal with the
>>    ownership.
>>
>>    I looked in the documentation and couldn't find anything
>>    referencing this, and none of the examples use gccxml.
>>
>>    Any ideas?
>>
>>
>> Yes, there are two possible (alternative) ways to deal with this:
>>
>>  1. Add inline annotations as C++ comments in the header file to be
>> scanned;
>>  2. Add scanning hooks to inject annotations via a function callback;
>>
>> For inline annotations, see tests/foo.h, look for the comment lines
>> containing -#-.  I must warn you, though, that annotations are kind of a
>> "brittle" system.  The annotations are searched upwards starting in the line
>> immediately before the line that gccxml reports as the line the declaration
>> is defined.  The problem here is that gccxml reports the line of a
>> declaration sometimes in weird and unexpected places.
>>
>> The other way is more complicated in terms of code, but doable with some
>> pacience.  You can see an example in ns-3 [1], in the pre_scan_hook
>> function.
>>
>>
>> [1]
>> http://code.nsnam.org/ns-3-dev/file/96811f76c3e2/bindings/python/ns3modulescan.py
>>
>> I hope this helps.
>>
>> --
>> Gustavo J. A. M. Carneiro
>> INESC Porto, Telecommunications and Multimedia Unit
>> "The universe is always one step beyond logic." -- Frank Herbert
>>
>
> _______________________________________________
> Cplusplus-sig mailing list
> Cplusplus-sig at python.org
> http://mail.python.org/mailman/listinfo/cplusplus-sig
>



-- 
Gustavo J. A. M. Carneiro
INESC Porto, Telecommunications and Multimedia Unit
"The universe is always one step beyond logic." -- Frank Herbert
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20090623/a6fbb45b/attachment-0001.htm>


More information about the Cplusplus-sig mailing list