Moved parms and types to C. Changed parameter API
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@578 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
2425f87f23
commit
c780f4bcf4
20 changed files with 974 additions and 917 deletions
|
|
@ -5,8 +5,10 @@
|
|||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
SRCS = map.c wrapfunc.c naming.c tree.c stype.c scanner.c include.c getopt.c misc.c
|
||||
OBJS = map.o wrapfunc.o naming.o tree.o stype.o scanner.o include.o getopt.o misc.o
|
||||
SRCS = map.c wrapfunc.c naming.c tree.c stype.c scanner.c include.c getopt.c misc.c \
|
||||
oldtypes.c oldparms.c
|
||||
OBJS = map.o wrapfunc.o naming.o tree.o stype.o scanner.o include.o getopt.o misc.o \
|
||||
oldtypes.o oldparms.o
|
||||
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
|
|
|
|||
349
SWIG/Source/Swig/oldparms.c
Normal file
349
SWIG/Source/Swig/oldparms.c
Normal file
|
|
@ -0,0 +1,349 @@
|
|||
/* -----------------------------------------------------------------------------
|
||||
* parms.cxx
|
||||
*
|
||||
* Parameter list class.
|
||||
*
|
||||
* !!! This file is deprecated and is being replaced !!!
|
||||
*
|
||||
* Author(s) : David Beazley (beazley@cs.uchicago.edu)
|
||||
*
|
||||
* Copyright (C) 1998-2000. The University of Chicago
|
||||
* Copyright (C) 1995-1998. The University of Utah and The Regents of the
|
||||
* University of California.
|
||||
*
|
||||
* See the file LICENSE for information on usage and redistribution.
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
static char cvsroot[] = "$Header$";
|
||||
|
||||
#include "swig.h"
|
||||
|
||||
#define MAXPARMS 16
|
||||
|
||||
/* ------------------------------------------------------------------------
|
||||
* NewParm()
|
||||
*
|
||||
* Create a new parameter from datatype 'type' and name 'n'.
|
||||
* ------------------------------------------------------------------------ */
|
||||
|
||||
Parm *NewParm(DataType *type, char *n) {
|
||||
Parm *p = (Parm *) malloc(sizeof(Parm));
|
||||
if (type) {
|
||||
p->_type = CopyDataType(type);
|
||||
} else {
|
||||
p->_type = 0;
|
||||
}
|
||||
p->_name = Swig_copy_string(n);
|
||||
p->call_type = 0;
|
||||
p->_defvalue = 0;
|
||||
p->ignore = 0;
|
||||
return p;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------
|
||||
* CopyParm()
|
||||
* ------------------------------------------------------------------------ */
|
||||
|
||||
Parm *CopyParm(Parm *p) {
|
||||
Parm *np = (Parm *) malloc(sizeof(Parm));
|
||||
if (p->_type) np->_type = CopyDataType(p->_type);
|
||||
np->_name = Swig_copy_string(p->_name);
|
||||
np->call_type = p->call_type;
|
||||
np->_defvalue = Swig_copy_string(p->_defvalue);
|
||||
np->ignore = p->ignore;
|
||||
return np;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------
|
||||
* DelParm()
|
||||
* ------------------------------------------------------------------------ */
|
||||
|
||||
void DelParm(Parm *p) {
|
||||
if (p->_type) DelDataType(p->_type);
|
||||
if (p->_name) free(p->_name);
|
||||
if (p->_defvalue) free(p->_defvalue);
|
||||
free(p);
|
||||
}
|
||||
|
||||
void Parm_Settype(Parm *p, DataType *t) {
|
||||
if (p->_type) DelDataType(p->_type);
|
||||
p->_type = CopyDataType(t);
|
||||
}
|
||||
|
||||
DataType *Parm_Gettype(Parm *p) {
|
||||
return p->_type;
|
||||
}
|
||||
|
||||
void Parm_Setname(Parm *p, char *n) {
|
||||
if (p->_name) free(p->_name);
|
||||
p->_name = Swig_copy_string(n);
|
||||
}
|
||||
|
||||
char *Parm_Getname(Parm *p) {
|
||||
return p->_name;
|
||||
}
|
||||
|
||||
void Parm_Setvalue(Parm *p, char *v) {
|
||||
if (p->_defvalue) free(p->_defvalue);
|
||||
p->_defvalue = Swig_copy_string(v);
|
||||
}
|
||||
|
||||
char *Parm_Getvalue(Parm *p) {
|
||||
return p->_defvalue;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* NewParmList()
|
||||
* ------------------------------------------------------------------ */
|
||||
|
||||
ParmList *NewParmList() {
|
||||
int i;
|
||||
ParmList *l = (ParmList *) malloc(sizeof(ParmList));
|
||||
l->nparms = 0;
|
||||
l->maxparms = MAXPARMS;
|
||||
l->parms = (Parm **) malloc(MAXPARMS*sizeof(Parm *));
|
||||
for (i = 0; i < MAXPARMS; i++) {
|
||||
l->parms[i] = 0;
|
||||
}
|
||||
return l;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* CopyParmList()
|
||||
* ------------------------------------------------------------------ */
|
||||
|
||||
ParmList *
|
||||
CopyParmList(ParmList *l) {
|
||||
ParmList *nl;
|
||||
int i;
|
||||
|
||||
if (l) {
|
||||
nl = (ParmList *) malloc(sizeof(ParmList));
|
||||
nl->nparms = l->nparms;
|
||||
nl->maxparms = l->maxparms;
|
||||
nl->parms = (Parm **) malloc(l->maxparms*sizeof(Parm*));
|
||||
|
||||
for (i = 0; i < l->maxparms; i++) {
|
||||
if (l->parms[i])
|
||||
nl->parms[i] = CopyParm(l->parms[i]);
|
||||
else
|
||||
nl->parms[i] = 0;
|
||||
}
|
||||
return nl;
|
||||
} else {
|
||||
return NewParmList();
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* DelParmList()
|
||||
* ------------------------------------------------------------------ */
|
||||
|
||||
void DelParmList(ParmList *l) {
|
||||
int i;
|
||||
for (i = 0; i < l->maxparms; i++) {
|
||||
if (l->parms[i]) DelParm(l->parms[i]);
|
||||
}
|
||||
free(l->parms);
|
||||
free(l);
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* moreparms() - Increase memory for parameter list
|
||||
* ------------------------------------------------------------------ */
|
||||
|
||||
static void moreparms(ParmList *l) {
|
||||
Parm **newparms;
|
||||
int i;
|
||||
|
||||
newparms = (Parm **) malloc(2*l->maxparms*sizeof(Parm *));
|
||||
for (i = 0; i < 2*l->maxparms; i++)
|
||||
newparms[i] = (Parm *) 0;
|
||||
for (i = 0; i < l->maxparms; i++) {
|
||||
newparms[i] = l->parms[i];
|
||||
}
|
||||
l->maxparms = 2*l->maxparms;
|
||||
free(l->parms);
|
||||
l->parms = newparms;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* void ParmList_append(ParmList *l, Parm *p)
|
||||
* ------------------------------------------------------------------ */
|
||||
|
||||
void ParmList_append(ParmList *l, Parm *p) {
|
||||
|
||||
if (l->nparms == l->maxparms) moreparms(l);
|
||||
l->parms[l->nparms] = CopyParm(p);
|
||||
l->nparms++;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* void ParmList_insert()
|
||||
* ------------------------------------------------------------------ */
|
||||
|
||||
void ParmList_insert(ParmList *l, Parm *p, int pos) {
|
||||
int i;
|
||||
/* If pos is out of range, we'd better fix it */
|
||||
|
||||
if (pos < 0) pos = 0;
|
||||
if (pos > l->nparms) pos = l->nparms;
|
||||
|
||||
/* If insertion is going to need more memory, take care of that now */
|
||||
|
||||
if (l->nparms >= l->maxparms) moreparms(l);
|
||||
|
||||
/* Now shift all of the existing parms to the right */
|
||||
|
||||
for (i = l->nparms; i > pos; i--) {
|
||||
l->parms[i] = l->parms[i-1];
|
||||
}
|
||||
|
||||
/* Set new parameter */
|
||||
|
||||
l->parms[pos] = CopyParm(p);
|
||||
l->nparms++;
|
||||
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* void ParmList_del()
|
||||
* ------------------------------------------------------------------ */
|
||||
|
||||
void ParmList_del(ParmList *l, int pos) {
|
||||
int i;
|
||||
if (l->nparms <= 0) return;
|
||||
if (pos < 0) pos = 0;
|
||||
if (pos >= l->nparms) pos = l->nparms-1;
|
||||
|
||||
/* Delete the parameter (if it exists) */
|
||||
|
||||
if (l->parms[pos]) DelParm(l->parms[pos]);
|
||||
|
||||
/* Now slide all of the parameters to the left */
|
||||
|
||||
for (i = pos; i < l->nparms-1; i++) {
|
||||
l->parms[i] = l->parms[i+1];
|
||||
}
|
||||
l->nparms--;
|
||||
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* Parm *ParmList_get()
|
||||
* ------------------------------------------------------------------ */
|
||||
|
||||
Parm *ParmList_get(ParmList *l, int pos) {
|
||||
|
||||
if ((pos < 0) || (pos >= l->nparms)) return 0;
|
||||
return l->parms[pos];
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* int ParmList_numarg()
|
||||
* ------------------------------------------------------------------ */
|
||||
|
||||
int ParmList_numarg(ParmList *l) {
|
||||
int n = 0;
|
||||
int i;
|
||||
for (i = 0; i < l->nparms; i++) {
|
||||
if (!l->parms[i]->ignore)
|
||||
n++;
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------
|
||||
* Parm * ParmList_first()
|
||||
* --------------------------------------------------------------------- */
|
||||
|
||||
Parm *ParmList_first(ParmList *l) {
|
||||
l->current_parm = 0;
|
||||
if (l->nparms > 0) return l->parms[l->current_parm++];
|
||||
else return (Parm *) 0;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
* Parm *ParmList_next()
|
||||
* ---------------------------------------------------------------------- */
|
||||
|
||||
Parm * ParmList_next(ParmList *l) {
|
||||
if (l->current_parm >= l->nparms) return 0;
|
||||
else return l->parms[l->current_parm++];
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------
|
||||
* void ParmList_print_types(DOHFile *f)
|
||||
*
|
||||
* Prints a comma separated list of all of the parameter types.
|
||||
* This is for generating valid C prototypes. Has to do some
|
||||
* manipulation of pointer types depending on how the call_type
|
||||
* variable has been set.
|
||||
* ---------------------------------------------------------------------- */
|
||||
|
||||
void ParmList_print_types(ParmList *l, DOHFile *f) {
|
||||
|
||||
int is_pointer;
|
||||
int pn;
|
||||
DataType *t;
|
||||
pn = 0;
|
||||
while(pn < l->nparms) {
|
||||
t = Parm_Gettype(l->parms[pn]);
|
||||
is_pointer = t->is_pointer;
|
||||
if (t->is_reference) {
|
||||
if (t->is_pointer) {
|
||||
t->is_pointer--;
|
||||
Printf(f,"%s&", DataType_print_real(t,0));
|
||||
t->is_pointer++;
|
||||
} else {
|
||||
Printf(f,"%s&", DataType_print_real(t,0));
|
||||
}
|
||||
} else {
|
||||
if (l->parms[pn]->call_type & CALL_VALUE) t->is_pointer++;
|
||||
if (l->parms[pn]->call_type & CALL_REFERENCE) t->is_pointer--;
|
||||
Printf(f,"%s", DataType_print_real(t,0));
|
||||
t->is_pointer = is_pointer;
|
||||
}
|
||||
pn++;
|
||||
if (pn < l->nparms)
|
||||
Printf(f,",");
|
||||
}
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------
|
||||
* void ParmList_print_args()
|
||||
*
|
||||
* Prints a comma separated list of all of the parameter arguments.
|
||||
* ---------------------------------------------------------------------- */
|
||||
|
||||
void ParmList_print_args(ParmList *l, DOHFile *f) {
|
||||
|
||||
int is_pointer;
|
||||
int pn;
|
||||
DataType *t;
|
||||
pn = 0;
|
||||
while(pn < l->nparms) {
|
||||
t = Parm_Gettype(l->parms[pn]);
|
||||
is_pointer = t->is_pointer;
|
||||
if (t->is_reference) {
|
||||
if (t->is_pointer) {
|
||||
t->is_pointer--;
|
||||
Printf(f,"%s&", DataType_print_full(t));
|
||||
t->is_pointer++;
|
||||
} else {
|
||||
Printf(f,"%s&", DataType_print_full(t));
|
||||
}
|
||||
} else {
|
||||
if (l->parms[pn]->call_type & CALL_VALUE) t->is_pointer++;
|
||||
if (l->parms[pn]->call_type & CALL_REFERENCE) t->is_pointer--;
|
||||
Printf(f,"%s", DataType_print_full(t));
|
||||
t->is_pointer = is_pointer;
|
||||
}
|
||||
Printf(f,"%s",Parm_Getname(l->parms[pn]));
|
||||
pn++;
|
||||
if (pn < l->nparms)
|
||||
Printf(f,",");
|
||||
}
|
||||
}
|
||||
|
||||
1126
SWIG/Source/Swig/oldtypes.c
Normal file
1126
SWIG/Source/Swig/oldtypes.c
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -205,6 +205,131 @@ extern DOH *Swig_map_match(DOHHash *ruleset, DOHString_or_char *rulename,
|
|||
extern char *Swig_copy_string(const char *c);
|
||||
extern void Swig_banner(DOHFile *f);
|
||||
|
||||
/* --- Legacy DataType interface. This is being replaced --- */
|
||||
|
||||
#define T_INT 1
|
||||
#define T_SHORT 2
|
||||
#define T_LONG 3
|
||||
#define T_UINT 4
|
||||
#define T_USHORT 5
|
||||
#define T_ULONG 6
|
||||
#define T_UCHAR 7
|
||||
#define T_SCHAR 8
|
||||
#define T_BOOL 9
|
||||
#define T_DOUBLE 10
|
||||
#define T_FLOAT 11
|
||||
#define T_CHAR 12
|
||||
#define T_USER 13
|
||||
#define T_VOID 14
|
||||
#define T_SYMBOL 98
|
||||
#define T_ERROR 99
|
||||
|
||||
/* These types are now obsolete, but defined for backwards compatibility */
|
||||
|
||||
#define T_SINT 90
|
||||
#define T_SSHORT 91
|
||||
#define T_SLONG 92
|
||||
|
||||
#define MAX_NAME 96
|
||||
|
||||
typedef struct DataType {
|
||||
int type; /* SWIG Type code */
|
||||
char name[MAX_NAME]; /* Name of type */
|
||||
char is_pointer; /* Is this a pointer */
|
||||
char implicit_ptr; /* Implicit ptr */
|
||||
char is_reference; /* A C++ reference type */
|
||||
char status; /* Is this datatype read-only? */
|
||||
char *_qualifier; /* A qualifier string (ie. const). */
|
||||
char *_arraystr; /* String containing array part */
|
||||
int id; /* type identifier (unique for every type). */
|
||||
} DataType;
|
||||
|
||||
extern DataType *NewDataType(int type);
|
||||
extern DataType *CopyDataType(DataType *type);
|
||||
extern void DelDataType(DataType *type);
|
||||
|
||||
extern char *DataType_qualifier(DataType *);
|
||||
extern void DataType_set_qualifier(DataType *, char *q);
|
||||
extern char *DataType_arraystr(DataType *);
|
||||
extern void DataType_set_arraystr(DataType *, char *a);
|
||||
|
||||
extern void DataType_primitive(DataType *);
|
||||
extern char *DataType_print_type(DataType *);
|
||||
extern char *DataType_print_full(DataType *);
|
||||
extern char *DataType_print_cast(DataType *);
|
||||
extern char *DataType_print_mangle(DataType *);
|
||||
extern char *DataType_print_real(DataType *, char *local);
|
||||
extern char *DataType_print_arraycast(DataType *);
|
||||
extern char *DataType_print_mangle_default(DataType *);
|
||||
extern void DataType_set_mangle(char *(*m)(DataType *));
|
||||
extern int DataType_array_dimensions(DataType *);
|
||||
extern char *DataType_get_dimension(DataType *, int);
|
||||
|
||||
/* Typedef support */
|
||||
extern int DataType_typedef_add(DataType *, char *name, int mode);
|
||||
extern void DataType_typedef_resolve(DataType *, int level);
|
||||
extern void DataType_typedef_replace(DataType *);
|
||||
extern int DataType_is_typedef(char *name);
|
||||
extern void DataType_updatestatus(DataType *, int newstatus);
|
||||
extern void DataType_init_typedef();
|
||||
extern void DataType_merge_scope(DOHHash *h);
|
||||
extern void DataType_new_scope(DOHHash *h);
|
||||
extern void *DataType_collapse_scope(char *name);
|
||||
extern void DataType_remember(DataType *);
|
||||
extern void DataType_record_base(char *derived, char *base);
|
||||
|
||||
extern int type_id;
|
||||
extern void emit_ptr_equivalence(DOHFile *tablef, DOHFile *initf);
|
||||
extern void emit_type_table(DOHFile *out);
|
||||
extern void typeeq_derived(char *n1, char *n2, char *cast);
|
||||
extern void typeeq_addtypedef(char *name, char *eqname, DataType *t);
|
||||
|
||||
#define STAT_REPLACETYPE 2
|
||||
|
||||
/* --- Deprecated parameter list structure */
|
||||
|
||||
#define CALL_VALUE 0x01
|
||||
#define CALL_REFERENCE 0x02
|
||||
#define CALL_OUTPUT 0x04
|
||||
|
||||
typedef struct Parm {
|
||||
DataType *_type; /* Datatype of this parameter */
|
||||
int call_type; /* Call type (value or reference or value) */
|
||||
char *_name; /* Name of parameter (optional) */
|
||||
char *_defvalue; /* Default value (as a string) */
|
||||
int ignore; /* Ignore flag */
|
||||
} Parm;
|
||||
|
||||
extern Parm *NewParm(DataType *type, char *n);
|
||||
extern Parm *CopyParm(Parm *p);
|
||||
extern void DelParm(Parm *p);
|
||||
extern void Parm_Settype(Parm *p, DataType *t);
|
||||
extern DataType *Parm_Gettype(Parm *p);
|
||||
extern void Parm_Setname(Parm *p, char *name);
|
||||
extern char *Parm_Getname(Parm *p);
|
||||
extern void Parm_Setvalue(Parm *p, char *value);
|
||||
extern char *Parm_Getvalue(Parm *p);
|
||||
|
||||
typedef struct ParmList {
|
||||
int maxparms; /* Max parms possible in current list */
|
||||
Parm **parms; /* Pointer to parms array */
|
||||
int current_parm; /* Internal state for get_first,get_next */
|
||||
int nparms; /* Number of parms in list */
|
||||
} ParmList;
|
||||
|
||||
extern ParmList *NewParmList();
|
||||
extern ParmList *CopyParmList(ParmList *);
|
||||
extern void DelParmList(ParmList *);
|
||||
extern Parm *ParmList_get(ParmList *l, int pos);
|
||||
extern void ParmList_append(ParmList *, Parm *);
|
||||
extern void ParmList_insert(ParmList *, Parm *, int);
|
||||
extern void ParmList_del(ParmList *, int);
|
||||
extern int ParmList_numarg(ParmList *);
|
||||
extern Parm *ParmList_first(ParmList *);
|
||||
extern Parm *ParmList_next(ParmList *);
|
||||
extern void ParmList_print_types(ParmList*,DOHFile *f);
|
||||
extern void ParmList_print_args(ParmList *, DOHFile *f);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue