PageRenderTime 54ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 1ms

/trunk/Source/Swig/swig.h

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