logo       

Re: Directors and passing args by value.: msg#00109

programming.swig

Subject: Re: Directors and passing args by value.

I actually added the typemap to do this to python.swg many
months ago, but commented it out with the note "this is rather
dangerous." ;-) I probably should have been more explicit at
that time, since I can't remember now exactly what concerned
me about it (other than the possibility of the python method
hanging on to references to its arguments). Maybe there's
nothing terribly wrong with that typemap as it stands, or
maybe there's another approach that would be safer. Any
typemap/object ownership gurus care to comment?

Mark


On Mon, Nov 17, 2003 at 12:08:20PM +0300, Kerim Borchaev wrote:
> Hello.
>
> I've checked CVS version and now it seems that directors aren't
> generated for methods with args passed by value. Any plans to
> support it?
>
> Best regards,
> Kerim mailto:warkid@xxxxxxxxx
>
> Thursday, November 13, 2003, 8:16:02 PM, you wrote:
>
> MR> Hi Kerim,
>
> MR> What version of SWIG are you using? SWIG cvs parses your
> MR> interface without any warnings on my machine, and does the
> MR> right thing in the python test. Note that if you ever get
> MR> warning 461, SWIG will not generate any director stubs for
> MR> the method. So the result you get in your Python test is
> MR> understandable, and the only question is what is causing the
> MR> warning.
>
> MR> Cheers,
> MR> Mark
>
>
> MR> On Thu, Nov 13, 2003 at 05:55:55PM +0300, Kerim Borchaev wrote:
> >> Hello swig,
> >>
> >> SWIG doesn't wrap for directors methods that return objects by
> >> value?
> >>
> >> This code:
> >> //main.i
> >> %module(directors="1") test
> >>
> >> %feature("director");
> >> %inline %{
> >> struct D{
> >> int value;
> >> };
> >>
> >> struct C{
> >> virtual ~C(){}
> >> virtual D method(){
> >> D d;
> >> d.value = 7;
> >> return d;
> >> }
> >> };
> >>
> >> int getValue(C&o){
> >> D d = o.method();
> >> return d.value;
> >> }
> >> %}
> >> //////////////////////////
> >>
> >> Produces this warning:
> >>
> >> main.i:29: Warning(461): Unable to return type D in director method
> >> C::method (s
> >> kipping method).
> >>
> >> And works like this:
> >>
> >> Python 2.3.2 (#49, Oct 2 2003, 20:02:00) [MSC v.1200 32 bit (Intel)] on
> >> win32
> >> Type "help", "copyright", "credits" or "license" for more information.
> >> >>> import test
> >> >>> from test import *
> >> >>> class Derived(C):
> >> ... def method(self):
> >> ... d = D()
> >> ... d.value = 13
> >> ... return d
> >> ...
> >> >>> getValue(Derived())#should return 13
> >> 7
> >>
> >>
> >>
> >> Best regards,
> >> Kerim mailto:warkid@xxxxxxxxx
> >>
> >>
> >> _______________________________________________
> >> Swig maillist - Swig@xxxxxxxxxxxxxxx
> >> http://mailman.cs.uchicago.edu/mailman/listinfo/swig
>
>
_______________________________________________
Swig maillist - Swig@xxxxxxxxxxxxxxx
http://mailman.cs.uchicago.edu/mailman/listinfo/swig



<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise