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