diff --git a/SWIG/Lib/tcl/tcl8.swg b/SWIG/Lib/tcl/tcl8.swg index f911c55f8..6d779b0bb 100644 --- a/SWIG/Lib/tcl/tcl8.swg +++ b/SWIG/Lib/tcl/tcl8.swg @@ -160,26 +160,26 @@ "Tcl_SetObjResult(interp,Tcl_NewStringObj($1,-1));"; %typemap(out) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] - "Tcl_SetObjResult(interp,SWIG_NewPointerObj((void *) $1, $1_descriptor,0));"; + "Tcl_SetObjResult(interp,SWIG_NewPointerObj((void *) $1, $1_descriptor, $owner));"; %typemap(out) SWIGTYPE *DYNAMIC, SWIGTYPE &DYNAMIC { swig_type_info *ty = SWIG_TypeDynamicCast($1_descriptor,(void **) &$1); - Tcl_SetObjResult(interp,SWIG_NewPointerObj((void *) $1, ty,0)); + Tcl_SetObjResult(interp,SWIG_NewPointerObj((void *) $1, ty, $owner)); } %typemap(out) SWIGTYPE *INSTANCE, SWIGTYPE &INSTANCE, SWIGTYPE INSTANCE[] - "Tcl_SetObjResult(interp,SWIG_NewInstanceObj((void *) $1, $1_descriptor,0));"; + "Tcl_SetObjResult(interp,SWIG_NewInstanceObj((void *) $1, $1_descriptor, $owner));"; %typemap(out) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] - "Tcl_SetObjResult(interp,SWIG_NewInstanceObj((void *) $1, $1_descriptor,0));"; + "Tcl_SetObjResult(interp,SWIG_NewInstanceObj((void *) $1, $1_descriptor, $owner));"; %typemap(out) SWIGTYPE *DYNAMIC, SWIGTYPE &DYNAMIC { swig_type_info *ty = SWIG_TypeDynamicCast($1_descriptor,(void **) &$1); - Tcl_SetObjResult(interp,SWIG_NewInstanceObj((void *) $1, ty,0)); + Tcl_SetObjResult(interp,SWIG_NewInstanceObj((void *) $1, ty, $owner)); } %typemap(out) SWIGTYPE (CLASS::*) - "Tcl_SetObjResult(interp, SWIG_NewPackedObj((void *) &$1, sizeof($1_type), $1_descriptor, 0));"; + "Tcl_SetObjResult(interp, SWIG_NewPackedObj((void *) &$1, sizeof($1_type), $1_descriptor, $owner));"; %typemap(out) void ""; @@ -189,14 +189,14 @@ { $&1_ltype resultptr; resultptr = new $1_ltype(($1_ltype &) $1); - Tcl_SetObjResult(interp,SWIG_NewPointerObj((void*) resultptr, $&1_descriptor,0)); + Tcl_SetObjResult(interp,SWIG_NewPointerObj((void*) resultptr, $&1_descriptor, $owner)); } #else { $&1_ltype resultptr; resultptr = ($&1_ltype) malloc(sizeof($1_type)); memmove(resultptr, &$1, sizeof($1_type)); - Tcl_SetObjResult(interp,SWIG_NewPointerObj((void*) resultptr, $&1_descriptor,0)); + Tcl_SetObjResult(interp,SWIG_NewPointerObj((void*) resultptr, $&1_descriptor, $owner)); } #endif @@ -274,18 +274,18 @@ %typemap(varout) char * "$result = Tcl_NewStringObj((char*) $1,-1);"; %typemap(varout) char [ANY] "$result = Tcl_NewStringObj((char *) $1,-1);"; %typemap(varout) char "$result = Tcl_NewStringObj(&$1,1);"; -%typemap(varout) SWIGTYPE *, SWIGTYPE [] "$result = SWIG_NewPointerObj((void *) $1, $1_descriptor,0);"; -%typemap(varout) SWIGTYPE & "$result = SWIG_NewPointerObj((void *) &$1, $1_descriptor,0);"; +%typemap(varout) SWIGTYPE *, SWIGTYPE [] "$result = SWIG_NewPointerObj((void *) $1, $1_descriptor, $owner);"; +%typemap(varout) SWIGTYPE & "$result = SWIG_NewPointerObj((void *) &$1, $1_descriptor, $owner);"; %typemap(varout) SWIGTYPE *INSTANCE, SWIGTYPE INSTANCE[] - "$result = SWIG_NewInstanceObj((void *) $1, $1_descriptor,0);"; + "$result = SWIG_NewInstanceObj((void *) $1, $1_descriptor, $owner);"; %typemap(varout) SWIGTYPE &INSTANCE - "$result = SWIG_NewInstanceObj((void *) &$1, $1_descriptor,0);"; + "$result = SWIG_NewInstanceObj((void *) &$1, $1_descriptor, $owner);"; -%typemap(varout) SWIGTYPE INSTANCE "$result = SWIG_NewInstanceObj((void *) &$1, $&1_descriptor,0);"; -%typemap(varout) SWIGTYPE "$result = SWIG_NewInstanceObj((void *) &$1, $&1_descriptor,0);"; -%typemap(varout) SWIGTYPE (CLASS::*) "$result = SWIG_NewPackedObj((void *) &$1, sizeof($1_type), $1_descriptor, 0);"; +%typemap(varout) SWIGTYPE INSTANCE "$result = SWIG_NewInstanceObj((void *) &$1, $&1_descriptor, $owner);"; +%typemap(varout) SWIGTYPE "$result = SWIG_NewInstanceObj((void *) &$1, $&1_descriptor, $owner);"; +%typemap(varout) SWIGTYPE (CLASS::*) "$result = SWIG_NewPackedObj((void *) &$1, sizeof($1_type), $1_descriptor, $owner);"; /* -- Variable input --- */ diff --git a/SWIG/Source/Modules/tcl8.cxx b/SWIG/Source/Modules/tcl8.cxx index ffbfc2ba4..24770d354 100644 --- a/SWIG/Source/Modules/tcl8.cxx +++ b/SWIG/Source/Modules/tcl8.cxx @@ -438,6 +438,11 @@ public: Replaceall(tm,"$source", "result"); Replaceall(tm,"$target", "Tcl_GetObjResult(interp)"); Replaceall(tm,"$result", "Tcl_GetObjResult(interp)"); + if(Getattr(n,"feature:new")) { + Replaceall(tm,"$owner","1"); + } else { + Replaceall(tm,"$owner","0"); + } Printf(f->code,"%s\n", tm); } else { Swig_warning(WARN_TYPEMAP_OUT_UNDEF, input_file, line_number,