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:
parent
5f8ffd5c5d
commit
307207ea64
4 changed files with 60 additions and 40 deletions
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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 *));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue