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