%newobject support

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@7377 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2005-08-18 20:36:38 +00:00
commit 80e10942eb
2 changed files with 20 additions and 15 deletions

View file

@ -160,26 +160,26 @@
"Tcl_SetObjResult(interp,Tcl_NewStringObj($1,-1));"; "Tcl_SetObjResult(interp,Tcl_NewStringObj($1,-1));";
%typemap(out) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] %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 { %typemap(out) SWIGTYPE *DYNAMIC, SWIGTYPE &DYNAMIC {
swig_type_info *ty = SWIG_TypeDynamicCast($1_descriptor,(void **) &$1); 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[] %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 [] %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 { %typemap(out) SWIGTYPE *DYNAMIC, SWIGTYPE &DYNAMIC {
swig_type_info *ty = SWIG_TypeDynamicCast($1_descriptor,(void **) &$1); 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::*) %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 ""; %typemap(out) void "";
@ -189,14 +189,14 @@
{ {
$&1_ltype resultptr; $&1_ltype resultptr;
resultptr = new $1_ltype(($1_ltype &) $1); 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 #else
{ {
$&1_ltype resultptr; $&1_ltype resultptr;
resultptr = ($&1_ltype) malloc(sizeof($1_type)); resultptr = ($&1_ltype) malloc(sizeof($1_type));
memmove(resultptr, &$1, 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 #endif
@ -274,18 +274,18 @@
%typemap(varout) char * "$result = Tcl_NewStringObj((char*) $1,-1);"; %typemap(varout) char * "$result = Tcl_NewStringObj((char*) $1,-1);";
%typemap(varout) char [ANY] "$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) char "$result = Tcl_NewStringObj(&$1,1);";
%typemap(varout) SWIGTYPE *, 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,0);"; %typemap(varout) SWIGTYPE & "$result = SWIG_NewPointerObj((void *) &$1, $1_descriptor, $owner);";
%typemap(varout) SWIGTYPE *INSTANCE, SWIGTYPE INSTANCE[] %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 %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 INSTANCE "$result = SWIG_NewInstanceObj((void *) &$1, $&1_descriptor, $owner);";
%typemap(varout) SWIGTYPE "$result = SWIG_NewInstanceObj((void *) &$1, $&1_descriptor,0);"; %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, 0);"; %typemap(varout) SWIGTYPE (CLASS::*) "$result = SWIG_NewPackedObj((void *) &$1, sizeof($1_type), $1_descriptor, $owner);";
/* -- Variable input --- */ /* -- Variable input --- */

View file

@ -438,6 +438,11 @@ public:
Replaceall(tm,"$source", "result"); Replaceall(tm,"$source", "result");
Replaceall(tm,"$target", "Tcl_GetObjResult(interp)"); Replaceall(tm,"$target", "Tcl_GetObjResult(interp)");
Replaceall(tm,"$result", "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); Printf(f->code,"%s\n", tm);
} else { } else {
Swig_warning(WARN_TYPEMAP_OUT_UNDEF, input_file, line_number, Swig_warning(WARN_TYPEMAP_OUT_UNDEF, input_file, line_number,