Some API changes to DataType

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@580 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Dave Beazley 2000-07-14 21:37:34 +00:00
commit 307207ea64
4 changed files with 60 additions and 40 deletions

View file

@ -2061,7 +2061,7 @@ void cplus_emit_constructor(char *classname, char *classtype, char *classrename,
if (p->call_type & CALL_REFERENCE) {
pt->is_pointer--;
}
Printf(wrap, DataType_print_real(pt,Parm_Getname(p)));
Printf(wrap, DataType_str(pt,Parm_Getname(p)));
if (p->call_type & CALL_REFERENCE) {
pt->is_pointer++;
}
@ -2399,7 +2399,7 @@ void cplus_emit_variable_set(char *classname, char *classtype, char *classrename
}
Printv(wrap,
"static ", DataType_print_type(type), " ", cname, "(",
classtype, classname, " *obj, ", DataType_print_real(type,(char*)"val"), ") {\n",
classtype, classname, " *obj, ", DataType_str(type,(char*)"val"), ") {\n",
0);
if (is_user) {
type->is_pointer--;
@ -2432,7 +2432,7 @@ void cplus_emit_variable_set(char *classname, char *classtype, char *classrename
char temp[512];
Printv(wrap,
"static ", DataType_print_type(type), " ", cname, "(",
classtype, classname, " *obj, ", DataType_print_real(type,(char*)"val"), ") {\n",
classtype, classname, " *obj, ", DataType_str(type,(char*)"val"), ") {\n",
0);
sprintf(temp,"obj->%s",mname);
if (CPlusPlus) {

View file

@ -291,20 +291,20 @@ void ParmList_print_types(ParmList *l, DOHFile *f) {
while(pn < l->nparms) {
t = Parm_Gettype(l->parms[pn]);
is_pointer = t->is_pointer;
if (t->is_reference) {
/* if (t->is_reference) {
if (t->is_pointer) {
t->is_pointer--;
Printf(f,"%s&", DataType_print_real(t,0));
Printf(f,"%s&", DataType_str(t,0));
t->is_pointer++;
} else {
Printf(f,"%s&", DataType_print_real(t,0));
Printf(f,"%s&", DataType_str(t,0));
}
} else {
} 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));
Printf(f,"%s", DataType_str(t,0));
t->is_pointer = is_pointer;
}
/* }*/
pn++;
if (pn < l->nparms)
Printf(f,",");
@ -326,7 +326,7 @@ void ParmList_print_args(ParmList *l, DOHFile *f) {
while(pn < l->nparms) {
t = Parm_Gettype(l->parms[pn]);
is_pointer = t->is_pointer;
if (t->is_reference) {
/* if (t->is_reference) {
if (t->is_pointer) {
t->is_pointer--;
Printf(f,"%s&", DataType_print_full(t));
@ -335,11 +335,16 @@ void ParmList_print_args(ParmList *l, DOHFile *f) {
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));
Printf(f,"%s", DataType_str(t,0));
t->is_pointer = is_pointer;
/*
}
*/
Printf(f,"%s",Parm_Getname(l->parms[pn]));
pn++;
if (pn < l->nparms)

View file

@ -234,30 +234,6 @@ char *DataType_print_full(DataType *t) {
}
}
/* --------------------------------------------------------------------
* char *print_real()
*
* Prints real type, with qualifiers and arrays if necessary.
* -------------------------------------------------------------------- */
char *DataType_print_real(DataType *t, char *local) {
static char result[8][256];
static int ri = 0;
int oldstatus;
oldstatus = t->status;
t->status = t->status & (~STAT_REPLACETYPE);
ri = ri % 8;
if (t->_arraystr) t->is_pointer--;
strcpy(result[ri], DataType_print_full(t));
if (local) strcat(result[ri],local);
if (t->_arraystr) {
strcat(result[ri],t->_arraystr);
t->is_pointer++;
}
t->status = oldstatus;
return result[ri++];
}
/* --------------------------------------------------------------------
* char *print_cast()
*
@ -377,6 +353,40 @@ void DataType_set_mangle(char *(*m)(DataType *t)) {
mangler = m;
}
/* -----------------------------------------------------------------------------
* char *DataType_str()
*
* Produces an exact string representation of the datatype along with an optional
* variable name.
* ----------------------------------------------------------------------------- */
char *DataType_str(DataType *t, char *name) {
static char result[8][256];
static int ri = 0;
int i;
ri = ri % 8;
if (t->_arraystr) t->is_pointer--;
if (t->is_reference) t->is_pointer--;
if (t->_qualifier) {
sprintf(result[ri],"%s %s", t->_qualifier, t->name);
} else {
sprintf(result[ri],"%s ", t->name);
}
for (i = 0; i < (t->is_pointer-t->implicit_ptr); i++) {
strcat(result[ri],"*");
}
if (t->is_reference) strcat(result[ri],"&");
if (name) strcat(result[ri],name);
if (t->_arraystr) {
strcat(result[ri],t->_arraystr);
t->is_pointer++;
}
if (t->is_reference) t->is_pointer++;
return result[ri++];
}
/* --------------------------------------------------------------------
* int DataType_array_dimensions()
*

View file

@ -235,10 +235,10 @@ extern void Swig_banner(DOHFile *f);
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? */
int is_pointer; /* Is this a pointer */
int implicit_ptr; /* Implicit ptr */
int is_reference; /* A C++ reference type */
int 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). */
@ -248,6 +248,12 @@ extern DataType *NewDataType(int type);
extern DataType *CopyDataType(DataType *type);
extern void DelDataType(DataType *type);
/* -- New type interface -- */
extern char *DataType_str(DataType *, char *name); /* Exact datatype */
/* -- Old type interface -- */
extern char *DataType_qualifier(DataType *);
extern void DataType_set_qualifier(DataType *, char *q);
extern char *DataType_arraystr(DataType *);
@ -258,7 +264,6 @@ 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 *));