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:
Dave Beazley 2000-07-13 19:38:59 +00:00
commit c780f4bcf4
20 changed files with 974 additions and 917 deletions

View file

@ -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
View 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

File diff suppressed because it is too large Load diff

View file

@ -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