PageRenderTime 43ms CodeModel.GetById 16ms app.highlight 23ms RepoModel.GetById 0ms app.codeStats 1ms

/tags/rel-1-3-15/SWIG/Source/Swig/swig.h

#
C++ Header | 478 lines | 363 code | 73 blank | 42 comment | 0 complexity | 1991d6dea45a54c72a9dbe0a3c6f7083 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1/* ----------------------------------------------------------------------------- 
  2 * swig.h
  3 *
  4 *     Header file for the SWIG core.
  5 * 
  6 * Author(s) : David Beazley (beazley@cs.uchicago.edu)
  7 *             Dustin Mitchell (djmitche@cs.uchicago.edu)
  8 *
  9 * Copyright (C) 1999-2000.  The University of Chicago
 10 * See the file LICENSE for information on usage and redistribution.	
 11 *
 12 * $Header$
 13 * ----------------------------------------------------------------------------- */
 14
 15#ifndef _SWIGCORE_H
 16#define _SWIGCORE_H
 17
 18#include <stdio.h>
 19#include <string.h>
 20#include <stdlib.h>
 21#include <assert.h>
 22
 23#include "doh.h"
 24
 25/* Status codes */
 26
 27#define SWIG_OK         1
 28#define SWIG_ERROR      0
 29#define SWIG_NOWRAP     0
 30
 31/* Short names for common data types */
 32
 33typedef  DOH     String;
 34typedef  DOH     Hash;
 35typedef  DOH     List;
 36typedef  DOH     String_or_char;
 37typedef  DOH     File;
 38typedef  DOH     Parm;
 39typedef  DOH     ParmList;
 40typedef  DOH     Node;
 41typedef  DOH     Symtab;
 42typedef  DOH     Typetab;
 43typedef  DOH     SwigType;
 44
 45/* --- Legacy DataType interface.  These type codes are provided solely 
 46       for backwards compatibility with older modules --- */
 47
 48/* --- The ordering of type values is used to determine type-promotion 
 49       in the parser.  Do not change */
 50
 51/* Numeric types */
 52
 53#define   T_BOOL       1
 54#define   T_SCHAR      2
 55#define   T_UCHAR      3
 56#define   T_SHORT      4
 57#define   T_USHORT     5
 58#define   T_ENUM       6
 59#define   T_INT        7
 60#define   T_UINT       8
 61#define   T_LONG       9
 62#define   T_ULONG      10
 63#define   T_LONGLONG   11
 64#define   T_ULONGLONG  12
 65#define   T_FLOAT      20
 66#define   T_DOUBLE     21
 67#define   T_NUMERIC    22
 68
 69/* non-numeric */
 70
 71#define   T_CHAR       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
 84/* --- File interface --- */
 85
 86extern void     Swig_add_directory(const String_or_char *dirname);
 87extern String  *Swig_last_file();
 88extern List    *Swig_search_path();
 89extern FILE    *Swig_open(const String_or_char *name);
 90extern String  *Swig_read_file(FILE *f);
 91extern String  *Swig_include(const String_or_char *name);
 92extern int      Swig_insert_file(const String_or_char *name, File *outfile);
 93extern void     Swig_set_config_file(const String_or_char *filename);
 94extern String  *Swig_get_config_file(void);
 95extern void     Swig_swiglib_set(const String_or_char *);
 96extern String  *Swig_swiglib_get();
 97extern void     Swig_register_filebyname(const String_or_char *filename, File *outfile);
 98extern File    *Swig_filebyname(const String_or_char *filename);
 99extern char    *Swig_file_suffix(const String_or_char *filename);
