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:
parent
f94e5e4870
commit
dbc1c53d7b
1 changed files with 21 additions and 6 deletions
|
|
@ -1222,7 +1222,7 @@ Language::membervariableHandler(Node *n) {
|
|||
}
|
||||
|
||||
if (assignable) {
|
||||
int make_wrapper = 1;
|
||||
int make_set_wrapper = 1;
|
||||
String *tm = 0;
|
||||
String *target = 0;
|
||||
if (!Extend) {
|
||||
|
|
@ -1249,7 +1249,7 @@ Language::membervariableHandler(Node *n) {
|
|||
if (SwigType_isarray(type)) {
|
||||
Swig_warning(WARN_TYPEMAP_VARIN_UNDEF, input_file, line_number,
|
||||
"Unable to set variable of type %s.\n", SwigType_str(type,0));
|
||||
make_wrapper = 0;
|
||||
make_set_wrapper = 0;
|
||||
}
|
||||
} else {
|
||||
Replace(tm,"$source", Swig_cparm_name(0,1), DOH_REPLACE_ANY);
|
||||
|
|
@ -1261,7 +1261,7 @@ Language::membervariableHandler(Node *n) {
|
|||
}
|
||||
Delete(target);
|
||||
}
|
||||
if (make_wrapper) {
|
||||
if (make_set_wrapper) {
|
||||
Setattr(n,"sym:name", mrename_set);
|
||||
functionWrapper(n);
|
||||
} else {
|
||||
|
|
@ -1271,6 +1271,13 @@ Language::membervariableHandler(Node *n) {
|
|||
Setattr(n,"type",type);
|
||||
Setattr(n,"name",name);
|
||||
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 */
|
||||
{
|
||||
|
|
@ -2421,7 +2428,7 @@ int Language::variableWrapper(Node *n) {
|
|||
/* If no way to set variables. We simply create functions */
|
||||
int assignable = is_assignable(n);
|
||||
if (assignable) {
|
||||
int make_wrapper = 1;
|
||||
int make_set_wrapper = 1;
|
||||
String *tm = Swig_typemap_lookup_new("globalin", n, name, 0);
|
||||
|
||||
Swig_VarsetToFunction(n);
|
||||
|
|
@ -2434,7 +2441,7 @@ int Language::variableWrapper(Node *n) {
|
|||
if (SwigType_isarray(type)) {
|
||||
Swig_warning(WARN_TYPEMAP_VARIN_UNDEF, input_file, line_number,
|
||||
"Unable to set variable of type %s.\n", SwigType_str(type,0));
|
||||
make_wrapper = 0;
|
||||
make_set_wrapper = 0;
|
||||
}
|
||||
} else {
|
||||
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);
|
||||
Delete(tm);
|
||||
}
|
||||
if (make_wrapper) {
|
||||
if (make_set_wrapper) {
|
||||
functionWrapper(n);
|
||||
}
|
||||
/* Restore parameters */
|
||||
Setattr(n,"sym:name",symname);
|
||||
Setattr(n,"type",type);
|
||||
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);
|
||||
Setattr(n,"sym:name", Swig_name_get(symname));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue