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);
Printf (stderr, "ERROR: Unhandled GUILE type error.\n");
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, "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, " qualifier %s\n", (d->qualifier ? d->qualifier : ""));
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) {
// Print the type.
Printv(usage, " <", pt->name, 0);
Printv(usage, " <", DataType_Getname(pt), 0);
if (pt->is_pointer) {
for (int j = 0; j < (pt->is_pointer - pt->implicit_ptr); j++) {
Putc('*', usage);
@ -880,7 +880,7 @@ GUILE::usage_returns (char *iname, DataType *d, ParmList *l, DOHString *usage)
++have_param;
// Print the type.
Printv(param," $", pt->name, 0);
Printv(param," $", DataType_Getname(pt), 0);
if (pt->is_pointer) {
for (j = 0; j < (pt->is_pointer - pt->implicit_ptr - 1); j++) {
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_BOOL: return (char*)"boolean []";
case T_VOID:
case T_USER: if(inShadow && Getattr(shadow_classes,t->name))
return GetChar(shadow_classes,t->name);
case T_USER: if(inShadow && Getattr(shadow_classes,DataType_Getname(t)))
return GetChar(shadow_classes,DataType_Getname(t));
else return (char*)"long";
}
} 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_BOOL: return (char*)"[Z";
case T_VOID:
case T_USER: if(inShadow && Getattr(shadow_classes,t->name))
return GetChar(shadow_classes,t->name);
case T_USER: if(inShadow && Getattr(shadow_classes,DataType_Getname(t)))
return GetChar(shadow_classes,DataType_Getname(t));
else return (char*)"J";
}
} 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
if (Getattr(shadow_classes,t->name)) {
if (Getattr(shadow_classes,DataType_Getname(t))) {
// Yep. This datatype is in 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);
char *shadowrettype = JavaTypeFromTypemap((char*)"jstype", typemap_lang, t, iname);
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);
@ -1087,7 +1087,7 @@ void JAVA::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
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);
} 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);
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
@ -1132,7 +1132,7 @@ void JAVA::cpp_static_func(char *name, char *iname, DataType *t, ParmList *l) {
if(!javarettype) javarettype = SwigTcToJavaType(t, 1, 0);
char *shadowrettype = JavaTypeFromTypemap((char*)"jstype", typemap_lang, t, iname);
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);
@ -1162,7 +1162,7 @@ void JAVA::cpp_static_func(char *name, char *iname, DataType *t, ParmList *l) {
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);
} 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);
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
@ -1233,13 +1233,13 @@ void JAVA::cpp_constructor(char *name, char *iname, ParmList *l) {
char *jstype = JavaTypeFromTypemap((char*)"jstype", typemap_lang, pt, pn);
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
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);
} else Printv(nativecall, arg, 0);

View file

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

View file

