<div dir="auto">Any thoughts on this? I've tried a little poking around in the code but not yet really been able to see the way forward, any hints would be welcome too.</div><div class="gmail_extra"><br><div class="gmail_quote">On 8 May 2017 18:59, "Shaheed Haque" <<a href="mailto:srhaque@theiet.org">srhaque@theiet.org</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto">Hi,<br><br>I have the following method in C++:<br><br>        bool parseAtom(const char *&scursor, const char* send, QString &result, bool allow8Bit = false);<br><br>The first argument,scursor, is both input to and output from the method. (The third is also output, but is not relevant to this note). When I add the annotations like this:<br><br>        bool parseAtom(const char *&scursor /In,Out/, const char* send, QString &result, bool allow8Bit = false);<br><br>The generated docstring looks plausible:<br><br>        parseAtom(str, str, str, bool = False) -> Tuple[bool, str]<br><br>but the generated code does not compile because it is passed using "&" when I think it should not be:<br><br>        const char* a0;<br>...<br>        if (sipParseArgs(&sipParseErr, sipArgs, "csJ1|b", &a0, &a1, sipType_QString,&a2, &a2State, &a3))<br>        {<br>...<br>            sipRes =  ::KMime::HeaderParsing::<wbr>parseAtom(&a0,a1,*a2,a3);<br><br>The compilation error is:<br><br>========<br>tmp2/tmp/PyKF5/KMime/KMime/<wbr>sipKMimeKMimeHeaderParsing.<wbr>cpp: In function ‘PyObject* meth_KMime_HeaderParsing_<wbr>parseAtom(PyObject*, PyObject*)’:<br>tmp2/tmp/PyKF5/KMime/KMime/<wbr>sipKMimeKMimeHeaderParsing.<wbr>cpp:1385:70: error: no matching function for call to ‘parseAtom(const char**, const char*&, QString&, bool&)’<br>In file included from /usr/include/KF5/KMime/kmime/<wbr>kmime_headers.h:44:0,<br>                 from /usr/include/KF5/KMime/kmime/<wbr>kmime_util.h:27,<br>                 from /usr/include/KF5/KMime/kmime/<wbr>kmime_content.h:53,<br>                 from /usr/include/KF5/KMime/KMime/<wbr>Content:1,<br>                 from tmp/KMime/KMime/Content.sip:<wbr>27,<br>                 from unifiedKMime.cpp:1:<br>/usr/include/KF5/KMime/kmime/<wbr>kmime_header_parsing.h:91:19: note: candidate: bool KMime::HeaderParsing::<wbr>parseAtom(const char*&, const char*, QString&, bool)<br> KMIME_EXPORT bool parseAtom(const char *&scursor, const char *const send,<br>                   ^~~~~~~~~<br>/usr/include/KF5/KMime/kmime/<wbr>kmime_header_parsing.h:91:19: note:   no known conversion for argument 1 from ‘const char**’ to ‘const char*&’<br>========<br><br>Notice also the encoding passed to sipParseArgs is "c" (the output without any annotations is below at [1] for reference, and it emits the encoding as "s").<br><br>Am I using the annotations incorrectly, or is this a bug in SIP?<br><br>Thanks, Shaheed<br><br>[1] Without any of the needed annotations, the SIP generated docstring looks as expected:<br><br>        parseAtom(str, str, str, bool = False) -> bool<br><br>and the generated code for the first argument:<br><br>        const char* a0;<br>...<br>        if (sipParseArgs(&sipParseErr, sipArgs, "ssJ1|b", &a0, &a1, sipType_QString,&a2, &a2State, &a3))<br>        {<br>            sipRes =  ::KMime::HeaderParsing::<wbr>parseAtom(a0,a1,*a2,a3);<br><br>Also, AFAICS, adding the needed /Out/ to argument 3 emits plausible looking code.</div>
</blockquote></div></div>