From: Lindley F. <lin...@gm...> - 2015-06-12 21:25:05
|
I'm having problems defining the directorin typemap for a smart pointer in a macro. It looks like this: %typemap(directorin, descriptor="L$packagepath/$&javaclassname;") SmartPtr< TYPE > { const SmartPtr< TYPE >& smartptr = $1; if (smartptr.Get()) { smartptr->AddRef(); $input = ($typemap(jni, TYPE))smartptr.Get(); } else { $input = 0; } } The problem is that $javaclassname is giving me garbage. I also tried defining it as: %typemap(directorin, descriptor="L$packagepath/$&typemap(jstype, TYPE);") SmartPtr< TYPE > However, the typemap is not being expanded within the string. |
From: Lindley F. <lin...@gm...> - 2015-06-12 22:41:25
|
It looks like the canonicalizeJNIDescriptor method just doesn't make any attempt to do typemap substitution. I'm investigating how to update the code to fix this. On Fri, Jun 12, 2015 at 2:24 PM, Lindley French <lin...@gm...> wrote: > I'm having problems defining the directorin typemap for a smart pointer in > a macro. > > It looks like this: > %typemap(directorin, descriptor="L$packagepath/$&javaclassname;") > SmartPtr< TYPE > { > > const SmartPtr< TYPE >& smartptr = $1; > > if (smartptr.Get()) { > > smartptr->AddRef(); > > $input = ($typemap(jni, TYPE))smartptr.Get(); > > } else { > > $input = 0; > > } > > } > > The problem is that $javaclassname is giving me garbage. I also tried > defining it as: > > %typemap(directorin, descriptor="L$packagepath/$&typemap(jstype, TYPE);") > SmartPtr< TYPE > > > However, the typemap is not being expanded within the string. > |
From: Lindley F. <lin...@gm...> - 2015-06-13 15:04:09
|
I have a way to fix this for Java. I'm still investigating how to fix it for typemaps in general. I think it's a little frustrating that directorin typemaps can't figure out the right descriptor on their own. It seems like they should be able to leverage the jstype typemap to do that, which is really all I'm trying to do. But they don't. On Fri, Jun 12, 2015 at 3:41 PM, Lindley French <lin...@gm...> wrote: > It looks like the canonicalizeJNIDescriptor method just doesn't make any > attempt to do typemap substitution. I'm investigating how to update the > code to fix this. > > On Fri, Jun 12, 2015 at 2:24 PM, Lindley French <lin...@gm...> > wrote: > >> I'm having problems defining the directorin typemap for a smart pointer >> in a macro. >> >> It looks like this: >> %typemap(directorin, descriptor="L$packagepath/$&javaclassname;") >> SmartPtr< TYPE > { >> >> const SmartPtr< TYPE >& smartptr = $1; >> >> if (smartptr.Get()) { >> >> smartptr->AddRef(); >> >> $input = ($typemap(jni, TYPE))smartptr.Get(); >> >> } else { >> >> $input = 0; >> >> } >> >> } >> >> The problem is that $javaclassname is giving me garbage. I also tried >> defining it as: >> >> %typemap(directorin, descriptor="L$packagepath/$&typemap(jstype, TYPE);") >> SmartPtr< TYPE > >> >> However, the typemap is not being expanded within the string. >> > > |
From: Lindley F. <lin...@gm...> - 2015-06-15 20:45:42
|
I've created https://github.com/swig/swig/pull/439 to fix this issue. I have to say, the code style SWIG is written in is fairly unique, and it was hard to wrap my head around it at first. It's a combination of (very) weak typing and often-nondescriptive variable names that makes things tricky. It also feels like a system that started out with a consistent design but has gradually grown more ad-hoc over time. But it works, which is probably the most important thing...... On Sat, Jun 13, 2015 at 8:04 AM, Lindley French <lin...@gm...> wrote: > I have a way to fix this for Java. I'm still investigating how to fix it > for typemaps in general. > > I think it's a little frustrating that directorin typemaps can't figure > out the right descriptor on their own. It seems like they should be able to > leverage the jstype typemap to do that, which is really all I'm trying to > do. But they don't. > > On Fri, Jun 12, 2015 at 3:41 PM, Lindley French <lin...@gm...> > wrote: > >> It looks like the canonicalizeJNIDescriptor method just doesn't make any >> attempt to do typemap substitution. I'm investigating how to update the >> code to fix this. >> >> On Fri, Jun 12, 2015 at 2:24 PM, Lindley French <lin...@gm...> >> wrote: >> >>> I'm having problems defining the directorin typemap for a smart pointer >>> in a macro. >>> >>> It looks like this: >>> %typemap(directorin, descriptor="L$packagepath/$&javaclassname;") >>> SmartPtr< TYPE > { >>> >>> const SmartPtr< TYPE >& smartptr = $1; >>> >>> if (smartptr.Get()) { >>> >>> smartptr->AddRef(); >>> >>> $input = ($typemap(jni, TYPE))smartptr.Get(); >>> >>> } else { >>> >>> $input = 0; >>> >>> } >>> >>> } >>> >>> The problem is that $javaclassname is giving me garbage. I also tried >>> defining it as: >>> >>> %typemap(directorin, descriptor="L$packagepath/$&typemap(jstype, >>> TYPE);") SmartPtr< TYPE > >>> >>> However, the typemap is not being expanded within the string. >>> >> >> > |