100extern char    *Swig_file_basename(const String_or_char *filename);
101extern char    *Swig_file_filename(const String_or_char *filename);
102extern char    *Swig_file_dirname(const String_or_char *filename);
103
104#ifdef MACSWIG
105#  define SWIG_FILE_DELIMETER  ":"
106#else
107#  define  SWIG_FILE_DELIMETER "/"
108#endif
109
110/* --- Command line parsing --- */
111
112extern void     Swig_init_args(int argc, char **argv);
113extern void     Swig_mark_arg(int n);
114extern int      Swig_check_marked(int n);
115extern void     Swig_check_options();
116extern void     Swig_arg_error();
117
118/* --- Scanner Interface --- */
119
120typedef struct SwigScanner SwigScanner;
121
122extern SwigScanner *NewSwigScanner();
123extern void         DelSwigScanner(SwigScanner *);
124extern void         SwigScanner_clear(SwigScanner *);
125extern void         SwigScanner_push(SwigScanner *, String *);
126extern void         SwigScanner_pushtoken(SwigScanner *, int);
127extern int          SwigScanner_token(SwigScanner *);
128extern String      *SwigScanner_text(SwigScanner *);
129extern void         SwigScanner_skip_line(SwigScanner *);
130extern int          SwigScanner_skip_balanced(SwigScanner *, int startchar, int endchar);
131extern void         SwigScanner_set_location(SwigScanner *, String *file, int line);
132extern String      *SwigScanner_get_file(SwigScanner *);
133extern int          SwigScanner_get_line(SwigScanner *);
134extern void         SwigScanner_idstart(SwigScanner *, char *idchar);
135
136#define   SWIG_MAXTOKENS          512
137#define   SWIG_TOKEN_LPAREN        1  
138#define   SWIG_TOKEN_RPAREN        2
139#define   SWIG_TOKEN_SEMI          3
140#define   SWIG_TOKEN_COMMA         4
141#define   SWIG_TOKEN_STAR          5
142#define   SWIG_TOKEN_LBRACE        6
143#define   SWIG_TOKEN_RBRACE        7
144#define   SWIG_TOKEN_EQUAL         8
145#define   SWIG_TOKEN_EQUALTO       9
146#define   SWIG_TOKEN_NOTEQUAL     10
147#define   SWIG_TOKEN_PLUS         11
148#define   SWIG_TOKEN_MINUS        12
149#define   SWIG_TOKEN_AND          13
150#define   SWIG_TOKEN_LAND         14
151#define   SWIG_TOKEN_OR           15
152#define   SWIG_TOKEN_LOR          16
153#define   SWIG_TOKEN_XOR          17
154#define   SWIG_TOKEN_LESSTHAN     18
155#define   SWIG_TOKEN_GREATERTHAN  19
156#define   SWIG_TOKEN_LTEQUAL      20
157#define   SWIG_TOKEN_GTEQUAL      21
158#define   SWIG_TOKEN_NOT          22
159#define   SWIG_TOKEN_LNOT         23
160#define   SWIG_TOKEN_LBRACKET     24
161#define   SWIG_TOKEN_RBRACKET     25
162#define   SWIG_TOKEN_SLASH        26
163#define   SWIG_TOKEN_BACKSLASH    27
164#define   SWIG_TOKEN_ENDLINE      28
165#define   SWIG_TOKEN_STRING       29
166#define   SWIG_TOKEN_POUND        30
167#define   SWIG_TOKEN_PERCENT      31
168#define   SWIG_TOKEN_COLON        32
169#define   SWIG_TOKEN_DCOLON       33
170#define   SWIG_TOKEN_LSHIFT       34
171#define   SWIG_TOKEN_RSHIFT       35
172#define   SWIG_TOKEN_ID           36
173#define   SWIG_TOKEN_FLOAT        37
174#define   SWIG_TOKEN_DOUBLE       38
175#define   SWIG_TOKEN_INT          39
176#define   SWIG_TOKEN_UINT         40
177#define   SWIG_TOKEN_LONG         41
178#define   SWIG_TOKEN_ULONG        42
179#define   SWIG_TOKEN_CHAR         43
180#define   SWIG_TOKEN_PERIOD       44
181#define   SWIG_TOKEN_AT           45
182#define   SWIG_TOKEN_DOLLAR       46
183#define   SWIG_TOKEN_CODEBLOCK    47
184#define   SWIG_TOKEN_RSTRING      48
185#define   SWIG_TOKEN_LONGLONG     49
186#define   SWIG_TOKEN_ULONGLONG    50
187#define   SWIG_TOKEN_ILLEGAL      98
188#define   SWIG_TOKEN_LAST         99 
189
190/* --- Functions for manipulating the string-based type encoding --- */
191
192extern SwigType   *NewSwigType(int typecode);
193extern void        SwigType_add_pointer(SwigType *t);
194extern void        SwigType_add_memberpointer(SwigType *t, String_or_char *qual);
195extern void        SwigType_del_pointer(SwigType *t);
196extern void        SwigType_add_array(SwigType *t, String_or_char *size);
197extern SwigType   *SwigType_pop_arrays(SwigType *t);
198extern void        SwigType_add_reference(SwigType *t);
199extern void        SwigType_add_qualifier(SwigType *t, String_or_char *qual);
200extern void        SwigType_add_function(SwigType *t, ParmList *parms);
201extern void        SwigType_add_template(SwigType *t, ParmList *parms);
202extern SwigType   *SwigType_pop_function(SwigType *t);
203extern ParmList   *SwigType_function_parms(SwigType *t);
204extern List       *SwigType_split(SwigType *t);
205extern String     *SwigType_pop(SwigType *t);
206extern void        SwigType_push(SwigType *t, SwigType *s);
207extern List       *SwigType_parmlist(const SwigType *p);
208extern String     *SwigType_parm(String *p);
209extern String     *SwigType_str(SwigType *s, const String_or_char *id);
210extern String     *SwigType_lstr(SwigType *s, const String_or_char *id);
211extern String     *SwigType_rcaststr(SwigType *s, const String_or_char *id);
212extern String     *SwigType_lcaststr(SwigType *s, const String_or_char *id);
213extern String     *SwigType_manglestr(SwigType *t);
214extern SwigType   *SwigType_ltype(SwigType *t);
215extern int         SwigType_ispointer(SwigType *t);
216extern int         SwigType_ismemberpointer(SwigType *t);
217extern int         SwigType_isreference(SwigType *t);
218extern int         SwigType_isarray(SwigType *t);
219extern int         SwigType_isfunction(SwigType *t);
220extern int         SwigType_isqualifier(SwigType *t);
221extern int         SwigType_isconst(SwigType *t);
222extern int         SwigType_issimple(SwigType *t);
223extern int         SwigType_ismutable(SwigType *t);
224extern int         SwigType_isvarargs(const SwigType *t);
225extern int         SwigType_istemplate(const SwigType *t);
226extern int         SwigType_isenum(SwigType *t);
227extern int         SwigType_check_decl(SwigType *t, const String_or_char *decl);
228extern SwigType   *SwigType_strip_qualifiers(SwigType *t);
229extern String     *SwigType_base(SwigType *t);
230extern String     *SwigType_namestr(const SwigType *t);
231extern String     *SwigType_templateprefix(SwigType *t);
232extern String     *SwigType_templatesuffix(const SwigType *t);
233extern String     *SwigType_templateargs(SwigType *t);
234extern String     *SwigType_prefix(SwigType *t);
235extern int         SwigType_array_ndim(SwigType *t);
236extern String     *SwigType_array_getdim(SwigType *t, int n);
237extern void        SwigType_array_setdim(SwigType *t, int n, String_or_char *rep);
238extern SwigType   *SwigType_array_type(SwigType *t);
239extern String     *SwigType_default(SwigType *t);
240extern void        SwigType_typename_replace(SwigType *t, String *pat, String *rep);
241
242/* --- Type-system managment --- */
243extern void        SwigType_typesystem_init();
244extern int         SwigType_typedef(SwigType *type, String_or_char *name);
245extern int         SwigType_typedef_class(String_or_char *name);
246extern int         SwigType_typedef_using(String_or_char *qname);
247extern void        SwigType_inherit(String *subclass, String *baseclass, String *cast);
248extern int         SwigType_issubtype(SwigType *subtype, SwigType *basetype);
249extern void        SwigType_scope_alias(String *aliasname, Typetab *t);
250extern void        SwigType_using_scope(Typetab *t);
251extern void        SwigType_new_scope(String_or_char *name);
252extern void        SwigType_reset_scopes();
253extern void        SwigType_set_scope_name(String_or_char *name);
254extern void        SwigType_inherit_scope(Typetab *scope);
255extern Typetab    *SwigType_pop_scope();
256extern Typetab    *SwigType_set_scope(Typetab *h);
257extern void        SwigType_print_scope(Typetab *t);
258extern SwigType   *SwigType_typedef_resolve(SwigType *t);
259extern SwigType   *SwigType_typedef_resolve_all(SwigType *t);
260extern SwigType   *SwigType_typedef_qualified(SwigType *t);
261extern int         SwigType_istypedef(SwigType *t);
262extern int         SwigType_isclass(SwigType *t);
263extern void        SwigType_attach_symtab(Symtab *syms);
264extern void        SwigType_remember(SwigType *t);
265extern void        SwigType_remember_clientdata(SwigType *t, const String_or_char *clientdata);
266extern void      (*SwigType_remember_trace(void (*tf)(SwigType *, String *, String *)))(SwigType *, String *, String *);
267extern void        SwigType_emit_type_table(File *f_headers, File *f_table);
268extern int         SwigType_type(SwigType *t);
269
270/* --- Symbol table module --- */
271
272extern void     Swig_symbol_init();
273extern void     Swig_symbol_setscopename(const String_or_char *name);
274extern String   *Swig_symbol_getscopename();
275extern String   *Swig_symbol_qualifiedscopename(Symtab *symtab);
276extern Symtab   *Swig_symbol_newscope();
277extern Symtab   *Swig_symbol_setscope(Symtab *);
278extern Symtab   *Swig_symbol_getscope(const String_or_char *symname);
279extern Symtab   *Swig_symbol_current();
280extern Symtab   *Swig_symbol_popscope();
281extern Node     *Swig_symbol_add(String_or_char *symname, Node *node);
282extern void      Swig_symbol_cadd(String_or_char *symname, Node *node);
283extern Node     *Swig_symbol_clookup(String_or_char *symname, Symtab *tab);
284extern Symtab   *Swig_symbol_cscope(String_or_char *symname, Symtab *tab);
285extern Node     *Swig_symbol_clookup_local(String_or_char *symname, Symtab *tab);
286extern String   *Swig_symbol_qualified(Node *node);
287extern Node     *Swig_symbol_isoverloaded(Node *node);
288extern void      Swig_symbol_remove(Node *node);
289extern void      Swig_symbol_alias(String_or_char *aliasname, Symtab *tab);
290extern void      Swig_symbol_inherit(Symtab *tab);
291extern SwigType *Swig_symbol_type_qualify(SwigType *ty, Symtab *tab);
292extern String   *Swig_symbol_string_qualify(String *s, Symtab *tab);
293extern SwigType *Swig_symbol_typedef_reduce(SwigType *ty, Symtab *tab);
294
295/* --- Parameters and Parameter Lists --- */
296
297/* Parameters are really just hidden behind a DOH object.  The following
298   interface will probably be simplified even further. */
299
300extern Parm       *NewParm(SwigType *type, String_or_char *n);
301extern Parm       *CopyParm(Parm *p);
302extern ParmList   *CopyParmList(ParmList *);
303extern int         ParmList_len(ParmList *);
304extern int         ParmList_numarg(ParmList *);
305extern int         ParmList_numrequired(ParmList *);
306extern String     *ParmList_str(ParmList *);
307extern String     *ParmList_protostr(ParmList *);
308
309/* --- Parse tree support --- */
310
311/* DOM-like node access */
312
313#define  nodeType(x)               Getattr(x,"nodeType")
314#define  parentNode(x)             Getattr(x,"parentNode")
315#define  previousSibling(x)        Getattr(x,"previousSibling")
316#define  nextSibling(x)            Getattr(x,"nextSibling")
317#define  firstChild(x)             Getattr(x,"firstChild")
318#define  lastChild(x)              Getattr(x,"lastChild")
319extern int checkAttribute(Node *obj, const String_or_char *name, const String_or_char *value);
320
321/* Macros to set up the DOM tree (mostly used by the parser) */
322
323#define  set_nodeType(x,v)         Setattr(x,"nodeType",v)
324#define  set_parentNode(x,v)       Setattr(x,"parentNode",v)
325#define  set_previousSibling(x,v)  Setattr(x,"previousSibling",v)
326#define  set_nextSibling(x,v)      Setattr(x,"nextSibling",v)
327#define  set_firstChild(x,v)       Setattr(x,"firstChild",v)
328#define  set_lastChild(x,v)        Setattr(x,"lastChild",v)
329
330extern void appendChild(Node *node, Node *child);
331extern void deleteNode(Node *node);
332extern Node *copyNode(Node *node);
333
334extern void Swig_tag_nodes(Node *node, const String_or_char *attrname, DOH *value);
335
336extern int  Swig_require(Node **node, ...);
337extern int  Swig_save(Node **node,...);
338extern void Swig_restore(Node **node);
339
340/* Debugging of parse trees */
341extern void Swig_debug_emit(int);
342extern void Swig_print_tags(File *obj, Node *root);
343extern void Swig_print_tree(Node *obj);
344extern void Swig_print_node(Node *obj);
345
346/* -- Wrapper function Object */
347
348typedef struct {
349  Hash      *localh;
350  String    *def;
351  String    *locals;
352  String    *code;
353} Wrapper;
354
355extern Wrapper  *NewWrapper();
356extern void      DelWrapper(Wrapper *w);
357extern void      Wrapper_pretty_print(String *str, File *f);
358extern void      Wrapper_print(Wrapper *w, File *f);
359extern int       Wrapper_add_local(Wrapper *w, const String_or_char *name, const String_or_char *decl);
360extern int       Wrapper_add_localv(Wrapper *w, const String_or_char *name, ...);
361extern int       Wrapper_check_local(Wrapper *w, const String_or_char *name);
362extern char     *Wrapper_new_local(Wrapper *w, const String_or_char *name, const String_or_char *decl);
363extern char     *Wrapper_new_localv(Wrapper *w, const String_or_char *name, ...);
364
365/* --- Naming functions --- */
366
367extern void     Swig_name_register(const String_or_char *method, const String_or_char *format);
368extern void     Swig_name_unregister(const String_or_char *method);
369extern String  *Swig_name_mangle(const String_or_char *s);
370extern String  *Swig_name_wrapper(const String_or_char *fname);
371extern String  *Swig_name_member(const String_or_char *classname, const String_or_char *mname);
372extern String  *Swig_name_get(const String_or_char *vname);
373extern String  *Swig_name_set(const String_or_char *vname);
374extern String  *Swig_name_construct(const String_or_char *classname);
375extern String  *Swig_name_copyconstructor(const String_or_char *classname);
376extern String  *Swig_name_destroy(const String_or_char *classname);
377
378/* --- parameterized rename functions --- */
379
380extern void      Swig_name_object_set(Hash *namehash, String_or_char *name, SwigType *decl, DOH *object);
381extern DOH      *Swig_name_object_get(Hash *namehash, String_or_char *prefix, String_or_char *name, SwigType *decl);
382extern void      Swig_name_object_inherit(Hash *namehash, String *base, String *derived);
383extern void      Swig_features_get(Hash *features, String_or_char *prefix, String_or_char *name, SwigType *decl, Node *n);
384extern void      Swig_feature_set(Hash *features, String_or_char *name, SwigType *decl, String_or_char *fname, String *value);
385
386/* --- Misc --- */
387extern char      *Swig_copy_string(const char *c);
388extern void       Swig_banner(File *f);
389extern String    *Swig_string_escape(String *s);
390extern String    *Swig_string_mangle(String *s);
391extern String    *Swig_scopename_prefix(String *s);
392extern String    *Swig_scopename_last(String *s);
393extern String    *Swig_scopename_first(String *s);
394extern String    *Swig_scopename_suffix(String *s);
395extern int        Swig_scopename_check(String *s);
396
397extern void       Swig_init();
398extern void       Swig_warn(const char *filename, int line, const char *msg);
399
400
401#define WARNING(msg) Swig_warn(__FILE__,__LINE__,msg)
402
403extern void       Swig_warning(int num, const String_or_char *filename, int line, const char *fmt, ...);
404extern void       Swig_error(const String_or_char *filename, int line, const char *fmt, ...);
405extern int        Swig_error_count(void);
406extern void       Swig_error_silent(int s);
407extern void       Swig_warnfilter(const String_or_char *wlist, int val);
408extern void       Swig_warnall(void);
409extern int        Swig_warn_count(void);
410
411/* --- C Wrappers --- */
412extern String    *Swig_cparm_name(Parm *p, int i);
413extern String    *Swig_clocal(SwigType *t, String_or_char *name, String_or_char *value);
414extern String    *Swig_wrapped_var_type(SwigType *t);
415extern String    *Swig_wrapped_var_deref(SwigType *t, String_or_char *name);
416extern String    *Swig_wrapped_var_assign(SwigType *t, String_or_char *name);
417extern int        Swig_cargs(Wrapper *w, ParmList *l);
418extern String    *Swig_cresult(SwigType *t, const String_or_char *name, const String_or_char *decl);
419
420extern String    *Swig_cfunction_call(String_or_char *name, ParmList *parms);
421extern String    *Swig_cmethod_call(String_or_char *name, ParmList *parms, String_or_char *self);
422extern String    *Swig_cconstructor_call(String_or_char *name);
423extern String    *Swig_cppconstructor_call(String_or_char *name, ParmList *parms);
424extern String    *Swig_cdestructor_call();
425extern String    *Swig_cppdestructor_call();
426extern String    *Swig_cmemberset_call(String_or_char *name, SwigType *type, String_or_char *self);
427extern String    *Swig_cmemberget_call(String_or_char *name, SwigType *t, String_or_char *self);
428
429/* --- Transformations --- */
430
431extern int        Swig_MethodToFunction(Node *n, String *classname, int flags);
432extern int        Swig_ConstructorToFunction(Node *n, String *classname, int cplus, int flags);
433extern int        Swig_DestructorToFunction(Node *n, String *classname, int cplus, int flags);
434extern int        Swig_MembersetToFunction(Node *n, String *classname, int flags);
435extern int        Swig_MembergetToFunction(Node *n, String *classname, int flags);
436extern int        Swig_VargetToFunction(Node *n);
437extern int        Swig_VarsetToFunction(Node *n);
438
439#define  CWRAP_EXTEND             0x01
440#define  CWRAP_SMART_POINTER      0x02
441
442/* --- Legacy Typemap API (somewhat simplified, ha!) --- */
443
444extern     void   Swig_typemap_init();
445extern     void   Swig_typemap_register(const String_or_char *op, ParmList *pattern, String_or_char *code, ParmList *locals, ParmList *kwargs);
446extern     int    Swig_typemap_copy(const String_or_char *op, ParmList *srcpattern, ParmList *pattern);
447extern     void   Swig_typemap_clear(const String_or_char *op, ParmList *pattern);
448extern     int    Swig_typemap_apply(ParmList *srcpat, ParmList *destpat);
449extern     void   Swig_typemap_clear_apply(ParmList *pattern);
450extern     void   Swig_typemap_debug();
451
452extern Hash  *Swig_typemap_search(const String_or_char *op, SwigType *type, String_or_char *pname);
453extern Hash  *Swig_typemap_search_multi(const String_or_char *op, ParmList *parms, int *nmatch);
454extern String *Swig_typemap_lookup(const String_or_char *op, SwigType *type, String_or_char *pname, String_or_char *lname,
455				  String_or_char *source, String_or_char *target, Wrapper *f);
456
457extern String *Swig_typemap_lookup_new(const String_or_char *op, Node *n, const String_or_char *lname, Wrapper *f);
458
459extern String *Swig_typemap_lookup_multi(const String_or_char *op, ParmList *parms, String_or_char *source, Wrapper *f, int *nmatch);
460extern void   Swig_typemap_new_scope();
461extern Hash  *Swig_typemap_pop_scope();
462
463extern void   Swig_typemap_attach_parms(const String_or_char *op, ParmList *parms, Wrapper *f);
464
465/* --- Code fragment support --- */
466
467extern  void  Swig_fragment_register(String *name, String *section, String *code);
468extern  void  Swig_fragment_emit(String *name);
469  
470#endif
471
472
473
474
475
476
477
478