Hid the name and is_reference attributes of types

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@626 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Dave Beazley 2000-08-06 04:01:14 +00:00
commit 7f24ebca9a
14 changed files with 248 additions and 220 deletions

View file

@ -394,10 +394,10 @@ throw_unhandled_guile_type_error (DataType *d)
fflush (stdout); fflush (stdout);
Printf (stderr, "ERROR: Unhandled GUILE type error.\n"); Printf (stderr, "ERROR: Unhandled GUILE type error.\n");
Printf (stderr, " type %d\n", DataType_type(d)); Printf (stderr, " type %d\n", DataType_type(d));
Printf (stderr, " name %s\n", d->name); Printf (stderr, " name %s\n", DataType_Getname(d));
Printf (stderr, " is_pointer %d\n", d->is_pointer); Printf (stderr, " is_pointer %d\n", d->is_pointer);
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", DataType_is_reference(d));
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 : ""));*/
@ -830,7 +830,7 @@ GUILE::usage_func (char *iname, DataType *d, ParmList *l, DOHString *usage)
if (DataType_type(pt) != T_VOID) { if (DataType_type(pt) != T_VOID) {
// Print the type. // Print the type.
Printv(usage, " <", pt->name, 0); Printv(usage, " <", DataType_Getname(pt), 0);
if (pt->is_pointer) { if (pt->is_pointer) {
for (int j = 0; j < (pt->is_pointer - pt->implicit_ptr); j++) { for (int j = 0; j < (pt->is_pointer - pt->implicit_ptr); j++) {
Putc('*', usage); Putc('*', usage);
@ -880,7 +880,7 @@ GUILE::usage_returns (char *iname, DataType *d, ParmList *l, DOHString *usage)
++have_param; ++have_param;
// Print the type. // Print the type.
Printv(param," $", pt->name, 0); Printv(param," $", DataType_Getname(pt), 0);
if (pt->is_pointer) { if (pt->is_pointer) {
for (j = 0; j < (pt->is_pointer - pt->implicit_ptr - 1); j++) { for (j = 0; j < (pt->is_pointer - pt->implicit_ptr - 1); j++) {
Putc('*', param); Putc('*', param);

View file

@ -130,8 +130,8 @@ char *JAVA::SwigTcToJavaType(DataType *t, int ret, int inShadow) {
case T_SCHAR: return (char*)"byte []"; case T_SCHAR: return (char*)"byte []";
case T_BOOL: return (char*)"boolean []"; case T_BOOL: return (char*)"boolean []";
case T_VOID: case T_VOID:
case T_USER: if(inShadow && Getattr(shadow_classes,t->name)) case T_USER: if(inShadow && Getattr(shadow_classes,DataType_Getname(t)))
return GetChar(shadow_classes,t->name); return GetChar(shadow_classes,DataType_Getname(t));
else return (char*)"long"; else return (char*)"long";
} }
} else if(t->is_pointer > 1) { } else if(t->is_pointer > 1) {
@ -202,8 +202,8 @@ char *JAVA::JavaMethodSignature(DataType *t, int ret, int inShadow) {
case T_SCHAR: return (char*)"[B"; case T_SCHAR: return (char*)"[B";
case T_BOOL: return (char*)"[Z"; case T_BOOL: return (char*)"[Z";
case T_VOID: case T_VOID:
case T_USER: if(inShadow && Getattr(shadow_classes,t->name)) case T_USER: if(inShadow && Getattr(shadow_classes,DataType_Getname(t)))
return GetChar(shadow_classes,t->name); return GetChar(shadow_classes,DataType_Getname(t));
else return (char*)"J"; else return (char*)"J";
} }
} else if(t->is_pointer > 1) { } else if(t->is_pointer > 1) {
@ -953,11 +953,11 @@ void JAVA::add_typedef(DataType *t, char *name) {
// Now look up the datatype in our shadow class hash table // Now look up the datatype in our shadow class hash table
if (Getattr(shadow_classes,t->name)) { if (Getattr(shadow_classes,DataType_Getname(t))) {
// Yep. This datatype is in the hash // Yep. This datatype is in the hash
// Put this types 'new' name into the hash // Put this types 'new' name into the hash
Setattr(shadow_classes,name,GetChar(shadow_classes,t->name)); Setattr(shadow_classes,name,GetChar(shadow_classes,DataType_Getname(t)));
} }
} }
@ -1060,7 +1060,7 @@ void JAVA::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
if(!javarettype) javarettype = SwigTcToJavaType(t, 1, 0); if(!javarettype) javarettype = SwigTcToJavaType(t, 1, 0);
char *shadowrettype = JavaTypeFromTypemap((char*)"jstype", typemap_lang, t, iname); char *shadowrettype = JavaTypeFromTypemap((char*)"jstype", typemap_lang, t, iname);
if(!shadowrettype && (DataType_Gettypecode(t) == T_USER) && t->is_pointer <= 1) { if(!shadowrettype && (DataType_Gettypecode(t) == T_USER) && t->is_pointer <= 1) {
shadowrettype = GetChar(shadow_classes,t->name); shadowrettype = GetChar(shadow_classes,DataType_Getname(t));
} }
Printf(f_shadow, " public %s %s(", (shadowrettype) ? shadowrettype : javarettype, iname); Printf(f_shadow, " public %s %s(", (shadowrettype) ? shadowrettype : javarettype, iname);
@ -1087,7 +1087,7 @@ void JAVA::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
sprintf(arg,"arg%d",i); sprintf(arg,"arg%d",i);
} }
if((DataType_Gettypecode(pt) == T_USER) && pt->is_pointer <= 1 && Getattr(shadow_classes,pt->name)) { if((DataType_Gettypecode(pt) == T_USER) && pt->is_pointer <= 1 && Getattr(shadow_classes,DataType_Getname(pt))) {
Printv(nativecall, ", ", arg, "._self", 0); Printv(nativecall, ", ", arg, "._self", 0);
} else Printv(nativecall, ", ", arg, 0); } else Printv(nativecall, ", ", arg, 0);
@ -1096,7 +1096,7 @@ void JAVA::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
char *jstype = JavaTypeFromTypemap((char*)"jstype", typemap_lang, pt, pn); char *jstype = JavaTypeFromTypemap((char*)"jstype", typemap_lang, pt, pn);
if(!jstype && (DataType_Gettypecode(pt) == T_USER) && pt->is_pointer <= 1) { if(!jstype && (DataType_Gettypecode(pt) == T_USER) && pt->is_pointer <= 1) {
jstype = GetChar(shadow_classes,pt->name); jstype = GetChar(shadow_classes,DataType_Getname(pt));
} }
// Add to java function header // Add to java function header
@ -1132,7 +1132,7 @@ void JAVA::cpp_static_func(char *name, char *iname, DataType *t, ParmList *l) {
if(!javarettype) javarettype = SwigTcToJavaType(t, 1, 0); if(!javarettype) javarettype = SwigTcToJavaType(t, 1, 0);
char *shadowrettype = JavaTypeFromTypemap((char*)"jstype", typemap_lang, t, iname); char *shadowrettype = JavaTypeFromTypemap((char*)"jstype", typemap_lang, t, iname);
if(!shadowrettype && (DataType_Gettypecode(t) == T_USER) && t->is_pointer <= 1) { if(!shadowrettype && (DataType_Gettypecode(t) == T_USER) && t->is_pointer <= 1) {
shadowrettype = GetChar(shadow_classes,t->name); shadowrettype = GetChar(shadow_classes,DataType_Getname(t));
} }
Printf(f_shadow, " public static %s %s(", (shadowrettype) ? shadowrettype : javarettype, iname); Printf(f_shadow, " public static %s %s(", (shadowrettype) ? shadowrettype : javarettype, iname);
@ -1162,7 +1162,7 @@ void JAVA::cpp_static_func(char *name, char *iname, DataType *t, ParmList *l) {
if(gencomma) Printf(nativecall,", "); if(gencomma) Printf(nativecall,", ");
if((DataType_Gettypecode(pt) == T_USER) && pt->is_pointer <= 1 && Getattr(shadow_classes,pt->name)) { if((DataType_Gettypecode(pt) == T_USER) && pt->is_pointer <= 1 && Getattr(shadow_classes,DataType_Getname(pt))) {
Printv(nativecall, arg, "._self", 0); Printv(nativecall, arg, "._self", 0);
} else Printv(nativecall,arg,0); } else Printv(nativecall,arg,0);
@ -1173,7 +1173,7 @@ void JAVA::cpp_static_func(char *name, char *iname, DataType *t, ParmList *l) {
char *jstype = JavaTypeFromTypemap((char*)"jstype", typemap_lang, pt, pn); char *jstype = JavaTypeFromTypemap((char*)"jstype", typemap_lang, pt, pn);
if(!jstype && (DataType_Gettypecode(pt) == T_USER) && pt->is_pointer <= 1) { if(!jstype && (DataType_Gettypecode(pt) == T_USER) && pt->is_pointer <= 1) {
jstype = GetChar(shadow_classes, pt->name); jstype = GetChar(shadow_classes, DataType_Getname(pt));
} }
// Add to java function header // Add to java function header
@ -1233,13 +1233,13 @@ void JAVA::cpp_constructor(char *name, char *iname, ParmList *l) {
char *jstype = JavaTypeFromTypemap((char*)"jstype", typemap_lang, pt, pn); char *jstype = JavaTypeFromTypemap((char*)"jstype", typemap_lang, pt, pn);
if(!jstype && (DataType_Gettypecode(pt) == T_USER) && pt->is_pointer <= 1) { if(!jstype && (DataType_Gettypecode(pt) == T_USER) && pt->is_pointer <= 1) {
jstype = GetChar(shadow_classes, pt->name); jstype = GetChar(shadow_classes, DataType_Getname(pt));
} }
// Add to java function header // Add to java function header
Printf(f_shadow, "%s %s", (jstype) ? jstype : jtype, arg); Printf(f_shadow, "%s %s", (jstype) ? jstype : jtype, arg);
if((DataType_Gettypecode(pt) == T_USER) && pt->is_pointer <= 1 && Getattr(shadow_classes,pt->name)) { if((DataType_Gettypecode(pt) == T_USER) && pt->is_pointer <= 1 && Getattr(shadow_classes,DataType_Getname(pt))) {
Printv(nativecall,arg, "._self", 0); Printv(nativecall,arg, "._self", 0);
} else Printv(nativecall, arg, 0); } else Printv(nativecall, arg, 0);

View file

@ -259,10 +259,10 @@ throw_unhandled_mzscheme_type_error (DataType *d)
fflush (stdout); fflush (stdout);
Printf (stderr, "ERROR: Unhandled MZSCHEME type error.\n"); Printf (stderr, "ERROR: Unhandled MZSCHEME type error.\n");
Printf (stderr, " type %d\n", DataType_Gettypecode(d)); Printf (stderr, " type %d\n", DataType_Gettypecode(d));
Printf (stderr, " name %s\n", d->name); Printf (stderr, " name %s\n", DataType_Getname(d));
Printf (stderr, " is_pointer %d\n", d->is_pointer); Printf (stderr, " is_pointer %d\n", d->is_pointer);
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", DataType_is_reference(d));
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 : "")); */
@ -701,7 +701,7 @@ MZSCHEME::usage_func (char *iname, DataType *d, ParmList *l, DOHString *usage)
if (DataType_type(pt) != T_VOID) { if (DataType_type(pt) != T_VOID) {
// Print the type. // Print the type.
Printv(usage," <", pt->name, 0); Printv(usage," <", DataType_Getname(pt), 0);
if (pt->is_pointer) { if (pt->is_pointer) {
for (int j = 0; j < (pt->is_pointer - pt->implicit_ptr); j++) { for (int j = 0; j < (pt->is_pointer - pt->implicit_ptr); j++) {
Putc('*', usage); Putc('*', usage);
@ -752,7 +752,7 @@ MZSCHEME::usage_returns (char *iname, DataType *d, ParmList *l, DOHString *usage
++have_param; ++have_param;
// Print the type. // Print the type.
Printv(param," $",pt->name, 0); Printv(param," $",DataType_Getname(pt), 0);
if (pt->is_pointer) { if (pt->is_pointer) {
for (j = 0; j < (pt->is_pointer - pt->implicit_ptr - 1); j++) { for (j = 0; j < (pt->is_pointer - pt->implicit_ptr - 1); j++) {
Putc('*',param); Putc('*',param);

View file

@ -156,18 +156,17 @@ type_mangle(DataType *t) {
// Check to see if we've blessed this datatype // Check to see if we've blessed this datatype
if ((Getattr(classes,t->name)) && (t->is_pointer <= 1)) { if ((Getattr(classes,DataType_Getname(t))) && (t->is_pointer <= 1)) {
// This is a blessed class. Return just the type-name // This is a blessed class. Return just the type-name
strcpy(result, GetChar(classes,t->name)); strcpy(result, GetChar(classes,DataType_Getname(t)));
return result; return result;
} }
} }
r = result; r = result;
c = t->name;
for ( c = t->name; *c; c++,r++) { for ( c = DataType_Getname(t); *c; c++,r++) {
*r = *c; *r = *c;
} }
for (i = 0; i < (t->is_pointer-t->implicit_ptr); i++, r++) { for (i = 0; i < (t->is_pointer-t->implicit_ptr); i++, r++) {
@ -1048,7 +1047,7 @@ void PERL5::create_function(char *name, char *iname, DataType *d, ParmList *l)
if ((tm = typemap_lookup((char*)"perl5in",(char*)"perl5",pt,(char*)"",sourceNtarget,sourceNtarget))) { if ((tm = typemap_lookup((char*)"perl5in",(char*)"perl5",pt,(char*)"",sourceNtarget,sourceNtarget))) {
Printf(func,"%s\n", tm); Printf(func,"%s\n", tm);
} else if ((Getattr(classes,pt->name)) && (pt->is_pointer <= 1)) { } else if ((Getattr(classes,DataType_Getname(pt))) && (pt->is_pointer <= 1)) {
if (i >= (pcount - numopt)) if (i >= (pcount - numopt))
Printf(func," if (scalar(@args) >= %d) {\n ", i); Printf(func," if (scalar(@args) >= %d) {\n ", i);
Printf(func," $args[%d] = tied(%%{$args[%d]});\n", i, i); Printf(func," $args[%d] = tied(%%{$args[%d]});\n", i, i);
@ -1076,7 +1075,7 @@ void PERL5::create_function(char *name, char *iname, DataType *d, ParmList *l)
"}\n", "}\n",
0); 0);
} else if ((Getattr(classes,d->name)) && (d->is_pointer <=1)) { } else if ((Getattr(classes,DataType_Getname(d))) && (d->is_pointer <=1)) {
Printv(func, tab4, "return undef if (!defined($result));\n", 0); Printv(func, tab4, "return undef if (!defined($result));\n", 0);
@ -1084,7 +1083,7 @@ void PERL5::create_function(char *name, char *iname, DataType *d, ParmList *l)
// into our local hash table // into our local hash table
if ((d->is_pointer == 0) || ((d->is_pointer == 1) && NewObject)) { if ((d->is_pointer == 0) || ((d->is_pointer == 1) && NewObject)) {
char *name = GetChar(classes,d->name); char *name = GetChar(classes,DataType_Getname(d));
if (hidden) if (hidden)
Printv(func, tab4, "$", realpackage, "::", name, "::OWNER{$result} = 1;\n", 0); Printv(func, tab4, "$", realpackage, "::", name, "::OWNER{$result} = 1;\n", 0);
else else
@ -1312,13 +1311,13 @@ void PERL5::link_variable(char *name, char *iname, DataType *t)
// 2. Otherwise, just hack Perl's symbol table // 2. Otherwise, just hack Perl's symbol table
if (blessed) { if (blessed) {
if ((Getattr(classes,t->name)) && (t->is_pointer <= 1)) { if ((Getattr(classes,DataType_Getname(t))) && (t->is_pointer <= 1)) {
Printv(var_stubs, Printv(var_stubs,
"\nmy %__", iname, "_hash;\n", "\nmy %__", iname, "_hash;\n",
"tie %__", iname, "_hash,\"", GetChar(classes,t->name), "\", $", "tie %__", iname, "_hash,\"", GetChar(classes,DataType_Getname(t)), "\", $",
package, "::", iname, ";\n", package, "::", iname, ";\n",
"$", iname, "= \\%__", iname, "_hash;\n", "$", iname, "= \\%__", iname, "_hash;\n",
"bless $", iname, ", ", GetChar(classes,t->name), ";\n", "bless $", iname, ", ", GetChar(classes,DataType_Getname(t)), ";\n",
0); 0);
} else { } else {
Printv(var_stubs, "*", iname, " = *", package, "::", iname, ";\n", 0); Printv(var_stubs, "*", iname, " = *", package, "::", iname, ";\n", 0);
@ -1455,13 +1454,13 @@ PERL5::declare_const(char *name, char *, DataType *type, char *value)
} }
if (blessed) { if (blessed) {
if ((Getattr(classes,type->name)) && (type->is_pointer <= 1)) { if ((Getattr(classes,DataType_Getname(type))) && (type->is_pointer <= 1)) {
Printv(var_stubs, Printv(var_stubs,
"\nmy %__", name, "_hash;\n", "\nmy %__", name, "_hash;\n",
"tie %__", name, "_hash,\"", GetChar(classes,type->name), "\", $", "tie %__", name, "_hash,\"", GetChar(classes,DataType_Getname(type)), "\", $",
package, "::", name, ";\n", package, "::", name, ";\n",
"$", name, "= \\%__", name, "_hash;\n", "$", name, "= \\%__", name, "_hash;\n",
"bless $", name, ", ", GetChar(classes,type->name), ";\n", "bless $", name, ", ", GetChar(classes,DataType_Getname(type)), ";\n",
0); 0);
} else { } else {
Printv(var_stubs, "*",name," = *", package, "::", name, ";\n", 0); Printv(var_stubs, "*",name," = *", package, "::", name, ";\n", 0);
@ -1877,7 +1876,7 @@ void PERL5::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
Printf(func,"%s\n",tm); Printf(func,"%s\n",tm);
} }
// Look up the datatype name here // Look up the datatype name here
else if ((Getattr(classes,pt->name)) && (pt->is_pointer <= 1)) { else if ((Getattr(classes,DataType_Getname(pt))) && (pt->is_pointer <= 1)) {
// Yep. This smells alot like an object, patch up the arguments // Yep. This smells alot like an object, patch up the arguments
if (i >= (pcount - numopt)) if (i >= (pcount - numopt))
@ -1911,7 +1910,7 @@ void PERL5::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
"}\n", "}\n",
0); 0);
} else if ((Getattr(classes,t->name)) && (t->is_pointer <=1)) { } else if ((Getattr(classes,DataType_Getname(t))) && (t->is_pointer <=1)) {
Printv(func,tab4, "return undef if (!defined($result));\n", 0); Printv(func,tab4, "return undef if (!defined($result));\n", 0);
@ -1919,7 +1918,7 @@ void PERL5::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
// into our local hash table // into our local hash table
if ((t->is_pointer == 0) || ((t->is_pointer == 1) && NewObject)) { if ((t->is_pointer == 0) || ((t->is_pointer == 1) && NewObject)) {
char *name = GetChar(classes,t->name); char *name = GetChar(classes,DataType_Getname(t));
if (hidden) if (hidden)
Printv(func, tab4, "$", realpackage, "::", name, "::OWNER{$result} = 1;\n", 0); Printv(func, tab4, "$", realpackage, "::", name, "::OWNER{$result} = 1;\n", 0);
else else
@ -1996,12 +1995,12 @@ void PERL5::cpp_variable(char *name, char *iname, DataType *t) {
// Now we need to generate a little Perl code for this // Now we need to generate a little Perl code for this
if ((Getattr(classes,t->name)) && (t->is_pointer <= 1)) { if ((Getattr(classes,DataType_Getname(t))) && (t->is_pointer <= 1)) {
// This is a Perl object that we have already seen. Add an // This is a Perl object that we have already seen. Add an
// entry to the members list // entry to the members list
Printv(blessedmembers, Printv(blessedmembers,
tab4, realname, " => '", (hidden ? realpackage : ""), (hidden ? "::" : ""), GetChar(classes,t->name), "',\n", tab4, realname, " => '", (hidden ? realpackage : ""), (hidden ? "::" : ""), GetChar(classes,DataType_Getname(t)), "',\n",
0); 0);
} }
@ -2075,7 +2074,7 @@ void PERL5::cpp_constructor(char *name, char *iname, ParmList *l) {
DataType *pt = Gettype(p); DataType *pt = Gettype(p);
// Look up the datatype name here // Look up the datatype name here
if ((Getattr(classes,pt->name)) && (pt->is_pointer <= 1)) { if ((Getattr(classes,DataType_Getname(pt))) && (pt->is_pointer <= 1)) {
// Yep. This smells alot like an object, patch up the arguments // Yep. This smells alot like an object, patch up the arguments
Printf(pcode, " $args[%d] = tied(%%{$args[%d]});\n", i, i); Printf(pcode, " $args[%d] = tied(%%{$args[%d]});\n", i, i);
@ -2274,13 +2273,13 @@ void PERL5::add_typedef(DataType *t, char *name) {
// Now look up the datatype in our shadow class hash table // Now look up the datatype in our shadow class hash table
if (Getattr(classes,t->name)) { if (Getattr(classes,DataType_Getname(t))) {
// Yep. This datatype is in the hash // Yep. This datatype is in the hash
// Put this types 'new' name into the hash // Put this types 'new' name into the hash
Setattr(classes,name,GetChar(classes,t->name)); Setattr(classes,name,GetChar(classes,DataType_Getname(t)));
} }
} }

View file

@ -982,7 +982,7 @@ void PYTHON::create_function(char *name, char *iname, DataType *d, ParmList *l)
// Check return code for modification // Check return code for modification
if ((Getattr(hash,d->name)) && (d->is_pointer <=1)) { if ((Getattr(hash,DataType_Getname(d))) && (d->is_pointer <=1)) {
need_wrapper = 1; need_wrapper = 1;
munge_return = 1; munge_return = 1;
} }
@ -1007,9 +1007,9 @@ void PYTHON::create_function(char *name, char *iname, DataType *d, ParmList *l)
// unchanged. Otherwise, emit some shadow class conversion code. // unchanged. Otherwise, emit some shadow class conversion code.
if (!have_output) { if (!have_output) {
Printv(func, tab4, "if val: val = ", GetChar(hash,d->name), "Ptr(val)", 0); Printv(func, tab4, "if val: val = ", GetChar(hash,DataType_Getname(d)), "Ptr(val)", 0);
if (((Getattr(hash,d->name)) && (d->is_pointer < 1)) || if (((Getattr(hash,DataType_Getname(d))) && (d->is_pointer < 1)) ||
((Getattr(hash,d->name)) && (d->is_pointer == 1) && NewObject)) ((Getattr(hash,DataType_Getname(d))) && (d->is_pointer == 1) && NewObject))
Printf(func, "; val.thisown = 1\n"); Printf(func, "; val.thisown = 1\n");
else else
Printf(func,"\n"); Printf(func,"\n");
@ -1261,9 +1261,9 @@ void PYTHON::link_variable(char *name, char *iname, DataType *t) {
// Output a shadow variable. (If applicable and possible) // Output a shadow variable. (If applicable and possible)
// ---------------------------------------------------------- // ----------------------------------------------------------
if ((shadow) && (!(shadow & PYSHADOW_MEMBER))) { if ((shadow) && (!(shadow & PYSHADOW_MEMBER))) {
if ((Getattr(hash,t->name)) && (t->is_pointer <= 1)) { if ((Getattr(hash,DataType_Getname(t))) && (t->is_pointer <= 1)) {
Printv(vars, Printv(vars,
iname, " = ", GetChar(hash,t->name), "Ptr(", module, ".", global_name, iname, " = ", GetChar(hash,DataType_Getname(t)), "Ptr(", module, ".", global_name,
".", iname, ")\n", ".", iname, ")\n",
0); 0);
} }
@ -1694,7 +1694,7 @@ void PYTHON::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l)
if (strcmp(realname,"__repr__") == 0) if (strcmp(realname,"__repr__") == 0)
have_repr = 1; have_repr = 1;
if (!((Getattr(hash,t->name)) && (t->is_pointer <=1)) && !noopt) { if (!((Getattr(hash,DataType_Getname(t))) && (t->is_pointer <=1)) && !noopt) {
Printv(imethod, Printv(imethod,
class_name, ".", realname, " = new.instancemethod(", module, ".", Swig_name_member(class_name,realname), ", None, ", class_name, ")\n", class_name, ".", realname, " = new.instancemethod(", module, ".", Swig_name_member(class_name,realname), ", None, ", class_name, ")\n",
0); 0);
@ -1714,12 +1714,12 @@ void PYTHON::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l)
Printv(pyclass, tab8, "val = apply(", module, ".", Swig_name_member(class_name,realname), ",args)\n",0); Printv(pyclass, tab8, "val = apply(", module, ".", Swig_name_member(class_name,realname), ",args)\n",0);
// Check to see if the return type is an object // Check to see if the return type is an object
if ((Getattr(hash,t->name)) && (t->is_pointer <= 1)) { if ((Getattr(hash,DataType_Getname(t))) && (t->is_pointer <= 1)) {
if (!typemap_check((char*)"out",typemap_lang,t,Swig_name_member(class_name,realname))) { if (!typemap_check((char*)"out",typemap_lang,t,Swig_name_member(class_name,realname))) {
if (!have_output) { if (!have_output) {
Printv(pyclass, tab8, "if val: val = ", GetChar(hash,t->name), "Ptr(val) ", 0); Printv(pyclass, tab8, "if val: val = ", GetChar(hash,DataType_Getname(t)), "Ptr(val) ", 0);
if (((Getattr(hash,t->name)) && (t->is_pointer < 1)) || if (((Getattr(hash,DataType_Getname(t))) && (t->is_pointer < 1)) ||
((Getattr(hash,t->name)) && (t->is_pointer == 1) && NewObject)) ((Getattr(hash,DataType_Getname(t))) && (t->is_pointer == 1) && NewObject))
Printf(pyclass, "; val.thisown = 1\n"); Printf(pyclass, "; val.thisown = 1\n");
else else
Printf(pyclass,"\n"); Printf(pyclass,"\n");
@ -1982,7 +1982,7 @@ void PYTHON::cpp_variable(char *name, char *iname, DataType *t) {
// Figure out if we've seen this datatype before // Figure out if we've seen this datatype before
if ((Getattr(hash,t->name)) && (t->is_pointer <= 1)) inhash = 1; if ((Getattr(hash,DataType_Getname(t))) && (t->is_pointer <= 1)) inhash = 1;
// Now write some code to set the variable // Now write some code to set the variable
if (Status & STAT_READONLY) { if (Status & STAT_READONLY) {
@ -1992,7 +1992,7 @@ void PYTHON::cpp_variable(char *name, char *iname, DataType *t) {
} }
// Write some code to get the variable // Write some code to get the variable
if (inhash) { if (inhash) {
Printv(cgetattr, tab8, "\"", realname, "\" : lambda x : ", GetChar(hash,t->name), "Ptr(", module, ".", Swig_name_get(Swig_name_member(class_name,realname)), "(x)),\n", 0); Printv(cgetattr, tab8, "\"", realname, "\" : lambda x : ", GetChar(hash,DataType_Getname(t)), "Ptr(", module, ".", Swig_name_get(Swig_name_member(class_name,realname)), "(x)),\n", 0);
} else { } else {
Printv(cgetattr, tab8, "\"", realname, "\" : ", module, ".", Swig_name_get(Swig_name_member(class_name,realname)),",\n", 0); Printv(cgetattr, tab8, "\"", realname, "\" : ", module, ".", Swig_name_get(Swig_name_member(class_name,realname)),",\n", 0);
@ -2058,12 +2058,12 @@ void PYTHON::add_typedef(DataType *t, char *name) {
// Now look up the datatype in our shadow class hash table // Now look up the datatype in our shadow class hash table
if (Getattr(hash,t->name)) { if (Getattr(hash,DataType_Getname(t))) {
// Yep. This datatype is in the hash // Yep. This datatype is in the hash
// Put this types 'new' name into the hash // Put this types 'new' name into the hash
Setattr(hash,name, GetChar(hash,t->name)); Setattr(hash,name, GetChar(hash,DataType_Getname(t)));
} }
} }

View file

@ -177,7 +177,7 @@ void RUBY::parse() {
// typedef void *VALUE // typedef void *VALUE
DataType *value = NewDataType(T_VOID); DataType *value = NewDataType(T_VOID);
strcpy(value->name, "void"); DataType_Setname(value,"void");
value->is_pointer = 1; value->is_pointer = 1;
value->implicit_ptr = 0; value->implicit_ptr = 0;
DataType_typedef_add(value,(char*)"VALUE",0); DataType_typedef_add(value,(char*)"VALUE",0);
@ -867,13 +867,13 @@ char *RUBY::ruby_typemap_lookup(char *op, DataType *type, char *pname, char *sou
DOHString *target_replace = NewString(target); DOHString *target_replace = NewString(target);
target = Char(target_replace); target = Char(target_replace);
RClass *cls = RCLASS(classes, type->name); RClass *cls = RCLASS(classes, DataType_Getname(type));
if (!s) s = NewString(""); if (!s) s = NewString("");
Clear(s); Clear(s);
if ((strcmp("out", op) == 0 || strcmp("in", op) == 0) if ((strcmp("out", op) == 0 || strcmp("in", op) == 0)
&& strcmp(type->name, "VALUE") == 0) { && strcmp(DataType_Getname(type), "VALUE") == 0) {
Printf(s,"$target = $source;"); Printf(s,"$target = $source;");
} else if (strcmp("out", op) == 0 && (DataType_Gettypecode(type) == T_USER) && } else if (strcmp("out", op) == 0 && (DataType_Gettypecode(type) == T_USER) &&
type->is_pointer == 1 && cls) { type->is_pointer == 1 && cls) {

View file

@ -1025,7 +1025,7 @@ void TCL8::declare_const(char *name, char *, DataType *type, char *value) {
break; break;
case T_FLOAT: case T_FLOAT:
DataType_Settypecode(type,T_DOUBLE); DataType_Settypecode(type,T_DOUBLE);
strcpy(type->name,"double"); DataType_Setname(type,"double");
Printf(f_header,"static %s %s = (%s) (%s);\n", DataType_lstr(type,0), var_name, DataType_lstr(type,0), value); Printf(f_header,"static %s %s = (%s) (%s);\n", DataType_lstr(type,0), var_name, DataType_lstr(type,0), value);
link_variable(var_name,name,type); link_variable(var_name,name,type);
break; break;
@ -1254,9 +1254,10 @@ void TCL8::cpp_close_class() {
this->Language::cpp_close_class(); this->Language::cpp_close_class();
if (shadow) { if (shadow) {
char temp[256];
t = NewDataType(T_USER); t = NewDataType(T_USER);
sprintf(t->name,"%s%s", class_type, real_classname); sprintf(temp,"%s%s", class_type, real_classname);
DataType_Setname(t,temp);
t->is_pointer = 1; t->is_pointer = 1;
if (have_destructor) { if (have_destructor) {
@ -1405,11 +1406,11 @@ void TCL8::add_typedef(DataType *t, char *name) {
// Now look up the datatype in our shadow class hash table // Now look up the datatype in our shadow class hash table
if (Getattr(hash,t->name)) { if (Getattr(hash,DataType_Getname(t))) {
// Yep. This datatype is in the hash // Yep. This datatype is in the hash
// Put this types 'new' name into the hash // Put this types 'new' name into the hash
Setattr(hash,name,GetChar(hash,t->name)); Setattr(hash,name,GetChar(hash,DataType_Getname(t)));
} }
} }

View file

@ -119,7 +119,7 @@ static void add_local_type(char *type, char *classname) {
} }
void add_local_type(DataType *type, char *classname) { void add_local_type(DataType *type, char *classname) {
add_local_type(type->name,classname); add_local_type(DataType_Getname(type),classname);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
@ -138,9 +138,9 @@ static void update_local_type(DataType *type) {
if (!localtypes) return; if (!localtypes) return;
newname = GetChar(localtypes,type->name); newname = GetChar(localtypes,DataType_Getname(type));
if (newname) { if (newname) {
strcpy(type->name, newname); DataType_Setname(type,newname);
} }
} }

View file

@ -447,11 +447,13 @@ static void dump_nested(char *parent) {
Status = STAT_READONLY; Status = STAT_READONLY;
while (n) { while (n) {
char temp[256];
// Token replace the name of the parent class // Token replace the name of the parent class
Replace(n->code, "$classname", parent, DOH_REPLACE_ANY); Replace(n->code, "$classname", parent, DOH_REPLACE_ANY);
// Fix up the name of the datatype (for building typedefs and other stuff) // Fix up the name of the datatype (for building typedefs and other stuff)
sprintf(n->type->name,"%s_%s",parent,n->name); sprintf(temp,"%s_%s", parent,n->name);
DataType_Setname(n->type,temp);
// Add the appropriate declaration to the C++ processor // Add the appropriate declaration to the C++ processor
cplus_variable(n->name,(char *) 0, n->type); cplus_variable(n->name,(char *) 0, n->type);
@ -699,13 +701,13 @@ statement : INCLUDE STRING LBRACE {
/* A function declaration */ /* A function declaration */
| extern type declaration LPAREN parms RPAREN cpp_const { | extern type declaration LPAREN parms RPAREN cpp_const {
init_language(); init_language();
if (Active_type) DelDataType(Active_type); if (Active_type) DelDataType(Active_type);
Active_type = CopyDataType($2); Active_type = CopyDataType($2);
Active_extern = $1; Active_extern = $1;
$2->is_pointer += $3.is_pointer; $2->is_pointer += $3.is_pointer;
$2->is_reference = $3.is_reference; if ($3.is_reference) DataType_add_reference($2);
create_function($1, $3.id, $2, $5); create_function($1, $3.id, $2, $5);
DelDataType($2); DelDataType($2);
Delete($5); Delete($5);
} stail { } } stail { }
@ -714,8 +716,8 @@ statement : INCLUDE STRING LBRACE {
| extern type declaration LPAREN parms RPAREN func_end { | extern type declaration LPAREN parms RPAREN func_end {
init_language(); init_language();
if ($3.is_reference) DataType_add_reference($2);
$2->is_pointer += $3.is_pointer; $2->is_pointer += $3.is_pointer;
$2->is_reference = $3.is_reference;
create_function($1, $3.id, $2, $5); create_function($1, $3.id, $2, $5);
DelDataType($2); DelDataType($2);
Delete($5); Delete($5);
@ -727,7 +729,7 @@ statement : INCLUDE STRING LBRACE {
init_language(); init_language();
DataType *t = NewDataType(T_INT); DataType *t = NewDataType(T_INT);
t->is_pointer += $2.is_pointer; t->is_pointer += $2.is_pointer;
t->is_reference = $2.is_reference; if ($2.is_reference) DataType_add_reference(t);
create_function($1,$2.id,t,$4); create_function($1,$2.id,t,$4);
DelDataType(t); DelDataType(t);
} stail { }; } stail { };
@ -739,7 +741,7 @@ statement : INCLUDE STRING LBRACE {
if (strlen(Char(CCode))) { if (strlen(Char(CCode))) {
init_language(); init_language();
$2->is_pointer += $3.is_pointer; $2->is_pointer += $3.is_pointer;
$2->is_reference = $3.is_reference; if ($3.is_reference) DataType_add_reference($2);
create_function(0, $3.id, $2, $5); create_function(0, $3.id, $2, $5);
} }
} }
@ -752,7 +754,7 @@ statement : INCLUDE STRING LBRACE {
| INLINE type declaration LPAREN parms RPAREN func_end { | INLINE type declaration LPAREN parms RPAREN func_end {
init_language(); init_language();
$2->is_pointer += $3.is_pointer; $2->is_pointer += $3.is_pointer;
$2->is_reference = $3.is_reference; if ($3.is_reference) DataType_add_reference($2);
if (Inline) { if (Inline) {
fprintf(stderr,"%s : Line %d. Repeated %%inline directive.\n",input_file,line_number); fprintf(stderr,"%s : Line %d. Repeated %%inline directive.\n",input_file,line_number);
FatalError(); FatalError();
@ -1004,7 +1006,7 @@ statement : INCLUDE STRING LBRACE {
DataType_Settypecode(temp_type,T_INT); DataType_Settypecode(temp_type,T_INT);
temp_type->is_pointer = 0; temp_type->is_pointer = 0;
temp_type->implicit_ptr = 0; temp_type->implicit_ptr = 0;
sprintf(temp_type->name,"int"); DataType_Setname(temp_type,"int");
DataType_typedef_add(temp_type,$3,1); DataType_typedef_add(temp_type,$3,1);
lang->add_typedef(temp_type,$3); lang->add_typedef(temp_type,$3);
} }
@ -1017,7 +1019,7 @@ statement : INCLUDE STRING LBRACE {
DataType_Settypecode(temp_type,T_INT); DataType_Settypecode(temp_type,T_INT);
temp_type->is_pointer = 0; temp_type->is_pointer = 0;
temp_type->implicit_ptr = 0; temp_type->implicit_ptr = 0;
sprintf(temp_type->name,"int"); DataType_Setname(temp_type,"int");
Active_typedef = CopyDataType(temp_type); Active_typedef = CopyDataType(temp_type);
DataType_typedef_add(temp_type,$8,1); DataType_typedef_add(temp_type,$8,1);
lang->add_typedef(temp_type,$8); lang->add_typedef(temp_type,$8);
@ -1259,7 +1261,7 @@ typedef_decl : TYPEDEF type declaration {
fprintf(f_header,"typedef "); fprintf(f_header,"typedef ");
emit_extern_func(temp_name, $2,$8,0,f_header); emit_extern_func(temp_name, $2,$8,0,f_header);
} }
strcpy($2->name,"<function ptr>"); DataType_Setname($2,"<function ptr>");
DataType_Settypecode($2,T_USER); DataType_Settypecode($2,T_USER);
$2->is_pointer = 1; $2->is_pointer = 1;
DataType_typedef_add($2,$5,1); DataType_typedef_add($2,$5,1);
@ -1282,7 +1284,7 @@ typedef_decl : TYPEDEF type declaration {
} }
/* Typedef'd pointer */ /* Typedef'd pointer */
strcpy($2->name,"<function ptr>"); DataType_Setname($2,"<function ptr>");
DataType_Settypecode($2,T_USER); DataType_Settypecode($2,T_USER);
$2->is_pointer = 1; $2->is_pointer = 1;
DataType_typedef_add($2,$6,1); DataType_typedef_add($2,$6,1);
@ -1399,7 +1401,7 @@ stail : SEMI { }
init_language(); init_language();
temp_typeptr = CopyDataType(Active_type); temp_typeptr = CopyDataType(Active_type);
temp_typeptr->is_pointer += $2.is_pointer; temp_typeptr->is_pointer += $2.is_pointer;
temp_typeptr->is_reference = $2.is_reference; if ($2.is_reference) DataType_add_reference(temp_typeptr);
create_function(Active_extern, $2.id, temp_typeptr, $4); create_function(Active_extern, $2.id, temp_typeptr, $4);
DelDataType(temp_typeptr); DelDataType(temp_typeptr);
Delete($4); Delete($4);
@ -1479,7 +1481,7 @@ parm_type : type pname {
| type AND pname { | type AND pname {
$$ = NewParm($1,$3); $$ = NewParm($1,$3);
DataType *pt = Gettype($$); DataType *pt = Gettype($$);
pt->is_reference = 1; DataType_add_reference(pt);
pt->is_pointer++; pt->is_pointer++;
Setvalue($$,DefArg); Setvalue($$,DefArg);
if (!CPlusPlus) { if (!CPlusPlus) {
@ -1495,7 +1497,7 @@ parm_type : type pname {
DataType *pt = Gettype($$); DataType *pt = Gettype($$);
DataType_Settypecode(pt,T_ERROR); DataType_Settypecode(pt,T_ERROR);
Setname($$,$4); Setname($$,$4);
strcpy(pt->name,"<function ptr>"); DataType_Setname(pt,"<function ptr>");
DelDataType($1); DelDataType($1);
free($4); free($4);
Delete($7); Delete($7);
@ -1506,7 +1508,7 @@ parm_type : type pname {
DataType *pt = Gettype($$); DataType *pt = Gettype($$);
DataType_Settypecode(pt,T_ERROR); DataType_Settypecode(pt,T_ERROR);
Setname($$,(char*)"varargs"); Setname($$,(char*)"varargs");
strcpy(pt->name,"<varargs>"); DataType_Setname(pt,"<varargs>");
FatalError(); FatalError();
} }
; ;
@ -1637,25 +1639,29 @@ type : TYPE_INT {
| TYPE_TYPEDEF objc_protolist { | TYPE_TYPEDEF objc_protolist {
$$ = $1; $$ = $1;
if (strlen($2) > 0) { if (strlen($2) > 0) {
if ((strlen($2) + strlen($$->name)) >= MAX_NAME) { if ((strlen($2) + strlen(DataType_Getname($$))) >= MAX_NAME) {
fprintf(stderr,"%s : Line %d. Fatal error. Type-name is too long!\n", fprintf(stderr,"%s : Line %d. Fatal error. Type-name is too long!\n",
input_file, line_number); input_file, line_number);
} else { } else {
strcat($$->name,$2); char temp[256];
sprintf(temp,"%s%s",DataType_Getname($$),$2);
DataType_Setname($$,temp);
} }
} }
} }
| ID objc_protolist { | ID objc_protolist {
$$ = NewDataType(T_USER); $$ = NewDataType(T_USER);
strcpy($$->name,$1); DataType_Setname($$,$1);
/* Do a typedef lookup */ /* Do a typedef lookup */
DataType_typedef_resolve($$,0); DataType_typedef_resolve($$,0);
if (strlen($2) > 0) { if (strlen($2) > 0) {
if ((strlen($2) + strlen($$->name)) >= MAX_NAME) { if ((strlen($2) + strlen(DataType_Getname($$))) >= MAX_NAME) {
fprintf(stderr,"%s : Line %d. Fatal error. Type-name is too long!\n", fprintf(stderr,"%s : Line %d. Fatal error. Type-name is too long!\n",
input_file, line_number); input_file, line_number);
} else { } else {
strcat($$->name,$2); char temp[256];
sprintf(temp,"%s%s",DataType_Getname($$),$2);
DataType_Setname($$,temp);
} }
} }
} }
@ -1664,12 +1670,16 @@ type : TYPE_INT {
DataType_set_qualifier($$,(char*)"const"); DataType_set_qualifier($$,(char*)"const");
} }
| cpptype ID { | cpptype ID {
char temp[256];
$$ = NewDataType(T_USER); $$ = NewDataType(T_USER);
sprintf($$->name,"%s %s",$1, $2); sprintf(temp,"%s %s", $1, $2);
DataType_Setname($$,temp);
} }
| ID DCOLON ID { | ID DCOLON ID {
char temp[256];
$$ = NewDataType(T_USER); $$ = NewDataType(T_USER);
sprintf($$->name,"%s::%s",$1,$3); sprintf(temp,"%s::%s",$1,$3);
DataType_Setname($$,temp);
DataType_typedef_resolve($$,0); DataType_typedef_resolve($$,0);
} }
/* This declaration causes a shift-reduce conflict. Unresolved for now */ /* This declaration causes a shift-reduce conflict. Unresolved for now */
@ -1677,12 +1687,14 @@ type : TYPE_INT {
| DCOLON ID { | DCOLON ID {
$$ = NewDataType(T_USER); $$ = NewDataType(T_USER);
sprintf($$->name,"%s", $2); DataType_Setname($$,$2);
DataType_typedef_resolve($$,1); DataType_typedef_resolve($$,1);
} }
| ENUM ID { | ENUM ID {
char temp[256];
$$ = NewDataType(T_INT); $$ = NewDataType(T_INT);
sprintf($$->name,"enum %s", $2); sprintf(temp,"enum %s", $2);
DataType_Setname($$,temp);
DataType_typedef_resolve($$,1); DataType_typedef_resolve($$,1);
} }
; ;
@ -1723,15 +1735,17 @@ strict_type : TYPE_INT {
} }
| TYPE_TYPEDEF objc_protolist { | TYPE_TYPEDEF objc_protolist {
$$ = $1; $$ = $1;
strcat($$->name,$2); strcat(DataType_Getname($$),$2);
} }
| CONST type { | CONST type {
$$ = $2; $$ = $2;
DataType_set_qualifier($$,(char*)"const"); DataType_set_qualifier($$,(char*)"const");
} }
| cpptype ID { | cpptype ID {
char temp[256];
$$ = NewDataType(T_USER); $$ = NewDataType(T_USER);
sprintf($$->name,"%s %s",$1, $2); sprintf(temp,"%s %s",$1, $2);
DataType_Setname($$,temp);
} }
; ;
@ -1743,26 +1757,26 @@ opt_signed : empty {
| TYPE_INT { | TYPE_INT {
$$ = $1; $$ = $1;
DataType_Settypecode($$,T_INT); DataType_Settypecode($$,T_INT);
sprintf(temp_name,"signed %s",$1->name); sprintf(temp_name,"signed %s",DataType_Getname($1));
strcpy($$->name,temp_name); DataType_Setname($$,temp_name);
} }
| TYPE_SHORT opt_int { | TYPE_SHORT opt_int {
$$ = $1; $$ = $1;
DataType_Settypecode($$,T_SHORT); DataType_Settypecode($$,T_SHORT);
sprintf(temp_name,"signed %s",$1->name); sprintf(temp_name,"signed %s",DataType_Getname($1));
strcpy($$->name,temp_name); DataType_Setname($$,temp_name);
} }
| TYPE_LONG opt_int { | TYPE_LONG opt_int {
$$ = $1; $$ = $1;
DataType_Settypecode($$,T_LONG); DataType_Settypecode($$,T_LONG);
sprintf(temp_name,"signed %s",$1->name); sprintf(temp_name,"signed %s",DataType_Getname($1));
strcpy($$->name,temp_name); DataType_Setname($$,temp_name);
} }
| TYPE_CHAR { | TYPE_CHAR {
$$ = $1; $$ = $1;
DataType_Settypecode($$,T_SCHAR); DataType_Settypecode($$,T_SCHAR);
sprintf(temp_name,"signed %s",$1->name); sprintf(temp_name,"signed %s",DataType_Getname($1));
strcpy($$->name,temp_name); DataType_Setname($$,temp_name);
} }
; ;
@ -1774,26 +1788,26 @@ opt_unsigned : empty {
| TYPE_INT { | TYPE_INT {
$$ = $1; $$ = $1;
DataType_Settypecode($$,T_UINT); DataType_Settypecode($$,T_UINT);
sprintf(temp_name,"unsigned %s",$1->name); sprintf(temp_name,"unsigned %s",DataType_Getname($1));
strcpy($$->name,temp_name); DataType_Setname($$,temp_name);
} }
| TYPE_SHORT opt_int { | TYPE_SHORT opt_int {
$$ = $1; $$ = $1;
DataType_Settypecode($$,T_USHORT); DataType_Settypecode($$,T_USHORT);
sprintf(temp_name,"unsigned %s",$1->name); sprintf(temp_name,"unsigned %s",DataType_Getname($1));
strcpy($$->name,temp_name); DataType_Setname($$,temp_name);
} }
| TYPE_LONG opt_int { | TYPE_LONG opt_int {
$$ = $1; $$ = $1;
DataType_Settypecode($$,T_ULONG); DataType_Settypecode($$,T_ULONG);
sprintf(temp_name,"unsigned %s",$1->name); sprintf(temp_name,"unsigned %s",DataType_Getname($1));
strcpy($$->name,temp_name); DataType_Setname($$,temp_name);
} }
| TYPE_CHAR { | TYPE_CHAR {
$$ = $1; $$ = $1;
DataType_Settypecode($$,T_UCHAR); DataType_Settypecode($$,T_UCHAR);
sprintf(temp_name,"unsigned %s",$1->name); sprintf(temp_name,"unsigned %s",DataType_Getname($1));
strcpy($$->name,temp_name); DataType_Setname($$,temp_name);
} }
; ;
@ -1917,13 +1931,13 @@ expr : NUM_INT {
$$.type = T_ULONG; $$.type = T_ULONG;
} }
| SIZEOF LPAREN type RPAREN { | SIZEOF LPAREN type RPAREN {
$$.id = (char *) malloc(strlen($3->name)+9); $$.id = (char *) malloc(strlen(DataType_Getname($3))+9);
sprintf($$.id,"sizeof(%s)", $3->name); sprintf($$.id,"sizeof(%s)", DataType_Getname($3));
$$.type = T_INT; $$.type = T_INT;
} }
| LPAREN strict_type RPAREN expr %prec UMINUS { | LPAREN strict_type RPAREN expr %prec UMINUS {
$$.id = (char *) malloc(strlen($4.id)+strlen($2->name)+3); $$.id = (char *) malloc(strlen($4.id)+strlen(DataType_Getname($2))+3);
sprintf($$.id,"(%s)%s",$2->name,$4.id); sprintf($$.id,"(%s)%s",DataType_Getname($2),$4.id);
$$.type = DataType_Gettypecode($2); $$.type = DataType_Gettypecode($2);
} }
| ID { | ID {
@ -2151,7 +2165,9 @@ cpp_class :
} }
// Create a datatype for correctly processing the typedef // Create a datatype for correctly processing the typedef
Active_typedef = NewDataType(T_USER); Active_typedef = NewDataType(T_USER);
sprintf(Active_typedef->name,"%s %s", $2,$3); char temp[256];
sprintf(temp,"%s %s", $2,$3);
DataType_Setname(Active_typedef,temp);
Active_typedef->is_pointer = 0; Active_typedef->is_pointer = 0;
Active_typedef->implicit_ptr = 0; Active_typedef->implicit_ptr = 0;
@ -2231,7 +2247,7 @@ cpp_class :
} }
// Create a datatype for correctly processing the typedef // Create a datatype for correctly processing the typedef
Active_typedef = NewDataType(T_USER); Active_typedef = NewDataType(T_USER);
sprintf(Active_typedef->name,"%s",$7.id); DataType_Setname(Active_typedef,$7.id);
// Dump nested classes // Dump nested classes
if ($7.is_pointer == 0) if ($7.is_pointer == 0)
@ -2263,7 +2279,7 @@ cpp_other :/* A dummy class name */
fprintf(stderr,"%s : Line %d. *** WARNING ***. C++ mode is disabled (enable using -c++)\n", input_file, line_number); fprintf(stderr,"%s : Line %d. *** WARNING ***. C++ mode is disabled (enable using -c++)\n", input_file, line_number);
$2->is_pointer += $3.is_pointer; $2->is_pointer += $3.is_pointer;
$2->is_reference = $3.is_reference; if ($3.is_reference) DataType_add_reference($2);
// Fix up the function name // Fix up the function name
sprintf(temp_name,"%s::%s",$3.id,$5); sprintf(temp_name,"%s::%s",$3.id,$5);
if (!Rename_true) { if (!Rename_true) {
@ -2351,7 +2367,7 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end {
init_language(); init_language();
if (cplus_mode == CPLUS_PUBLIC) { if (cplus_mode == CPLUS_PUBLIC) {
$1->is_pointer += $2.is_pointer; $1->is_pointer += $2.is_pointer;
$1->is_reference = $2.is_reference; if ($2.is_reference) DataType_add_reference($1);
iname = make_name($2.id); iname = make_name($2.id);
if (iname == $2.id) iname = 0; if (iname == $2.id) iname = 0;
cplus_member_func($2.id, iname, $1,$4,0); cplus_member_func($2.id, iname, $1,$4,0);
@ -2368,7 +2384,7 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end {
init_language(); init_language();
if (cplus_mode == CPLUS_PUBLIC) { if (cplus_mode == CPLUS_PUBLIC) {
$2->is_pointer += $3.is_pointer; $2->is_pointer += $3.is_pointer;
$2->is_reference = $3.is_reference; if ($3.is_reference) DataType_add_reference($2);
iname = make_name($3.id); iname = make_name($3.id);
if (iname == $3.id) iname = 0; if (iname == $3.id) iname = 0;
cplus_member_func($3.id,iname,$2,$5,1); cplus_member_func($3.id,iname,$2,$5,1);
@ -2427,7 +2443,7 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end {
if (Active_type) DelDataType(Active_type); if (Active_type) DelDataType(Active_type);
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; if ($2.is_reference) DataType_add_reference($1);
if (DataType_qualifier($1)) { if (DataType_qualifier($1)) {
if ((strcmp(DataType_qualifier($1),"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.
@ -2474,7 +2490,7 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end {
if (Active_type) DelDataType(Active_type); if (Active_type) DelDataType(Active_type);
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; if ($2.is_reference) DataType_add_reference($1);
DataType_set_arraystr($1,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;
@ -2513,7 +2529,7 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end {
| STATIC type declaration LPAREN parms RPAREN cpp_end { | STATIC type declaration LPAREN parms RPAREN cpp_end {
char *iname; char *iname;
$2->is_pointer += $3.is_pointer; $2->is_pointer += $3.is_pointer;
$2->is_reference = $3.is_reference; if ($3.is_reference) DataType_add_reference($2);
if (cplus_mode == CPLUS_PUBLIC) { if (cplus_mode == CPLUS_PUBLIC) {
iname = make_name($3.id); iname = make_name($3.id);
if (iname == $3.id) iname = 0; if (iname == $3.id) iname = 0;
@ -2569,7 +2585,7 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end {
DataType_Settypecode(temp_type,T_INT); DataType_Settypecode(temp_type,T_INT);
temp_type->is_pointer = 0; temp_type->is_pointer = 0;
temp_type->implicit_ptr = 0; temp_type->implicit_ptr = 0;
sprintf(temp_type->name,"int"); DataType_Setname(temp_type,"int");
DataType_typedef_add(temp_type,$2,1); DataType_typedef_add(temp_type,$2,1);
lang->add_typedef(temp_type,$2); lang->add_typedef(temp_type,$2);
} }
@ -2651,7 +2667,7 @@ cpp_pragma : PRAGMA ID stylearg {
n->line = start_line; n->line = start_line;
n->type = NewDataType(T_USER); n->type = NewDataType(T_USER);
n->type->is_pointer = $5.is_pointer; n->type->is_pointer = $5.is_pointer;
n->type->is_reference = $5.is_reference; if ($5.is_reference) DataType_add_reference(n->type);
n->next = 0; n->next = 0;
add_nested(n); add_nested(n);
} }
@ -2676,7 +2692,7 @@ cpp_pragma : PRAGMA ID stylearg {
n->line = start_line; n->line = start_line;
n->type = NewDataType(T_USER); n->type = NewDataType(T_USER);
n->type->is_pointer = $4.is_pointer; n->type->is_pointer = $4.is_pointer;
n->type->is_reference = $4.is_reference; if ($4.is_reference) DataType_add_reference(n->type);
n->next = 0; n->next = 0;
add_nested(n); add_nested(n);
@ -3035,7 +3051,7 @@ objc_var : type declaration {
if (Active_type) DelDataType(Active_type); if (Active_type) DelDataType(Active_type);
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; if ($2.is_reference) DataType_add_reference($1);
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;
@ -3055,7 +3071,7 @@ objc_var : type declaration {
if (Active_type) DelDataType(Active_type); if (Active_type) DelDataType(Active_type);
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; if ($2.is_reference) DataType_add_reference($1);
DataType_set_arraystr($1, 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*)"")))
@ -3080,7 +3096,7 @@ objc_vartail : COMMA declaration objc_vartail {
char *tm, *iname; char *tm, *iname;
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; if ($2.is_reference) DataType_add_reference(t);
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;
@ -3100,7 +3116,7 @@ objc_vartail : COMMA declaration objc_vartail {
char *tm; char *tm;
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; if ($2.is_reference) DataType_add_reference(t);
DataType_set_arraystr(t,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*)"")))
@ -3194,7 +3210,7 @@ objc_ret_type : LPAREN type RPAREN {
} }
| empty { /* Empty type means "id" type */ | empty { /* Empty type means "id" type */
$$ = NewDataType(T_VOID); $$ = NewDataType(T_VOID);
sprintf($$->name,"id"); DataType_Setname($$,"id");
$$->is_pointer = 1; $$->is_pointer = 1;
$$->implicit_ptr = 1; $$->implicit_ptr = 1;
} }
@ -3206,7 +3222,7 @@ objc_arg_type : LPAREN parm RPAREN {
} }
| empty { | empty {
$$ = NewDataType(T_VOID); $$ = NewDataType(T_VOID);
sprintf($$->name,"id"); DataType_Setname($$,"id");
$$->is_pointer = 1; $$->is_pointer = 1;
$$->implicit_ptr = 1; $$->implicit_ptr = 1;
} }
@ -3326,7 +3342,7 @@ typemap_parm : type typemap_name {
$$ = NewTMParm(); $$ = NewTMParm();
$$->p = NewParm($1,$3); $$->p = NewParm($1,$3);
DataType *pt = Gettype($$->p); DataType *pt = Gettype($$->p);
pt->is_reference = 1; DataType_add_reference(pt);
pt->is_pointer++; pt->is_pointer++;
if (!CPlusPlus) { if (!CPlusPlus) {
fprintf(stderr,"%s : Line %d. Warning. Use of C++ Reference detected. Use the -c++ option.\n", input_file, line_number); fprintf(stderr,"%s : Line %d. Warning. Use of C++ Reference detected. Use the -c++ option.\n", input_file, line_number);
@ -3343,7 +3359,7 @@ typemap_parm : type typemap_name {
DataType *pt = Gettype($$->p); DataType *pt = Gettype($$->p);
DataType_Settypecode(pt,T_ERROR); DataType_Settypecode(pt,T_ERROR);
Setname($$->p,$4); Setname($$->p,$4);
strcpy(pt->name,"<function ptr>"); DataType_Setname(pt,"<function ptr>");
$$->args = tm_parm; $$->args = tm_parm;
DelDataType($1); DelDataType($1);
free($4); free($4);

View file

@ -1129,52 +1129,44 @@ extern "C" int yylex(void) {
if (strcmp(yytext,"int") == 0) { if (strcmp(yytext,"int") == 0) {
yylval.type = NewDataType(T_INT); yylval.type = NewDataType(T_INT);
strcpy(yylval.type->name,yytext);
return(TYPE_INT); return(TYPE_INT);
} }
if (strcmp(yytext,"double") == 0) { if (strcmp(yytext,"double") == 0) {
yylval.type = NewDataType(T_DOUBLE); yylval.type = NewDataType(T_DOUBLE);
strcpy(yylval.type->name,yytext);
return(TYPE_DOUBLE); return(TYPE_DOUBLE);
} }
if (strcmp(yytext,"void") == 0) { if (strcmp(yytext,"void") == 0) {
yylval.type = NewDataType(T_VOID); yylval.type = NewDataType(T_VOID);
strcpy(yylval.type->name,yytext);
return(TYPE_VOID); return(TYPE_VOID);
} }
if (strcmp(yytext,"char") == 0) { if (strcmp(yytext,"char") == 0) {
yylval.type = NewDataType(T_CHAR); yylval.type = NewDataType(T_CHAR);
strcpy(yylval.type->name,yytext);
return(TYPE_CHAR); return(TYPE_CHAR);
} }
if (strcmp(yytext,"short") == 0) { if (strcmp(yytext,"short") == 0) {
yylval.type = NewDataType(T_SHORT); yylval.type = NewDataType(T_SHORT);
strcpy(yylval.type->name,yytext);
return(TYPE_SHORT); return(TYPE_SHORT);
} }
if (strcmp(yytext,"long") == 0) { if (strcmp(yytext,"long") == 0) {
yylval.type = NewDataType(T_LONG); yylval.type = NewDataType(T_LONG);
strcpy(yylval.type->name,yytext);
return(TYPE_LONG); return(TYPE_LONG);
} }
if (strcmp(yytext,"float") == 0) { if (strcmp(yytext,"float") == 0) {
yylval.type = NewDataType(T_FLOAT); yylval.type = NewDataType(T_FLOAT);
strcpy(yylval.type->name,yytext);
return(TYPE_FLOAT); return(TYPE_FLOAT);
} }
if (strcmp(yytext,"signed") == 0) { if (strcmp(yytext,"signed") == 0) {
yylval.type = NewDataType(T_INT); yylval.type = NewDataType(T_INT);
strcpy(yylval.type->name,yytext); DataType_Setname(yylval.type,yytext);
return(TYPE_SIGNED); return(TYPE_SIGNED);
} }
if (strcmp(yytext,"unsigned") == 0) { if (strcmp(yytext,"unsigned") == 0) {
yylval.type = NewDataType(T_UINT); yylval.type = NewDataType(T_UINT);
strcpy(yylval.type->name,yytext); DataType_Setname(yylval.type,yytext);
return(TYPE_UNSIGNED); return(TYPE_UNSIGNED);
} }
if (strcmp(yytext,"bool") == 0) { if (strcmp(yytext,"bool") == 0) {
yylval.type = NewDataType(T_BOOL); yylval.type = NewDataType(T_BOOL);
strcpy(yylval.type->name,yytext);
return(TYPE_BOOL); return(TYPE_BOOL);
} }
// C++ keywords // C++ keywords
@ -1291,7 +1283,7 @@ extern "C" int yylex(void) {
if (check_typedef) { if (check_typedef) {
if (DataType_is_typedef(yytext)) { if (DataType_is_typedef(yytext)) {
yylval.type = NewDataType(T_USER); yylval.type = NewDataType(T_USER);
strcpy(yylval.type->name,yytext); DataType_Setname(yylval.type,yytext);
DataType_typedef_resolve(yylval.type,0); DataType_typedef_resolve(yylval.type,0);
return(TYPE_TYPEDEF); return(TYPE_TYPEDEF);
} }

View file

@ -333,7 +333,7 @@ void typemap_register(char *op, char *lang, char *type, char *pname,
char *getcode, ParmList *args) { char *getcode, ParmList *args) {
DataType *temp; DataType *temp;
temp = NewDataType(0); temp = NewDataType(0);
strcpy(temp->name,type); DataType_Setname(temp,type);
temp->is_pointer = 0; temp->is_pointer = 0;
DataType_Settypecode(temp,T_USER); DataType_Settypecode(temp,T_USER);
typemap_register(op,lang,temp,pname,getcode,args); typemap_register(op,lang,temp,pname,getcode,args);
@ -493,7 +493,7 @@ static void typemap_locals(DataType *t, char *pname, DOHString *s, ParmList *l,
/* If the user gave us $type as the name of the local variable, we'll use /* If the user gave us $type as the name of the local variable, we'll use
the passed datatype instead */ the passed datatype instead */
if (strcmp(pn,"$type")==0 || strcmp(pt->name,"$basetype")==0) { if (strcmp(pn,"$type")==0 || strcmp(DataType_Getname(pt),"$basetype")==0) {
tt = t; tt = t;
} else { } else {
tt = pt; tt = pt;
@ -510,7 +510,7 @@ static void typemap_locals(DataType *t, char *pname, DOHString *s, ParmList *l,
/* Substitute parameter names */ /* Substitute parameter names */
Replace(str,"$arg",pname, DOH_REPLACE_ANY); Replace(str,"$arg",pname, DOH_REPLACE_ANY);
if (strcmp(pt->name,"$basetype")==0) { if (strcmp(DataType_Getname(pt),"$basetype")==0) {
/* use $basetype */ /* use $basetype */
char temp_ip = tt->is_pointer; char temp_ip = tt->is_pointer;
char temp_ip1 = tt->implicit_ptr; char temp_ip1 = tt->implicit_ptr;
@ -974,7 +974,7 @@ void typemap_copy(char *op, char *lang, DataType *stype, char *sname,
key = typemap_string(lang,stype,sname,DataType_arraystr(stype),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(DataType_Getname(ttype),"PREVIOUS") == 0) {
/* Pop back up to the previous typemap (if any) */ /* Pop back up to the previous typemap (if any) */
tk = tm->next; tk = tm->next;
if (tk) { if (tk) {

View file

@ -571,7 +571,7 @@ Swig_cmethod_wrapper(DOHString_or_char *classname,
l = CopyParmList(parms); l = CopyParmList(parms);
t = NewDataType(T_USER); t = NewDataType(T_USER);
strcpy(t->name,Char(classname)); DataType_Setname(t, Char(classname));
t->is_pointer++; t->is_pointer++;
p = NewParm(t,"self"); p = NewParm(t,"self");
Insert(l,0,p); Insert(l,0,p);
@ -631,7 +631,7 @@ Swig_cconstructor_wrapper(DOHString_or_char *classname,
l = CopyParmList(parms); l = CopyParmList(parms);
t = NewDataType(T_USER); t = NewDataType(T_USER);
sprintf(t->name,classname); DataType_Setname(t,classname);
t->is_pointer++; t->is_pointer++;
/* Patch up the argument names */ /* Patch up the argument names */
@ -677,7 +677,7 @@ Swig_cppconstructor_wrapper(DOHString_or_char *classname,
l = CopyParmList(parms); l = CopyParmList(parms);
t = NewDataType(T_USER); t = NewDataType(T_USER);
sprintf(t->name,classname); DataType_Setname(t,classname);
t->is_pointer++; t->is_pointer++;
/* Patch up the argument names */ /* Patch up the argument names */
@ -734,7 +734,7 @@ Swig_cdestructor_wrapper(DOHString_or_char *classname,
l = NewParmList(); l = NewParmList();
t = NewDataType(T_USER); t = NewDataType(T_USER);
sprintf(t->name,classname); DataType_Setname(t,classname);
t->is_pointer++; t->is_pointer++;
p = NewParm(t,"self"); p = NewParm(t,"self");
Append(l,p); Append(l,p);
@ -781,7 +781,7 @@ Swig_cppdestructor_wrapper(DOHString_or_char *classname,
l = NewParmList(); l = NewParmList();
t = NewDataType(T_USER); t = NewDataType(T_USER);
sprintf(t->name,classname); DataType_Setname(t,classname);
t->is_pointer++; t->is_pointer++;
p = NewParm(t,"self"); p = NewParm(t,"self");
@ -831,7 +831,7 @@ Swig_cmemberset_wrapper(DOHString_or_char *classname,
l = NewParmList(); l = NewParmList();
t = NewDataType(T_USER); t = NewDataType(T_USER);
strcpy(t->name,Char(classname)); DataType_Setname(t, Char(classname));
t->is_pointer++; t->is_pointer++;
p = NewParm(t,"self"); p = NewParm(t,"self");
Append(l,p); Append(l,p);
@ -884,7 +884,7 @@ Swig_cmemberget_wrapper(DOHString_or_char *classname,
l = NewParmList(); l = NewParmList();
t = NewDataType(T_USER); t = NewDataType(T_USER);
strcpy(t->name,Char(classname)); DataType_Setname(t, Char(classname));
t->is_pointer++; t->is_pointer++;
p = NewParm(t,"self"); p = NewParm(t,"self");
Append(l,p); Append(l,p);

View file

@ -26,53 +26,53 @@ DataType *NewDataType(int t) {
DataType *ty = (DataType *) malloc(sizeof(DataType)); DataType *ty = (DataType *) malloc(sizeof(DataType));
switch(t) { switch(t) {
case T_BOOL: case T_BOOL:
strcpy(ty->name,"bool"); strcpy(ty->_name,"bool");
break; break;
case T_INT: case T_INT:
strcpy(ty->name,"int"); strcpy(ty->_name,"int");
break; break;
case T_UINT: case T_UINT:
strcpy(ty->name,"unsigned int"); strcpy(ty->_name,"unsigned int");
break; break;
case T_SHORT: case T_SHORT:
strcpy(ty->name,"short"); strcpy(ty->_name,"short");
break; break;
case T_USHORT: case T_USHORT:
strcpy(ty->name,"unsigned short"); strcpy(ty->_name,"unsigned short");
break; break;
case T_LONG: case T_LONG:
strcpy(ty->name,"long"); strcpy(ty->_name,"long");
break; break;
case T_ULONG: case T_ULONG:
strcpy(ty->name,"unsigned long"); strcpy(ty->_name,"unsigned long");
break; break;
case T_FLOAT: case T_FLOAT:
strcpy(ty->name, "float"); strcpy(ty->_name, "float");
break; break;
case T_DOUBLE: case T_DOUBLE:
strcpy(ty->name, "double"); strcpy(ty->_name, "double");
break; break;
case T_CHAR: case T_SCHAR: case T_CHAR: case T_SCHAR:
strcpy(ty->name, "char"); strcpy(ty->_name, "char");
break; break;
case T_UCHAR: case T_UCHAR:
strcpy(ty->name,"unsigned char"); strcpy(ty->_name,"unsigned char");
break; break;
case T_VOID: case T_VOID:
strcpy(ty->name,"void"); strcpy(ty->_name,"void");
break; break;
case T_USER: case T_USER:
strcpy(ty->name,"USER"); strcpy(ty->_name,"USER");
break; break;
default : default :
strcpy(ty->name,""); strcpy(ty->_name,"");
break; break;
} }
ty->_type = t; ty->_type = t;
ty->is_pointer = 0; ty->is_pointer = 0;
ty->implicit_ptr = 0; ty->implicit_ptr = 0;
ty->_qualifier = 0; ty->_qualifier = 0;
ty->is_reference = 0; ty->_is_reference = 0;
ty->status = 0; ty->status = 0;
ty->_arraystr = 0; ty->_arraystr = 0;
ty->id = type_id++; ty->id = type_id++;
@ -82,11 +82,11 @@ DataType *NewDataType(int t) {
DataType *CopyDataType(DataType *t) { DataType *CopyDataType(DataType *t) {
DataType *ty = (DataType *) malloc(sizeof(DataType)); DataType *ty = (DataType *) malloc(sizeof(DataType));
ty->_type = t->_type; ty->_type = t->_type;
strcpy(ty->name,t->name); strcpy(ty->_name,t->_name);
ty->is_pointer = t->is_pointer; ty->is_pointer = t->is_pointer;
ty->implicit_ptr = t->implicit_ptr; ty->implicit_ptr = t->implicit_ptr;
ty->_qualifier = Swig_copy_string(t->_qualifier); ty->_qualifier = Swig_copy_string(t->_qualifier);
ty->is_reference = t->is_reference; ty->_is_reference = t->_is_reference;
ty->status = t->status; ty->status = t->status;
ty->_arraystr = Swig_copy_string(t->_arraystr); ty->_arraystr = Swig_copy_string(t->_arraystr);
ty->id = t->id; ty->id = t->id;
@ -102,7 +102,7 @@ void DelDataType(DataType *t) {
int DataType_type(DataType *t) { int DataType_type(DataType *t) {
if ((t->_type == T_CHAR) && (t->is_pointer == 1)) return T_STRING; if ((t->_type == T_CHAR) && (t->is_pointer == 1)) return T_STRING;
if (t->_arraystr) return T_ARRAY; if (t->_arraystr) return T_ARRAY;
if (t->is_reference) return T_REFERENCE; if (t->_is_reference) return T_REFERENCE;
if (t->is_pointer) return T_POINTER; if (t->is_pointer) return T_POINTER;
return t->_type; return t->_type;
} }
@ -133,6 +133,21 @@ void DataType_set_arraystr(DataType *t, char *a) {
t->_arraystr = Swig_copy_string(a); t->_arraystr = Swig_copy_string(a);
} }
void DataType_add_reference(DataType *t) {
t->_is_reference = 1;
}
int DataType_is_reference(DataType *t) {
return t->_is_reference;
}
void DataType_Setname(DataType *t, char *n) {
strcpy(t->_name, n);
}
char *DataType_Getname(DataType *t) {
return t->_name;
}
/* -------------------------------------------------------------------- /* --------------------------------------------------------------------
* DataType_primitive() * DataType_primitive()
@ -144,49 +159,49 @@ void DataType_set_arraystr(DataType *t, char *a) {
void DataType_primitive(DataType *t) { void DataType_primitive(DataType *t) {
switch(t->_type) { switch(t->_type) {
case T_BOOL: case T_BOOL:
strcpy(t->name,"bool"); strcpy(t->_name,"bool");
break; break;
case T_INT: case T_INT:
strcpy(t->name,"int"); strcpy(t->_name,"int");
break; break;
case T_SHORT: case T_SHORT:
strcpy(t->name,"short"); strcpy(t->_name,"short");
break; break;
case T_LONG: case T_LONG:
strcpy(t->name,"long"); strcpy(t->_name,"long");
break; break;
case T_CHAR: case T_CHAR:
strcpy(t->name,"char"); strcpy(t->_name,"char");
break; break;
case T_SCHAR: case T_SCHAR:
strcpy(t->name,"signed char"); strcpy(t->_name,"signed char");
break; break;
case T_UINT: case T_UINT:
strcpy(t->name,"unsigned int"); strcpy(t->_name,"unsigned int");
break; break;
case T_USHORT: case T_USHORT:
strcpy(t->name,"unsigned short"); strcpy(t->_name,"unsigned short");
break; break;
case T_ULONG: case T_ULONG:
strcpy(t->name,"unsigned long"); strcpy(t->_name,"unsigned long");
break; break;
case T_UCHAR: case T_UCHAR:
strcpy(t->name,"unsigned char"); strcpy(t->_name,"unsigned char");
break; break;
case T_FLOAT: case T_FLOAT:
strcpy(t->name,"float"); strcpy(t->_name,"float");
break; break;
case T_DOUBLE: case T_DOUBLE:
strcpy(t->name,"double"); strcpy(t->_name,"double");
break; break;
case T_VOID: case T_VOID:
strcpy(t->name,"void"); strcpy(t->_name,"void");
break; break;
case T_USER: case T_USER:
strcpy(t->name,"USER"); strcpy(t->_name,"USER");
break; break;
default: default:
strcpy(t->name,"UNKNOWN"); strcpy(t->_name,"UNKNOWN");
break; break;
} }
t->implicit_ptr = 0; /* Gets rid of typedef'd pointers */ t->implicit_ptr = 0; /* Gets rid of typedef'd pointers */
@ -214,7 +229,7 @@ char *DataType_mangle_default(DataType *t) {
char *d; char *d;
ri = ri % 8; ri = ri % 8;
c = t->name; c = t->_name;
result[ri][0] = '_'; result[ri][0] = '_';
@ -263,23 +278,23 @@ char *DataType_str(DataType *t, DOHString_or_char *name) {
ri = ri % 8; ri = ri % 8;
if (t->_arraystr) t->is_pointer--; if (t->_arraystr) t->is_pointer--;
if (t->is_reference) t->is_pointer--; if (t->_is_reference) t->is_pointer--;
if (t->_qualifier) { if (t->_qualifier) {
sprintf(result[ri],"%s %s", t->_qualifier, t->name); sprintf(result[ri],"%s %s", t->_qualifier, t->_name);
} else { } else {
sprintf(result[ri],"%s ", t->name); sprintf(result[ri],"%s ", t->_name);
} }
for (i = 0; i < (t->is_pointer-t->implicit_ptr); i++) { for (i = 0; i < (t->is_pointer-t->implicit_ptr); i++) {
strcat(result[ri],"*"); strcat(result[ri],"*");
} }
if (t->is_reference) strcat(result[ri],"&"); if (t->_is_reference) strcat(result[ri],"&");
if (name) strcat(result[ri],Char(name)); if (name) strcat(result[ri],Char(name));
if (t->_arraystr) { if (t->_arraystr) {
strcat(result[ri],t->_arraystr); strcat(result[ri],t->_arraystr);
t->is_pointer++; t->is_pointer++;
} }
if (t->is_reference) t->is_pointer++; if (t->_is_reference) t->is_pointer++;
return result[ri++]; return result[ri++];
} }
@ -309,7 +324,7 @@ char *DataType_lstr(DataType *ty, DOHString_or_char *name) {
DataType_typedef_replace(t); /* Replace the type with its typedef value */ DataType_typedef_replace(t); /* Replace the type with its typedef value */
} }
ri = ri % 8; ri = ri % 8;
sprintf(result[ri],"%s ", t->name); sprintf(result[ri],"%s ", t->_name);
for (i = 0; i < (t->is_pointer-t->implicit_ptr); i++) for (i = 0; i < (t->is_pointer-t->implicit_ptr); i++)
strcat(result[ri],"*"); strcat(result[ri],"*");
@ -342,7 +357,7 @@ DataType *DataType_ltype(DataType *t) {
free(ty->_arraystr); free(ty->_arraystr);
ty->_arraystr = 0; ty->_arraystr = 0;
} }
ty->is_reference = 0; ty->_is_reference = 0;
return ty; return ty;
} }
@ -409,7 +424,7 @@ char *DataType_rcaststr(DataType *ty, DOHString_or_char *name) {
} }
if (name) { if (name) {
if (ty->is_reference) { if (ty->_is_reference) {
strcat(result[ri],"*"); strcat(result[ri],"*");
} }
strcat(result[ri],Char(name)); strcat(result[ri],Char(name));
@ -434,7 +449,7 @@ char *DataType_lcaststr(DataType *ty, DOHString_or_char *name) {
sprintf(result[ri],"(%s)", DataType_lstr(ty,0)); sprintf(result[ri],"(%s)", DataType_lstr(ty,0));
if (name) if (name)
strcat(result[ri], Char(name)); strcat(result[ri], Char(name));
} else if (ty->is_reference) { } else if (ty->_is_reference) {
sprintf(result[ri],"(%s)", DataType_lstr(ty,0)); sprintf(result[ri],"(%s)", DataType_lstr(ty,0));
if (name) { if (name) {
strcat(result[ri], "&"); strcat(result[ri], "&");
@ -570,9 +585,9 @@ int DataType_typedef_add(DataType *t,char *tname, int mode) {
/* Now add this type mapping to our type-equivalence table */ /* Now add this type mapping to our type-equivalence table */
if (mode == 0) { if (mode == 0) {
if ((t->_type != T_VOID) && (strcmp(t->name,tname) != 0)) { if ((t->_type != T_VOID) && (strcmp(t->_name,tname) != 0)) {
t1 = NewDataType(0); t1 = NewDataType(0);
strcpy(t1->name,tname); strcpy(t1->_name,tname);
name2 = DataType_manglestr(t1); name2 = DataType_manglestr(t1);
name1 = DataType_manglestr(t); name1 = DataType_manglestr(t);
typeeq_addtypedef(name1,name2,t1); typeeq_addtypedef(name1,name2,t1);
@ -616,7 +631,7 @@ void DataType_typedef_resolve(DataType *t, int level) {
int s = scope - level; int s = scope - level;
while (s >= 0) { while (s >= 0) {
if ((td = (DataType *) GetVoid(typedef_hash[s],t->name))) { if ((td = (DataType *) GetVoid(typedef_hash[s],t->_name))) {
t->_type = td->_type; t->_type = td->_type;
t->is_pointer += td->is_pointer; t->is_pointer += td->is_pointer;
t->implicit_ptr += td->implicit_ptr; t->implicit_ptr += td->implicit_ptr;
@ -626,7 +641,7 @@ void DataType_typedef_resolve(DataType *t, int level) {
if (td->_qualifier) { if (td->_qualifier) {
if (strcmp(td->_qualifier,"const") == 0) { if (strcmp(td->_qualifier,"const") == 0) {
strcpy(t->name,td->name); strcpy(t->_name,td->_name);
t->_qualifier = Swig_copy_string(td->_qualifier); t->_qualifier = Swig_copy_string(td->_qualifier);
t->implicit_ptr -= td->implicit_ptr; t->implicit_ptr -= td->implicit_ptr;
} }
@ -652,11 +667,11 @@ void DataType_typedef_replace (DataType *t) {
temp[0] = 0; temp[0] = 0;
if ((td = (DataType *) GetVoid(typedef_hash[scope],t->name))) { if ((td = (DataType *) GetVoid(typedef_hash[scope],t->_name))) {
t->_type = td->_type; t->_type = td->_type;
t->is_pointer = td->is_pointer; t->is_pointer = td->is_pointer;
t->implicit_ptr -= td->implicit_ptr; t->implicit_ptr -= td->implicit_ptr;
strcpy(t->name, td->name); strcpy(t->_name, td->_name);
if (td->_arraystr) { if (td->_arraystr) {
if (t->_arraystr) { if (t->_arraystr) {
strcat(temp,t->_arraystr); strcat(temp,t->_arraystr);
@ -697,7 +712,7 @@ int DataType_is_typedef(char *t) {
void DataType_typedef_updatestatus(DataType *t, int newstatus) { void DataType_typedef_updatestatus(DataType *t, int newstatus) {
DataType *nt; DataType *nt;
if ((nt = (DataType *) GetVoid(typedef_hash[scope],t->name))) { if ((nt = (DataType *) GetVoid(typedef_hash[scope],t->_name))) {
nt->status = newstatus; nt->status = newstatus;
} }
} }
@ -899,7 +914,7 @@ void typeeq_addtypedef(char *name, char *eqname, DataType *t) {
if (!t) { if (!t) {
t = NewDataType(T_USER); t = NewDataType(T_USER);
strcpy(t->name, eqname); strcpy(t->_name, eqname);
} }
/*printf("addtypedef: %s : %s : %s\n", name, eqname, t->print_type()); */ /*printf("addtypedef: %s : %s : %s\n", name, eqname, t->print_type()); */
@ -997,8 +1012,8 @@ void typeeq_derived(char *n1, char *n2, char *cast) {
t->_type = T_USER; t->_type = T_USER;
t1->_type = T_USER; t1->_type = T_USER;
strcpy(t->name,n1); strcpy(t->_name,n1);
strcpy(t1->name,n2); strcpy(t1->_name,n2);
name = DataType_manglestr(t); name = DataType_manglestr(t);
name2 = DataType_manglestr(t1); name2 = DataType_manglestr(t1);
typeeq_add(name,name2, cast, t1); typeeq_add(name,name2, cast, t1);
@ -1020,8 +1035,8 @@ void typeeq_mangle(char *n1, char *n2, char *cast) {
t1 = NewDataType(0); t1 = NewDataType(0);
if (!te_init) typeeq_init(); if (!te_init) typeeq_init();
strcpy(t->name,n1); strcpy(t->_name,n1);
strcpy(t1->name,n2); strcpy(t1->_name,n2);
name = DataType_manglestr(t); name = DataType_manglestr(t);
name2 = DataType_manglestr(t1); name2 = DataType_manglestr(t1);
typeeq_add(name,name2,cast,0); typeeq_add(name,name2,cast,0);
@ -1146,13 +1161,13 @@ void DataType_remember(DataType *ty) {
if (!bases) bases = NewHash(); if (!bases) bases = NewHash();
/* Now, do the base-class hack */ /* Now, do the base-class hack */
h = Getattr(bases,t->name); h = Getattr(bases,t->_name);
if (h) { if (h) {
DOH *key; DOH *key;
key = Firstkey(h); key = Firstkey(h);
while (key) { while (key) {
DataType *nt = CopyDataType(t); DataType *nt = CopyDataType(t);
strcpy(nt->name,Char(key)); strcpy(nt->_name,Char(key));
if (!Getattr(remembered,DataType_manglestr(nt))) if (!Getattr(remembered,DataType_manglestr(nt)))
DataType_remember(nt); DataType_remember(nt);
DelDataType(nt); DelDataType(nt);

View file

@ -50,10 +50,10 @@
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 */
int is_pointer; /* Is this a pointer */ int is_pointer; /* Is this a pointer */
int implicit_ptr; /* Implicit ptr */ int implicit_ptr; /* Implicit ptr */
int is_reference; /* A C++ reference type */ int _is_reference; /* A C++ reference type */
int 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 */
@ -67,6 +67,8 @@ extern void DelDataType(DataType *type);
int DataType_type(DataType *t); int DataType_type(DataType *t);
int DataType_Gettypecode(DataType *t); int DataType_Gettypecode(DataType *t);
void DataType_Settypecode(DataType *t, int type); void DataType_Settypecode(DataType *t, int type);
void DataType_Setname(DataType *t, char *name);
char *DataType_Getname(DataType *t);
/* -- New type interface -- */ /* -- New type interface -- */
@ -77,6 +79,9 @@ extern char *DataType_lcaststr(DataType *, DOHString_or_char *name); /* C
extern char *DataType_manglestr(DataType *t); /* Mangled type name */ extern char *DataType_manglestr(DataType *t); /* Mangled type name */
extern DataType *DataType_ltype(DataType *); /* Create local type object */ extern DataType *DataType_ltype(DataType *); /* Create local type object */
void DataType_add_reference(DataType *t);
int DataType_is_reference(DataType *t);
/* -- Old type interface. This is going away -- */ /* -- Old type interface. This is going away -- */
extern char *DataType_qualifier(DataType *); extern char *DataType_qualifier(DataType *);