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) { if (p->call_type & CALL_REFERENCE) {
pt->is_pointer--; 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) { if (p->call_type & CALL_REFERENCE) {
pt->is_pointer++; pt->is_pointer++;
} }
@ -2399,7 +2399,7 @@ void cplus_emit_variable_set(char *classname, char *classtype, char *classrename
} }
Printv(wrap, Printv(wrap,
"static ", DataType_print_type(type), " ", cname, "(", "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); 0);
if (is_user) { if (is_user) {
type->is_pointer--; type->is_pointer--;
@ -2432,7 +2432,7 @@ void cplus_emit_variable_set(char *classname, char *classtype, char *classrename
char temp[512]; char temp[512];
Printv(wrap, Printv(wrap,
"static ", DataType_print_type(type), " ", cname, "(", "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); 0);
sprintf(temp,"obj->%s",mname); sprintf(temp,"obj->%s",mname);
if (CPlusPlus) { if (CPlusPlus) {

View file

@ -291,20 +291,20 @@ void ParmList_print_types(ParmList *l, DOHFile *f) {
while(pn < l->nparms) { while(pn < l->nparms) {
t = Parm_Gettype(l->parms[pn]); t = Parm_Gettype(l->parms[pn]);
is_pointer = t->is_pointer; is_pointer = t->is_pointer;
if (t->is_reference) { /* if (t->is_reference) {
if (t->is_pointer) { if (t->is_pointer) {
t->is_pointer--; t->is_pointer--;
Printf(f,"%s&", DataType_print_real(t,0)); Printf(f,"%s&", DataType_str(t,0));
t->is_pointer++; t->is_pointer++;
} else { } 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_VALUE) t->is_pointer++;
if (l->parms[pn]->call_type & CALL_REFERENCE) 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; t->is_pointer = is_pointer;
} /* }*/
pn++; pn++;
if (pn < l->nparms) if (pn < l->nparms)
Printf(f,","); Printf(f,",");
@ -326,7 +326,7 @@ void ParmList_print_args(ParmList *l, DOHFile *f) {
while(pn < l->nparms) { while(pn < l->nparms) {
t = Parm_Gettype(l->parms[pn]); t = Parm_Gettype(l->parms[pn]);
is_pointer = t->is_pointer; is_pointer = t->is_pointer;
if (t->is_reference) { /* if (t->is_reference) {
if (t->is_pointer) { if (t->is_pointer) {
t->is_pointer--; t->is_pointer--;
Printf(f,"%s&", DataType_print_full(t)); 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)); Printf(f,"%s&", DataType_print_full(t));
} }
} else { } else {
*/
if (l->parms[pn]->call_type & CALL_VALUE) t->is_pointer++; if (l->parms[pn]->call_type & CALL_VALUE) t->is_pointer++;
if (l->parms[pn]->call_type & CALL_REFERENCE) 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; t->is_pointer = is_pointer;
/*
} }
*/
Printf(f,"%s",Parm_Getname(l->parms[pn])); Printf(f,"%s",Parm_Getname(l->parms[pn]));
pn++; pn++;
if (pn < l->nparms) 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() * char *print_cast()
* *
@ -377,6 +353,40 @@ void DataType_set_mangle(char *(*m)(DataType *t)) {
mangler = m; 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() * int DataType_array_dimensions()
* *

View file

@ -235,10 +235,10 @@ extern void Swig_banner(DOHFile *f);
typedef struct DataType { typedef struct DataType {
int type; /* SWIG Type code */ int type; /* SWIG Type code */
char name[MAX_NAME]; /* Name of type */ char name[MAX_NAME]; /* Name of type */
char is_pointer; /* Is this a pointer */ int is_pointer; /* Is this a pointer */
char implicit_ptr; /* Implicit ptr */ int implicit_ptr; /* Implicit ptr */
char is_reference; /* A C++ reference type */ int is_reference; /* A C++ reference type */
char status; /* Is this datatype read-only? */ int status; /* Is this datatype read-only? */
char *_qualifier; /* A qualifier string (ie. const). */ char *_qualifier; /* A qualifier string (ie. const). */
char *_arraystr; /* String containing array part */ char *_arraystr; /* String containing array part */
int id; /* type identifier (unique for every type). */ int id; /* type identifier (unique for every type). */
@ -248,6 +248,12 @@ extern DataType *NewDataType(int type);
extern DataType *CopyDataType(DataType *type); extern DataType *CopyDataType(DataType *type);
extern void DelDataType(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 char *DataType_qualifier(DataType *);
extern void DataType_set_qualifier(DataType *, char *q); extern void DataType_set_qualifier(DataType *, char *q);
extern char *DataType_arraystr(DataType *); 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_full(DataType *);
extern char *DataType_print_cast(DataType *); extern char *DataType_print_cast(DataType *);
extern char *DataType_print_mangle(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_arraycast(DataType *);
extern char *DataType_print_mangle_default(DataType *); extern char *DataType_print_mangle_default(DataType *);
extern void DataType_set_mangle(char *(*m)(DataType *)); extern void DataType_set_mangle(char *(*m)(DataType *));