Finished removal of all public attributes of types.

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@627 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Dave Beazley 2000-08-06 16:36:43 +00:00
commit c738c6c639
14 changed files with 339 additions and 318 deletions

View file

@ -395,13 +395,13 @@ throw_unhandled_guile_type_error (DataType *d)
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", DataType_Getname(d)); Printf (stderr, " name %s\n", DataType_Getname(d));
Printf (stderr, " is_pointer %d\n", d->is_pointer); Printf (stderr, " is_pointer %d\n", DataType_is_pointer(d));
Printf (stderr, "implicit_ptr %d\n", d->implicit_ptr); /* Printf (stderr, "implicit_ptr %d\n", d->implicit_ptr);*/
Printf (stderr, "is_reference %d\n", DataType_is_reference(d)); 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 : ""));*/
Printf (stderr, " id %d\n", d->id); /* Printf (stderr, " id %d\n", d->id);*/
Printf (stderr, "\n\nBAILING...\n"); // for now -ttn Printf (stderr, "\n\nBAILING...\n"); // for now -ttn
abort(); // for now -ttn abort(); // for now -ttn
@ -489,7 +489,7 @@ GUILE::create_function (char *name, char *iname, DataType *d, ParmList *l)
Printv(f->code,tm,"\n",0); Printv(f->code,tm,"\n",0);
mreplace (f->code, argnum, arg, proc_name); mreplace (f->code, argnum, arg, proc_name);
} }
else if (pt->is_pointer) else if (DataType_is_pointer(pt))
get_pointer (iname, i, pt, f, proc_name, numargs); get_pointer (iname, i, pt, f, proc_name, numargs);
else { else {
throw_unhandled_guile_type_error (pt); throw_unhandled_guile_type_error (pt);
@ -536,7 +536,7 @@ GUILE::create_function (char *name, char *iname, DataType *d, ParmList *l)
Printv(f->code,tm,"\n",0); Printv(f->code,tm,"\n",0);
mreplace (f->code, argnum, arg, proc_name); mreplace (f->code, argnum, arg, proc_name);
} }
else if (d->is_pointer) { else if (DataType_is_pointer(d)) {
/* MK: I would like to use SWIG_Guile_MakePtr here to save one type /* MK: I would like to use SWIG_Guile_MakePtr here to save one type
look-up. */ look-up. */
Printv(f->code, tab4, Printv(f->code, tab4,
@ -656,7 +656,7 @@ GUILE::link_variable (char *name, char *iname, DataType *t)
t, name, (char*)"s_0", name))) { t, name, (char*)"s_0", name))) {
Printf (f_wrappers, "%s\n", tm); Printf (f_wrappers, "%s\n", tm);
} }
else if (t->is_pointer) { else if (DataType_is_pointer(t)) {
if (DataType_type(t) == T_STRING) { if (DataType_type(t) == T_STRING) {
Printf (f_wrappers, "\t\t _temp = gh_scm2newstr(s_0, &_len);\n"); Printf (f_wrappers, "\t\t _temp = gh_scm2newstr(s_0, &_len);\n");
Printf (f_wrappers, "\t\t if (%s) { free(%s);}\n", name, name); Printf (f_wrappers, "\t\t if (%s) { free(%s);}\n", name, name);
@ -691,7 +691,7 @@ GUILE::link_variable (char *name, char *iname, DataType *t)
t, name, name, (char*)"gswig_result"))) { t, name, name, (char*)"gswig_result"))) {
Printf (f_wrappers, "%s\n", tm); Printf (f_wrappers, "%s\n", tm);
} }
else if (t->is_pointer) { else if (DataType_is_pointer(t)) {
if (DataType_type(t) == T_STRING) { if (DataType_type(t) == T_STRING) {
Printf (f_wrappers, "\t gswig_result = gh_str02scm(%s);\n", name); Printf (f_wrappers, "\t gswig_result = gh_str02scm(%s);\n", name);
} else { } else {
@ -831,8 +831,9 @@ GUILE::usage_func (char *iname, DataType *d, ParmList *l, DOHString *usage)
// Print the type. // Print the type.
Printv(usage, " <", DataType_Getname(pt), 0); Printv(usage, " <", DataType_Getname(pt), 0);
if (pt->is_pointer) { if (DataType_is_pointer(pt)) {
for (int j = 0; j < (pt->is_pointer - pt->implicit_ptr); j++) { /* for (int j = 0; j < (pt->is_pointer - pt->implicit_ptr); j++) {*/
for (int j = 0; j < DataType_is_pointer(pt); j++) {
Putc('*', usage); Putc('*', usage);
} }
} }
@ -881,8 +882,9 @@ GUILE::usage_returns (char *iname, DataType *d, ParmList *l, DOHString *usage)
// Print the type. // Print the type.
Printv(param," $", DataType_Getname(pt), 0); Printv(param," $", DataType_Getname(pt), 0);
if (pt->is_pointer) { if (DataType_is_pointer(pt)) {
for (j = 0; j < (pt->is_pointer - pt->implicit_ptr - 1); j++) { /* for (j = 0; j < (pt->is_pointer - pt->implicit_ptr - 1); j++) { */
for (j = 0; j < DataType_is_pointer(pt) - 1; j++) {
Putc('*', param); Putc('*', param);
} }
} }

View file

@ -71,7 +71,7 @@ static int useRegisterNatives = 0; // Set to 1 when doing stuff
static DOHString *registerNativesList = 0; static DOHString *registerNativesList = 0;
char *JAVA::SwigTcToJniType(DataType *t, int ret) { char *JAVA::SwigTcToJniType(DataType *t, int ret) {
if(t->is_pointer == 1) { if(DataType_is_pointer(t) == 1) {
switch(DataType_Gettypecode(t)) { switch(DataType_Gettypecode(t)) {
case T_INT: return (char*)"jintArray"; case T_INT: return (char*)"jintArray";
case T_SHORT: return (char*)"jshortArray"; case T_SHORT: return (char*)"jshortArray";
@ -88,7 +88,7 @@ char *JAVA::SwigTcToJniType(DataType *t, int ret) {
case T_VOID: case T_VOID:
case T_USER: return (char*)"jlong"; case T_USER: return (char*)"jlong";
} }
} else if(t->is_pointer > 1) { } else if(DataType_is_pointer(t) > 1) {
if(ret) if(ret)
return (char*)"jlong"; return (char*)"jlong";
else return (char*)"jlongArray"; else return (char*)"jlongArray";
@ -115,7 +115,7 @@ char *JAVA::SwigTcToJniType(DataType *t, int ret) {
} }
char *JAVA::SwigTcToJavaType(DataType *t, int ret, int inShadow) { char *JAVA::SwigTcToJavaType(DataType *t, int ret, int inShadow) {
if(t->is_pointer == 1) { if(DataType_is_pointer(t) == 1) {
switch(DataType_Gettypecode(t)) { switch(DataType_Gettypecode(t)) {
case T_INT: return (char*)"int []"; case T_INT: return (char*)"int []";
case T_SHORT: return (char*)"short []"; case T_SHORT: return (char*)"short []";
@ -134,7 +134,7 @@ char *JAVA::SwigTcToJavaType(DataType *t, int ret, int inShadow) {
return GetChar(shadow_classes,DataType_Getname(t)); return GetChar(shadow_classes,DataType_Getname(t));
else return (char*)"long"; else return (char*)"long";
} }
} else if(t->is_pointer > 1) { } else if(DataType_is_pointer(t) > 1) {
if(ret) if(ret)
return (char*)"long"; return (char*)"long";
else return (char*)"long []"; else return (char*)"long []";
@ -161,7 +161,7 @@ char *JAVA::SwigTcToJavaType(DataType *t, int ret, int inShadow) {
} }
char *JAVA::SwigTcToJniScalarType(DataType *t) { char *JAVA::SwigTcToJniScalarType(DataType *t) {
if(t->is_pointer == 1) { if(DataType_is_pointer(t) == 1) {
switch(DataType_Gettypecode(t)) { switch(DataType_Gettypecode(t)) {
case T_INT: return (char*)"Int"; case T_INT: return (char*)"Int";
case T_SHORT: return (char*)"Short"; case T_SHORT: return (char*)"Short";
@ -187,7 +187,7 @@ char *JAVA::SwigTcToJniScalarType(DataType *t) {
} }
char *JAVA::JavaMethodSignature(DataType *t, int ret, int inShadow) { char *JAVA::JavaMethodSignature(DataType *t, int ret, int inShadow) {
if(t->is_pointer == 1) { if(DataType_is_pointer(t) == 1) {
switch(DataType_Gettypecode(t)) { switch(DataType_Gettypecode(t)) {
case T_INT: return (char*)"[I"; case T_INT: return (char*)"[I";
case T_SHORT: return (char*)"[S"; case T_SHORT: return (char*)"[S";
@ -206,7 +206,7 @@ char *JAVA::JavaMethodSignature(DataType *t, int ret, int inShadow) {
return GetChar(shadow_classes,DataType_Getname(t)); return GetChar(shadow_classes,DataType_Getname(t));
else return (char*)"J"; else return (char*)"J";
} }
} else if(t->is_pointer > 1) { } else if(DataType_is_pointer(t) > 1) {
if(ret) return (char*)"J"; if(ret) return (char*)"J";
else return (char*)"[J"; else return (char*)"[J";
} else { } else {
@ -638,27 +638,27 @@ void JAVA::create_function(char *name, char *iname, DataType *t, ParmList *l)
Printf(f->code,"%s\n", tm); Printf(f->code,"%s\n", tm);
Replace(f->code,"$arg",source, DOH_REPLACE_ANY); Replace(f->code,"$arg",source, DOH_REPLACE_ANY);
} else { } else {
if(!pt->is_pointer) if(!DataType_is_pointer(pt))
Printv(f->code, tab4, target, " = (", DataType_lstr(pt,0), ") ", source, ";\n", 0); Printv(f->code, tab4, target, " = (", DataType_lstr(pt,0), ") ", source, ";\n", 0);
else if((DataType_Gettypecode(pt) == T_VOID && pt->is_pointer == 1) || else if((DataType_Gettypecode(pt) == T_VOID && (DataType_is_pointer(pt) == 1)) ||
(DataType_Gettypecode(pt) == T_USER && pt->is_pointer == 1)) { (DataType_Gettypecode(pt) == T_USER && (DataType_is_pointer(pt) == 1))) {
pt->is_pointer++; DataType_add_pointer(pt);
Printv(f->code, tab4, target, " = *(", DataType_lstr(pt,0), ")&", source, ";\n", 0); Printv(f->code, tab4, target, " = *(", DataType_lstr(pt,0), ")&", source, ";\n", 0);
pt->is_pointer--; DataType_del_pointer(pt);
} else { } else {
if(DataType_type(pt) == T_STRING) { if(DataType_type(pt) == T_STRING) {
Printv(f->code, tab4, target, " = (", source, ") ? (char *)", JNICALL((char*)"GetStringUTFChars"), source, ", 0) : NULL;\n", 0); Printv(f->code, tab4, target, " = (", source, ") ? (char *)", JNICALL((char*)"GetStringUTFChars"), source, ", 0) : NULL;\n", 0);
} else { } else {
char *scalarType = SwigTcToJniScalarType(pt); char *scalarType = SwigTcToJniScalarType(pt);
pt->is_pointer--; DataType_del_pointer(pt);
const char *basic_jnitype = (pt->is_pointer > 0) ? "jlong" : SwigTcToJniType(pt, 0); const char *basic_jnitype = (DataType_is_pointer(pt) > 0) ? "jlong" : SwigTcToJniType(pt, 0);
char *ctype = DataType_lstr(pt,0); char *ctype = DataType_lstr(pt,0);
if(scalarType == NULL || basic_jnitype == NULL) { if(scalarType == NULL || basic_jnitype == NULL) {
Printf(stderr, "\'%s\' does not have a in/jni typemap, and is not a basic type.\n", ctype); Printf(stderr, "\'%s\' does not have a in/jni typemap, and is not a basic type.\n", ctype);
SWIG_exit(1); SWIG_exit(1);
}; };
pt->is_pointer++; DataType_add_pointer(pt);
DOHString *basic_jniptrtype = NewStringf("%s*",basic_jnitype); DOHString *basic_jniptrtype = NewStringf("%s*",basic_jnitype);
DOHString *source_length = NewStringf("%s%s)", JNICALL((char*)"GetArrayLength"), source); DOHString *source_length = NewStringf("%s%s)", JNICALL((char*)"GetArrayLength"), source);
@ -672,12 +672,12 @@ void JAVA::create_function(char *name, char *iname, DataType *t, ParmList *l)
Printv(f->code, tab4, target_copy, " = ", JNICALL(scalarFunc), source, ", 0);\n", 0); Printv(f->code, tab4, target_copy, " = ", JNICALL(scalarFunc), source, ", 0);\n", 0);
Printv(f->code, tab4, target, " = (", DataType_lstr(pt,0), ") malloc(", target_length, " * sizeof(", ctype, "));\n", 0); Printv(f->code, tab4, target, " = (", DataType_lstr(pt,0), ") malloc(", target_length, " * sizeof(", ctype, "));\n", 0);
Printv(f->code, tab4, "for(i=0; i<", target_length, "; i++)\n", 0); Printv(f->code, tab4, "for(i=0; i<", target_length, "; i++)\n", 0);
if(pt->is_pointer > 1) { if(DataType_is_pointer(pt) > 1) {
Printv(f->code, tab8, target, "[i] = *(", DataType_lstr(pt,0), ")&", target_copy, "[i];\n", 0); Printv(f->code, tab8, target, "[i] = *(", DataType_lstr(pt,0), ")&", target_copy, "[i];\n", 0);
} else { } else {
pt->is_pointer--; DataType_del_pointer(pt);
Printv(f->code, tab8, target, "[i] = (", DataType_lstr(pt,0), ")", target_copy, "[i];\n", 0); Printv(f->code, tab8, target, "[i] = (", DataType_lstr(pt,0), ")", target_copy, "[i];\n", 0);
pt->is_pointer++; DataType_add_pointer(pt);
} }
Delete(scalarFunc); Delete(scalarFunc);
Delete(source_length); Delete(source_length);
@ -706,25 +706,25 @@ void JAVA::create_function(char *name, char *iname, DataType *t, ParmList *l)
Replace(outarg,"$arg",source, DOH_REPLACE_ANY); Replace(outarg,"$arg",source, DOH_REPLACE_ANY);
} else { } else {
// if(pt->is_pointer && pt->type != T_USER && pt->type != T_VOID) { // if(pt->is_pointer && pt->type != T_USER && pt->type != T_VOID) {
if(pt->is_pointer) { if(DataType_is_pointer(pt)) {
if(DataType_type(pt) == T_STRING) { if(DataType_type(pt) == T_STRING) {
Printv(outarg, tab4, "if(", target,") ", JNICALL((char*)"ReleaseStringUTFChars"), source, ", ", target, ");\n", 0); Printv(outarg, tab4, "if(", target,") ", JNICALL((char*)"ReleaseStringUTFChars"), source, ", ", target, ");\n", 0);
} else if(((DataType_Gettypecode(pt) == T_VOID) && pt->is_pointer == 1) || } else if(((DataType_Gettypecode(pt) == T_VOID) && DataType_is_pointer(pt) == 1) ||
((DataType_Gettypecode(pt) == T_USER) && pt->is_pointer == 1)) { ((DataType_Gettypecode(pt) == T_USER) && DataType_is_pointer(pt) == 1)) {
// nothing to do // nothing to do
} else { } else {
char *scalarType = SwigTcToJniScalarType(pt); char *scalarType = SwigTcToJniScalarType(pt);
pt->is_pointer--; DataType_del_pointer(pt);
const char *basic_jnitype = (pt->is_pointer > 0) ? "jlong" : SwigTcToJniType(pt, 0); const char *basic_jnitype = (DataType_is_pointer(pt) > 0) ? "jlong" : SwigTcToJniType(pt, 0);
char *ctype = DataType_lstr(pt,0); char *ctype = DataType_lstr(pt,0);
if(scalarType == NULL || basic_jnitype == NULL) { if(scalarType == NULL || basic_jnitype == NULL) {
Printf(stderr, "\'%s\' does not have a argout/jni typemap, and is not a basic type.\n", ctype); Printf(stderr, "\'%s\' does not have a argout/jni typemap, and is not a basic type.\n", ctype);
SWIG_exit(1); SWIG_exit(1);
}; };
pt->is_pointer++; DataType_add_pointer(pt);
Printf(outarg, " for(i=0; i< %d; i++)\n", target_length); Printf(outarg, " for(i=0; i< %d; i++)\n", target_length);
if(pt->is_pointer > 1) { if(DataType_is_pointer(pt) > 1) {
Printv(outarg, tab8, "*(", DataType_lstr(pt,0), ")&", target_copy, "[i] = ", target, "[i];\n", 0); Printv(outarg, tab8, "*(", DataType_lstr(pt,0), ")&", target_copy, "[i] = ", target, "[i];\n", 0);
} else { } else {
Printv(outarg, tab8, target_copy, "[i] = (", basic_jnitype, ") ", target, "[i];\n", 0); Printv(outarg, tab8, target_copy, "[i] = (", basic_jnitype, ") ", target, "[i];\n", 0);
@ -761,25 +761,27 @@ void JAVA::create_function(char *name, char *iname, DataType *t, ParmList *l)
Printf(f->code,"%s\n", tm); Printf(f->code,"%s\n", tm);
} else { } else {
if(DataType_type(t) == T_USER) { /* return by value */ if(DataType_type(t) == T_USER) { /* return by value */
t->is_pointer=2; DataType_add_pointer(t);
DataType_add_pointer(t);
Printv(f->code, tab4, "*(", DataType_lstr(t,0), ")&_jresult = result;\n", 0); Printv(f->code, tab4, "*(", DataType_lstr(t,0), ")&_jresult = result;\n", 0);
t->is_pointer=0; DataType_del_pointer(t);
} else if(t->is_pointer == 0 && (DataType_Gettypecode(t) != T_USER)) { DataType_del_pointer(t);
} else if(DataType_is_pointer(t) == 0 && (DataType_Gettypecode(t) != T_USER)) {
Printv(f->code, tab4, "_jresult = (", jnirettype, ") result;\n", 0); Printv(f->code, tab4, "_jresult = (", jnirettype, ") result;\n", 0);
} else if(((DataType_Gettypecode(t) == T_VOID) && t->is_pointer == 1) || } else if(((DataType_Gettypecode(t) == T_VOID) && DataType_is_pointer(t) == 1) ||
((DataType_Gettypecode(t) == T_USER) && t->is_pointer == 1)) { ((DataType_Gettypecode(t) == T_USER) && DataType_is_pointer(t) == 1)) {
t->is_pointer++; DataType_add_pointer(t);
Printv(f->code, tab4, "*(", DataType_lstr(t,0), ")&_jresult = result;\n", 0); Printv(f->code, tab4, "*(", DataType_lstr(t,0), ")&_jresult = result;\n", 0);
t->is_pointer--; DataType_del_pointer(t);
} else { } else {
if(DataType_type(t) == T_STRING) { if(DataType_type(t) == T_STRING) {
Printv(f->code, tab4, "if(result != NULL)\n", 0); Printv(f->code, tab4, "if(result != NULL)\n", 0);
Printv(f->code, tab8, "_jresult = (jstring)", JNICALL((char*)"NewStringUTF"), "result);\n", 0); Printv(f->code, tab8, "_jresult = (jstring)", JNICALL((char*)"NewStringUTF"), "result);\n", 0);
} else { } else {
Printf(stderr,"%s : Line %d. Warning: no return typemap for datatype %s\n", input_file,line_number,DataType_str(t,0)); Printf(stderr,"%s : Line %d. Warning: no return typemap for datatype %s\n", input_file,line_number,DataType_str(t,0));
t->is_pointer++; DataType_add_pointer(t);
Printv(f->code, tab4, "*(", DataType_lstr(t,0), ")&_jresult = result;\n", 0); Printv(f->code, tab4, "*(", DataType_lstr(t,0), ")&_jresult = result;\n", 0);
t->is_pointer--; DataType_del_pointer(t);
} }
} }
} }
@ -871,7 +873,7 @@ void JAVA::declare_const(char *name, char *iname, DataType *type, char *value) {
Printf(jfile," %s\n\n", str); Printf(jfile," %s\n\n", str);
Delete(str); Delete(str);
} else { } else {
if((type->is_pointer == 0)) { if((DataType_is_pointer(type) == 0)) {
char *jtype = typemap_lookup((char*)"jtype", typemap_lang, type, name, name, iname); char *jtype = typemap_lookup((char*)"jtype", typemap_lang, type, name, name, iname);
if(!jtype) jtype = SwigTcToJavaType(type, 0, 0); if(!jtype) jtype = SwigTcToJavaType(type, 0, 0);
if(strcmp(jname, value) == 0 || strstr(value,"::") != NULL) { if(strcmp(jname, value) == 0 || strstr(value,"::") != NULL) {
@ -947,7 +949,7 @@ void JAVA::add_typedef(DataType *t, char *name) {
// First check to see if there aren't too many pointers // First check to see if there aren't too many pointers
if (t->is_pointer > 1) return; if (DataType_is_pointer(t) > 1) return;
if(Getattr(shadow_classes,name)) return; // Already added if(Getattr(shadow_classes,name)) return; // Already added
@ -1059,7 +1061,7 @@ void JAVA::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
char *javarettype = JavaTypeFromTypemap((char*)"jtype", typemap_lang, t, iname); char *javarettype = JavaTypeFromTypemap((char*)"jtype", typemap_lang, t, iname);
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) && DataType_is_pointer(t) <= 1) {
shadowrettype = GetChar(shadow_classes,DataType_Getname(t)); shadowrettype = GetChar(shadow_classes,DataType_Getname(t));
} }
@ -1087,7 +1089,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,DataType_Getname(pt))) { if((DataType_Gettypecode(pt) == T_USER) && (DataType_is_pointer(pt) <= 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);
@ -1095,7 +1097,7 @@ void JAVA::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
if(!jtype) jtype = SwigTcToJavaType(pt, 0, 0); if(!jtype) jtype = SwigTcToJavaType(pt, 0, 0);
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) && (DataType_is_pointer(pt) <= 1)) {
jstype = GetChar(shadow_classes,DataType_Getname(pt)); jstype = GetChar(shadow_classes,DataType_Getname(pt));
} }
@ -1131,7 +1133,7 @@ void JAVA::cpp_static_func(char *name, char *iname, DataType *t, ParmList *l) {
char *javarettype = JavaTypeFromTypemap((char*)"jtype", typemap_lang, t, iname); char *javarettype = JavaTypeFromTypemap((char*)"jtype", typemap_lang, t, iname);
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) && (DataType_is_pointer(t) <= 1)) {
shadowrettype = GetChar(shadow_classes,DataType_Getname(t)); shadowrettype = GetChar(shadow_classes,DataType_Getname(t));
} }
@ -1162,7 +1164,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,DataType_Getname(pt))) { if((DataType_Gettypecode(pt) == T_USER) && (DataType_is_pointer(pt) <= 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);
@ -1172,7 +1174,7 @@ void JAVA::cpp_static_func(char *name, char *iname, DataType *t, ParmList *l) {
if(!jtype) jtype = SwigTcToJavaType(pt, 0, 0); if(!jtype) jtype = SwigTcToJavaType(pt, 0, 0);
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) && (DataType_is_pointer(pt) <= 1)) {
jstype = GetChar(shadow_classes, DataType_Getname(pt)); jstype = GetChar(shadow_classes, DataType_Getname(pt));
} }
@ -1232,14 +1234,14 @@ void JAVA::cpp_constructor(char *name, char *iname, ParmList *l) {
if(!jtype) jtype = SwigTcToJavaType(pt, 0, 0); if(!jtype) jtype = SwigTcToJavaType(pt, 0, 0);
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) && (DataType_is_pointer(pt) <= 1)) {
jstype = GetChar(shadow_classes, DataType_Getname(pt)); 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,DataType_Getname(pt))) { if((DataType_Gettypecode(pt) == T_USER) && (DataType_is_pointer(pt) <= 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

@ -260,13 +260,13 @@ throw_unhandled_mzscheme_type_error (DataType *d)
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", DataType_Getname(d)); Printf (stderr, " name %s\n", DataType_Getname(d));
Printf (stderr, " is_pointer %d\n", d->is_pointer); Printf (stderr, " is_pointer %d\n", DataType_is_pointer(d));
Printf (stderr, "implicit_ptr %d\n", d->implicit_ptr); /* Printf (stderr, "implicit_ptr %d\n", d->implicit_ptr); */
Printf (stderr, "is_reference %d\n", DataType_is_reference(d)); 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 : "")); */
Printf (stderr, " id %d\n", d->id); /* Printf (stderr, " id %d\n", d->id); */
Printf (stderr, "\n\nBAILING...\n"); // for now -ttn Printf (stderr, "\n\nBAILING...\n"); // for now -ttn
abort(); // for now -ttn abort(); // for now -ttn
@ -346,7 +346,7 @@ MZSCHEME::create_function (char *name, char *iname, DataType *d, ParmList *l)
} }
// no typemap found // no typemap found
// assume it's a Scheme_Object containing the C pointer // assume it's a Scheme_Object containing the C pointer
else if (pt->is_pointer) { else if (DataType_is_pointer(pt)) {
get_pointer (proc_name, i, pt, f); get_pointer (proc_name, i, pt, f);
} }
// no typemap found and not a pointer // no typemap found and not a pointer
@ -399,7 +399,7 @@ MZSCHEME::create_function (char *name, char *iname, DataType *d, ParmList *l)
} }
// no typemap found and not void then create a Scheme_Object holding // no typemap found and not void then create a Scheme_Object holding
// the C pointer and return it // the C pointer and return it
else if (d->is_pointer) { else if (DataType_is_pointer(d)) {
Printv(f->code, Printv(f->code,
tab4, tab4,
"swig_result = swig_make_c_pointer(", "swig_result = swig_make_c_pointer(",
@ -535,7 +535,7 @@ MZSCHEME::link_variable (char *name, char *iname, DataType *t)
Printf(f_wrappers, "%s\n", tm2); Printf(f_wrappers, "%s\n", tm2);
Delete(tm2); Delete(tm2);
} }
else if (t->is_pointer) { else if (DataType_is_pointer(t)) {
if (DataType_type(t) == T_STRING) { if (DataType_type(t) == T_STRING) {
Printf (f_wrappers, "\t\t _temp = SCHEME_STR_VAL(argv[0]);\n"); Printf (f_wrappers, "\t\t _temp = SCHEME_STR_VAL(argv[0]);\n");
Printf (f_wrappers, "\t\t _len = SCHEME_STRLEN_VAL(argv[0]);\n"); Printf (f_wrappers, "\t\t _len = SCHEME_STRLEN_VAL(argv[0]);\n");
@ -563,7 +563,7 @@ MZSCHEME::link_variable (char *name, char *iname, DataType *t)
t, name, name, (char*)"swig_result"))) { t, name, name, (char*)"swig_result"))) {
Printf (f_wrappers, "%s\n", tm); Printf (f_wrappers, "%s\n", tm);
} }
else if (t->is_pointer) { else if (DataType_is_pointer(t)) {
if (DataType_type(t) == T_STRING) { if (DataType_type(t) == T_STRING) {
Printf (f_wrappers, "\t swig_result = scheme_make_string(%s);\n", name); Printf (f_wrappers, "\t swig_result = scheme_make_string(%s);\n", name);
} else { } else {
@ -702,8 +702,9 @@ MZSCHEME::usage_func (char *iname, DataType *d, ParmList *l, DOHString *usage)
// Print the type. // Print the type.
Printv(usage," <", DataType_Getname(pt), 0); Printv(usage," <", DataType_Getname(pt), 0);
if (pt->is_pointer) { if (DataType_is_pointer(pt)) {
for (int j = 0; j < (pt->is_pointer - pt->implicit_ptr); j++) { /* for (int j = 0; j < (pt->is_pointer - pt->implicit_ptr); j++) { */
for (int j = 0; j < DataType_is_pointer(pt); j++) {
Putc('*', usage); Putc('*', usage);
} }
} }
@ -753,8 +754,9 @@ MZSCHEME::usage_returns (char *iname, DataType *d, ParmList *l, DOHString *usage
// Print the type. // Print the type.
Printv(param," $",DataType_Getname(pt), 0); Printv(param," $",DataType_Getname(pt), 0);
if (pt->is_pointer) { if (DataType_is_pointer(pt)) {
for (j = 0; j < (pt->is_pointer - pt->implicit_ptr - 1); j++) { /* for (j = 0; j < (pt->is_pointer - pt->implicit_ptr - 1); j++) {*/
for (j = 0; j < DataType_is_pointer(pt) - 1; j++) {
Putc('*',param); Putc('*',param);
} }
} }

View file

@ -146,6 +146,7 @@ static DOHString *pragma_include = 0;
// Perl specific type mangler function // Perl specific type mangler function
#ifdef OLD
static char * static char *
type_mangle(DataType *t) { type_mangle(DataType *t) {
static char result[128]; static char result[128];
@ -176,6 +177,7 @@ type_mangle(DataType *t) {
*r = 0; *r = 0;
return result; return result;
} }
#endif
// --------------------------------------------------------------------- // ---------------------------------------------------------------------
// PERL5::parse_args(int argc, char *argv[]) // PERL5::parse_args(int argc, char *argv[])
@ -292,7 +294,7 @@ PERL5::parse() {
modextern = NewString(""); modextern = NewString("");
pragma_include = NewString(""); pragma_include = NewString("");
DataType_set_mangle(type_mangle); /* DataType_set_mangle(type_mangle);*/
// Print out PERL5 specific headers // Print out PERL5 specific headers
@ -840,10 +842,10 @@ void PERL5::create_function(char *name, char *iname, DataType *d, ParmList *l)
case T_USER: case T_USER:
pt->is_pointer++; DataType_add_pointer(pt);
sprintf(temp,"argument %d", i+1); sprintf(temp,"argument %d", i+1);
get_pointer(iname, temp, source, target, pt, f->code, (char *)"XSRETURN(1)"); get_pointer(iname, temp, source, target, pt, f->code, (char *)"XSRETURN(1)");
pt->is_pointer--; DataType_del_pointer(pt);
break; break;
case T_STRING: case T_STRING:
@ -945,11 +947,11 @@ void PERL5::create_function(char *name, char *iname, DataType *d, ParmList *l)
// Return a complex type by value // Return a complex type by value
case T_USER: case T_USER:
d->is_pointer++; DataType_add_pointer(d);
Printv(f->code, Printv(f->code,
tab4, "sv_setref_pv(ST(argvi++),\"",(hidden ? realpackage : ""), (hidden ? "::" : ""), DataType_manglestr(d), tab4, "sv_setref_pv(ST(argvi++),\"",(hidden ? realpackage : ""), (hidden ? "::" : ""), DataType_manglestr(d),
"\", (void *) result);\n", 0); "\", (void *) result);\n", 0);
d->is_pointer--; DataType_del_pointer(d);
break; break;
case T_STRING: case T_STRING:
@ -1047,7 +1049,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,DataType_Getname(pt))) && (pt->is_pointer <= 1)) { } else if ((Getattr(classes,DataType_Getname(pt))) && (DataType_is_pointer(pt) <= 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);
@ -1075,14 +1077,14 @@ void PERL5::create_function(char *name, char *iname, DataType *d, ParmList *l)
"}\n", "}\n",
0); 0);
} else if ((Getattr(classes,DataType_Getname(d))) && (d->is_pointer <=1)) { } else if ((Getattr(classes,DataType_Getname(d))) && (DataType_is_pointer(d) <=1)) {
Printv(func, tab4, "return undef if (!defined($result));\n", 0); Printv(func, tab4, "return undef if (!defined($result));\n", 0);
// If we're returning an object by value, put it's reference // If we're returning an object by value, put it's reference
// into our local hash table // into our local hash table
if ((d->is_pointer == 0) || ((d->is_pointer == 1) && NewObject)) { if ((!DataType_is_pointer(d))|| ((DataType_is_pointer(d) == 1) && NewObject)) {
char *name = GetChar(classes,DataType_Getname(d)); 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);
@ -1182,11 +1184,11 @@ void PERL5::link_variable(char *name, char *iname, DataType *t)
// Add support for User defined type here // Add support for User defined type here
// Get as a pointer value // Get as a pointer value
t->is_pointer++; DataType_add_pointer(t);
Wrapper_add_local(setf,"_temp", "void *_temp"); Wrapper_add_local(setf,"_temp", "void *_temp");
get_pointer(iname,(char*)"value",(char*)"sv",(char*)"_temp", t, setf->code, (char*)"return(1)"); get_pointer(iname,(char*)"value",(char*)"sv",(char*)"_temp", t, setf->code, (char*)"return(1)");
Printv(setf->code, tab4, name, " = *((", DataType_str(t,0), ") _temp);\n", 0); Printv(setf->code, tab4, name, " = *((", DataType_str(t,0), ") _temp);\n", 0);
t->is_pointer--; DataType_del_pointer(t);
break; break;
case T_STRING: case T_STRING:
@ -1263,7 +1265,7 @@ void PERL5::link_variable(char *name, char *iname, DataType *t)
0); 0);
break; break;
case T_USER: case T_USER:
t->is_pointer++; DataType_add_pointer(t);
Printv(getf->code, Printv(getf->code,
tab4, "rsv = SvRV(sv);\n", tab4, "rsv = SvRV(sv);\n",
tab4, "sv_setiv(rsv,(IV) &", name, ");\n", tab4, "sv_setiv(rsv,(IV) &", name, ");\n",
@ -1271,7 +1273,7 @@ void PERL5::link_variable(char *name, char *iname, DataType *t)
Wrapper_add_local(getf,"rsv","SV *rsv"); Wrapper_add_local(getf,"rsv","SV *rsv");
Printv(vinit, tab4, "sv_setref_pv(sv,\"", DataType_manglestr(t), "\",(void *) &", name, ");\n",0); Printv(vinit, tab4, "sv_setref_pv(sv,\"", DataType_manglestr(t), "\",(void *) &", name, ");\n",0);
t->is_pointer--; DataType_del_pointer(t);
break; break;
@ -1311,7 +1313,7 @@ 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,DataType_Getname(t))) && (t->is_pointer <= 1)) { if ((Getattr(classes,DataType_Getname(t))) && (DataType_is_pointer(t) <= 1)) {
Printv(var_stubs, Printv(var_stubs,
"\nmy %__", iname, "_hash;\n", "\nmy %__", iname, "_hash;\n",
"tie %__", iname, "_hash,\"", GetChar(classes,DataType_Getname(t)), "\", $", "tie %__", iname, "_hash,\"", GetChar(classes,DataType_Getname(t)), "\", $",
@ -1454,7 +1456,7 @@ PERL5::declare_const(char *name, char *, DataType *type, char *value)
} }
if (blessed) { if (blessed) {
if ((Getattr(classes,DataType_Getname(type))) && (type->is_pointer <= 1)) { if ((Getattr(classes,DataType_Getname(type))) && (DataType_is_pointer(type) <= 1)) {
Printv(var_stubs, Printv(var_stubs,
"\nmy %__", name, "_hash;\n", "\nmy %__", name, "_hash;\n",
"tie %__", name, "_hash,\"", GetChar(classes,DataType_Getname(type)), "\", $", "tie %__", name, "_hash,\"", GetChar(classes,DataType_Getname(type)), "\", $",
@ -1876,7 +1878,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,DataType_Getname(pt))) && (pt->is_pointer <= 1)) { else if ((Getattr(classes,DataType_Getname(pt))) && (DataType_is_pointer(pt) <= 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))
@ -1910,14 +1912,14 @@ void PERL5::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
"}\n", "}\n",
0); 0);
} else if ((Getattr(classes,DataType_Getname(t))) && (t->is_pointer <=1)) { } else if ((Getattr(classes,DataType_Getname(t))) && (DataType_is_pointer(t) <=1)) {
Printv(func,tab4, "return undef if (!defined($result));\n", 0); Printv(func,tab4, "return undef if (!defined($result));\n", 0);
// If we're returning an object by value, put it's reference // If we're returning an object by value, put it's reference
// into our local hash table // into our local hash table
if ((t->is_pointer == 0) || ((t->is_pointer == 1) && NewObject)) { if ((DataType_is_pointer(t) == 0) || ((DataType_is_pointer(t) == 1) && NewObject)) {
char *name = GetChar(classes,DataType_Getname(t)); 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);
@ -1995,7 +1997,7 @@ 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,DataType_Getname(t))) && (t->is_pointer <= 1)) { if ((Getattr(classes,DataType_Getname(t))) && (DataType_is_pointer(t) <= 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
@ -2074,7 +2076,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,DataType_Getname(pt))) && (pt->is_pointer <= 1)) { if ((Getattr(classes,DataType_Getname(pt))) && (DataType_is_pointer(pt) <= 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);
@ -2267,7 +2269,7 @@ void PERL5::add_typedef(DataType *t, char *name) {
// First check to see if there aren't too many pointers // First check to see if there aren't too many pointers
if (t->is_pointer > 1) return; if (DataType_is_pointer(t) > 1) return;
if (Getattr(classes,name)) return; // Already added if (Getattr(classes,name)) return; // Already added

View file

@ -779,9 +779,9 @@ void PYTHON::create_function(char *name, char *iname, DataType *d, ParmList *l)
Wrapper_add_localv(f,source,"PyObject *",source,"=0",0); Wrapper_add_localv(f,source,"PyObject *",source,"=0",0);
Printf(arglist,"&%s",source); Printf(arglist,"&%s",source);
pt->is_pointer++; DataType_add_pointer(pt);
get_pointer(iname, temp, source, target, pt, get_pointers, (char*)"NULL"); get_pointer(iname, temp, source, target, pt, get_pointers, (char*)"NULL");
pt->is_pointer--; DataType_del_pointer(pt);
noarg = 1; noarg = 1;
break; break;
@ -900,10 +900,10 @@ void PYTHON::create_function(char *name, char *iname, DataType *d, ParmList *l)
break; break;
case T_USER : case T_USER :
d->is_pointer++; DataType_add_pointer(d);
DataType_remember(d); DataType_remember(d);
Printv(f->code,tab4, "resultobj = SWIG_NewPointerObj((void *)result, SWIGTYPE", DataType_manglestr(d), ");\n",0); Printv(f->code,tab4, "resultobj = SWIG_NewPointerObj((void *)result, SWIGTYPE", DataType_manglestr(d), ");\n",0);
d->is_pointer--; DataType_del_pointer(d);
break; break;
case T_STRING: case T_STRING:
@ -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,DataType_Getname(d))) && (d->is_pointer <=1)) { if ((Getattr(hash,DataType_Getname(d))) && (DataType_is_pointer(d) <=1)) {
need_wrapper = 1; need_wrapper = 1;
munge_return = 1; munge_return = 1;
} }
@ -1008,8 +1008,8 @@ void PYTHON::create_function(char *name, char *iname, DataType *d, ParmList *l)
if (!have_output) { if (!have_output) {
Printv(func, tab4, "if val: val = ", GetChar(hash,DataType_Getname(d)), "Ptr(val)", 0); Printv(func, tab4, "if val: val = ", GetChar(hash,DataType_Getname(d)), "Ptr(val)", 0);
if (((Getattr(hash,DataType_Getname(d))) && (d->is_pointer < 1)) || if (((Getattr(hash,DataType_Getname(d))) && (DataType_is_pointer(d) < 1)) ||
((Getattr(hash,DataType_Getname(d))) && (d->is_pointer == 1) && NewObject)) ((Getattr(hash,DataType_Getname(d))) && (DataType_is_pointer(d) == 1) && NewObject))
Printf(func, "; val.thisown = 1\n"); Printf(func, "; val.thisown = 1\n");
else else
Printf(func,"\n"); Printf(func,"\n");
@ -1127,11 +1127,11 @@ void PYTHON::link_variable(char *name, char *iname, DataType *t) {
0); 0);
break; break;
case T_USER: case T_USER:
t->is_pointer++; DataType_add_pointer(t);
Wrapper_add_localv(setf,"temp",DataType_lstr(t,0),"temp",0); Wrapper_add_localv(setf,"temp",DataType_lstr(t,0),"temp",0);
get_pointer(iname,(char*)"value",(char*)"val",(char*)"temp",t,setf->code,(char*)"1"); get_pointer(iname,(char*)"value",(char*)"val",(char*)"temp",t,setf->code,(char*)"1");
Printv(setf->code, tab4, name, " = *temp;\n", 0); Printv(setf->code, tab4, name, " = *temp;\n", 0);
t->is_pointer--; DataType_del_pointer(t);
break; break;
case T_STRING: case T_STRING:
@ -1219,13 +1219,13 @@ void PYTHON::link_variable(char *name, char *iname, DataType *t) {
break; break;
case T_USER: case T_USER:
// Hack this into a pointer // Hack this into a pointer
t->is_pointer++; DataType_add_pointer(t);
DataType_remember(t); DataType_remember(t);
Printv(getf->code, Printv(getf->code,
tab4, "pyobj = SWIG_NewPointerObj((void *) &", name , tab4, "pyobj = SWIG_NewPointerObj((void *) &", name ,
", SWIGTYPE", DataType_manglestr(t), ");\n", ", SWIGTYPE", DataType_manglestr(t), ");\n",
0); 0);
t->is_pointer--; DataType_del_pointer(t);
break; break;
case T_STRING: case T_STRING:
Printv(getf->code, Printv(getf->code,
@ -1261,7 +1261,7 @@ 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,DataType_Getname(t))) && (t->is_pointer <= 1)) { if ((Getattr(hash,DataType_Getname(t))) && (DataType_is_pointer(t) <= 1)) {
Printv(vars, Printv(vars,
iname, " = ", GetChar(hash,DataType_Getname(t)), "Ptr(", module, ".", global_name, iname, " = ", GetChar(hash,DataType_Getname(t)), "Ptr(", module, ".", global_name,
".", iname, ")\n", ".", iname, ")\n",
@ -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,DataType_Getname(t))) && (t->is_pointer <=1)) && !noopt) { if (!((Getattr(hash,DataType_Getname(t))) && (DataType_is_pointer(t) <=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,DataType_Getname(t))) && (t->is_pointer <= 1)) { if ((Getattr(hash,DataType_Getname(t))) && (DataType_is_pointer(t) <= 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,DataType_Getname(t)), "Ptr(val) ", 0); Printv(pyclass, tab8, "if val: val = ", GetChar(hash,DataType_Getname(t)), "Ptr(val) ", 0);
if (((Getattr(hash,DataType_Getname(t))) && (t->is_pointer < 1)) || if (((Getattr(hash,DataType_Getname(t))) && (DataType_is_pointer(t) < 1)) ||
((Getattr(hash,DataType_Getname(t))) && (t->is_pointer == 1) && NewObject)) ((Getattr(hash,DataType_Getname(t))) && (DataType_is_pointer(t) == 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,DataType_Getname(t))) && (t->is_pointer <= 1)) inhash = 1; if ((Getattr(hash,DataType_Getname(t))) && (DataType_is_pointer(t) <= 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) {
@ -2052,7 +2052,7 @@ void PYTHON::add_typedef(DataType *t, char *name) {
// First check to see if there aren't too many pointers // First check to see if there aren't too many pointers
if (t->is_pointer > 1) return; if (DataType_is_pointer(t) > 1) return;
if (Getattr(hash,name)) return; // Already added if (Getattr(hash,name)) return; // Already added

View file

@ -178,8 +178,7 @@ void RUBY::parse() {
// typedef void *VALUE // typedef void *VALUE
DataType *value = NewDataType(T_VOID); DataType *value = NewDataType(T_VOID);
DataType_Setname(value,"void"); DataType_Setname(value,"void");
value->is_pointer = 1; DataType_add_pointer(value);
value->implicit_ptr = 0;
DataType_typedef_add(value,(char*)"VALUE",0); DataType_typedef_add(value,(char*)"VALUE",0);
yyparse(); // Run the SWIG parser yyparse(); // Run the SWIG parser
@ -683,11 +682,11 @@ void RUBY::link_variable(char *name, char *iname, DataType *t) {
Delete(s); Delete(s);
} else if (DataType_type(t) == T_USER) { } else if (DataType_type(t) == T_USER) {
// Hack this into a pointer // Hack this into a pointer
t->is_pointer++; DataType_add_pointer(t);
DataType_remember(t); DataType_remember(t);
Printv(getf->code, tab4, "_val = SWIG_NewPointerObj((void *)&", name, Printv(getf->code, tab4, "_val = SWIG_NewPointerObj((void *)&", name,
", \"", DataType_manglestr(t), "\");\n", 0); ", \"", DataType_manglestr(t), "\");\n", 0);
t->is_pointer--; DataType_del_pointer(t);
} else { } else {
Printf(stderr,"%s: Line %d. Unable to link with variable type %s\n", Printf(stderr,"%s: Line %d. Unable to link with variable type %s\n",
input_file,line_number,DataType_str(t,0)); input_file,line_number,DataType_str(t,0));
@ -715,13 +714,13 @@ void RUBY::link_variable(char *name, char *iname, DataType *t) {
Printv(setf->code,s,"\n",0); Printv(setf->code,s,"\n",0);
Delete(s); Delete(s);
} else if (DataType_type(t) == T_USER) { } else if (DataType_type(t) == T_USER) {
t->is_pointer++; DataType_add_pointer(t);
Wrapper_add_localv(setf,"temp",DataType_lstr(t,0), "temp",0); Wrapper_add_localv(setf,"temp",DataType_lstr(t,0), "temp",0);
Printv(setf->code, tab4, "temp = (", DataType_lstr(t,0), ")", Printv(setf->code, tab4, "temp = (", DataType_lstr(t,0), ")",
"SWIG_ConvertPtr(_val, \"", DataType_manglestr(t), "\");\n", "SWIG_ConvertPtr(_val, \"", DataType_manglestr(t), "\");\n",
0); 0);
Printv(setf->code, tab4, name, " = *temp;\n",0); Printv(setf->code, tab4, name, " = *temp;\n",0);
t->is_pointer--; DataType_del_pointer(t);
} else { } else {
Printf(stderr,"%s: Line %d. Unable to link with variable type %s\n", Printf(stderr,"%s: Line %d. Unable to link with variable type %s\n",
input_file,line_number,DataType_str(t,0)); input_file,line_number,DataType_str(t,0));
@ -876,11 +875,11 @@ char *RUBY::ruby_typemap_lookup(char *op, DataType *type, char *pname, char *sou
&& strcmp(DataType_Getname(type), "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) { (DataType_is_pointer(type) == 1) && cls) {
const char *vname = (current == CONSTRUCTOR ? "self" : Char(cls->vname)); const char *vname = (current == CONSTRUCTOR ? "self" : Char(cls->vname));
Printv(s, "$target = Wrap_", cls->cname, "(", vname, ", $source);",0); Printv(s, "$target = Wrap_", cls->cname, "(", vname, ", $source);",0);
} else if (strcmp("in", op)==0 && (DataType_Gettypecode(type) == T_USER) && } else if (strcmp("in", op)==0 && (DataType_Gettypecode(type) == T_USER) &&
type->is_pointer == 1 && cls) { (DataType_is_pointer(type) == 1) && cls) {
Printv(s, "Get_", cls->cname, "($source, $target);", 0); Printv(s, "Get_", cls->cname, "($source, $target);", 0);
} else { } else {
tm = typemap_lookup(op, typemap_lang, type, pname, source, target, f); tm = typemap_lookup(op, typemap_lang, type, pname, source, target, f);

View file

@ -590,11 +590,11 @@ void TCL8::create_function(char *name, char *iname, DataType *d, ParmList *l)
// User defined. This is an error. // User defined. This is an error.
case T_USER: case T_USER:
pt->is_pointer++; DataType_add_pointer(pt);
DataType_remember(pt); DataType_remember(pt);
Putc('p',argstr); Putc('p',argstr);
Printv(args, ",&", target, ", SWIGTYPE", DataType_manglestr(pt), 0); Printv(args, ",&", target, ", SWIGTYPE", DataType_manglestr(pt), 0);
pt->is_pointer--; DataType_del_pointer(pt);
break; break;
case T_STRING: case T_STRING:
@ -690,12 +690,12 @@ void TCL8::create_function(char *name, char *iname, DataType *d, ParmList *l)
// Okay. We're returning malloced memory at this point. // Okay. We're returning malloced memory at this point.
// Probably dangerous, but who said safety was a good thing? // Probably dangerous, but who said safety was a good thing?
d->is_pointer++; DataType_add_pointer(d);
DataType_remember(d); DataType_remember(d);
Printv(f->code, tab4, "Tcl_SetObjResult(interp,SWIG_NewPointerObj((void *) result,SWIGTYPE", Printv(f->code, tab4, "Tcl_SetObjResult(interp,SWIG_NewPointerObj((void *) result,SWIGTYPE",
DataType_manglestr(d), "));\n", 0); DataType_manglestr(d), "));\n", 0);
d->is_pointer--; DataType_del_pointer(d);
break; break;
case T_STRING: case T_STRING:
@ -787,12 +787,12 @@ void TCL8::link_variable(char *name, char *iname, DataType *t)
Printv(set->def, "static char *_swig_", DataType_manglestr(t), "_set(ClientData clientData, Tcl_Interp *interp, char *name1, char *name2, int flags) {",0); Printv(set->def, "static char *_swig_", DataType_manglestr(t), "_set(ClientData clientData, Tcl_Interp *interp, char *name1, char *name2, int flags) {",0);
Printv(get->def, "static char *_swig_", DataType_manglestr(t), "_get(ClientData clientData, Tcl_Interp *interp, char *name1, char *name2, int flags) {",0); Printv(get->def, "static char *_swig_", DataType_manglestr(t), "_get(ClientData clientData, Tcl_Interp *interp, char *name1, char *name2, int flags) {",0);
t->is_pointer++; DataType_add_pointer(t);
Wrapper_add_localv(get,"addr",DataType_str(t,0),"addr",0); Wrapper_add_localv(get,"addr",DataType_str(t,0),"addr",0);
Wrapper_add_localv(set,"addr",DataType_str(t,0),"addr",0); Wrapper_add_localv(set,"addr",DataType_str(t,0),"addr",0);
Printv(set->code, tab4, "addr = (", DataType_lstr(t,0), ") clientData;\n", 0); Printv(set->code, tab4, "addr = (", DataType_lstr(t,0), ") clientData;\n", 0);
Printv(get->code, tab4, "addr = (", DataType_lstr(t,0), ") clientData;\n", 0); Printv(get->code, tab4, "addr = (", DataType_lstr(t,0), ") clientData;\n", 0);
t->is_pointer--; DataType_del_pointer(t);
Wrapper_add_local(set, "value", "char *value"); Wrapper_add_local(set, "value", "char *value");
Wrapper_add_local(get, "value", "Tcl_Obj *value"); Wrapper_add_local(get, "value", "Tcl_Obj *value");
@ -822,7 +822,7 @@ void TCL8::link_variable(char *name, char *iname, DataType *t)
break; break;
case T_USER: case T_USER:
// User defined type. We return it as a pointer // User defined type. We return it as a pointer
t->is_pointer++; DataType_add_pointer(t);
DataType_remember(t); DataType_remember(t);
Printv(set->code, tab4, "{\n", Printv(set->code, tab4, "{\n",
tab8, "void *ptr;\n", tab8, "void *ptr;\n",
@ -833,7 +833,7 @@ void TCL8::link_variable(char *name, char *iname, DataType *t)
tab4, "}\n", tab4, "}\n",
0); 0);
t->is_pointer--; DataType_del_pointer(t);
break; break;
case T_STRING: case T_STRING:
Printv(set->code, tab4, "if (*addr) free(*addr);\n", Printv(set->code, tab4, "if (*addr) free(*addr);\n",
@ -899,12 +899,12 @@ void TCL8::link_variable(char *name, char *iname, DataType *t)
case T_USER: case T_USER:
Wrapper_add_local(get,"value", "Tcl_Obj *value"); Wrapper_add_local(get,"value", "Tcl_Obj *value");
t->is_pointer++; DataType_add_pointer(t);
DataType_remember(t); DataType_remember(t);
Printv(get->code, tab4, "value = SWIG_NewPointerObj(addr, SWIGTYPE", DataType_manglestr(t), ");\n", Printv(get->code, tab4, "value = SWIG_NewPointerObj(addr, SWIGTYPE", DataType_manglestr(t), ");\n",
tab4, "Tcl_SetVar2(interp,name1,name2,Tcl_GetStringFromObj(value,NULL), flags);\n", tab4, "Tcl_SetVar2(interp,name1,name2,Tcl_GetStringFromObj(value,NULL), flags);\n",
tab4, "Tcl_DecrRefCount(value);\n",0); tab4, "Tcl_DecrRefCount(value);\n",0);
t->is_pointer--; DataType_del_pointer(t);
break; break;
case T_STRING: case T_STRING:
@ -1001,7 +1001,7 @@ void TCL8::declare_const(char *name, char *, DataType *type, char *value) {
Printf(f_init,"\t sprintf(%s_char,\"%%ld\", (long) %s);\n", var_name, var_name); Printf(f_init,"\t sprintf(%s_char,\"%%ld\", (long) %s);\n", var_name, var_name);
sprintf(var_name,"%s_char",var_name); sprintf(var_name,"%s_char",var_name);
t = NewDataType(T_CHAR); t = NewDataType(T_CHAR);
t->is_pointer = 1; DataType_add_pointer(t);
link_variable(var_name,name,t); link_variable(var_name,name,t);
DelDataType(t); DelDataType(t);
break; break;
@ -1019,7 +1019,7 @@ void TCL8::declare_const(char *name, char *, DataType *type, char *value) {
Printf(f_init,"\t sprintf(%s_char,\"%%lu\", (unsigned long) %s);\n", var_name, var_name); Printf(f_init,"\t sprintf(%s_char,\"%%lu\", (unsigned long) %s);\n", var_name, var_name);
sprintf(var_name,"%s_char",var_name); sprintf(var_name,"%s_char",var_name);
t = NewDataType(T_CHAR); t = NewDataType(T_CHAR);
t->is_pointer = 1; DataType_add_pointer(t);
link_variable(var_name,name,t); link_variable(var_name,name,t);
DelDataType(t); DelDataType(t);
break; break;
@ -1031,10 +1031,10 @@ void TCL8::declare_const(char *name, char *, DataType *type, char *value) {
break; break;
case T_CHAR: case T_CHAR:
type->is_pointer++; DataType_add_pointer(type);
Printf(f_header,"static %s %s = \"%s\";\n", DataType_lstr(type,0), var_name, value); Printf(f_header,"static %s %s = \"%s\";\n", DataType_lstr(type,0), var_name, value);
link_variable(var_name,name,type); link_variable(var_name,name,type);
type->is_pointer--; DataType_del_pointer(type);
break; break;
case T_STRING: case T_STRING:
@ -1052,7 +1052,7 @@ void TCL8::declare_const(char *name, char *, DataType *type, char *value) {
Printf(f_init,"\t %s_char = (char *) malloc(%d);\n",var_name, (int) strlen(DataType_manglestr(type))+ 20); Printf(f_init,"\t %s_char = (char *) malloc(%d);\n",var_name, (int) strlen(DataType_manglestr(type))+ 20);
t = NewDataType(T_CHAR); t = NewDataType(T_CHAR);
t->is_pointer = 1; DataType_add_pointer(t);
DataType_remember(type); DataType_remember(type);
Printf(f_init,"\t SWIG_MakePtr(%s_char, (void *) %s, SWIGTYPE%s);\n", Printf(f_init,"\t SWIG_MakePtr(%s_char, (void *) %s, SWIGTYPE%s);\n",
var_name, var_name, DataType_manglestr(type)); var_name, var_name, DataType_manglestr(type));
@ -1258,7 +1258,7 @@ void TCL8::cpp_close_class() {
t = NewDataType(T_USER); t = NewDataType(T_USER);
sprintf(temp,"%s%s", class_type, real_classname); sprintf(temp,"%s%s", class_type, real_classname);
DataType_Setname(t,temp); DataType_Setname(t,temp);
t->is_pointer = 1; DataType_add_pointer(t);
if (have_destructor) { if (have_destructor) {
Printv(code, "static void _swig_delete_", class_name, "(void *obj) {\n", 0); Printv(code, "static void _swig_delete_", class_name, "(void *obj) {\n", 0);
@ -1401,7 +1401,7 @@ void TCL8::add_typedef(DataType *t, char *name) {
// First check to see if there aren't too many pointers // First check to see if there aren't too many pointers
if (t->is_pointer > 1) return; if (DataType_is_pointer(t) > 1) return;
if (Getattr(hash,name)) return; // Already added if (Getattr(hash,name)) return; // Already added
// Now look up the datatype in our shadow class hash table // Now look up the datatype in our shadow class hash table

View file

@ -95,7 +95,7 @@ void emit_func_call(char *decl, DataType *t, ParmList *l, Wrapper *f) {
if ((tm = typemap_lookup((char*)"except",typemap_lang,t,decl,(char*)"result",(char*)""))) { if ((tm = typemap_lookup((char*)"except",typemap_lang,t,decl,(char*)"result",(char*)""))) {
Printv(f->code,tm,0); Printv(f->code,tm,0);
Replace(f->code,"$name",decl,DOH_REPLACE_ANY); Replace(f->code,"$name",decl,DOH_REPLACE_ANY);
} else if ((tm = fragment_lookup((char*)"except",typemap_lang, t->id))) { } else if ((tm = fragment_lookup((char*)"except",typemap_lang, t->_id))) {
Printv(f->code,tm,0); Printv(f->code,tm,0);
Replace(f->code,"$name",decl,DOH_REPLACE_ANY); Replace(f->code,"$name",decl,DOH_REPLACE_ANY);
} else { } else {

View file

@ -456,7 +456,7 @@ int SWIG_main(int argc, char *argv[], Language *l) {
// Set up the typemap for handling new return strings // Set up the typemap for handling new return strings
{ {
DataType *temp_t = NewDataType(T_CHAR); DataType *temp_t = NewDataType(T_CHAR);
temp_t->is_pointer++; DataType_add_pointer(temp_t);
if (CPlusPlus) if (CPlusPlus)
typemap_register((char*)"newfree",typemap_lang,temp_t,(char*)"",(char*)"delete [] $source;\n",0); typemap_register((char*)"newfree",typemap_lang,temp_t,(char*)"",(char*)"delete [] $source;\n",0);
else else

View file

@ -359,7 +359,7 @@ void create_variable(int ext, char *name, DataType *t) {
} }
// If variable datatype is read-only, we'll force it to be readonly // If variable datatype is read-only, we'll force it to be readonly
if (t->status & STAT_READONLY) Status = Status | STAT_READONLY; if (t->_status & STAT_READONLY) Status = Status | STAT_READONLY;
// Now dump it out // Now dump it out
lang->link_variable(name, iname, t); lang->link_variable(name, iname, t);
@ -387,7 +387,7 @@ void create_constant(char *name, DataType *type, char *value) {
} }
if (DataType_type(type) == T_CHAR) { if (DataType_type(type) == T_CHAR) {
type->is_pointer++; type->_is_pointer++;
} }
if (!value) value = Swig_copy_string(name); if (!value) value = Swig_copy_string(name);
sprintf(temp_name,"const:%s", name); sprintf(temp_name,"const:%s", name);
@ -648,10 +648,10 @@ statement : INCLUDE STRING LBRACE {
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;
if ($4 > 0) { if ($4 > 0) {
$2->is_pointer++; $2->_is_pointer++;
$2->status = STAT_READONLY; $2->_status = STAT_READONLY;
DataType_set_arraystr($2,Char(ArrayString)); DataType_set_arraystr($2,Char(ArrayString));
} }
if ($3.is_reference) { if ($3.is_reference) {
@ -705,7 +705,7 @@ statement : INCLUDE STRING LBRACE {
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;
if ($3.is_reference) DataType_add_reference($2); 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);
@ -717,7 +717,7 @@ 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); if ($3.is_reference) DataType_add_reference($2);
$2->is_pointer += $3.is_pointer; $2->_is_pointer += $3.is_pointer;
create_function($1, $3.id, $2, $5); create_function($1, $3.id, $2, $5);
DelDataType($2); DelDataType($2);
Delete($5); Delete($5);
@ -728,7 +728,7 @@ statement : INCLUDE STRING LBRACE {
| extern declaration LPAREN parms RPAREN cpp_const { | extern declaration LPAREN parms RPAREN cpp_const {
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;
if ($2.is_reference) DataType_add_reference(t); 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);
@ -740,7 +740,7 @@ statement : INCLUDE STRING LBRACE {
if (Inline) { if (Inline) {
if (strlen(Char(CCode))) { if (strlen(Char(CCode))) {
init_language(); init_language();
$2->is_pointer += $3.is_pointer; $2->_is_pointer += $3.is_pointer;
if ($3.is_reference) DataType_add_reference($2); if ($3.is_reference) DataType_add_reference($2);
create_function(0, $3.id, $2, $5); create_function(0, $3.id, $2, $5);
} }
@ -753,7 +753,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;
if ($3.is_reference) DataType_add_reference($2); 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);
@ -838,7 +838,7 @@ statement : INCLUDE STRING LBRACE {
| NATIVE LPAREN ID RPAREN extern type declaration LPAREN parms RPAREN SEMI { | NATIVE LPAREN ID RPAREN extern type declaration LPAREN parms RPAREN SEMI {
if (!WrapExtern) { if (!WrapExtern) {
init_language(); init_language();
$6->is_pointer += $7.is_pointer; $6->_is_pointer += $7.is_pointer;
if (add_symbol($3)) { if (add_symbol($3)) {
fprintf(stderr,"%s : Line %d. Name of native function %s conflicts with previous declaration (ignored)\n", fprintf(stderr,"%s : Line %d. Name of native function %s conflicts with previous declaration (ignored)\n",
input_file, line_number, $3); input_file, line_number, $3);
@ -1004,8 +1004,8 @@ statement : INCLUDE STRING LBRACE {
init_language(); init_language();
if ($3) { if ($3) {
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;
DataType_Setname(temp_type,"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,8 +1017,8 @@ statement : INCLUDE STRING LBRACE {
| TYPEDEF ENUM ename LBRACE { scanner_clear_start(); } enumlist RBRACE ID { | TYPEDEF ENUM ename LBRACE { scanner_clear_start(); } enumlist RBRACE ID {
init_language(); init_language();
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;
DataType_Setname(temp_type,"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);
@ -1242,7 +1242,7 @@ typedef_decl : TYPEDEF type declaration {
init_language(); init_language();
/* Add a new typedef */ /* Add a new typedef */
Active_typedef = CopyDataType($2); Active_typedef = CopyDataType($2);
$2->is_pointer += $3.is_pointer; $2->_is_pointer += $3.is_pointer;
DataType_typedef_add($2, $3.id,0); DataType_typedef_add($2, $3.id,0);
lang->add_typedef($2,$3.id); lang->add_typedef($2,$3.id);
/* If this is %typedef, add it to the header */ /* If this is %typedef, add it to the header */
@ -1263,7 +1263,7 @@ typedef_decl : TYPEDEF type declaration {
} }
DataType_Setname($2,"<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);
lang->add_typedef($2,$5); lang->add_typedef($2,$5);
cplus_register_type($5); cplus_register_type($5);
@ -1277,7 +1277,7 @@ typedef_decl : TYPEDEF type declaration {
| TYPEDEF type stars LPAREN STAR pname RPAREN LPAREN parms RPAREN SEMI { | TYPEDEF type stars LPAREN STAR pname RPAREN LPAREN parms RPAREN SEMI {
init_language(); init_language();
if ($1) { if ($1) {
$2->is_pointer += $3; $2->_is_pointer += $3;
sprintf(temp_name,"(*%s)",$6); sprintf(temp_name,"(*%s)",$6);
fprintf(f_header,"typedef "); fprintf(f_header,"typedef ");
emit_extern_func(temp_name, $2,$9,0,f_header); emit_extern_func(temp_name, $2,$9,0,f_header);
@ -1286,7 +1286,7 @@ typedef_decl : TYPEDEF type declaration {
/* Typedef'd pointer */ /* Typedef'd pointer */
DataType_Setname($2,"<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);
lang->add_typedef($2,$6); lang->add_typedef($2,$6);
cplus_register_type($6); cplus_register_type($6);
@ -1302,10 +1302,10 @@ typedef_decl : TYPEDEF type declaration {
Active_typedef = CopyDataType($2); Active_typedef = CopyDataType($2);
// This datatype is going to be readonly // This datatype is going to be readonly
$2->status = STAT_READONLY | STAT_REPLACETYPE; $2->_status = STAT_READONLY | STAT_REPLACETYPE;
$2->is_pointer += $3.is_pointer; $2->_is_pointer += $3.is_pointer;
// Turn this into a "pointer" corresponding to the array // Turn this into a "pointer" corresponding to the array
$2->is_pointer++; $2->_is_pointer++;
DataType_set_arraystr($2,Char(ArrayString)); DataType_set_arraystr($2,Char(ArrayString));
DataType_typedef_add($2,$3.id,0); DataType_typedef_add($2,$3.id,0);
lang->add_typedef($2,$3.id); lang->add_typedef($2,$3.id);
@ -1329,7 +1329,7 @@ typedeflist : COMMA declaration typedeflist {
if (Active_typedef) { if (Active_typedef) {
DataType *t; DataType *t;
t = CopyDataType(Active_typedef); t = CopyDataType(Active_typedef);
t->is_pointer += $2.is_pointer; t->_is_pointer += $2.is_pointer;
DataType_typedef_add(t,$2.id,0); DataType_typedef_add(t,$2.id,0);
lang->add_typedef(t,$2.id); lang->add_typedef(t,$2.id);
cplus_register_type($2.id); cplus_register_type($2.id);
@ -1339,8 +1339,8 @@ typedeflist : COMMA declaration typedeflist {
| COMMA declaration array { | COMMA declaration array {
DataType *t; DataType *t;
t = CopyDataType(Active_typedef); t = CopyDataType(Active_typedef);
t->status = STAT_READONLY | STAT_REPLACETYPE; t->_status = STAT_READONLY | STAT_REPLACETYPE;
t->is_pointer += $2.is_pointer + 1; t->_is_pointer += $2.is_pointer + 1;
DataType_set_arraystr(t,Char(ArrayString)); DataType_set_arraystr(t,Char(ArrayString));
DataType_typedef_add(t,$2.id,0); DataType_typedef_add(t,$2.id,0);
lang->add_typedef(t,$2.id); lang->add_typedef(t,$2.id);
@ -1375,10 +1375,10 @@ stail : SEMI { }
| COMMA declaration array2 def_args { | COMMA declaration array2 def_args {
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;
if ($3 > 0) { if ($3 > 0) {
temp_typeptr->is_pointer++; temp_typeptr->_is_pointer++;
temp_typeptr->status = STAT_READONLY; temp_typeptr->_status = STAT_READONLY;
DataType_set_arraystr(temp_typeptr,Char(ArrayString)); DataType_set_arraystr(temp_typeptr,Char(ArrayString));
} }
if ($2.is_reference) { if ($2.is_reference) {
@ -1400,7 +1400,7 @@ stail : SEMI { }
| COMMA declaration LPAREN parms RPAREN cpp_const { | COMMA declaration LPAREN parms RPAREN cpp_const {
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;
if ($2.is_reference) DataType_add_reference(temp_typeptr); 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);
@ -1455,7 +1455,7 @@ parm : parm_type {
parm_type : type pname { parm_type : type pname {
if (InArray) { if (InArray) {
$1->is_pointer++; $1->_is_pointer++;
// Add array string to the type // Add array string to the type
DataType_set_arraystr($1, Char(ArrayString)); DataType_set_arraystr($1, Char(ArrayString));
} }
@ -1467,10 +1467,10 @@ parm_type : type pname {
| type stars pname { | type stars pname {
$$ = NewParm($1,$3); $$ = NewParm($1,$3);
Gettype($$)->is_pointer+=$2; Gettype($$)->_is_pointer+=$2;
Setvalue($$,DefArg); Setvalue($$,DefArg);
if (InArray) { if (InArray) {
Gettype($$)->is_pointer++; Gettype($$)->_is_pointer++;
// Add array string to the type // Add array string to the type
DataType_set_arraystr(Gettype($$), Char(ArrayString)); DataType_set_arraystr(Gettype($$), Char(ArrayString));
} }
@ -1482,7 +1482,7 @@ parm_type : type pname {
$$ = NewParm($1,$3); $$ = NewParm($1,$3);
DataType *pt = Gettype($$); DataType *pt = Gettype($$);
DataType_add_reference(pt); DataType_add_reference(pt);
pt->is_pointer++; pt->_is_pointer++;
Setvalue($$,DefArg); Setvalue($$,DefArg);
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);
@ -2168,8 +2168,8 @@ cpp_class :
char temp[256]; char temp[256];
sprintf(temp,"%s %s", $2,$3); sprintf(temp,"%s %s", $2,$3);
DataType_Setname(Active_typedef,temp); 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;
// Clean up the inheritance list // Clean up the inheritance list
if ($4.names) { if ($4.names) {
@ -2205,7 +2205,7 @@ cpp_class :
lang->add_typedef(Active_typedef,$9.id); lang->add_typedef(Active_typedef,$9.id);
} else { } else {
DataType *t = CopyDataType(Active_typedef); DataType *t = CopyDataType(Active_typedef);
t->is_pointer += $9.is_pointer; t->_is_pointer += $9.is_pointer;
DataType_typedef_add(t,$9.id,0); DataType_typedef_add(t,$9.id,0);
lang->add_typedef(t,$9.id); lang->add_typedef(t,$9.id);
cplus_register_type($9.id); cplus_register_type($9.id);
@ -2278,7 +2278,7 @@ cpp_other :/* A dummy class name */
if (!CPlusPlus) if (!CPlusPlus)
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;
if ($3.is_reference) DataType_add_reference($2); 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);
@ -2297,7 +2297,7 @@ cpp_other :/* A dummy class name */
if (!CPlusPlus) if (!CPlusPlus)
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;
// 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) {
@ -2366,7 +2366,7 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end {
char *iname; char *iname;
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;
if ($2.is_reference) DataType_add_reference($1); 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;
@ -2383,7 +2383,7 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end {
char *iname; char *iname;
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;
if ($3.is_reference) DataType_add_reference($2); 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;
@ -2442,10 +2442,10 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end {
if (cplus_mode == CPLUS_PUBLIC) { if (cplus_mode == CPLUS_PUBLIC) {
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;
if ($2.is_reference) DataType_add_reference($1); 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.
if ($3.type != T_ERROR) { if ($3.type != T_ERROR) {
iname = make_name($2.id); iname = make_name($2.id);
@ -2455,7 +2455,7 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end {
} else { } else {
int oldstatus = Status; int oldstatus = Status;
char *tm; char *tm;
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;
} }
@ -2467,7 +2467,7 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end {
} else { } else {
char *tm = 0; char *tm = 0;
int oldstatus = Status; int oldstatus = Status;
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;
} }
@ -2489,7 +2489,7 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end {
if (cplus_mode == CPLUS_PUBLIC) { if (cplus_mode == CPLUS_PUBLIC) {
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;
if ($2.is_reference) DataType_add_reference($1); 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*)"")))
@ -2513,7 +2513,7 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end {
char *iname; char *iname;
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;
iname = make_name($3.id); iname = make_name($3.id);
if (iname == $3.id) iname = 0; if (iname == $3.id) iname = 0;
cplus_static_var($3.id,iname,$2); cplus_static_var($3.id,iname,$2);
@ -2528,7 +2528,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;
if ($3.is_reference) DataType_add_reference($2); 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);
@ -2583,8 +2583,8 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end {
if ($2) { if ($2) {
cplus_register_type($2); cplus_register_type($2);
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;
DataType_Setname(temp_type,"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);
@ -2666,7 +2666,7 @@ cpp_pragma : PRAGMA ID stylearg {
n->name = Swig_copy_string($5.id); n->name = Swig_copy_string($5.id);
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;
if ($5.is_reference) DataType_add_reference(n->type); if ($5.is_reference) DataType_add_reference(n->type);
n->next = 0; n->next = 0;
add_nested(n); add_nested(n);
@ -2691,7 +2691,7 @@ cpp_pragma : PRAGMA ID stylearg {
n->name = Swig_copy_string($4.id); n->name = Swig_copy_string($4.id);
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;
if ($4.is_reference) DataType_add_reference(n->type); if ($4.is_reference) DataType_add_reference(n->type);
n->next = 0; n->next = 0;
add_nested(n); add_nested(n);
@ -2743,8 +2743,8 @@ cpp_tail : SEMI { }
init_language(); init_language();
if (cplus_mode == CPLUS_PUBLIC) { if (cplus_mode == CPLUS_PUBLIC) {
temp_typeptr = CopyDataType(Active_type); temp_typeptr = CopyDataType(Active_type);
temp_typeptr->is_pointer += $2.is_pointer; temp_typeptr->_is_pointer += $2.is_pointer;
if (temp_typeptr->status & STAT_READONLY) { if (temp_typeptr->_status & STAT_READONLY) {
if (!(tm = typemap_lookup((char*)"memberin",typemap_lang,temp_typeptr,$2.id,(char*)"",(char*)""))) if (!(tm = typemap_lookup((char*)"memberin",typemap_lang,temp_typeptr,$2.id,(char*)"",(char*)"")))
Status = Status | STAT_READONLY; Status = Status | STAT_READONLY;
} }
@ -2761,10 +2761,10 @@ cpp_tail : SEMI { }
init_language(); init_language();
if (cplus_mode == CPLUS_PUBLIC) { if (cplus_mode == CPLUS_PUBLIC) {
temp_typeptr = CopyDataType(Active_type); temp_typeptr = CopyDataType(Active_type);
temp_typeptr->is_pointer += $2.is_pointer; temp_typeptr->_is_pointer += $2.is_pointer;
if (!(tm = typemap_lookup((char*)"memberin",typemap_lang,temp_typeptr,$2.id,(char*)"",(char*)""))) if (!(tm = typemap_lookup((char*)"memberin",typemap_lang,temp_typeptr,$2.id,(char*)"",(char*)"")))
Status = Status | STAT_READONLY; Status = Status | STAT_READONLY;
if (temp_typeptr->status & STAT_READONLY) Status = Status | STAT_READONLY; if (temp_typeptr->_status & STAT_READONLY) Status = Status | STAT_READONLY;
cplus_variable($2.id,(char *) 0,temp_typeptr); cplus_variable($2.id,(char *) 0,temp_typeptr);
Status = oldstatus; Status = oldstatus;
if (!tm) if (!tm)
@ -3050,9 +3050,9 @@ objc_var : type declaration {
char *iname; char *iname;
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;
if ($2.is_reference) DataType_add_reference($1); 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;
} }
@ -3070,10 +3070,10 @@ objc_var : type declaration {
char *tm, *iname; char *tm, *iname;
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;
if ($2.is_reference) DataType_add_reference($1); 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*)"")))
Status = Status | STAT_READONLY; Status = Status | STAT_READONLY;
} }
@ -3095,9 +3095,9 @@ objc_vartail : COMMA declaration objc_vartail {
int oldstatus = Status; int oldstatus = Status;
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;
if ($2.is_reference) DataType_add_reference(t); 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;
} }
@ -3115,10 +3115,10 @@ objc_vartail : COMMA declaration objc_vartail {
int oldstatus = Status; int oldstatus = Status;
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;
if ($2.is_reference) DataType_add_reference(t); 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*)"")))
Status = Status | STAT_READONLY; Status = Status | STAT_READONLY;
} }
@ -3206,13 +3206,13 @@ objc_ret_type : LPAREN type RPAREN {
} }
| LPAREN type stars RPAREN { | LPAREN type stars RPAREN {
$$ = $2; $$ = $2;
$$->is_pointer += $3; $$->_is_pointer += $3;
} }
| empty { /* Empty type means "id" type */ | empty { /* Empty type means "id" type */
$$ = NewDataType(T_VOID); $$ = NewDataType(T_VOID);
DataType_Setname($$,"id"); DataType_Setname($$,"id");
$$->is_pointer = 1; $$->_is_pointer = 1;
$$->implicit_ptr = 1; $$->_implicit_ptr = 1;
} }
; ;
@ -3223,8 +3223,8 @@ objc_arg_type : LPAREN parm RPAREN {
| empty { | empty {
$$ = NewDataType(T_VOID); $$ = NewDataType(T_VOID);
DataType_Setname($$,"id"); DataType_Setname($$,"id");
$$->is_pointer = 1; $$->_is_pointer = 1;
$$->implicit_ptr = 1; $$->_implicit_ptr = 1;
} }
; ;
@ -3314,7 +3314,7 @@ tm_tail : COMMA typemap_parm tm_tail {
typemap_parm : type typemap_name { typemap_parm : type typemap_name {
if (InArray) { if (InArray) {
$1->is_pointer++; $1->_is_pointer++;
DataType_set_arraystr($1,Char(ArrayString)); DataType_set_arraystr($1,Char(ArrayString));
} }
$$ = NewTMParm(); $$ = NewTMParm();
@ -3328,9 +3328,9 @@ 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_pointer += $2; pt->_is_pointer += $2;
if (InArray) { if (InArray) {
pt->is_pointer++; pt->_is_pointer++;
DataType_set_arraystr(pt,Char(ArrayString)); DataType_set_arraystr(pt,Char(ArrayString));
} }
$$->args = tm_parm; $$->args = tm_parm;
@ -3343,7 +3343,7 @@ typemap_parm : type typemap_name {
$$->p = NewParm($1,$3); $$->p = NewParm($1,$3);
DataType *pt = Gettype($$->p); DataType *pt = Gettype($$->p);
DataType_add_reference(pt); 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);
} }

View file

@ -226,8 +226,8 @@ static char *typemap_string(char *lang, DataType *type, char *pname, char *ary,
int old_status; int old_status;
if (!str) str = NewString(""); if (!str) str = NewString("");
old_status = type->status; old_status = type->_status;
type->status = 0; type->_status = 0;
Clear(str); Clear(str);
if (ary) if (ary)
@ -235,7 +235,7 @@ static char *typemap_string(char *lang, DataType *type, char *pname, char *ary,
else else
Printv(str, lang, DataType_str(type,0), pname, suffix,0); Printv(str, lang, DataType_str(type,0), pname, suffix,0);
type->status = old_status; type->_status = old_status;
return Char(str); return Char(str);
} }
@ -334,7 +334,6 @@ void typemap_register(char *op, char *lang, char *type, char *pname,
DataType *temp; DataType *temp;
temp = NewDataType(0); temp = NewDataType(0);
DataType_Setname(temp,type); DataType_Setname(temp,type);
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);
DelDataType(temp); DelDataType(temp);
@ -356,7 +355,7 @@ void typemap_register_default(char *op, char *lang, int type, int ptr, char *arr
/* Create a raw datatype from the arguments */ /* Create a raw datatype from the arguments */
t->is_pointer = ptr; t->_is_pointer = ptr;
DataType_set_arraystr(t,arraystr); DataType_set_arraystr(t,arraystr);
/* Now, go register this as a default type */ /* Now, go register this as a default type */
@ -412,12 +411,12 @@ TypeMap *typemap_search_array(char *op, char *lang, DataType *type, char *pname,
/* First check to see if exactly this array has been mapped */ /* First check to see if exactly this array has been mapped */
key = typemap_string(lang,type,pname,DataType_arraystr(type),op); key = typemap_string(lang,type,pname,DataType_arraystr(type),op);
tm = typemap_search(key,type->id); tm = typemap_search(key,type->_id);
/* Check for unnamed array of specific dimensions */ /* Check for unnamed array of specific dimensions */
if (!tm) { if (!tm) {
key = typemap_string(lang,type,(char*)"",DataType_arraystr(type),op); key = typemap_string(lang,type,(char*)"",DataType_arraystr(type),op);
tm = typemap_search(key,type->id); tm = typemap_search(key,type->_id);
} }
if (!tm) { if (!tm) {
@ -439,10 +438,10 @@ TypeMap *typemap_search_array(char *op, char *lang, DataType *type, char *pname,
} }
DataType_set_arraystr(type, Char(tempastr)); DataType_set_arraystr(type, Char(tempastr));
key = typemap_string(lang,type,pname,DataType_arraystr(type),op); key = typemap_string(lang,type,pname,DataType_arraystr(type),op);
tm = typemap_search(key,type->id); tm = typemap_search(key,type->_id);
if (!tm) { if (!tm) {
key = typemap_string(lang,type,(char*)"",DataType_arraystr(type),op); key = typemap_string(lang,type,(char*)"",DataType_arraystr(type),op);
tm = typemap_search(key,type->id); tm = typemap_search(key,type->_id);
} }
DataType_set_arraystr(type,origarr); DataType_set_arraystr(type,origarr);
if (tm) { if (tm) {
@ -501,7 +500,7 @@ static void typemap_locals(DataType *t, char *pname, DOHString *s, ParmList *l,
/* Have a real parameter here */ /* Have a real parameter here */
if (DataType_arraystr(tt)) { if (DataType_arraystr(tt)) {
tt->is_pointer--; DataType_del_pointer(tt);
Printf(str,"%s%s",pn, DataType_arraystr(tt)); Printf(str,"%s%s",pn, DataType_arraystr(tt));
} }
else { else {
@ -512,18 +511,18 @@ static void typemap_locals(DataType *t, char *pname, DOHString *s, ParmList *l,
Replace(str,"$arg",pname, DOH_REPLACE_ANY); Replace(str,"$arg",pname, DOH_REPLACE_ANY);
if (strcmp(DataType_Getname(pt),"$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;
tt->is_pointer = 0; tt->_is_pointer = 0;
tt->implicit_ptr = 0; tt->_implicit_ptr = 0;
new_name = Wrapper_new_localv(f,str, DataType_str(tt,0), str, 0); new_name = Wrapper_new_localv(f,str, DataType_str(tt,0), str, 0);
tt->is_pointer = temp_ip; tt->_is_pointer = temp_ip;
tt->implicit_ptr = temp_ip1; tt->_implicit_ptr = temp_ip1;
} }
else else
new_name = Wrapper_new_localv(f,str, DataType_str(tt,str), 0); new_name = Wrapper_new_localv(f,str, DataType_str(tt,str), 0);
if (DataType_arraystr(tt)) tt->is_pointer++; if (DataType_arraystr(tt)) tt->_is_pointer++;
/* Substitute */ /* Substitute */
Replace(s,pn,new_name,DOH_REPLACE_ID); Replace(s,pn,new_name,DOH_REPLACE_ID);
} }
@ -598,7 +597,7 @@ char *typemap_lookup_internal(char *op, char *lang, DataType *type, char *pname,
/* Check for named argument */ /* Check for named argument */
if (!tm) { if (!tm) {
key = typemap_string(lang,type,pname,0,op); key = typemap_string(lang,type,pname,0,op);
tm = typemap_search(key,type->id); tm = typemap_search(key,type->_id);
if (tm) if (tm)
Printf(str,"%s",tm->code); Printf(str,"%s",tm->code);
} }
@ -606,7 +605,7 @@ char *typemap_lookup_internal(char *op, char *lang, DataType *type, char *pname,
/* Check for unnamed type */ /* Check for unnamed type */
if (!tm) { if (!tm) {
key = typemap_string(lang,type,(char*)"",0,op); key = typemap_string(lang,type,(char*)"",0,op);
tm = typemap_search(key,type->id); tm = typemap_search(key,type->_id);
if (tm) if (tm)
Printf(str,"%s", tm->code); Printf(str,"%s", tm->code);
} }
@ -624,17 +623,17 @@ char *typemap_lookup_internal(char *op, char *lang, DataType *type, char *pname,
} }
/* Print base type (without any pointers) */ /* Print base type (without any pointers) */
{ {
char temp_ip = realtype->is_pointer; char temp_ip = realtype->_is_pointer;
char temp_ip1 = realtype->implicit_ptr; char temp_ip1 = realtype->_implicit_ptr;
realtype->is_pointer = 0; realtype->_is_pointer = 0;
realtype->implicit_ptr = 0; realtype->_implicit_ptr = 0;
char *bt = DataType_str(realtype,0); char *bt = DataType_str(realtype,0);
if (bt[strlen(bt)-1] == ' ') if (bt[strlen(bt)-1] == ' ')
bt[strlen(bt)-1] = 0; bt[strlen(bt)-1] = 0;
Replace(str,"$basetype",bt,DOH_REPLACE_ANY); Replace(str,"$basetype",bt,DOH_REPLACE_ANY);
Replace(str,"$basemangle",DataType_manglestr(realtype), DOH_REPLACE_ANY); Replace(str,"$basemangle",DataType_manglestr(realtype), DOH_REPLACE_ANY);
realtype->is_pointer = temp_ip; realtype->_is_pointer = temp_ip;
realtype->implicit_ptr = temp_ip1; realtype->_implicit_ptr = temp_ip1;
} }
Replace(str,"$mangle",DataType_manglestr(realtype), DOH_REPLACE_ANY); Replace(str,"$mangle",DataType_manglestr(realtype), DOH_REPLACE_ANY);
@ -686,8 +685,8 @@ char *typemap_lookup(char *op, char *lang, DataType *type, char *pname, char *so
/* The idea : We're going to cycle through applications and /* The idea : We're going to cycle through applications and
drop pointers off until we get a match. */ drop pointers off until we get a match. */
while (drop_pointer <= (type->is_pointer - type->implicit_ptr)) { while (drop_pointer <= (type->_is_pointer - type->_implicit_ptr)) {
type->is_pointer -= drop_pointer; type->_is_pointer -= drop_pointer;
tstr = DataType_str(type,0); tstr = DataType_str(type,0);
sprintf(temp,"%s$%s",tstr,ppname); sprintf(temp,"%s$%s",tstr,ppname);
/* No mapping was found. See if the name has been mapped with %apply */ /* No mapping was found. See if the name has been mapped with %apply */
@ -704,7 +703,7 @@ char *typemap_lookup(char *op, char *lang, DataType *type, char *pname, char *so
if (!newarray) newarray = NewString(""); if (!newarray) newarray = NewString("");
if (*(m->name)) ppname = m->name; if (*(m->name)) ppname = m->name;
else ppname = pname; else ppname = pname;
m->type->is_pointer += drop_pointer; m->type->_is_pointer += drop_pointer;
/* Copy old array string (just in case) */ /* Copy old array string (just in case) */
@ -737,15 +736,15 @@ char *typemap_lookup(char *op, char *lang, DataType *type, char *pname, char *so
DataType_set_arraystr(m->type,oldary); DataType_set_arraystr(m->type,oldary);
if (oldary) if (oldary)
free(oldary); free(oldary);
m->type->is_pointer -= drop_pointer; m->type->_is_pointer -= drop_pointer;
if (result) { if (result) {
type->is_pointer += drop_pointer; type->_is_pointer += drop_pointer;
return result; return result;
} }
m = m->next; m = m->next;
} }
} }
type->is_pointer += drop_pointer; type->_is_pointer += drop_pointer;
drop_pointer++; drop_pointer++;
} }
} }
@ -764,7 +763,7 @@ char *typemap_lookup(char *op, char *lang, DataType *type, char *pname, char *so
if ((tc == T_USER) || (tc == T_POINTER)) { if ((tc == T_USER) || (tc == T_POINTER)) {
/* Still no result, go even more primitive */ /* Still no result, go even more primitive */
DataType_Settypecode(t, T_USER); DataType_Settypecode(t, T_USER);
t->is_pointer = 1; t->_is_pointer = 1;
DataType_set_arraystr(t,0); DataType_set_arraystr(t,0);
DataType_primitive(t); DataType_primitive(t);
result = typemap_lookup_internal(op,lang,t,(char*)"SWIG_DEFAULT_TYPE",source,target,f); result = typemap_lookup_internal(op,lang,t,(char*)"SWIG_DEFAULT_TYPE",source,target,f);
@ -799,25 +798,25 @@ char *typemap_check_internal(char *op, char *lang, DataType *type, char *pname)
* *
* if (type->arraystr) { * if (type->arraystr) {
* key = typemap_string(lang,type,pname,type->arraystr,op); * key = typemap_string(lang,type,pname,type->arraystr,op);
* tm = typemap_search(key,type->id); * tm = typemap_search(key,type->_id);
* } */ * } */
/* Check for named argument */ /* Check for named argument */
if (!tm) { if (!tm) {
key = typemap_string(lang,type,pname,0,op); key = typemap_string(lang,type,pname,0,op);
tm = typemap_search(key,type->id); tm = typemap_search(key,type->_id);
} }
/* Check for unnamed array */ /* Check for unnamed array */
if ((!tm) && (DataType_arraystr(type))) { if ((!tm) && (DataType_arraystr(type))) {
key = typemap_string(lang,type,(char*)"",DataType_arraystr(type),op); key = typemap_string(lang,type,(char*)"",DataType_arraystr(type),op);
tm = typemap_search(key,type->id); tm = typemap_search(key,type->_id);
} }
/* Check for unname type */ /* Check for unname type */
if (!tm) { if (!tm) {
key = typemap_string(lang,type,(char*)"",0,op); key = typemap_string(lang,type,(char*)"",0,op);
tm = typemap_search(key,type->id); tm = typemap_search(key,type->_id);
} }
if (!tm) return 0; if (!tm) return 0;
@ -848,8 +847,8 @@ char *typemap_check(char *op, char *lang, DataType *type, char *pname) {
/* The idea : We're going to cycle through applications and /* The idea : We're going to cycle through applications and
drop pointers off until we get a match. */ drop pointers off until we get a match. */
while (drop_pointer <= (type->is_pointer - type->implicit_ptr)) { while (drop_pointer <= (type->_is_pointer - type->_implicit_ptr)) {
type->is_pointer -= drop_pointer; type->_is_pointer -= drop_pointer;
tstr = DataType_str(type,0); tstr = DataType_str(type,0);
sprintf(temp,"%s$%s",tstr,ppname); sprintf(temp,"%s$%s",tstr,ppname);
/* No mapping was found. See if the name has been mapped with %apply */ /* No mapping was found. See if the name has been mapped with %apply */
@ -867,7 +866,7 @@ char *typemap_check(char *op, char *lang, DataType *type, char *pname) {
if (!newarray) newarray = NewString(""); if (!newarray) newarray = NewString("");
if (*(m->name)) ppname = m->name; if (*(m->name)) ppname = m->name;
else ppname = pname; else ppname = pname;
m->type->is_pointer += drop_pointer; m->type->_is_pointer += drop_pointer;
if (DataType_arraystr(m->type)) if (DataType_arraystr(m->type))
oldary = Swig_copy_string(DataType_arraystr(m->type)); oldary = Swig_copy_string(DataType_arraystr(m->type));
else else
@ -894,15 +893,15 @@ char *typemap_check(char *op, char *lang, DataType *type, char *pname) {
result = typemap_check_internal(op,lang,m->type,ppname); result = typemap_check_internal(op,lang,m->type,ppname);
DataType_set_arraystr(m->type,oldary); DataType_set_arraystr(m->type,oldary);
if (oldary) free(oldary); if (oldary) free(oldary);
m->type->is_pointer -= drop_pointer; m->type->_is_pointer -= drop_pointer;
if (result) { if (result) {
type->is_pointer += drop_pointer; type->_is_pointer += drop_pointer;
return result; return result;
} }
m = m->next; m = m->next;
} }
} }
type->is_pointer += drop_pointer; type->_is_pointer += drop_pointer;
drop_pointer++; drop_pointer++;
} }
} }
@ -921,7 +920,7 @@ char *typemap_check(char *op, char *lang, DataType *type, char *pname) {
if ((tc == T_USER) || (tc == T_POINTER)) { if ((tc == T_USER) || (tc == T_POINTER)) {
/* Still no result, go even more primitive */ /* Still no result, go even more primitive */
DataType_Settypecode(t,T_USER); DataType_Settypecode(t,T_USER);
t->is_pointer = 1; t->_is_pointer = 1;
DataType_set_arraystr(t,0); DataType_set_arraystr(t,0);
DataType_primitive(t); DataType_primitive(t);
result = typemap_check_internal(op,lang,t,(char*)"SWIG_DEFAULT_TYPE"); result = typemap_check_internal(op,lang,t,(char*)"SWIG_DEFAULT_TYPE");
@ -972,7 +971,7 @@ void typemap_copy(char *op, char *lang, DataType *stype, char *sname,
/* Try to locate a previous typemap */ /* Try to locate a previous typemap */
key = typemap_string(lang,stype,sname,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(DataType_Getname(ttype),"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) */

View file

@ -50,12 +50,12 @@ Swig_clocal(DataType *t, DOHString_or_char *name, DOHString_or_char *value) {
Clear(decl); Clear(decl);
switch(DataType_type(t)) { switch(DataType_type(t)) {
case T_USER: case T_USER:
t->is_pointer++; DataType_add_pointer(t);
if (value) if (value)
Printf(decl,"%s = &%s", DataType_lstr(t,name), value); Printf(decl,"%s = &%s", DataType_lstr(t,name), value);
else else
Printf(decl,"%s", DataType_lstr(t,name)); Printf(decl,"%s", DataType_lstr(t,name));
t->is_pointer--; DataType_del_pointer(t);
break; break;
case T_REFERENCE: case T_REFERENCE:
if (value) if (value)
@ -86,9 +86,9 @@ Swig_clocal_type(DataType *t) {
DataType *ty; DataType *ty;
switch(DataType_type(t)) { switch(DataType_type(t)) {
case T_USER: case T_USER:
t->is_pointer++; DataType_add_pointer(t);
ty = DataType_ltype(t); ty = DataType_ltype(t);
t->is_pointer--; DataType_del_pointer(t);
break; break;
default: default:
ty = DataType_ltype(t); ty = DataType_ltype(t);
@ -196,9 +196,9 @@ void Swig_cresult(Wrapper *w, DataType *t, DOHString_or_char *name, DOHString_or
case T_VOID: case T_VOID:
break; break;
case T_USER: case T_USER:
t->is_pointer++; DataType_add_pointer(t);
Printv(fcall, name, " = (", DataType_lstr(t,0), ") malloc(sizeof(", 0); Printv(fcall, name, " = (", DataType_lstr(t,0), ") malloc(sizeof(", 0);
t->is_pointer--; DataType_del_pointer(t);
Printv(fcall, DataType_str(t,0), "));\n", 0); Printv(fcall, DataType_str(t,0), "));\n", 0);
Printv(fcall, "*(", name, ") = ", 0); Printv(fcall, "*(", name, ") = ", 0);
break; break;
@ -572,7 +572,7 @@ Swig_cmethod_wrapper(DOHString_or_char *classname,
l = CopyParmList(parms); l = CopyParmList(parms);
t = NewDataType(T_USER); t = NewDataType(T_USER);
DataType_Setname(t, Char(classname)); DataType_Setname(t, Char(classname));
t->is_pointer++; DataType_add_pointer(t);
p = NewParm(t,"self"); p = NewParm(t,"self");
Insert(l,0,p); Insert(l,0,p);
DelDataType(t); DelDataType(t);
@ -632,7 +632,7 @@ Swig_cconstructor_wrapper(DOHString_or_char *classname,
l = CopyParmList(parms); l = CopyParmList(parms);
t = NewDataType(T_USER); t = NewDataType(T_USER);
DataType_Setname(t,classname); DataType_Setname(t,classname);
t->is_pointer++; DataType_add_pointer(t);
/* Patch up the argument names */ /* Patch up the argument names */
fix_parm_names(l); fix_parm_names(l);
@ -678,7 +678,7 @@ Swig_cppconstructor_wrapper(DOHString_or_char *classname,
l = CopyParmList(parms); l = CopyParmList(parms);
t = NewDataType(T_USER); t = NewDataType(T_USER);
DataType_Setname(t,classname); DataType_Setname(t,classname);
t->is_pointer++; DataType_add_pointer(t);
/* Patch up the argument names */ /* Patch up the argument names */
fix_parm_names(l); fix_parm_names(l);
@ -735,7 +735,7 @@ Swig_cdestructor_wrapper(DOHString_or_char *classname,
l = NewParmList(); l = NewParmList();
t = NewDataType(T_USER); t = NewDataType(T_USER);
DataType_Setname(t,classname); DataType_Setname(t,classname);
t->is_pointer++; DataType_add_pointer(t);
p = NewParm(t,"self"); p = NewParm(t,"self");
Append(l,p); Append(l,p);
DelDataType(t); DelDataType(t);
@ -782,7 +782,7 @@ Swig_cppdestructor_wrapper(DOHString_or_char *classname,
l = NewParmList(); l = NewParmList();
t = NewDataType(T_USER); t = NewDataType(T_USER);
DataType_Setname(t,classname); DataType_Setname(t,classname);
t->is_pointer++; DataType_add_pointer(t);
p = NewParm(t,"self"); p = NewParm(t,"self");
Append(l,p); Append(l,p);
@ -832,7 +832,7 @@ Swig_cmemberset_wrapper(DOHString_or_char *classname,
l = NewParmList(); l = NewParmList();
t = NewDataType(T_USER); t = NewDataType(T_USER);
DataType_Setname(t, Char(classname)); DataType_Setname(t, Char(classname));
t->is_pointer++; DataType_add_pointer(t);
p = NewParm(t,"self"); p = NewParm(t,"self");
Append(l,p); Append(l,p);
DelDataType(t); DelDataType(t);
@ -885,7 +885,7 @@ Swig_cmemberget_wrapper(DOHString_or_char *classname,
l = NewParmList(); l = NewParmList();
t = NewDataType(T_USER); t = NewDataType(T_USER);
DataType_Setname(t, Char(classname)); DataType_Setname(t, Char(classname));
t->is_pointer++; DataType_add_pointer(t);
p = NewParm(t,"self"); p = NewParm(t,"self");
Append(l,p); Append(l,p);
DelDataType(t); DelDataType(t);

View file

@ -69,13 +69,13 @@ DataType *NewDataType(int t) {
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++;
return ty; return ty;
} }
@ -83,13 +83,13 @@ 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;
return ty; return ty;
} }
@ -100,10 +100,10 @@ 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;
} }
@ -141,6 +141,18 @@ int DataType_is_reference(DataType *t) {
return t->_is_reference; return t->_is_reference;
} }
int DataType_is_pointer(DataType *t) {
return t->_is_pointer;
}
void DataType_add_pointer(DataType *t) {
t->_is_pointer++;
}
void DataType_del_pointer(DataType *t) {
t->_is_pointer--;
}
void DataType_Setname(DataType *t, char *n) { void DataType_Setname(DataType *t, char *n) {
strcpy(t->_name, n); strcpy(t->_name, n);
} }
@ -204,13 +216,13 @@ void DataType_primitive(DataType *t) {
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 */
if (t->_qualifier) { if (t->_qualifier) {
free(t->_qualifier); free(t->_qualifier);
t->_qualifier = 0; t->_qualifier = 0;
} }
t->_qualifier = 0; t->_qualifier = 0;
t->status = 0; t->_status = 0;
} }
/* -------------------------------------------------------------------- /* --------------------------------------------------------------------
@ -242,8 +254,8 @@ char *DataType_mangle_default(DataType *t) {
if ((*c == ' ') || (*c == ':') || (*c == '<') || (*c == '>')) *(d++) = '_'; if ((*c == ' ') || (*c == ':') || (*c == '<') || (*c == '>')) *(d++) = '_';
else *(d++) = *c; else *(d++) = *c;
} }
if ((t->is_pointer-t->implicit_ptr)) *(d++) = '_'; if ((t->_is_pointer-t->_implicit_ptr)) *(d++) = '_';
for (i = 0; i < (t->is_pointer-t->implicit_ptr); i++) for (i = 0; i < (t->_is_pointer-t->_implicit_ptr); i++)
*(d++) = 'p'; *(d++) = 'p';
*d = 0; *d = 0;
@ -277,24 +289,24 @@ char *DataType_str(DataType *t, DOHString_or_char *name) {
int i; int i;
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++];
} }
@ -319,16 +331,16 @@ char *DataType_lstr(DataType *ty, DOHString_or_char *name) {
int i; int i;
DataType *t = ty; DataType *t = ty;
if (ty->status & STAT_REPLACETYPE) { if (ty->_status & STAT_REPLACETYPE) {
t = CopyDataType(ty); t = CopyDataType(ty);
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],"*");
if (ty->status & STAT_REPLACETYPE) { if (ty->_status & STAT_REPLACETYPE) {
DelDataType(t); DelDataType(t);
} }
if (name) { if (name) {
@ -346,7 +358,7 @@ char *DataType_lstr(DataType *ty, DOHString_or_char *name) {
DataType *DataType_ltype(DataType *t) { DataType *DataType_ltype(DataType *t) {
DataType *ty = CopyDataType(t); DataType *ty = CopyDataType(t);
if (ty->status & STAT_REPLACETYPE) { if (ty->_status & STAT_REPLACETYPE) {
DataType_typedef_replace(ty); /* Replace the type with its typedef value */ DataType_typedef_replace(ty); /* Replace the type with its typedef value */
} }
if (ty->_qualifier) { if (ty->_qualifier) {
@ -377,7 +389,7 @@ char *DataType_rcaststr(DataType *ty, DOHString_or_char *name) {
strcpy(result[ri],""); strcpy(result[ri],"");
if (ty->_arraystr) { if (ty->_arraystr) {
t = ty; t = ty;
if (ty->status & STAT_REPLACETYPE) { if (ty->_status & STAT_REPLACETYPE) {
t = CopyDataType(ty); t = CopyDataType(ty);
DataType_typedef_replace(t); DataType_typedef_replace(t);
} }
@ -395,15 +407,15 @@ char *DataType_rcaststr(DataType *ty, DOHString_or_char *name) {
if (ndim > 1) { if (ndim > 1) {
/* a Multidimensional array. Provide a special cast for it */ /* a Multidimensional array. Provide a special cast for it */
char *oldarr = 0; char *oldarr = 0;
int oldstatus = ty->status; int oldstatus = ty->_status;
t->status = t->status & (~STAT_REPLACETYPE); t->_status = t->_status & (~STAT_REPLACETYPE);
t->is_pointer--; t->_is_pointer--;
oldarr = t->_arraystr; oldarr = t->_arraystr;
t->_arraystr = 0; t->_arraystr = 0;
sprintf(result[ri],"(%s", DataType_str(t,0)); sprintf(result[ri],"(%s", DataType_str(t,0));
t->_arraystr = oldarr; t->_arraystr = oldarr;
t->is_pointer++; t->_is_pointer++;
t->status = oldstatus; t->_status = oldstatus;
strcat(result[ri]," (*)"); strcat(result[ri]," (*)");
c = t->_arraystr; c = t->_arraystr;
while (*c) { while (*c) {
@ -415,7 +427,7 @@ char *DataType_rcaststr(DataType *ty, DOHString_or_char *name) {
strcat(result[ri],")"); strcat(result[ri],")");
} }
} }
if (ty->status & STAT_REPLACETYPE) { if (ty->_status & STAT_REPLACETYPE) {
DelDataType(t); DelDataType(t);
} }
} else if (ty->_qualifier) { } else if (ty->_qualifier) {
@ -575,8 +587,8 @@ int DataType_typedef_add(DataType *t,char *tname, int mode) {
/* Make a new datatype that we will place in our hash table */ /* Make a new datatype that we will place in our hash table */
nt = CopyDataType(t); nt = CopyDataType(t);
nt->implicit_ptr = (t->is_pointer-t->implicit_ptr); /* Record if mapped type is a pointer*/ nt->_implicit_ptr = (t->_is_pointer-t->_implicit_ptr); /* Record if mapped type is a pointer*/
nt->is_pointer = (t->is_pointer-t->implicit_ptr); /* Adjust pointer value to be correct */ nt->_is_pointer = (t->_is_pointer-t->_implicit_ptr); /* Adjust pointer value to be correct */
DataType_typedef_resolve(nt,0); /* Resolve any other mappings of this type */ DataType_typedef_resolve(nt,0); /* Resolve any other mappings of this type */
/* Add this type to our hash table */ /* Add this type to our hash table */
@ -633,9 +645,9 @@ void DataType_typedef_resolve(DataType *t, int 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;
t->status = t->status | td->status; t->_status = t->_status | td->_status;
/* Check for constness, and replace type name if necessary*/ /* Check for constness, and replace type name if necessary*/
@ -643,7 +655,7 @@ void DataType_typedef_resolve(DataType *t, int level) {
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;
} }
} }
return; return;
@ -669,8 +681,8 @@ void DataType_typedef_replace (DataType *t) {
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) {
@ -713,7 +725,7 @@ 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;
} }
} }
@ -1080,14 +1092,14 @@ static char *
check_equivalent(DataType *t) { check_equivalent(DataType *t) {
EqEntry *e1, *e2; EqEntry *e1, *e2;
static DOHString *out = 0; static DOHString *out = 0;
int npointer = t->is_pointer; int npointer = t->_is_pointer;
char *m; char *m;
DOHString *k; DOHString *k;
if (!out) out = NewString(""); if (!out) out = NewString("");
Clear(out); Clear(out);
while (t->is_pointer >= t->implicit_ptr) { while (t->_is_pointer >= t->_implicit_ptr) {
m = Swig_copy_string(DataType_manglestr(t)); m = Swig_copy_string(DataType_manglestr(t));
if (!te_init) typeeq_init(); if (!te_init) typeeq_init();
@ -1099,9 +1111,9 @@ check_equivalent(DataType *t) {
e2 = e1->next; e2 = e1->next;
while (e2) { while (e2) {
if (e2->type) { if (e2->type) {
e2->type->is_pointer += (npointer - t->is_pointer); e2->type->_is_pointer += (npointer - t->_is_pointer);
Printf(out,"{ \"%s\",", DataType_manglestr(e2->type)); Printf(out,"{ \"%s\",", DataType_manglestr(e2->type));
e2->type->is_pointer -= (npointer - t->is_pointer); e2->type->_is_pointer -= (npointer - t->_is_pointer);
if (e2->cast) if (e2->cast)
Printf(out,"%s}, ", e2->cast); Printf(out,"%s}, ", e2->cast);
else else
@ -1113,9 +1125,9 @@ check_equivalent(DataType *t) {
k = Nextkey(typeeq_hash); k = Nextkey(typeeq_hash);
} }
free(m); free(m);
t->is_pointer--; t->_is_pointer--;
} }
t->is_pointer = npointer; t->_is_pointer = npointer;
Printf(out,"{0}"); Printf(out,"{0}");
return Char(out); return Char(out);
} }

View file

@ -49,15 +49,15 @@
#define MAX_NAME 96 #define MAX_NAME 96
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 */
int id; /* type identifier (unique for every type). */ int _id; /* type identifier (unique for every type). */
} DataType; } DataType;
extern DataType *NewDataType(int type); extern DataType *NewDataType(int type);
@ -79,8 +79,11 @@ 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); void DataType_add_reference(DataType *t);
int DataType_is_reference(DataType *t); int DataType_is_reference(DataType *t);
int DataType_is_pointer(DataType *t);
void DataType_add_pointer(DataType *t);
void DataType_del_pointer(DataType *t);
/* -- Old type interface. This is going away -- */ /* -- Old type interface. This is going away -- */