@ -156,18 +156,17 @@ type_mangle(DataType *t) {
// 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
strcpy(result, GetChar(classes,t->name));
strcpy(result, GetChar(classes,DataType_Getname(t)));
return result;
}
}
r = result;
c = t->name;
for ( c = t->name; *c; c++,r++) {
for ( c = DataType_Getname(t); *c; c++,r++) {
*r = *c;
}
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))) {
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))
Printf(func," if (scalar(@args) >= %d) {\n ", 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",
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);
@ -1084,7 +1083,7 @@ void PERL5::create_function(char *name, char *iname, DataType *d, ParmList *l)
// into our local hash table
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)
Printv(func, tab4, "$", realpackage, "::", name, "::OWNER{$result} = 1;\n", 0);
else
@ -1312,13 +1311,13 @@ void PERL5::link_variable(char *name, char *iname, DataType *t)
// 2. Otherwise, just hack Perl's symbol table
if (blessed) {
if ((Getattr(classes,t->name)) && (t->is_pointer <= 1)) {
if ((Getattr(classes,DataType_Getname(t))) && (t->is_pointer <= 1)) {
Printv(var_stubs,
"\nmy %__", iname, "_hash;\n",
"tie %__", iname, "_hash,\"", GetChar(classes,t->name), "\", $",
"tie %__", iname, "_hash,\"", GetChar(classes,DataType_Getname(t)), "\", $",
package, "::", iname, ";\n",
"$", iname, "= \\%__", iname, "_hash;\n",
"bless $", iname, ", ", GetChar(classes,t->name), ";\n",
"bless $", iname, ", ", GetChar(classes,DataType_Getname(t)), ";\n",
0);
} else {
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 ((Getattr(classes,type->name)) && (type->is_pointer <= 1)) {
if ((Getattr(classes,DataType_Getname(type))) && (type->is_pointer <= 1)) {
Printv(var_stubs,
"\nmy %__", name, "_hash;\n",
"tie %__", name, "_hash,\"", GetChar(classes,type->name), "\", $",
"tie %__", name, "_hash,\"", GetChar(classes,DataType_Getname(type)), "\", $",
package, "::", name, ";\n",
"$", name, "= \\%__", name, "_hash;\n",
"bless $", name, ", ", GetChar(classes,type->name), ";\n",
"bless $", name, ", ", GetChar(classes,DataType_Getname(type)), ";\n",
0);
} else {
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);
}
// 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
if (i >= (pcount - numopt))
@ -1911,7 +1910,7 @@ void PERL5::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
"}\n",
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);
@ -1919,7 +1918,7 @@ void PERL5::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
// into our local hash table
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)
Printv(func, tab4, "$", realpackage, "::", name, "::OWNER{$result} = 1;\n", 0);
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
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
// entry to the members list
Printv(blessedmembers,
tab4, realname, " => '", (hidden ? realpackage : ""), (hidden ? "::" : ""), GetChar(classes,t->name), "',\n",
tab4, realname, " => '", (hidden ? realpackage : ""), (hidden ? "::" : ""), GetChar(classes,DataType_Getname(t)), "',\n",
0);
}
@ -2075,7 +2074,7 @@ void PERL5::cpp_constructor(char *name, char *iname, ParmList *l) {
DataType *pt = Gettype(p);
// 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
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
if (Getattr(classes,t->name)) {
if (Getattr(classes,DataType_Getname(t))) {
// Yep. This datatype is in 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
if ((Getattr(hash,d->name)) && (d->is_pointer <=1)) {
if ((Getattr(hash,DataType_Getname(d))) && (d->is_pointer <=1)) {
need_wrapper = 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.
if (!have_output) {
Printv(func, tab4, "if val: val = ", GetChar(hash,d->name), "Ptr(val)", 0);
if (((Getattr(hash,d->name)) && (d->is_pointer < 1)) ||
((Getattr(hash,d->name)) && (d->is_pointer == 1) && NewObject))
Printv(func, tab4, "if val: val = ", GetChar(hash,DataType_Getname(d)), "Ptr(val)", 0);
if (((Getattr(hash,DataType_Getname(d))) && (d->is_pointer < 1)) ||
((Getattr(hash,DataType_Getname(d))) && (d->is_pointer == 1) && NewObject))
Printf(func, "; val.thisown = 1\n");
else
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)
// ----------------------------------------------------------
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,
iname, " = ", GetChar(hash,t->name), "Ptr(", module, ".", global_name,
iname, " = ", GetChar(hash,DataType_Getname(t)), "Ptr(", module, ".", global_name,
".", iname, ")\n",
0);
}
@ -1694,7 +1694,7 @@ void PYTHON::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l)
if (strcmp(realname,"__repr__") == 0)
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,
class_name, ".", realname, " = new.instancemethod(", module, ".", Swig_name_member(class_name,realname), ", None, ", class_name, ")\n",
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);
// 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 (!have_output) {
Printv(pyclass, tab8, "if val: val = ", GetChar(hash,t->name), "Ptr(val) ", 0);
if (((Getattr(hash,t->name)) && (t->is_pointer < 1)) ||
((Getattr(hash,t->name)) && (t->is_pointer == 1) && NewObject))
Printv(pyclass, tab8, "if val: val = ", GetChar(hash,DataType_Getname(t)), "Ptr(val) ", 0);
if (((Getattr(hash,DataType_Getname(t))) && (t->is_pointer < 1)) ||
((Getattr(hash,DataType_Getname(t))) && (t->is_pointer == 1) && NewObject))
Printf(pyclass, "; val.thisown = 1\n");
else
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
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
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
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 {
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
if (Getattr(hash,t->name)) {
if (Getattr(hash,DataType_Getname(t))) {
// Yep. This datatype is in 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
DataType *value = NewDataType(T_VOID);
strcpy(value->name, "void");
DataType_Setname(value,"void");
value->is_pointer = 1;
value->implicit_ptr = 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);
target = Char(target_replace);
RClass *cls = RCLASS(classes, type->name);
RClass *cls = RCLASS(classes, DataType_Getname(type));
if (!s) s = NewString("");
Clear(s);
if ((strcmp("out", op) == 0 || strcmp("in", op) == 0)
&& strcmp(type->name, "VALUE") == 0) {
&& strcmp(DataType_Getname(type), "VALUE") == 0) {
Printf(s,"$target = $source;");
} else if (strcmp("out", op) == 0 && (DataType_Gettypecode(type) == T_USER) &&
type->is_pointer == 1 && cls) {

View file

@ -1025,7 +1025,7 @@ void TCL8::declare_const(char *name, char *, DataType *type, char *value) {
break;
case T_FLOAT:
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);
link_variable(var_name,name,type);
break;
@ -1254,9 +1254,10 @@ void TCL8::cpp_close_class() {
this->Language::cpp_close_class();
if (shadow) {
char temp[256];
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;
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
if (Getattr(hash,t->name)) {
if (Getattr(hash,DataType_Getname(t))) {
// Yep. This datatype is in 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) {
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;
newname = GetChar(localtypes,type->name);
newname = GetChar(localtypes,DataType_Getname(type));
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;
while (n) {
char temp[256];
// Token replace the name of the parent class
Replace(n->code, "$classname", parent, DOH_REPLACE_ANY);
// 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
cplus_variable(n->name,(char *) 0, n->type);
@ -699,13 +701,13 @@ statement : INCLUDE STRING LBRACE {
/* A function declaration */
| extern type declaration LPAREN parms RPAREN cpp_const {
init_language();
if (Active_type) DelDataType(Active_type);
Active_type = CopyDataType($2);
Active_extern = $1;
$2->is_pointer += $3.is_pointer;
$2->is_reference = $3.is_reference;
create_function($1, $3.id, $2, $5);
init_language();
if (Active_type) DelDataType(Active_type);
Active_type = CopyDataType($2);
Active_extern = $1;
$2->is_pointer += $3.is_pointer;
if ($3.is_reference) DataType_add_reference($2);
create_function($1, $3.id, $2, $5);
DelDataType($2);
Delete($5);
} stail { }
@ -714,8 +716,8 @@ statement : INCLUDE STRING LBRACE {
| extern type declaration LPAREN parms RPAREN func_end {
init_language();
if ($3.is_reference) DataType_add_reference($2);
$2->is_pointer += $3.is_pointer;
$2->is_reference = $3.is_reference;
create_function($1, $3.id, $2, $5);
DelDataType($2);
Delete($5);
@ -727,7 +729,7 @@ statement : INCLUDE STRING LBRACE {
init_language();
DataType *t = NewDataType(T_INT);
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);
DelDataType(t);
} stail { };
@ -739,7 +741,7 @@ statement : INCLUDE STRING LBRACE {
if (strlen(Char(CCode))) {
init_language();
$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);
}
}
@ -752,7 +754,7 @@ statement : INCLUDE STRING LBRACE {
| INLINE type declaration LPAREN parms RPAREN func_end {
init_language();
$2->is_pointer += $3.is_pointer;
$2->is_reference = $3.is_reference;
if ($3.is_reference) DataType_add_reference($2);
if (Inline) {
fprintf(stderr,"%s : Line %d. Repeated %%inline directive.\n",input_file,line_number);
FatalError();
@ -1004,7 +1006,7 @@ statement : INCLUDE STRING LBRACE {
DataType_Settypecode(temp_type,T_INT);
temp_type->is_pointer = 0;
temp_type->implicit_ptr = 0;
sprintf(temp_type->name,"int");
DataType_Setname(temp_type,"int");
DataType_typedef_add(temp_type,$3,1);
lang->add_typedef(temp_type,$3);
}
@ -1017,7 +1019,7 @@ statement : INCLUDE STRING LBRACE {
DataType_Settypecode(temp_type,T_INT);
temp_type->is_pointer = 0;
temp_type->implicit_ptr = 0;
sprintf(temp_type->name,"int");
DataType_Setname(temp_type,"int");
Active_typedef = CopyDataType(temp_type);
DataType_typedef_add(temp_type,$8,1);
lang->add_typedef(temp_type,$8);
@ -1259,7 +1261,7 @@ typedef_decl : TYPEDEF type declaration {
fprintf(f_header,"typedef ");
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);
$2->is_pointer = 1;
DataType_typedef_add($2,$5,1);
@ -1282,7 +1284,7 @@ typedef_decl : TYPEDEF type declaration {
}
/* Typedef'd pointer */
strcpy($2->name,"<function ptr>");
DataType_Setname($2,"<function ptr>");
DataType_Settypecode($2,T_USER);
$2->is_pointer = 1;
DataType_typedef_add($2,$6,1);
@ -1399,7 +1401,7 @@ stail : SEMI { }
init_language();
temp_typeptr = CopyDataType(Active_type);
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);
DelDataType(temp_typeptr);
Delete($4);
@ -1479,7 +1481,7 @@ parm_type : type pname {
| type AND pname {
$$ = NewParm($1,$3);
DataType *pt = Gettype($$);
pt->is_reference = 1;
DataType_add_reference(pt);
pt->is_pointer++;
Setvalue($$,DefArg);
if (!CPlusPlus) {
@ -1495,7 +1497,7 @@ parm_type : type pname {
DataType *pt = Gettype($$);
DataType_Settypecode(pt,T_ERROR);
Setname($$,$4);
strcpy(pt->name,"<function ptr>");
DataType_Setname(pt,"<function ptr>");
DelDataType($1);
free($4);
Delete($7);
@ -1506,7 +1508,7 @@ parm_type : type pname {
DataType *pt = Gettype($$);
DataType_Settypecode(pt,T_ERROR);
Setname($$,(char*)"varargs");
strcpy(pt->name,"<varargs>");
DataType_Setname(pt,"<varargs>");
FatalError();
}
;
@ -1637,25 +1639,29 @@ type : TYPE_INT {
| TYPE_TYPEDEF objc_protolist {
$$ = $1;
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",
input_file, line_number);
} else {
strcat($$->name,$2);
char temp[256];
sprintf(temp,"%s%s",DataType_Getname($$),$2);
DataType_Setname($$,temp);
}
}
}
| ID objc_protolist {
$$ = NewDataType(T_USER);
strcpy($$->name,$1);
DataType_Setname($$,$1);
/* Do a typedef lookup */
DataType_typedef_resolve($$,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",
input_file, line_number);
} 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");
}
| cpptype ID {
char temp[256];
$$ = NewDataType(T_USER);
sprintf($$->name,"%s %s",$1, $2);
sprintf(temp,"%s %s", $1, $2);
DataType_Setname($$,temp);
}
| ID DCOLON ID {
char temp[256];
$$ = NewDataType(T_USER);
sprintf($$->name,"%s::%s",$1,$3);
sprintf(temp,"%s::%s",$1,$3);
DataType_Setname($$,temp);
DataType_typedef_resolve($$,0);
}
/* This declaration causes a shift-reduce conflict. Unresolved for now */
@ -1677,12 +1687,14 @@ type : TYPE_INT {
| DCOLON ID {
$$ = NewDataType(T_USER);
sprintf($$->name,"%s", $2);
DataType_Setname($$,$2);
DataType_typedef_resolve($$,1);
}
| ENUM ID {
char temp[256];
$$ = NewDataType(T_INT);
sprintf($$->name,"enum %s", $2);
sprintf(temp,"enum %s", $2);
DataType_Setname($$,temp);
DataType_typedef_resolve($$,1);
}
;
@ -1723,15 +1735,17 @@ strict_type : TYPE_INT {
}
| TYPE_TYPEDEF objc_protolist {
$$ = $1;
strcat($$->name,$2);
strcat(DataType_Getname($$),$2);
}
| CONST type {
$$ = $2;
DataType_set_qualifier($$,(char*)"const");
}
| cpptype ID {
char temp[256];
$$ = 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 {
$$ = $1;
DataType_Settypecode($$,T_INT);
sprintf(temp_name,"signed %s",$1->name);
strcpy($$->name,temp_name);
sprintf(temp_name,"signed %s",DataType_Getname($1));
DataType_Setname($$,temp_name);
}
| TYPE_SHORT opt_int {
$$ = $1;
DataType_Settypecode($$,T_SHORT);
sprintf(temp_name,"signed %s",$1->name);
strcpy($$->name,temp_name);
sprintf(temp_name,"signed %s",DataType_Getname($1));
DataType_Setname($$,temp_name);
}
| TYPE_LONG opt_int {
$$ = $1;
DataType_Settypecode($$,T_LONG);
sprintf(temp_name,"signed %s",$1->name);
strcpy($$->name,temp_name);
sprintf(temp_name,"signed %s",DataType_Getname($1));
DataType_Setname($$,temp_name);
}
| TYPE_CHAR {
$$ = $1;
DataType_Settypecode($$,T_SCHAR);
sprintf(temp_name,"signed %s",$1->name);
strcpy($$->name,temp_name);
sprintf(temp_name,"signed %s",DataType_Getname($1));
DataType_Setname($$,temp_name);
}
;
@ -1774,26 +1788,26 @@ opt_unsigned : empty {
| TYPE_INT {
$$ = $1;
DataType_Settypecode($$,T_UINT);
sprintf(temp_name,"unsigned %s",$1->name);
strcpy($$->name,temp_name);
sprintf(temp_name,"unsigned %s",DataType_Getname($1));
DataType_Setname($$,temp_name);
}
| TYPE_SHORT opt_int {
$$ = $1;
DataType_Settypecode($$,T_USHORT);
sprintf(temp_name,"unsigned %s",$1->name);
strcpy($$->name,temp_name);
sprintf(temp_name,"unsigned %s",DataType_Getname($1));
DataType_Setname($$,temp_name);
}
| TYPE_LONG opt_int {
$$ = $1;
DataType_Settypecode($$,T_ULONG);
sprintf(temp_name,"unsigned %s",$1->name);
strcpy($$->name,temp_name);
sprintf(temp_name,"unsigned %s",DataType_Getname($1));
DataType_Setname($$,temp_name);
}
| TYPE_CHAR {
$$ = $1;
DataType_Settypecode($$,T_UCHAR);
sprintf(temp_name,"unsigned %s",$1->name);
strcpy($$->name,temp_name);
sprintf(temp_name,"unsigned %s",DataType_Getname($1));
DataType_Setname($$,temp_name);
}
;
@ -1917,13 +1931,13 @@ expr : NUM_INT {
$$.type = T_ULONG;
}
| SIZEOF LPAREN type RPAREN {
$$.id = (char *) malloc(strlen($3->name)+9);
sprintf($$.id,"sizeof(%s)", $3->name);
$$.id = (char *) malloc(strlen(DataType_Getname($3))+9);
sprintf($$.id,"sizeof(%s)", DataType_Getname($3));
$$.type = T_INT;
}
| LPAREN strict_type RPAREN expr %prec UMINUS {
$$.id = (char *) malloc(strlen($4.id)+strlen($2->name)+3);
sprintf($$.id,"(%s)%s",$2->name,$4.id);
$$.id = (char *) malloc(strlen($4.id)+strlen(DataType_Getname($2))+3);
sprintf($$.id,"(%s)%s",DataType_Getname($2),$4.id);
$$.type = DataType_Gettypecode($2);
}
| ID {
@ -2151,7 +2165,9 @@ cpp_class :
}
// Create a datatype for correctly processing the typedef
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->implicit_ptr = 0;
@ -2231,7 +2247,7 @@ cpp_class :
}
// Create a datatype for correctly processing the typedef
Active_typedef = NewDataType(T_USER);
sprintf(Active_typedef->name,"%s",$7.id);
DataType_Setname(Active_typedef,$7.id);
// Dump nested classes
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);
$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
sprintf(temp_name,"%s::%s",$3.id,$5);
if (!Rename_true) {
@ -2351,7 +2367,7 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end {
init_language();
if (cplus_mode == CPLUS_PUBLIC) {
$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);
if (iname == $2.id) iname = 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();
if (cplus_mode == CPLUS_PUBLIC) {
$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);
if (iname == $3.id) iname = 0;
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);
Active_type = CopyDataType($1);
$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 ((strcmp(DataType_qualifier($1),"const") == 0) && ($1->is_pointer == 0)) {
// 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);
Active_type = CopyDataType($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));
if (!(tm = typemap_lookup((char*)"memberin",typemap_lang,$1,$2.id,(char*)"",(char*)"")))
Status = STAT_READONLY;
@ -2513,7 +2529,7 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end {
| STATIC type declaration LPAREN parms RPAREN cpp_end {
char *iname;
$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) {
iname = make_name($3.id);
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);
temp_type->is_pointer = 0;
temp_type->implicit_ptr = 0;
sprintf(temp_type->name,"int");
DataType_Setname(temp_type,"int");
DataType_typedef_add(temp_type,$2,1);
lang->add_typedef(temp_type,$2);
}
@ -2651,7 +2667,7 @@ cpp_pragma : PRAGMA ID stylearg {
n->line = start_line;
n->type = NewDataType(T_USER);
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;
add_nested(n);
}
@ -2676,7 +2692,7 @@ cpp_pragma : PRAGMA ID stylearg {
n->line = start_line;
n->type = NewDataType(T_USER);
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;
add_nested(n);
@ -3035,7 +3051,7 @@ objc_var : type declaration {
if (Active_type) DelDataType(Active_type);
Active_type = CopyDataType($1);
$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 (!(tm = typemap_lookup((char*)"memberin",typemap_lang,$1,$2.id,(char*)"",(char*)"")))
Status = Status | STAT_READONLY;
@ -3055,7 +3071,7 @@ objc_var : type declaration {
if (Active_type) DelDataType(Active_type);
Active_type = CopyDataType($1);
$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));
if ($1->status & STAT_READONLY) {
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;
DataType *t = CopyDataType (Active_type);
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 (!(tm = typemap_lookup((char*)"memberin",typemap_lang,t,$2.id,(char*)"",(char*)"")))
Status = Status | STAT_READONLY;
@ -3100,7 +3116,7 @@ objc_vartail : COMMA declaration objc_vartail {
char *tm;
DataType *t = CopyDataType (Active_type);
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));
if (t->status & STAT_READONLY) {
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 */
$$ = NewDataType(T_VOID);
sprintf($$->name,"id");
DataType_Setname($$,"id");
$$->is_pointer = 1;
$$->implicit_ptr = 1;
}
@ -3206,7 +3222,7 @@ objc_arg_type : LPAREN parm RPAREN {
}
| empty {
$$ = NewDataType(T_VOID);
sprintf($$->name,"id");
DataType_Setname($$,"id");
$$->is_pointer = 1;
$$->implicit_ptr = 1;
}
@ -3326,7 +3342,7 @@ typemap_parm : type typemap_name {
$$ = NewTMParm();
$$->p = NewParm($1,$3);
DataType *pt = Gettype($$->p);
pt->is_reference = 1;
DataType_add_reference(pt);
pt->is_pointer++;
if (!CPlusPlus) {
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_Settypecode(pt,T_ERROR);
Setname($$->p,$4);
strcpy(pt->name,"<function ptr>");
DataType_Setname(pt,"<function ptr>");
$$->args = tm_parm;
DelDataType($1);
free($4);

View file

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

View file

@ -333,7 +333,7 @@ void typemap_register(char *op, char *lang, char *type, char *pname,
char *getcode, ParmList *args) {
DataType *temp;
temp = NewDataType(0);
strcpy(temp->name,type);
DataType_Setname(temp,type);
temp->is_pointer = 0;
DataType_Settypecode(temp,T_USER);
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
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;
} else {
tt = pt;
@ -510,7 +510,7 @@ static void typemap_locals(DataType *t, char *pname, DOHString *s, ParmList *l,
/* Substitute parameter names */
Replace(str,"$arg",pname, DOH_REPLACE_ANY);
if (strcmp(pt->name,"$basetype")==0) {
if (strcmp(DataType_Getname(pt),"$basetype")==0) {
/* use $basetype */
char temp_ip = tt->is_pointer;
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);
tm = typemap_search(key,stype->id);
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) */
tk = tm->next;
if (tk) {

View file

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

View file

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

View file

@ -50,10 +50,10 @@
typedef struct DataType {
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 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? */
char *_qualifier; /* A qualifier string (ie. const). */
char *_arraystr; /* String containing array part */
@ -67,6 +67,8 @@ extern void DelDataType(DataType *type);
int DataType_type(DataType *t);
int DataType_Gettypecode(DataType *t);
void DataType_Settypecode(DataType *t, int type);
void DataType_Setname(DataType *t, char *name);
char *DataType_Getname(DataType *t);
/* -- 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 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 -- */
extern char *DataType_qualifier(DataType *);