1/* -----------------------------------------------------------------------------
2 * See the LICENSE file for information on copyright, usage and redistribution
3 * of SWIG, and the README file for authors - http://www.swig.org/release.html.
4 *
5 * swig.h
6 *
7 * Header file for the SWIG core.
8 * ----------------------------------------------------------------------------- */
9
10/* $Id: swig.h 11473 2009-07-30 06:06:49Z wsfulton $ */
11
12#ifndef SWIGCORE_H_
13#define SWIGCORE_H_
14
15#ifndef MACSWIG
16#include "swigconfig.h"
17#endif
18
19#include <stdio.h>
20#include <string.h>
21#include <stdlib.h>
22#include <assert.h>
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
28#include "doh.h"
29
30/* Status codes */
31
32#define SWIG_OK         1
33#define SWIG_ERROR      0
34#define SWIG_NOWRAP     0
35
36/* Short names for common data types */
37
38  typedef DOH String;
39  typedef DOH Hash;
40  typedef DOH List;
41  typedef DOH String_or_char;
42  typedef DOH File;
43  typedef DOH Parm;
44  typedef DOH ParmList;
45  typedef DOH Node;
46  typedef DOH Symtab;
47  typedef DOH Typetab;
48  typedef DOH SwigType;
49
50/* --- Legacy DataType interface.  These type codes are provided solely
51       for backwards compatibility with older modules --- */
52
53/* --- The ordering of type values is used to determine type-promotion
54       in the parser.  Do not change */
55
56/* Numeric types */
57
58#define   T_BOOL       1
59#define   T_SCHAR      2
60#define   T_UCHAR      3
61#define   T_SHORT      4
62#define   T_USHORT     5
63#define   T_ENUM       6
64#define   T_INT        7
65#define   T_UINT       8
66#define   T_LONG       9
67#define   T_ULONG      10
68#define   T_LONGLONG   11
69#define   T_ULONGLONG  12
70#define   T_FLOAT      20
71#define   T_DOUBLE     21
72#define   T_LONGDOUBLE 22
73#define   T_FLTCPLX    23
74#define   T_DBLCPLX    24
75#define   T_NUMERIC    25
76
77#define   T_COMPLEX    T_DBLCPLX
78
79/* non-numeric */
80
81#define   T_CHAR       29
82#define   T_WCHAR      30
83#define   T_USER       31
84#define   T_VOID       32
85#define   T_STRING     33
86#define   T_POINTER    34
87#define   T_REFERENCE  35
88#define   T_ARRAY      36
89#define   T_FUNCTION   37
90#define   T_MPOINTER   38
91#define   T_VARARGS    39
92#define   T_SYMBOL     98
93#define   T_ERROR      99
94
95
96/* --- File interface --- */
97
98#include "swigfile.h"
99
100/* --- Command line parsing --- */
101
102#include "swigopt.h"
103
104/* --- Scanner Interface --- */
105
106#include "swigscan.h"
107
108/* --- Functions for manipulating the string-based type encoding --- */
109
110  extern SwigType *NewSwigType(int typecode);
111  extern SwigType *SwigType_del_element(SwigType *t);
112  extern SwigType *SwigType_add_pointer(SwigType *t);
113  extern SwigType *SwigType_add_memberpointer(SwigType *t, const_String_or_char_ptr qual);
114  extern SwigType *SwigType_del_memberpointer(SwigType *t);
115  extern SwigType *SwigType_del_pointer(SwigType *t);
116  extern SwigType *SwigType_add_array(SwigType *t, const_String_or_char_ptr size);
117  extern SwigType *SwigType_del_array(SwigType *t);
118  extern SwigType *SwigType_pop_arrays(SwigType *t);
119  extern SwigType *SwigType_add_reference(SwigType *t);
120  extern SwigType *SwigType_del_reference(SwigType *t);
121  extern SwigType *SwigType_add_qualifier(SwigType *t, const_String_or_char_ptr qual);
122  extern SwigType *SwigType_del_qualifier(SwigType *t);
123  extern SwigType *SwigType_add_function(SwigType *t, ParmList *parms);
124  extern SwigType *SwigType_add_template(SwigType *t, ParmList *parms);
125  extern SwigType *SwigType_pop_function(SwigType *t);
126  extern ParmList *SwigType_function_parms(SwigType *t);
127  extern List *SwigType_split(const SwigType *t);
128  extern String *SwigType_pop(SwigType *t);
129  extern void SwigType_push(SwigType *t, SwigType *s);
130  extern List *SwigType_parmlist(const SwigType *p);
131  extern String *SwigType_parm(String *p);
132  extern String *SwigType_str(SwigType *s, const_String_or_char_ptr id);
133  extern String *SwigType_lstr(SwigType *s, const_String_or_char_ptr id);
134  extern String *SwigType_rcaststr(SwigType *s, const_String_or_char_ptr id);
135  extern String *SwigType_lcaststr(SwigType *s, const_String_or_char_ptr id);
136  extern String *SwigType_manglestr(SwigType *t);
137  extern SwigType *SwigType_ltype(SwigType *t);
138  extern int SwigType_ispointer(SwigType *t);
139  extern int SwigType_ispointer_return(SwigType *t);
140  extern int SwigType_isfunctionpointer(SwigType *t);
141  extern int SwigType_ismemberpointer(SwigType *t);
142  extern int SwigType_isreference(SwigType *t);
143  extern int SwigType_isreference_return(SwigType *t);
144  extern int SwigType_isarray(SwigType *t);
145  extern int SwigType_prefix_is_simple_1D_array(SwigType *t);
146  extern int SwigType_isfunction(SwigType *t);
147  extern int SwigType_isqualifier(SwigType *t);
148  extern int SwigType_isconst(SwigType *t);
149  extern int SwigType_issimple(SwigType *t);
150  extern int SwigType_ismutable(SwigType *t);
151  extern int SwigType_isvarargs(const SwigType *t);
152  extern int SwigType_istemplate(const SwigType *t);
153  extern int SwigType_isenum(SwigType *t);
154  extern int SwigType_check_decl(SwigType *t, const_String_or_char_ptr decl);
155  extern SwigType *SwigType_strip_qualifiers(SwigType *t);
156  extern SwigType *SwigType_functionpointer_decompose(SwigType *t);
157  extern String *SwigType_base(const SwigType *t);
158  extern String *SwigType_namestr(const SwigType *t);
159  extern String *SwigType_templateprefix(const SwigType *t);
160  extern String *SwigType_templatesuffix(const SwigType *t);
161  extern String *SwigType_templateargs(const SwigType *t);
162  extern String *SwigType_prefix(const SwigType *t);
163  extern int SwigType_array_ndim(SwigType *t);
164  extern String *SwigType_array_getdim(SwigType *t, int n);
165  extern void SwigType_array_setdim(SwigType *t, int n, const_String_or_char_ptr rep);
166  extern SwigType *SwigType_array_type(SwigType *t);
167  extern String *SwigType_default(SwigType *t);
168  extern void SwigType_typename_replace(SwigType *t, String *pat, String *rep);
169  extern SwigType *SwigType_alttype(SwigType *t, int ltmap);
170
171  extern void SwigType_template_defargs(Parm *parms, Parm *targs, Symtab *tscope, Symtab *tsdecl);
172  extern SwigType *SwigType_template_deftype(const SwigType *type, Symtab *tscope);
173
174/* --- Type-system managment --- */
175  extern void SwigType_typesystem_init(void);
176  extern int SwigType_typedef(SwigType *type, const_String_or_char_ptr name);
177  extern int SwigType_typedef_class(const_String_or_char_ptr name);
178  extern int SwigType_typedef_using(const_String_or_char_ptr qname);
179  extern void SwigType_inherit(String *subclass, String *baseclass, String *cast, String *conversioncode);
180  extern int SwigType_issubtype(SwigType *subtype, SwigType *basetype);
181  extern void SwigType_scope_alias(String *aliasname, Typetab *t);
182  extern void SwigType_using_scope(Typetab *t);
183  extern void SwigType_new_scope(const_String_or_char_ptr name);
184  extern void SwigType_inherit_scope(Typetab *scope);
185  extern Typetab *SwigType_pop_scope(void);
186  extern Typetab *SwigType_set_scope(Typetab *h);
187  extern void SwigType_print_scope(Typetab *t);
188  extern SwigType *SwigType_typedef_resolve(const SwigType *t);
189  extern SwigType *SwigType_typedef_resolve_all(SwigType *t);
190  extern SwigType *SwigType_typedef_qualified(SwigType *t);
191  extern int SwigType_istypedef(SwigType *t);
192  extern int SwigType_isclass(SwigType *t);
193  extern void SwigType_attach_symtab(Symtab *syms);
194  extern void SwigType_remember(SwigType *t);
195  extern void SwigType_remember_clientdata(SwigType *t, const_String_or_char_ptr clientdata);
196  extern void SwigType_remember_mangleddata(String *mangled, const_String_or_char_ptr clientdata);
197  extern void (*SwigType_remember_trace(void (*tf) (SwigType *, String *, String *))) (SwigType *, String *, String *);
198  extern void SwigType_emit_type_table(File *f_headers, File *f_table);
199  extern int SwigType_type(SwigType *t);
200
201/* --- Symbol table module --- */
202
203  extern void Swig_symbol_init(void);
204  extern void Swig_symbol_setscopename(const_String_or_char_ptr name);
205  extern String *Swig_symbol_getscopename(void);
206  extern String *Swig_symbol_qualifiedscopename(Symtab *symtab);
207  extern Symtab *Swig_symbol_newscope(void);
208  extern Symtab *Swig_symbol_setscope(Symtab *);
209  extern Symtab *Swig_symbol_getscope(const_String_or_char_ptr symname);
210  extern Symtab *Swig_symbol_current(void);
211  extern Symtab *Swig_symbol_popscope(void);
212  extern Node *Swig_symbol_add(const_String_or_char_ptr symname, Node *node);
213  extern void Swig_symbol_cadd(const_String_or_char_ptr symname, Node *node);
214  extern Node *Swig_symbol_clookup(const_String_or_char_ptr symname, Symtab *tab);
215  extern Node *Swig_symbol_clookup_check(const_String_or_char_ptr symname, Symtab *tab, int (*check) (Node *));
216  extern Symtab *Swig_symbol_cscope(const_String_or_char_ptr symname, Symtab *tab);
217  extern Node *Swig_symbol_clookup_local(const_String_or_char_ptr symname, Symtab *tab);
218  extern Node *Swig_symbol_clookup_local_check(const_String_or_char_ptr symname, Symtab *tab, int (*check) (Node *));
219  extern String *Swig_symbol_qualified(Node *node);
220  extern Node *Swig_symbol_isoverloaded(Node *node);
221  extern void Swig_symbol_remove(Node *node);
222  extern void Swig_symbol_alias(const_String_or_char_ptr aliasname, Symtab *tab);
223  extern void Swig_symbol_inherit(Symtab *tab);
224  extern SwigType *Swig_symbol_type_qualify(const SwigType *ty, Symtab *tab);
225  extern String *Swig_symbol_string_qualify(String *s, Symtab *tab);
226  extern SwigType *Swig_symbol_typedef_reduce(SwigType *ty, Symtab *tab);
227
228  extern ParmList *Swig_symbol_template_defargs(Parm *parms, Parm *targs, Symtab *tscope, Symtab *tsdecl);
229  extern SwigType *Swig_symbol_template_deftype(const SwigType *type, Symtab *tscope);
230  extern SwigType *Swig_symbol_template_param_eval(const SwigType *p, Symtab *symtab);
231
232/* --- Parameters and Parameter Lists --- */
233
234#include "swigparm.h"
235
236extern String    *ParmList_errorstr(ParmList *);
237extern int        ParmList_is_compactdefargs(ParmList *p);
238
239/* --- Parse tree support --- */
240
241#include "swigtree.h"
242
243/* -- Wrapper function Object */
244
245#include "swigwrap.h"
246
247/* --- Naming functions --- */
248
249  extern void Swig_name_register(const_String_or_char_ptr method, const_String_or_char_ptr format);
250  extern void Swig_name_unregister(const_String_or_char_ptr method);
251  extern String *Swig_name_mangle(const_String_or_char_ptr s);
252  extern String *Swig_name_wrapper(const_String_or_char_ptr fname);
253  extern String *Swig_name_member(const_String_or_char_ptr classname, const_String_or_char_ptr mname);
254  extern String *Swig_name_get(const_String_or_char_ptr vname);
255  extern String *Swig_name_set(const_String_or_char_ptr vname);
256  extern String *Swig_name_construct(const_String_or_char_ptr classname);
257  extern String *Swig_name_copyconstructor(const_String_or_char_ptr classname);
258  extern String *Swig_name_destroy(const_String_or_char_ptr classname);
259  extern String *Swig_name_disown(const_String_or_char_ptr classname);
260
261  extern void Swig_naming_init(void);
262  extern void Swig_name_namewarn_add(String *prefix, String *name, SwigType *decl, Hash *namewrn);
263  extern Hash *Swig_name_namewarn_get(Node *n, String *prefix, String *name, SwigType *decl);
264  extern void Swig_name_rename_add(String *prefix, String *name, SwigType *decl, Hash *namewrn, ParmList *declaratorparms);
265  extern void Swig_name_inherit(String *base, String *derived);
266  extern int Swig_need_protected(Node *n);
267  extern int Swig_need_name_warning(Node *n);
268  extern int Swig_need_redefined_warn(Node *a, Node *b, int InClass);
269
270  extern String *Swig_name_make(Node *n, String *prefix, const_String_or_char_ptr cname, SwigType *decl, String *oldname);
271  extern String *Swig_name_warning(Node *n, String *prefix, String *name, SwigType *decl);
272  extern String *Swig_name_decl(Node *n);
273  extern String *Swig_name_fulldecl(Node *n);
274
275/* --- parameterized rename functions --- */
276
277  extern void Swig_name_object_set(Hash *namehash, String *name, SwigType *decl, DOH *object);
278  extern DOH *Swig_name_object_get(Hash *namehash, String *prefix, String *name, SwigType *decl);
279  extern void Swig_name_object_inherit(Hash *namehash, String *base, String *derived);
280  extern void Swig_features_get(Hash *features, String *prefix, String *name, SwigType *decl, Node *n);
281  extern void Swig_feature_set(Hash *features, const_String_or_char_ptr name, SwigType *decl, const_String_or_char_ptr featurename, String *value, Hash *featureattribs);
282
283/* --- Misc --- */
284  extern char *Swig_copy_string(const char *c);
285  extern void Swig_set_fakeversion(const char *version);
286  extern const char *Swig_package_version(void);
287  extern void Swig_banner(File *f);
288  extern void Swig_banner_target_lang(File *f, const_String_or_char_ptr commentchar);
289  extern String *Swig_strip_c_comments(const String *s);
290  extern String *Swig_filename_escape(String *filename);
291  extern void Swig_filename_correct(String *filename);
292  extern String *Swig_string_escape(String *s);
293  extern String *Swig_string_mangle(const String *s);
294  extern void Swig_scopename_split(const String *s, String **prefix, String **last);
295  extern String *Swig_scopename_prefix(const String *s);
296  extern String *Swig_scopename_last(const String *s);
297  extern String *Swig_scopename_first(const String *s);
298  extern String *Swig_scopename_suffix(const String *s);
299  extern int Swig_scopename_check(const String *s);
300  extern String *Swig_string_lower(String *s);
301  extern String *Swig_string_upper(String *s);
302  extern String *Swig_string_title(String *s);
303
304  extern void Swig_init(void);
305  extern void Swig_warn(const char *filename, int line, const char *msg);
306
307  extern int Swig_value_wrapper_mode(int mode);
308
309
310#define WARNING(msg) Swig_warn(__FILE__,__LINE__,msg)
311
312  typedef enum { EMF_STANDARD, EMF_MICROSOFT } ErrorMessageFormat;
313
314  extern void Swig_warning(int num, const_String_or_char_ptr filename, int line, const char *fmt, ...);
315  extern void Swig_error(const_String_or_char_ptr filename, int line, const char *fmt, ...);
316  extern int Swig_error_count(void);
317  extern void Swig_error_silent(int s);
318  extern void Swig_warnfilter(const_String_or_char_ptr wlist, int val);
319  extern void Swig_warnall(void);
320  extern int Swig_warn_count(void);
321  extern void Swig_error_msg_format(ErrorMessageFormat format);
322
323/* --- C Wrappers --- */
324  extern String *Swig_cparm_name(Parm *p, int i);
325  extern String *Swig_wrapped_var_type(SwigType *t, int varcref);
326  extern int Swig_cargs(Wrapper *w, ParmList *l);
327  extern String *Swig_cresult(SwigType *t, const_String_or_char_ptr name, const_String_or_char_ptr decl);
328
329  extern String *Swig_cfunction_call(const_String_or_char_ptr name, ParmList *parms);
330  extern String *Swig_cconstructor_call(const_String_or_char_ptr name);
331  extern String *Swig_cppconstructor_call(const_String_or_char_ptr name, ParmList *parms);
332  extern String *Swig_unref_call(Node *n);
333  extern String *Swig_ref_call(Node *n, const String *lname);
334  extern String *Swig_cdestructor_call(Node *n);
335  extern String *Swig_cppdestructor_call(Node *n);
336  extern String *Swig_cmemberset_call(const_String_or_char_ptr name, SwigType *type, String *self, int varcref);
337  extern String *Swig_cmemberget_call(const_String_or_char_ptr name, SwigType *t, String *self, int varcref);
338
339  extern int Swig_add_extension_code(Node *n, const String *function_name, ParmList *parms, SwigType *return_type, const String *code, int cplusplus, const String *self);
340
341/* --- Transformations --- */
342
343  extern int Swig_MethodToFunction(Node *n, String *classname, int flags, SwigType *director_type, int is_director);
344  extern int Swig_ConstructorToFunction(Node *n, String *classname, String *none_comparison, String *director_ctor, int cplus, int flags);
345  extern int Swig_DestructorToFunction(Node *n, String *classname, int cplus, int flags);
346  extern int Swig_MembersetToFunction(Node *n, String *classname, int flags, String **call);
347  extern int Swig_MembergetToFunction(Node *n, String *classname, int flags);
348  extern int Swig_VargetToFunction(Node *n, int flags);
349  extern int Swig_VarsetToFunction(Node *n, int flags);
350
351#define  CWRAP_EXTEND                 0x01
352#define  CWRAP_SMART_POINTER          0x02
353#define  CWRAP_NATURAL_VAR            0x04
354#define  CWRAP_DIRECTOR_ONE_CALL      0x08
355#define  CWRAP_DIRECTOR_TWO_CALLS     0x10
356#define  CWRAP_ALL_PROTECTED_ACCESS   0x20
357
358/* --- Director Helpers --- */
359  extern Node *Swig_methodclass(Node *n);
360  extern int Swig_directorclass(Node *n);
361  extern Node *Swig_directormap(Node *n, String *type);
362
363/* --- Legacy Typemap API (somewhat simplified, ha!) --- */
364
365  extern void Swig_typemap_init(void);
366  extern void Swig_typemap_register(const_String_or_char_ptr tmap_method, ParmList *pattern, const_String_or_char_ptr code, ParmList *locals, ParmList *kwargs);
367  extern int Swig_typemap_copy(const_String_or_char_ptr tmap_method, ParmList *srcpattern, ParmList *pattern);
368  extern void Swig_typemap_clear(const_String_or_char_ptr tmap_method, ParmList *pattern);
369  extern int Swig_typemap_apply(ParmList *srcpat, ParmList *destpat);
370  extern void Swig_typemap_clear_apply(ParmList *pattern);
371  extern void Swig_typemap_debug(void);
372
373  extern String *Swig_typemap_lookup(const_String_or_char_ptr tmap_method, Node *n, const_String_or_char_ptr lname, Wrapper *f);
374  extern String *Swig_typemap_lookup_out(const_String_or_char_ptr tmap_method, Node *n, const_String_or_char_ptr lname, Wrapper *f, String *actioncode);
375  extern void Swig_typemap_new_scope(void);
376  extern Hash *Swig_typemap_pop_scope(void);
377
378  extern void Swig_typemap_attach_parms(const_String_or_char_ptr tmap_method, ParmList *parms, Wrapper *f);
379
380/* --- Code fragment support --- */
381
382  extern void Swig_fragment_register(Node *fragment);
383  extern void Swig_fragment_emit(String *name);
384  extern void Swig_fragment_clear(String *section);
385
386/* hacks defined in C++ ! */
387  extern int Swig_director_mode(void);
388  extern int Swig_director_protected_mode(void);
389  extern int Swig_all_protected_mode(void);
390  extern void Wrapper_director_mode_set(int);
391  extern void Wrapper_director_protected_mode_set(int);
392  extern void Wrapper_all_protected_mode_set(int);
393  extern void Language_replace_special_variables(String *method, String *tm, Parm *parm);
394
395
396/* -- template init -- */
397  extern void SwigType_template_init(void);
398
399
400#ifdef __cplusplus
401}
402#endif
403#endif
404