From: Simon M. <sim...@sc...> - 2013-06-10 15:07:47
|
Hello, I don't understand the purpose of the typemap found in (master) Lib/typemaps/inoutlist.swg : 104: %typemap(freearg,noblock=1,match="in") Type *INPUT, Type &INPUT { 105: if (SWIG_IsNewObj(res$argnum)) %delete($1); 106: } I don't see anyuse of res$argnum in the other related typemaps: 92 : %typemap(in,noblock=1,fragment=asval_frag) Type &INPUT($*ltype temp, int res = 0) { 107: %typemap(typecheck,noblock=1,precedence=code,fragment=asval_frag) Type *INPUT, Type &INPUT { And why%delete($1)? By the way, it makes some test cases (in the Scilab test-suite) fail to build (res$argnum variable is not declared). I would be grateful if you could give me some explanations on this typemap. Simon M. |
From: William S F. <ws...@fu...> - 2013-06-10 18:46:42
|
On 10/06/13 15:47, Simon Marchetto wrote: > Hello, > > I don't understand the purpose of the typemap found in (master) > Lib/typemaps/inoutlist.swg : > > 104: %typemap(freearg,noblock=1,match="in") Type *INPUT, Type &INPUT { > 105: if (SWIG_IsNewObj(res$argnum)) %delete($1); > 106: } > > > I don't see anyuse of res$argnum in the other related typemaps: > > 92 : %typemap(in,noblock=1,fragment=asval_frag) Type &INPUT($*ltype > temp, int res = 0) { > > 107: %typemap(typecheck,noblock=1,precedence=code,fragment=asval_frag) > Type *INPUT, Type &INPUT { > > And why%delete($1)? > > By the way, it makes some test cases (in the Scilab test-suite) fail to > build (res$argnum variable is not declared). > > I would be grateful if you could give me some explanations on this typemap. > See documentation for freearg: http://www.swig.org/Doc2.0/Typemaps.html#Typemaps_nn33 and special variales: http://www.swig.org/Doc2.0/Typemaps.html#Typemaps_special_variables. So $argnum will expand to the argument number of the input. The reason this is needed is because the temporary variable (res) in the in typemap has an argument number appended to it thereby making it possible for the typemap to generate a unique temporary variable for each input parameter. The 'freearg' typemap doesn't attempt to append the argument number like the 'in' typemap does to temporary variables, so you need to put it in yourself. If Scilab is using the typemap function calls correctly, then $argnum will expand properly. Compare with a working target language, but to be honest I can't see how this would fail other than by avoiding all the typemap support in the core. %delete is a macros, which you'll find in Lib/swigmacros.swg which should be clear as to why a macro is used when you see them. William |