Remove attached typemaps after a variable set wrapper has been generated so that the get method doesn't pick up any incorrect typemaps.

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@7424 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2005-09-10 23:40:11 +00:00
commit dbc1c53d7b

View file

@ -1222,7 +1222,7 @@ Language::membervariableHandler(Node *n) {
} }
if (assignable) { if (assignable) {
int make_wrapper = 1; int make_set_wrapper = 1;
String *tm = 0; String *tm = 0;
String *target = 0; String *target = 0;
if (!Extend) { if (!Extend) {
@ -1249,7 +1249,7 @@ Language::membervariableHandler(Node *n) {
if (SwigType_isarray(type)) { if (SwigType_isarray(type)) {
Swig_warning(WARN_TYPEMAP_VARIN_UNDEF, input_file, line_number, Swig_warning(WARN_TYPEMAP_VARIN_UNDEF, input_file, line_number,
"Unable to set variable of type %s.\n", SwigType_str(type,0)); "Unable to set variable of type %s.\n", SwigType_str(type,0));
make_wrapper = 0; make_set_wrapper = 0;
} }
} else { } else {
Replace(tm,"$source", Swig_cparm_name(0,1), DOH_REPLACE_ANY); Replace(tm,"$source", Swig_cparm_name(0,1), DOH_REPLACE_ANY);
@ -1261,7 +1261,7 @@ Language::membervariableHandler(Node *n) {
} }
Delete(target); Delete(target);
} }
if (make_wrapper) { if (make_set_wrapper) {
Setattr(n,"sym:name", mrename_set); Setattr(n,"sym:name", mrename_set);
functionWrapper(n); functionWrapper(n);
} else { } else {
@ -1271,6 +1271,13 @@ Language::membervariableHandler(Node *n) {
Setattr(n,"type",type); Setattr(n,"type",type);
Setattr(n,"name",name); Setattr(n,"name",name);
Setattr(n,"sym:name",symname); Setattr(n,"sym:name",symname);
/* Delete all attached typemaps and typemap attributes */
Iterator ki;
for (ki = First(n); ki.key; ki = Next(ki)) {
if (Strncmp(ki.key, "tmap:", 5) == 0)
Delattr(n, ki.key);
}
} }
/* Emit get function */ /* Emit get function */
{ {
@ -2421,7 +2428,7 @@ int Language::variableWrapper(Node *n) {
/* If no way to set variables. We simply create functions */ /* If no way to set variables. We simply create functions */
int assignable = is_assignable(n); int assignable = is_assignable(n);
if (assignable) { if (assignable) {
int make_wrapper = 1; int make_set_wrapper = 1;
String *tm = Swig_typemap_lookup_new("globalin", n, name, 0); String *tm = Swig_typemap_lookup_new("globalin", n, name, 0);
Swig_VarsetToFunction(n); Swig_VarsetToFunction(n);
@ -2434,7 +2441,7 @@ int Language::variableWrapper(Node *n) {
if (SwigType_isarray(type)) { if (SwigType_isarray(type)) {
Swig_warning(WARN_TYPEMAP_VARIN_UNDEF, input_file, line_number, Swig_warning(WARN_TYPEMAP_VARIN_UNDEF, input_file, line_number,
"Unable to set variable of type %s.\n", SwigType_str(type,0)); "Unable to set variable of type %s.\n", SwigType_str(type,0));
make_wrapper = 0; make_set_wrapper = 0;
} }
} else { } else {
Replace(tm,"$source", Swig_cparm_name(0,0), DOH_REPLACE_ANY); Replace(tm,"$source", Swig_cparm_name(0,0), DOH_REPLACE_ANY);
@ -2443,12 +2450,20 @@ int Language::variableWrapper(Node *n) {
Setattr(n,"wrap:action", tm); Setattr(n,"wrap:action", tm);
Delete(tm); Delete(tm);
} }
if (make_wrapper) { if (make_set_wrapper) {
functionWrapper(n); functionWrapper(n);
} }
/* Restore parameters */
Setattr(n,"sym:name",symname); Setattr(n,"sym:name",symname);
Setattr(n,"type",type); Setattr(n,"type",type);
Setattr(n,"name",name); Setattr(n,"name",name);
/* Delete all attached typemaps and typemap attributes */
Iterator ki;
for (ki = First(n); ki.key; ki = Next(ki)) {
if (Strncmp(ki.key, "tmap:", 5) == 0)
Delattr(n, ki.key);
}
} }
Swig_VargetToFunction(n); Swig_VargetToFunction(n);
Setattr(n,"sym:name", Swig_name_get(symname)); Setattr(n,"sym:name", Swig_name_get(symname));