1/* ------------------------------------------------------------ 2 * Typemap specializations for Tcl 3 * ------------------------------------------------------------ */ 4 5/* ------------------------------------------------------------ 6 * Fragment section 7 * ------------------------------------------------------------ */ 8 9/* 10 in Tcl we need to pass the interp value, so, we define the decl/call 11 macros as needed. 12*/ 13 14#define SWIG_AS_DECL_ARGS SWIG_TCL_DECL_ARGS_2 15#define SWIG_AS_CALL_ARGS SWIG_TCL_CALL_ARGS_2 16 17 18/* Include fundamental fragemt definitions */ 19%include <typemaps/fragments.swg> 20 21/* Look for user fragments file. */ 22%include <tclfragments.swg> 23 24/* Tcl fragments for primitve types */ 25%include <tclprimtypes.swg> 26 27/* Tcl fragments for char* strings */ 28%include <tclstrings.swg> 29 30 31/* ------------------------------------------------------------ 32 * Unified typemap section 33 * ------------------------------------------------------------ */ 34 35/* No director supported in Tcl */ 36#ifdef SWIG_DIRECTOR_TYPEMAPS 37#undef SWIG_DIRECTOR_TYPEMAPS 38#endif 39 40 41/* Tcl types */ 42#define SWIG_Object Tcl_Obj * 43 44/* Overload of the output/constant/exception handling */ 45 46/* output */ 47#define %set_output(obj) Tcl_SetObjResult(interp,obj) 48 49/* append output */ 50#define %append_output(obj) Tcl_ListObjAppendElement(interp,Tcl_GetObjResult(interp),obj) 51 52/* set constant */ 53#define SWIG_SetConstant(name, obj) SWIG_Tcl_SetConstantObj(interp, name, obj) 54 55/* raise */ 56#define SWIG_Raise(obj,type,desc) SWIG_Tcl_SetErrorObj(interp,type,obj) 57 58 59/* Include the unified typemap library */ 60%include <typemaps/swigtypemaps.swg> 61 62 63/* ------------------------------------------------------------ 64 * Tcl extra typemaps 65 * ------------------------------------------------------------ */ 66 67#if 1 68// Old 1.3.25 typemaps needed to avoid premature object deletion 69%typemap(out,noblock=1) SWIGTYPE *INSTANCE, SWIGTYPE &INSTANCE, SWIGTYPE INSTANCE[] { 70 Tcl_SetObjResult(interp, SWIG_NewInstanceObj( %as_voidptr($1), $1_descriptor,0)); 71} 72 73%typemap(out) SWIGTYPE *DYNAMIC, SWIGTYPE &DYNAMIC { 74 swig_type_info *ty = SWIG_TypeDynamicCast($1_descriptor,%as_voidptrptr(&$1)); 75 Tcl_SetObjResult(interp,SWIG_NewInstanceObj(%as_voidptr($1), ty,0)); 76} 77 78#endif 79 80%typemap(throws,noblock=1) SWIGTYPE CLASS { 81 SWIG_set_result(SWIG_NewInstanceObj(%as_voidptr(SWIG_new_copy($1, $1_ltype)), $&1_descriptor, 1)); 82 SWIG_fail; 83} 84 85%typemap(out) SWIGTYPE = SWIGTYPE INSTANCE; 86%typemap(out) SWIGTYPE * = SWIGTYPE *INSTANCE; 87%typemap(out) SWIGTYPE & = SWIGTYPE &INSTANCE; 88%typemap(out) SWIGTYPE [] = SWIGTYPE INSTANCE[]; 89%typemap(varout) SWIGTYPE = SWIGTYPE INSTANCE; 90