Cleanup. Some changes to the type interface.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@576 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
99504189ce
commit
0d0978675d
8 changed files with 414 additions and 387 deletions
|
|
@ -390,8 +390,8 @@ throw_unhandled_guile_type_error (DataType *d)
|
||||||
Printf (stderr, "implicit_ptr %d\n", d->implicit_ptr);
|
Printf (stderr, "implicit_ptr %d\n", d->implicit_ptr);
|
||||||
Printf (stderr, "is_reference %d\n", d->is_reference);
|
Printf (stderr, "is_reference %d\n", d->is_reference);
|
||||||
Printf (stderr, " status %d\n", d->status);
|
Printf (stderr, " status %d\n", d->status);
|
||||||
Printf (stderr, " qualifier %s\n", (d->qualifier ? d->qualifier : ""));
|
/* Printf (stderr, " qualifier %s\n", (d->qualifier ? d->qualifier : ""));
|
||||||
Printf (stderr, " arraystr %s\n", (d->arraystr ? d->arraystr : ""));
|
Printf (stderr, " arraystr %s\n", (d->arraystr ? d->arraystr : ""));*/
|
||||||
Printf (stderr, " id %d\n", d->id);
|
Printf (stderr, " id %d\n", d->id);
|
||||||
|
|
||||||
Printf (stderr, "\n\nBAILING...\n"); // for now -ttn
|
Printf (stderr, "\n\nBAILING...\n"); // for now -ttn
|
||||||
|
|
|
||||||
|
|
@ -278,8 +278,8 @@ throw_unhandled_mzscheme_type_error (DataType *d)
|
||||||
Printf (stderr, "implicit_ptr %d\n", d->implicit_ptr);
|
Printf (stderr, "implicit_ptr %d\n", d->implicit_ptr);
|
||||||
Printf (stderr, "is_reference %d\n", d->is_reference);
|
Printf (stderr, "is_reference %d\n", d->is_reference);
|
||||||
Printf (stderr, " status %d\n", d->status);
|
Printf (stderr, " status %d\n", d->status);
|
||||||
Printf (stderr, " qualifier %s\n", (d->qualifier ? d->qualifier : ""));
|
/* Printf (stderr, " qualifier %s\n", (d->qualifier ? d->qualifier : ""));
|
||||||
Printf (stderr, " arraystr %s\n", (d->arraystr ? d->arraystr : ""));
|
Printf (stderr, " arraystr %s\n", (d->arraystr ? d->arraystr : "")); */
|
||||||
Printf (stderr, " id %d\n", d->id);
|
Printf (stderr, " id %d\n", d->id);
|
||||||
|
|
||||||
Printf (stderr, "\n\nBAILING...\n"); // for now -ttn
|
Printf (stderr, "\n\nBAILING...\n"); // for now -ttn
|
||||||
|
|
|
||||||
|
|
@ -405,9 +405,6 @@ public:
|
||||||
ccode = code;
|
ccode = code;
|
||||||
|
|
||||||
t = CopyDataType(type);
|
t = CopyDataType(type);
|
||||||
if (t->qualifier) {
|
|
||||||
// if (strcmp(t->qualifier,"const") == 0) Status = Status | STAT_READONLY;
|
|
||||||
}
|
|
||||||
update_local_type(t);
|
update_local_type(t);
|
||||||
if (!is_static) {
|
if (!is_static) {
|
||||||
lang->cpp_variable(name,iname,t);
|
lang->cpp_variable(name,iname,t);
|
||||||
|
|
|
||||||
|
|
@ -39,14 +39,14 @@ static char cvsroot[] = "$Header$";
|
||||||
void emit_extern_var(char *decl, DataType *t, int extern_type, FILE *f) {
|
void emit_extern_var(char *decl, DataType *t, int extern_type, FILE *f) {
|
||||||
char *arr = 0;
|
char *arr = 0;
|
||||||
|
|
||||||
if (t->arraystr) arr = t->arraystr;
|
arr = DataType_arraystr(t);
|
||||||
else arr = (char*)"";
|
if (!arr) arr = (char*)"";
|
||||||
|
|
||||||
switch(extern_type) {
|
switch(extern_type) {
|
||||||
|
|
||||||
case 0:
|
case 0:
|
||||||
// No extern. Just a forward reference
|
// No extern. Just a forward reference
|
||||||
if (t->arraystr)
|
if (DataType_arraystr(t))
|
||||||
t->is_pointer--;
|
t->is_pointer--;
|
||||||
|
|
||||||
if (t->is_reference) {
|
if (t->is_reference) {
|
||||||
|
|
@ -56,11 +56,11 @@ void emit_extern_var(char *decl, DataType *t, int extern_type, FILE *f) {
|
||||||
} else {
|
} else {
|
||||||
fprintf(f,"%s %s%s; \n", DataType_print_full(t), decl,arr);
|
fprintf(f,"%s %s%s; \n", DataType_print_full(t), decl,arr);
|
||||||
}
|
}
|
||||||
if (t->arraystr)
|
if (DataType_arraystr(t))
|
||||||
t->is_pointer++;
|
t->is_pointer++;
|
||||||
break;
|
break;
|
||||||
case 1: case 2:
|
case 1: case 2:
|
||||||
if (t->arraystr)
|
if (DataType_arraystr(t))
|
||||||
t->is_pointer--;
|
t->is_pointer--;
|
||||||
|
|
||||||
// Normal C/C++ extern
|
// Normal C/C++ extern
|
||||||
|
|
@ -72,7 +72,7 @@ void emit_extern_var(char *decl, DataType *t, int extern_type, FILE *f) {
|
||||||
} else {
|
} else {
|
||||||
fprintf(f,"extern %s %s%s; \n", DataType_print_full(t), decl,arr);
|
fprintf(f,"extern %s %s%s; \n", DataType_print_full(t), decl,arr);
|
||||||
}
|
}
|
||||||
if (t->arraystr)
|
if (DataType_arraystr(t))
|
||||||
t->is_pointer++;
|
t->is_pointer++;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
|
|
@ -555,14 +555,14 @@ statement : INCLUDE STRING LBRACE {
|
||||||
if ($4 > 0) {
|
if ($4 > 0) {
|
||||||
$2->is_pointer++;
|
$2->is_pointer++;
|
||||||
$2->status = STAT_READONLY;
|
$2->status = STAT_READONLY;
|
||||||
$2->arraystr = copy_string(Char(ArrayString));
|
DataType_set_arraystr($2,Char(ArrayString));
|
||||||
}
|
}
|
||||||
if ($3.is_reference) {
|
if ($3.is_reference) {
|
||||||
fprintf(stderr,"%s : Line %d. Error. Linkage to C++ reference not allowed.\n", input_file, line_number);
|
fprintf(stderr,"%s : Line %d. Error. Linkage to C++ reference not allowed.\n", input_file, line_number);
|
||||||
FatalError();
|
FatalError();
|
||||||
} else {
|
} else {
|
||||||
if ($2->qualifier) {
|
if (DataType_qualifier($2)) {
|
||||||
if ((strcmp($2->qualifier,"const") == 0)) {
|
if ((strcmp(DataType_qualifier($2),"const") == 0)) {
|
||||||
if ($5.type != T_ERROR)
|
if ($5.type != T_ERROR)
|
||||||
create_constant($3.id, $2, $5.id);
|
create_constant($3.id, $2, $5.id);
|
||||||
} else
|
} else
|
||||||
|
|
@ -1207,7 +1207,7 @@ typedef_decl : TYPEDEF type declaration {
|
||||||
$2->is_pointer += $3.is_pointer;
|
$2->is_pointer += $3.is_pointer;
|
||||||
// Turn this into a "pointer" corresponding to the array
|
// Turn this into a "pointer" corresponding to the array
|
||||||
$2->is_pointer++;
|
$2->is_pointer++;
|
||||||
$2->arraystr = copy_string(Char(ArrayString));
|
DataType_set_arraystr($2,Char(ArrayString));
|
||||||
DataType_typedef_add($2,$3.id,0);
|
DataType_typedef_add($2,$3.id,0);
|
||||||
lang->add_typedef($2,$3.id);
|
lang->add_typedef($2,$3.id);
|
||||||
fprintf(stderr,"%s : Line %d. Warning. Array type %s will be read-only without a typemap\n",input_file,line_number, $3.id);
|
fprintf(stderr,"%s : Line %d. Warning. Array type %s will be read-only without a typemap\n",input_file,line_number, $3.id);
|
||||||
|
|
@ -1242,7 +1242,7 @@ typedeflist : COMMA declaration typedeflist {
|
||||||
t = CopyDataType(Active_typedef);
|
t = CopyDataType(Active_typedef);
|
||||||
t->status = STAT_READONLY | STAT_REPLACETYPE;
|
t->status = STAT_READONLY | STAT_REPLACETYPE;
|
||||||
t->is_pointer += $2.is_pointer + 1;
|
t->is_pointer += $2.is_pointer + 1;
|
||||||
t->arraystr = copy_string(Char(ArrayString));
|
DataType_set_arraystr(t,Char(ArrayString));
|
||||||
DataType_typedef_add(t,$2.id,0);
|
DataType_typedef_add(t,$2.id,0);
|
||||||
lang->add_typedef(t,$2.id);
|
lang->add_typedef(t,$2.id);
|
||||||
cplus_register_type($2.id);
|
cplus_register_type($2.id);
|
||||||
|
|
@ -1280,14 +1280,14 @@ stail : SEMI { }
|
||||||
if ($3 > 0) {
|
if ($3 > 0) {
|
||||||
temp_typeptr->is_pointer++;
|
temp_typeptr->is_pointer++;
|
||||||
temp_typeptr->status = STAT_READONLY;
|
temp_typeptr->status = STAT_READONLY;
|
||||||
temp_typeptr->arraystr = copy_string(Char(ArrayString));
|
DataType_set_arraystr(temp_typeptr,Char(ArrayString));
|
||||||
}
|
}
|
||||||
if ($2.is_reference) {
|
if ($2.is_reference) {
|
||||||
fprintf(stderr,"%s : Line %d. Error. Linkage to C++ reference not allowed.\n", input_file, line_number);
|
fprintf(stderr,"%s : Line %d. Error. Linkage to C++ reference not allowed.\n", input_file, line_number);
|
||||||
FatalError();
|
FatalError();
|
||||||
} else {
|
} else {
|
||||||
if (temp_typeptr->qualifier) {
|
if (DataType_qualifier(temp_typeptr)) {
|
||||||
if ((strcmp(temp_typeptr->qualifier,"const") == 0)) {
|
if ((strcmp(DataType_qualifier(temp_typeptr),"const") == 0)) {
|
||||||
/* Okay. This is really some sort of C++ constant here. */
|
/* Okay. This is really some sort of C++ constant here. */
|
||||||
if ($4.type != T_ERROR)
|
if ($4.type != T_ERROR)
|
||||||
create_constant($2.id, temp_typeptr, $4.id);
|
create_constant($2.id, temp_typeptr, $4.id);
|
||||||
|
|
@ -1373,7 +1373,7 @@ parm_type : type pname {
|
||||||
if (InArray) {
|
if (InArray) {
|
||||||
$1->is_pointer++;
|
$1->is_pointer++;
|
||||||
// Add array string to the type
|
// Add array string to the type
|
||||||
$1->arraystr = copy_string(Char(ArrayString));
|
DataType_set_arraystr($1, Char(ArrayString));
|
||||||
}
|
}
|
||||||
$$ = NewParm($1,$2);
|
$$ = NewParm($1,$2);
|
||||||
$$->call_type = 0;
|
$$->call_type = 0;
|
||||||
|
|
@ -1394,7 +1394,7 @@ parm_type : type pname {
|
||||||
if (InArray) {
|
if (InArray) {
|
||||||
$$->t->is_pointer++;
|
$$->t->is_pointer++;
|
||||||
// Add array string to the type
|
// Add array string to the type
|
||||||
$$->t->arraystr = copy_string(Char(ArrayString));
|
DataType_set_arraystr($$->t, Char(ArrayString));
|
||||||
}
|
}
|
||||||
DelDataType($1);
|
DelDataType($1);
|
||||||
delete $3;
|
delete $3;
|
||||||
|
|
@ -1596,8 +1596,7 @@ type : TYPE_INT {
|
||||||
}
|
}
|
||||||
| CONST type {
|
| CONST type {
|
||||||
$$ = $2;
|
$$ = $2;
|
||||||
$$->qualifier = new char[6];
|
DataType_set_qualifier($$,"const");
|
||||||
strcpy($$->qualifier,"const");
|
|
||||||
}
|
}
|
||||||
| cpptype ID {
|
| cpptype ID {
|
||||||
$$ = NewDataType(0);
|
$$ = NewDataType(0);
|
||||||
|
|
@ -1667,8 +1666,7 @@ strict_type : TYPE_INT {
|
||||||
}
|
}
|
||||||
| CONST type {
|
| CONST type {
|
||||||
$$ = $2;
|
$$ = $2;
|
||||||
$$->qualifier = new char[6];
|
DataType_set_qualifier($$,"const");
|
||||||
strcpy($$->qualifier,"const");
|
|
||||||
}
|
}
|
||||||
| cpptype ID {
|
| cpptype ID {
|
||||||
$$ = NewDataType(0);
|
$$ = NewDataType(0);
|
||||||
|
|
@ -2374,8 +2372,8 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end {
|
||||||
Active_type = CopyDataType($1);
|
Active_type = CopyDataType($1);
|
||||||
$1->is_pointer += $2.is_pointer;
|
$1->is_pointer += $2.is_pointer;
|
||||||
$1->is_reference = $2.is_reference;
|
$1->is_reference = $2.is_reference;
|
||||||
if ($1->qualifier) {
|
if (DataType_qualifier($1)) {
|
||||||
if ((strcmp($1->qualifier,"const") == 0) && ($1->is_pointer == 0)) {
|
if ((strcmp(DataType_qualifier($1),"const") == 0) && ($1->is_pointer == 0)) {
|
||||||
// Okay. This is really some sort of C++ constant here.
|
// Okay. This is really some sort of C++ constant here.
|
||||||
if ($3.type != T_ERROR) {
|
if ($3.type != T_ERROR) {
|
||||||
iname = make_name($2.id);
|
iname = make_name($2.id);
|
||||||
|
|
@ -2421,7 +2419,7 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end {
|
||||||
Active_type = CopyDataType($1);
|
Active_type = CopyDataType($1);
|
||||||
$1->is_pointer += $2.is_pointer + 1;
|
$1->is_pointer += $2.is_pointer + 1;
|
||||||
$1->is_reference = $2.is_reference;
|
$1->is_reference = $2.is_reference;
|
||||||
$1->arraystr = copy_string(Char(ArrayString));
|
DataType_set_arraystr($1,Char(ArrayString));
|
||||||
if (!(tm = typemap_lookup((char*)"memberin",typemap_lang,$1,$2.id,(char*)"",(char*)"")))
|
if (!(tm = typemap_lookup((char*)"memberin",typemap_lang,$1,$2.id,(char*)"",(char*)"")))
|
||||||
Status = STAT_READONLY;
|
Status = STAT_READONLY;
|
||||||
|
|
||||||
|
|
@ -3004,7 +3002,7 @@ objc_var : type declaration {
|
||||||
Active_type = CopyDataType($1);
|
Active_type = CopyDataType($1);
|
||||||
$1->is_pointer += $2.is_pointer;
|
$1->is_pointer += $2.is_pointer;
|
||||||
$1->is_reference = $2.is_reference;
|
$1->is_reference = $2.is_reference;
|
||||||
$1->arraystr = copy_string(Char(ArrayString));
|
DataType_set_arraystr($1, Char(ArrayString));
|
||||||
if ($1->status & STAT_READONLY) {
|
if ($1->status & STAT_READONLY) {
|
||||||
if (!(tm = typemap_lookup((char*)"memberin",typemap_lang,$1,$2.id,(char*)"",(char*)"")))
|
if (!(tm = typemap_lookup((char*)"memberin",typemap_lang,$1,$2.id,(char*)"",(char*)"")))
|
||||||
Status = Status | STAT_READONLY;
|
Status = Status | STAT_READONLY;
|
||||||
|
|
@ -3049,7 +3047,7 @@ objc_vartail : COMMA declaration objc_vartail {
|
||||||
DataType *t = CopyDataType (Active_type);
|
DataType *t = CopyDataType (Active_type);
|
||||||
t->is_pointer += $2.is_pointer;
|
t->is_pointer += $2.is_pointer;
|
||||||
t->is_reference = $2.is_reference;
|
t->is_reference = $2.is_reference;
|
||||||
t->arraystr = copy_string(Char(ArrayString));
|
DataType_set_arraystr(t,Char(ArrayString));
|
||||||
if (t->status & STAT_READONLY) {
|
if (t->status & STAT_READONLY) {
|
||||||
if (!(tm = typemap_lookup((char*)"memberin",typemap_lang,t,$2.id,(char*)"",(char*)"")))
|
if (!(tm = typemap_lookup((char*)"memberin",typemap_lang,t,$2.id,(char*)"",(char*)"")))
|
||||||
Status = Status | STAT_READONLY;
|
Status = Status | STAT_READONLY;
|
||||||
|
|
@ -3247,7 +3245,7 @@ tm_tail : COMMA typemap_parm tm_tail {
|
||||||
typemap_parm : type typemap_name {
|
typemap_parm : type typemap_name {
|
||||||
if (InArray) {
|
if (InArray) {
|
||||||
$1->is_pointer++;
|
$1->is_pointer++;
|
||||||
$1->arraystr = copy_string(Char(ArrayString));
|
DataType_set_arraystr($1,Char(ArrayString));
|
||||||
}
|
}
|
||||||
$$ = new TMParm;
|
$$ = new TMParm;
|
||||||
$$->p = NewParm($1,$2);
|
$$->p = NewParm($1,$2);
|
||||||
|
|
@ -3264,7 +3262,7 @@ typemap_parm : type typemap_name {
|
||||||
$$->p->call_type = 0;
|
$$->p->call_type = 0;
|
||||||
if (InArray) {
|
if (InArray) {
|
||||||
$$->p->t->is_pointer++;
|
$$->p->t->is_pointer++;
|
||||||
$$->p->t->arraystr = copy_string(Char(ArrayString));
|
DataType_set_arraystr($$->p->t,Char(ArrayString));
|
||||||
}
|
}
|
||||||
$$->args = tm_parm;
|
$$->args = tm_parm;
|
||||||
DelDataType($1);
|
DelDataType($1);
|
||||||
|
|
|
||||||
|
|
@ -112,8 +112,8 @@ typedef struct DataType {
|
||||||
char implicit_ptr; // Implicit ptr
|
char implicit_ptr; // Implicit ptr
|
||||||
char is_reference; // A C++ reference type
|
char is_reference; // A C++ reference type
|
||||||
char status; // Is this datatype read-only?
|
char 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).
|
||||||
|
|
||||||
// Temporary: catches accidental use.
|
// Temporary: catches accidental use.
|
||||||
|
|
@ -127,6 +127,11 @@ 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);
|
||||||
|
|
||||||
|
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 void DataType_primitive(DataType *);
|
||||||
extern char *DataType_print_type(DataType *);
|
extern char *DataType_print_type(DataType *);
|
||||||
extern char *DataType_print_full(DataType *);
|
extern char *DataType_print_full(DataType *);
|
||||||
|
|
|
||||||
|
|
@ -168,14 +168,14 @@ void typemap_apply(DataType *tm_type, char *tm_name, DataType *type, char *pname
|
||||||
|
|
||||||
// Check to see if an array typemap has been applied to a non-array type
|
// Check to see if an array typemap has been applied to a non-array type
|
||||||
|
|
||||||
if ((tm_type->arraystr) && (!type->arraystr)) {
|
if ((DataType_arraystr(tm_type)) && (!DataType_arraystr(type))) {
|
||||||
fprintf(stderr,"%s:%d: Warning. Array typemap has been applied to a non-array type.\n",
|
fprintf(stderr,"%s:%d: Warning. Array typemap has been applied to a non-array type.\n",
|
||||||
input_file,line_number);
|
input_file,line_number);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If both are arrays, make sure they have the same dimension
|
// If both are arrays, make sure they have the same dimension
|
||||||
|
|
||||||
if ((tm_type->arraystr) && (type->arraystr)) {
|
if ((DataType_arraystr(tm_type)) && (DataType_arraystr(type))) {
|
||||||
char s[128],*t;
|
char s[128],*t;
|
||||||
if (DataType_array_dimensions(tm_type) != DataType_array_dimensions(type)) {
|
if (DataType_array_dimensions(tm_type) != DataType_array_dimensions(type)) {
|
||||||
fprintf(stderr,"%s:%d: Warning. Array types have different number of dimensions.\n",
|
fprintf(stderr,"%s:%d: Warning. Array types have different number of dimensions.\n",
|
||||||
|
|
@ -266,7 +266,7 @@ void typemap_register(char *op, char *lang, DataType *type, char *pname,
|
||||||
is_default = 1;
|
is_default = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
key = typemap_string(lang,tm->type,pname,tm->type->arraystr, op);
|
key = typemap_string(lang,tm->type,pname,DataType_arraystr(tm->type), op);
|
||||||
|
|
||||||
// Get any previous setting of the typemap
|
// Get any previous setting of the typemap
|
||||||
|
|
||||||
|
|
@ -362,7 +362,7 @@ void typemap_register_default(char *op, char *lang, int type, int ptr, char *arr
|
||||||
// Create a raw datatype from the arguments
|
// Create a raw datatype from the arguments
|
||||||
|
|
||||||
t->is_pointer = ptr;
|
t->is_pointer = ptr;
|
||||||
t->arraystr = copy_string(arraystr);
|
DataType_set_arraystr(t,arraystr);
|
||||||
|
|
||||||
// Now, go register this as a default type
|
// Now, go register this as a default type
|
||||||
|
|
||||||
|
|
@ -405,22 +405,23 @@ TypeMap *typemap_search(char *key, int id) {
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
TypeMap *typemap_search_array(char *op, char *lang, DataType *type, char *pname, DOHString *str) {
|
TypeMap *typemap_search_array(char *op, char *lang, DataType *type, char *pname, DOHString *str) {
|
||||||
char *origarr = type->arraystr;
|
char origarr[1024];
|
||||||
char *key;
|
char *key;
|
||||||
int ndim,i,j,k,n;
|
int ndim,i,j,k,n;
|
||||||
TypeMap *tm;
|
TypeMap *tm;
|
||||||
char temp[10];
|
char temp[10];
|
||||||
|
|
||||||
if (!type->arraystr) return 0;
|
if (!DataType_arraystr(type)) return 0;
|
||||||
|
|
||||||
|
strcpy(origarr,DataType_arraystr(type));
|
||||||
// First check to see if exactly this array has been mapped
|
// First check to see if exactly this array has been mapped
|
||||||
|
|
||||||
key = typemap_string(lang,type,pname,type->arraystr,op);
|
key = typemap_string(lang,type,pname,DataType_arraystr(type),op);
|
||||||
tm = typemap_search(key,type->id);
|
tm = typemap_search(key,type->id);
|
||||||
|
|
||||||
// Check for unnamed array of specific dimensions
|
// Check for unnamed array of specific dimensions
|
||||||
if (!tm) {
|
if (!tm) {
|
||||||
key = typemap_string(lang,type,(char*)"",type->arraystr,op);
|
key = typemap_string(lang,type,(char*)"",DataType_arraystr(type),op);
|
||||||
tm = typemap_search(key,type->id);
|
tm = typemap_search(key,type->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -441,14 +442,14 @@ TypeMap *typemap_search_array(char *op, char *lang, DataType *type, char *pname,
|
||||||
}
|
}
|
||||||
k = k >> 1;
|
k = k >> 1;
|
||||||
}
|
}
|
||||||
type->arraystr = Char(tempastr);
|
DataType_set_arraystr(type, Char(tempastr));
|
||||||
key = typemap_string(lang,type,pname,type->arraystr,op);
|
key = typemap_string(lang,type,pname,DataType_arraystr(type),op);
|
||||||
tm = typemap_search(key,type->id);
|
tm = typemap_search(key,type->id);
|
||||||
if (!tm) {
|
if (!tm) {
|
||||||
key = typemap_string(lang,type,(char*)"",type->arraystr,op);
|
key = typemap_string(lang,type,(char*)"",DataType_arraystr(type),op);
|
||||||
tm = typemap_search(key,type->id);
|
tm = typemap_search(key,type->id);
|
||||||
}
|
}
|
||||||
type->arraystr = origarr;
|
DataType_set_arraystr(type,origarr);
|
||||||
if (tm) {
|
if (tm) {
|
||||||
Delete(tempastr);
|
Delete(tempastr);
|
||||||
break;
|
break;
|
||||||
|
|
@ -502,9 +503,9 @@ static void typemap_locals(DataType *t, char *pname, DOHString *s, ParmList *l,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Have a real parameter here
|
// Have a real parameter here
|
||||||
if (tt->arraystr) {
|
if (DataType_arraystr(tt)) {
|
||||||
tt->is_pointer--;
|
tt->is_pointer--;
|
||||||
Printf(str,"%s%s",p->name, tt->arraystr);
|
Printf(str,"%s%s",p->name, DataType_arraystr(tt));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Printf(str,"%s",p->name);
|
Printf(str,"%s",p->name);
|
||||||
|
|
@ -525,7 +526,7 @@ static void typemap_locals(DataType *t, char *pname, DOHString *s, ParmList *l,
|
||||||
else
|
else
|
||||||
new_name = Wrapper_new_localv(f,str, DataType_print_full(tt), str, 0);
|
new_name = Wrapper_new_localv(f,str, DataType_print_full(tt), str, 0);
|
||||||
|
|
||||||
if (tt->arraystr) tt->is_pointer++;
|
if (DataType_arraystr(tt)) tt->is_pointer++;
|
||||||
// Substitute
|
// Substitute
|
||||||
Replace(s,p->name,new_name,DOH_REPLACE_ID);
|
Replace(s,p->name,new_name,DOH_REPLACE_ID);
|
||||||
}
|
}
|
||||||
|
|
@ -535,7 +536,7 @@ static void typemap_locals(DataType *t, char *pname, DOHString *s, ParmList *l,
|
||||||
// If the original datatype was an array. We're going to go through and substitute
|
// If the original datatype was an array. We're going to go through and substitute
|
||||||
// it's array dimensions
|
// it's array dimensions
|
||||||
|
|
||||||
if (t->arraystr) {
|
if (DataType_arraystr(t)) {
|
||||||
char temp[10];
|
char temp[10];
|
||||||
for (int i = 0; i < DataType_array_dimensions(t); i++) {
|
for (int i = 0; i < DataType_array_dimensions(t); i++) {
|
||||||
sprintf(temp,"$dim%d",i);
|
sprintf(temp,"$dim%d",i);
|
||||||
|
|
@ -710,12 +711,15 @@ char *typemap_lookup(char *op, char *lang, DataType *type, char *pname, char *so
|
||||||
|
|
||||||
// Copy old array string (just in case)
|
// Copy old array string (just in case)
|
||||||
|
|
||||||
oldary = m->type->arraystr;
|
if (DataType_arraystr(m->type))
|
||||||
|
oldary = copy_string(DataType_arraystr(m->type));
|
||||||
|
else
|
||||||
|
oldary = 0;
|
||||||
|
|
||||||
// If the mapping type is an array and has the 'ANY' keyword, we
|
// If the mapping type is an array and has the 'ANY' keyword, we
|
||||||
// have to play some magic
|
// have to play some magic
|
||||||
|
|
||||||
if ((m->type->arraystr) && (type->arraystr)) {
|
if ((DataType_arraystr(m->type)) && (DataType_arraystr(type))) {
|
||||||
// Build up the new array string
|
// Build up the new array string
|
||||||
Clear(newarray);
|
Clear(newarray);
|
||||||
for (int n = 0; n < DataType_array_dimensions(m->type); n++) {
|
for (int n = 0; n < DataType_array_dimensions(m->type); n++) {
|
||||||
|
|
@ -726,14 +730,16 @@ char *typemap_lookup(char *op, char *lang, DataType *type, char *pname, char *so
|
||||||
Printf(newarray,"[%s]", d);
|
Printf(newarray,"[%s]", d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m->type->arraystr = Char(newarray);
|
DataType_set_arraystr(m->type, Char(newarray));
|
||||||
} else if (type->arraystr) {
|
} else if (DataType_arraystr(type)) {
|
||||||
// If an array string is available for the current datatype,
|
// If an array string is available for the current datatype,
|
||||||
// make it available.
|
// make it available.
|
||||||
m->type->arraystr = type->arraystr;
|
DataType_set_arraystr(m->type,DataType_arraystr(type));
|
||||||
}
|
}
|
||||||
result = typemap_lookup_internal(op,lang,m->type,ppname,source,target,f);
|
result = typemap_lookup_internal(op,lang,m->type,ppname,source,target,f);
|
||||||
m->type->arraystr = oldary;
|
DataType_set_arraystr(m->type,oldary);
|
||||||
|
if (oldary)
|
||||||
|
delete oldary;
|
||||||
m->type->is_pointer -= drop_pointer;
|
m->type->is_pointer -= drop_pointer;
|
||||||
if (result) {
|
if (result) {
|
||||||
type->is_pointer += drop_pointer;
|
type->is_pointer += drop_pointer;
|
||||||
|
|
@ -762,8 +768,7 @@ char *typemap_lookup(char *op, char *lang, DataType *type, char *pname, char *so
|
||||||
// Still no result, go even more primitive
|
// Still no result, go even more primitive
|
||||||
t->type = T_USER;
|
t->type = T_USER;
|
||||||
t->is_pointer = 1;
|
t->is_pointer = 1;
|
||||||
if (t->arraystr) delete [] t->arraystr;
|
DataType_set_arraystr(t,0);
|
||||||
t->arraystr = 0;
|
|
||||||
DataType_primitive(t);
|
DataType_primitive(t);
|
||||||
result = typemap_lookup_internal(op,lang,t,(char*)"SWIG_DEFAULT_TYPE",source,target,f);
|
result = typemap_lookup_internal(op,lang,t,(char*)"SWIG_DEFAULT_TYPE",source,target,f);
|
||||||
}
|
}
|
||||||
|
|
@ -807,8 +812,8 @@ char *typemap_check_internal(char *op, char *lang, DataType *type, char *pname)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for unnamed array
|
// Check for unnamed array
|
||||||
if ((!tm) && (type->arraystr)) {
|
if ((!tm) && (DataType_arraystr(type))) {
|
||||||
key = typemap_string(lang,type,(char*)"",type->arraystr,op);
|
key = typemap_string(lang,type,(char*)"",DataType_arraystr(type),op);
|
||||||
tm = typemap_search(key,type->id);
|
tm = typemap_search(key,type->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -866,12 +871,15 @@ char *typemap_check(char *op, char *lang, DataType *type, char *pname) {
|
||||||
if (*(m->name)) ppname = m->name;
|
if (*(m->name)) ppname = m->name;
|
||||||
else ppname = pname;
|
else ppname = pname;
|
||||||
m->type->is_pointer += drop_pointer;
|
m->type->is_pointer += drop_pointer;
|
||||||
oldary = m->type->arraystr;
|
if (DataType_arraystr(m->type))
|
||||||
|
oldary = copy_string(DataType_arraystr(m->type));
|
||||||
|
else
|
||||||
|
oldary = 0;
|
||||||
|
|
||||||
// If the mapping type is an array and has the 'ANY' keyword, we
|
// If the mapping type is an array and has the 'ANY' keyword, we
|
||||||
// have to play some magic
|
// have to play some magic
|
||||||
|
|
||||||
if ((m->type->arraystr) && (type->arraystr)) {
|
if ((DataType_arraystr(m->type)) && (DataType_arraystr(type))) {
|
||||||
// Build up the new array string
|
// Build up the new array string
|
||||||
Clear(newarray);
|
Clear(newarray);
|
||||||
for (int n = 0; n < DataType_array_dimensions(m->type); n++) {
|
for (int n = 0; n < DataType_array_dimensions(m->type); n++) {
|
||||||
|
|
@ -882,13 +890,13 @@ char *typemap_check(char *op, char *lang, DataType *type, char *pname) {
|
||||||
Printf(newarray,"[%s]", d);
|
Printf(newarray,"[%s]", d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
oldary = m->type->arraystr;
|
DataType_set_arraystr(m->type, Char(newarray));
|
||||||
m->type->arraystr = Char(newarray);
|
} else if (DataType_arraystr(type)) {
|
||||||
} else if (type->arraystr) {
|
DataType_set_arraystr(m->type, DataType_arraystr(type));
|
||||||
m->type->arraystr = type->arraystr;
|
|
||||||
}
|
}
|
||||||
result = typemap_check_internal(op,lang,m->type,ppname);
|
result = typemap_check_internal(op,lang,m->type,ppname);
|
||||||
m->type->arraystr = oldary;
|
DataType_set_arraystr(m->type,oldary);
|
||||||
|
if (oldary) delete oldary;
|
||||||
m->type->is_pointer -= drop_pointer;
|
m->type->is_pointer -= drop_pointer;
|
||||||
if (result) {
|
if (result) {
|
||||||
type->is_pointer += drop_pointer;
|
type->is_pointer += drop_pointer;
|
||||||
|
|
@ -916,8 +924,7 @@ char *typemap_check(char *op, char *lang, DataType *type, char *pname) {
|
||||||
// Still no result, go even more primitive
|
// Still no result, go even more primitive
|
||||||
t->type = T_USER;
|
t->type = T_USER;
|
||||||
t->is_pointer = 1;
|
t->is_pointer = 1;
|
||||||
if (t->arraystr) delete [] t->arraystr;
|
DataType_set_arraystr(t,0);
|
||||||
t->arraystr = 0;
|
|
||||||
DataType_primitive(t);
|
DataType_primitive(t);
|
||||||
result = typemap_check_internal(op,lang,t,(char*)"SWIG_DEFAULT_TYPE");
|
result = typemap_check_internal(op,lang,t,(char*)"SWIG_DEFAULT_TYPE");
|
||||||
}
|
}
|
||||||
|
|
@ -939,7 +946,7 @@ void typemap_clear(char *op, char *lang, DataType *type, char *pname) {
|
||||||
char *key;
|
char *key;
|
||||||
TypeMap *tm;
|
TypeMap *tm;
|
||||||
|
|
||||||
key = typemap_string(lang,type,pname,type->arraystr,op);
|
key = typemap_string(lang,type,pname,DataType_arraystr(type),op);
|
||||||
|
|
||||||
// Look for any previous version, simply set the last id if
|
// Look for any previous version, simply set the last id if
|
||||||
// applicable.
|
// applicable.
|
||||||
|
|
@ -966,7 +973,7 @@ void typemap_copy(char *op, char *lang, DataType *stype, char *sname,
|
||||||
|
|
||||||
// Try to locate a previous typemap
|
// Try to locate a previous typemap
|
||||||
|
|
||||||
key = typemap_string(lang,stype,sname,stype->arraystr,op);
|
key = typemap_string(lang,stype,sname,DataType_arraystr(stype),op);
|
||||||
tm = typemap_search(key,stype->id);
|
tm = typemap_search(key,stype->id);
|
||||||
if (!tm) return;
|
if (!tm) return;
|
||||||
if (strcmp(ttype->name,"PREVIOUS") == 0) {
|
if (strcmp(ttype->name,"PREVIOUS") == 0) {
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue